summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoroctorock <79596758+octorock@users.noreply.github.com>2022-02-27 00:03:05 +0100
committeroctorock <79596758+octorock@users.noreply.github.com>2022-02-27 00:11:15 +0100
commiteda6ecfb9a70fb287fa073ccdcf347226fd7d353 (patch)
tree9ca31f86a677ba703f7ca6d5822666e2e48dc039
parentabe6053a4f3dcaa511035baba764609464eadc46 (diff)
Decompile FigurineDevice
-rw-r--r--asm/non_matching/ForceEquipItem.inc44
-rw-r--r--asm/non_matching/figurineDevice/sub_08087F94.inc265
-rw-r--r--asm/non_matching/figurineDevice/sub_08088160.inc365
-rw-r--r--asm/non_matching/figurineDevice/sub_08088328.inc257
-rw-r--r--asm/object/figurineDevice.s2231
-rw-r--r--assets/assets.json57
-rw-r--r--data/const/object/figurineDevice.s37
-rw-r--r--include/fileselect.h5
-rw-r--r--include/flags.h18
-rw-r--r--include/functions.h1
-rw-r--r--include/object.h2
-rw-r--r--include/structures.h5
-rw-r--r--linker.ld4
-rw-r--r--src/menu/figurine_menu.c5
-rw-r--r--src/message.c4
-rw-r--r--src/npc/phonograph.c1
-rw-r--r--src/object/figurineDevice.c578
17 files changed, 1487 insertions, 2392 deletions
diff --git a/asm/non_matching/ForceEquipItem.inc b/asm/non_matching/ForceEquipItem.inc
deleted file mode 100644
index e8edb78b..00000000
--- a/asm/non_matching/ForceEquipItem.inc
+++ /dev/null
@@ -1,44 +0,0 @@
- .syntax unified
- .text
- push {r4, r5, r6, r7, lr}
- adds r4, r0, #0
- subs r0, r4, #1
- cmp r0, #0x1e
- bhi _08054456
- cmp r1, #1
- bhi _08054456
- movs r2, #0
- cmp r1, #0
- bne _0805442A
- movs r2, #1
-_0805442A:
- ldr r0, _08054458 @ =gSave
- adds r0, #0xb4
- adds r6, r1, r0
- ldrb r7, [r6]
- adds r5, r2, r0
- ldrb r3, [r5]
- ldr r2, _0805445C @ =gItemMetaData
- lsls r1, r3, #3
- adds r1, r1, r2
- lsls r0, r4, #3
- adds r0, r0, r2
- ldrb r1, [r1]
- ldrb r0, [r0]
- cmp r1, r0
- bne _0805444A
- adds r3, r7, #0
-_0805444A:
- strb r4, [r6]
- strb r3, [r5]
- ldr r1, _08054460 @ =gUnk_0200AF00
- movs r0, #0x7f
- strb r0, [r1, #0x13]
- strb r0, [r1, #0x14]
-_08054456:
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_08054458: .4byte gSave
-_0805445C: .4byte gItemMetaData
-_08054460: .4byte gUnk_0200AF00
- .syntax divided
diff --git a/asm/non_matching/figurineDevice/sub_08087F94.inc b/asm/non_matching/figurineDevice/sub_08087F94.inc
new file mode 100644
index 00000000..2581864d
--- /dev/null
+++ b/asm/non_matching/figurineDevice/sub_08087F94.inc
@@ -0,0 +1,265 @@
+ .syntax unified
+.ifdef JP
+ push {r4, r5, r6, r7, lr}
+ adds r5, r0, #0
+ adds r4, r1, #0
+ movs r0, #0x5f
+ bl CheckLocalFlag
+ cmp r0, #0
+ bne _08087E3E
+ adds r0, r5, #0
+ adds r0, #0x83
+ movs r7, #0
+ ldrsb r7, [r0, r7]
+ adds r3, r7, r4
+ mov ip, r0
+ cmp r4, #0
+ bge _08087E0A
+ adds r2, r5, #0
+ adds r2, #0x82
+ movs r0, #0
+ ldrsb r0, [r2, r0]
+ cmp r3, r0
+ bge _08087DF4
+ mov r0, ip
+ movs r1, #0
+ ldrsb r1, [r0, r1]
+ ldrb r3, [r2]
+ movs r0, #0
+ ldrsb r0, [r2, r0]
+ cmp r1, r0
+ beq _08087E3E
+ mov r2, ip
+ strb r3, [r2]
+ adds r1, r5, #0
+ adds r1, #0x81
+ movs r0, #1
+ b _08087E00
+_08087DF4:
+ mov r0, ip
+ strb r3, [r0]
+ adds r1, r5, #0
+ adds r1, #0x81
+ ldrb r0, [r1]
+ adds r0, r0, r4
+_08087E00:
+ strb r0, [r1]
+ movs r0, #0x69
+ bl SoundReq
+ b _08087E58
+_08087E0A:
+ adds r1, r5, #0
+ adds r1, #0x81
+ ldrb r6, [r1]
+ adds r2, r6, r4
+ ldr r0, _08087E2C @ =0x02002A40
+ adds r0, #0xc2
+ ldrh r0, [r0]
+ cmp r2, r0
+ ble _08087E30
+ cmp r0, r6
+ beq _08087E3E
+ adds r2, r0, #0
+ subs r4, r2, r6
+ adds r3, r7, r4
+ cmp r3, #0x64
+ ble _08087E4C
+ b _08087E46
+ .align 2, 0
+_08087E2C: .4byte 0x02002A40
+_08087E30:
+ cmp r3, #0x64
+ ble _08087E4C
+ mov r2, ip
+ movs r0, #0
+ ldrsb r0, [r2, r0]
+ cmp r0, #0x64
+ bne _08087E46
+_08087E3E:
+ adds r0, r5, #0
+ bl sub_08088034
+ b _08087E58
+_08087E46:
+ movs r3, #0x64
+ subs r4, r3, r7
+ adds r2, r6, r4
+_08087E4C:
+ mov r0, ip
+ strb r3, [r0]
+ strb r2, [r1]
+ movs r0, #0x69
+ bl SoundReq
+_08087E58:
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+.else
+.ifdef EU
+ push {r4, r5, r6, r7, lr}
+ adds r5, r0, #0
+ adds r6, r1, #0
+ adds r7, r5, #0
+ adds r7, #0x83
+ ldrb r0, [r7]
+ adds r4, r0, r6
+ movs r0, #0x5f
+ bl CheckLocalFlag
+ cmp r0, #0
+ bne _080879CE
+ cmp r6, #0
+ bge _0808799E
+ adds r0, r5, #0
+ adds r0, #0x82
+ ldrb r1, [r0]
+ cmp r4, r1
+ bhs _0808798A
+ ldrb r0, [r7]
+ cmp r0, r1
+ beq _080879CE
+ strb r1, [r7]
+ adds r1, r5, #0
+ adds r1, #0x81
+ movs r0, #1
+ b _08087994
+_0808798A:
+ strb r4, [r7]
+ adds r1, r5, #0
+ adds r1, #0x81
+ ldrb r0, [r1]
+ adds r0, r0, r6
+_08087994:
+ strb r0, [r1]
+ movs r0, #0x69
+ bl SoundReq
+ b _080879EC
+_0808799E:
+ adds r1, r5, #0
+ adds r1, #0x81
+ ldrb r3, [r1]
+ adds r2, r3, r6
+ ldr r0, _080879C0 @ =gSave
+ adds r0, #0xc2
+ ldrh r0, [r0]
+ cmp r2, r0
+ bls _080879C4
+ cmp r0, r3
+ beq _080879CE
+ adds r2, r0, #0
+ subs r0, r2, r3
+ ldrb r7, [r7]
+ adds r4, r0, r7
+ b _080879DE
+ .align 2, 0
+_080879C0: .4byte gSave
+_080879C4:
+ cmp r4, #0x64
+ bls _080879DE
+ ldrb r0, [r7]
+ cmp r0, #0x64
+ bne _080879D6
+_080879CE:
+ adds r0, r5, #0
+ bl sub_08088034
+ b _080879EC
+_080879D6:
+ movs r4, #0x64
+ ldrb r0, [r7]
+ subs r6, r4, r0
+ adds r2, r3, r6
+_080879DE:
+ adds r0, r5, #0
+ adds r0, #0x83
+ strb r4, [r0]
+ strb r2, [r1]
+ movs r0, #0x69
+ bl SoundReq
+_080879EC:
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+.else
+ push {r4, r5, r6, r7, lr}
+ adds r5, r0, #0
+ adds r4, r1, #0
+ movs r0, #0x5f
+ bl CheckLocalFlag
+ cmp r0, #0
+ bne _08088014
+ adds r0, r5, #0
+ adds r0, #0x83
+ movs r1, #0
+ ldrsb r1, [r0, r1]
+ mov ip, r1
+ adds r3, r1, r4
+ adds r7, r0, #0
+ cmp r4, #0
+ bge _08087FEA
+ adds r2, r5, #0
+ adds r2, #0x82
+ movs r0, #0
+ ldrsb r0, [r2, r0]
+ cmp r3, r0
+ bge _08087FD6
+ movs r1, #0
+ ldrsb r1, [r7, r1]
+ ldrb r3, [r2]
+ cmp r1, r0
+ beq _08088014
+ strb r3, [r7]
+ adds r1, r5, #0
+ adds r1, #0x81
+ movs r0, #1
+ b _08087FE0
+_08087FD6:
+ strb r3, [r7]
+ adds r1, r5, #0
+ adds r1, #0x81
+ ldrb r0, [r1]
+ adds r0, r0, r4
+_08087FE0:
+ strb r0, [r1]
+ movs r0, #0x69
+ bl SoundReq
+ b _08088032
+_08087FEA:
+ adds r1, r5, #0
+ adds r1, #0x81
+ ldrb r6, [r1]
+ adds r2, r6, r4
+ ldr r0, _0808801C @ =gSave
+ adds r0, #0xc2
+ ldrh r0, [r0]
+ cmp r2, r0
+ ble _08088008
+ cmp r0, r6
+ beq _08088014
+ adds r2, r0, #0
+ subs r4, r2, r6
+ mov r0, ip
+ adds r3, r0, r4
+_08088008:
+ cmp r3, #0x64
+ ble _08088028
+ movs r0, #0
+ ldrsb r0, [r7, r0]
+ cmp r0, #0x64
+ bne _08088020
+_08088014:
+ adds r0, r5, #0
+ bl sub_08088034
+ b _08088032
+ .align 2, 0
+_0808801C: .4byte gSave
+_08088020:
+ movs r3, #0x64
+ mov r0, ip
+ subs r4, r3, r0
+ adds r2, r6, r4
+_08088028:
+ strb r3, [r7]
+ strb r2, [r1]
+ movs r0, #0x69
+ bl SoundReq
+_08088032:
+ pop {r4, r5, r6, r7, pc}
+.endif
+.endif
+ .syntax divided
diff --git a/asm/non_matching/figurineDevice/sub_08088160.inc b/asm/non_matching/figurineDevice/sub_08088160.inc
new file mode 100644
index 00000000..a9b6dee6
--- /dev/null
+++ b/asm/non_matching/figurineDevice/sub_08088160.inc
@@ -0,0 +1,365 @@
+ .syntax unified
+.ifdef JP
+ push {r4, lr}
+ adds r2, r0, #0
+ lsls r1, r1, #3
+ ldr r0, _08087FB0 @ =gUnk_080FC3E4
+ adds r1, r1, r0
+ movs r4, #0
+ adds r0, r2, #0
+ adds r0, #0x7c
+ ldrb r0, [r0]
+ ldrb r3, [r1, #6]
+ cmp r0, r3
+ bhs _08088068
+ ldrb r0, [r1, #6]
+ cmp r0, #0x10
+ beq _08087FC6
+ cmp r0, #0x10
+ bgt _08087FB4
+ cmp r0, #8
+ beq _08087FBC
+ b _0808806A
+ .align 2, 0
+_08087FB0: .4byte gUnk_080FC3E4
+_08087FB4:
+ cmp r0, #0x20
+ beq _08087FCA
+ cmp r0, #0x40
+ bne _0808806A
+_08087FBC:
+ ldr r0, [r1]
+ ldrh r1, [r1, #4]
+ bl CheckLocalFlagByBank
+ b _08088064EU
+_08087FC6:
+ ldrh r0, [r1, #4]
+ b _08088060EU
+_08087FCA:
+ ldrh r0, [r1, #4]
+ cmp r0, #4
+ bhi _0808806A
+ lsls r0, r0, #2
+ ldr r1, _08087FDC @ =_08087FE0
+ adds r0, r0, r1
+ ldr r0, [r0]
+ mov pc, r0
+ .align 2, 0
+_08087FDC: .4byte _08087FE0
+_08087FE0: @ jump table
+ .4byte _08087FF4 @ case 0
+ .4byte _0808800C @ case 1
+ .4byte _0808801A @ case 2
+ .4byte _08088032 @ case 3
+ .4byte _0808804A @ case 4
+_08087FF4:
+ movs r0, #0x20
+ bl CheckKinstoneFused
+ cmp r0, #0
+ bne _08088068
+ movs r0, #0x10
+ bl CheckKinstoneFused
+ cmp r0, #0
+ bne _08088068
+ movs r0, #0x19
+ b _08088060EU
+_0808800C:
+ adds r0, r2, #0
+ adds r0, #0x7c
+ ldrb r0, [r0]
+ cmp r0, #4
+ bls _0808806A
+ movs r0, #0x28
+ b _08088060EU
+_0808801A:
+ movs r0, #0x54
+ bl CheckKinstoneFused
+ cmp r0, #0
+ bne _08088068
+ movs r0, #0x56
+ bl CheckKinstoneFused
+ cmp r0, #0
+ bne _08088068
+ movs r0, #0x3d
+ b _08088060EU
+_08088032:
+ movs r0, #0x3b
+ bl CheckKinstoneFused
+ cmp r0, #0
+ bne _08088068
+ movs r0, #0x4a
+ bl CheckKinstoneFused
+ cmp r0, #0
+ bne _08088068
+ movs r0, #0xd
+ b _08088060EU
+_0808804A:
+ movs r0, #0x49
+ bl CheckKinstoneFused
+ cmp r0, #0
+ bne _08088068
+ movs r0, #0x55
+ bl CheckKinstoneFused
+ cmp r0, #0
+ bne _08088068
+ movs r0, #0x3c
+_08088060EU:
+ bl CheckKinstoneFused
+_08088064EU:
+ cmp r0, #0
+ beq _0808806A
+_08088068:
+ movs r4, #1
+_0808806A:
+ adds r0, r4, #0
+ pop {r4, pc}
+ .align 2, 0
+.else
+.ifdef EU
+ push {r4, lr}
+ adds r2, r0, #0
+ lsls r1, r1, #3
+ ldr r0, _08087B44 @ =gUnk_080FC3E4
+ adds r1, r1, r0
+ movs r4, #0
+ adds r0, r2, #0
+ adds r0, #0x7d
+ ldrb r0, [r0]
+ ldrb r3, [r1, #6]
+ cmp r0, r3
+ bhs _08087BFC
+ ldrb r0, [r1, #6]
+ cmp r0, #0x10
+ beq _08087B5A
+ cmp r0, #0x10
+ bgt _08087B48
+ cmp r0, #8
+ beq _08087B50
+ b _08087BFE
+ .align 2, 0
+_08087B44: .4byte gUnk_080FC3E4
+_08087B48:
+ cmp r0, #0x20
+ beq _08087B5E
+ cmp r0, #0x40
+ bne _08087BFE
+_08087B50:
+ ldr r0, [r1]
+ ldrh r1, [r1, #4]
+ bl CheckLocalFlagByBank
+ b _08087BF8
+_08087B5A:
+ ldrh r0, [r1, #4]
+ b _08087BF4
+_08087B5E:
+ ldrh r0, [r1, #4]
+ cmp r0, #4
+ bhi _08087BFE
+ lsls r0, r0, #2
+ ldr r1, _08087B70 @ =_08087B74
+ adds r0, r0, r1
+ ldr r0, [r0]
+ mov pc, r0
+ .align 2, 0
+_08087B70: .4byte _08087B74
+_08087B74: @ jump table
+ .4byte _08087B88 @ case 0
+ .4byte _08087BA0 @ case 1
+ .4byte _08087BAE @ case 2
+ .4byte _08087BC6 @ case 3
+ .4byte _08087BDE @ case 4
+_08087B88:
+ movs r0, #0x20
+ bl CheckKinstoneFused
+ cmp r0, #0
+ bne _08087BFC
+ movs r0, #0x10
+ bl CheckKinstoneFused
+ cmp r0, #0
+ bne _08087BFC
+ movs r0, #0x19
+ b _08087BF4
+_08087BA0:
+ adds r0, r2, #0
+ adds r0, #0x7d
+ ldrb r0, [r0]
+ cmp r0, #4
+ bls _08087BFE
+ movs r0, #0x28
+ b _08087BF4
+_08087BAE:
+ movs r0, #0x54
+ bl CheckKinstoneFused
+ cmp r0, #0
+ bne _08087BFC
+ movs r0, #0x56
+ bl CheckKinstoneFused
+ cmp r0, #0
+ bne _08087BFC
+ movs r0, #0x3d
+ b _08087BF4
+_08087BC6:
+ movs r0, #0x3b
+ bl CheckKinstoneFused
+ cmp r0, #0
+ bne _08087BFC
+ movs r0, #0x4a
+ bl CheckKinstoneFused
+ cmp r0, #0
+ bne _08087BFC
+ movs r0, #0xd
+ b _08087BF4
+_08087BDE:
+ movs r0, #0x49
+ bl CheckKinstoneFused
+ cmp r0, #0
+ bne _08087BFC
+ movs r0, #0x55
+ bl CheckKinstoneFused
+ cmp r0, #0
+ bne _08087BFC
+ movs r0, #0x3c
+_08087BF4:
+ bl CheckKinstoneFused
+_08087BF8:
+ cmp r0, #0
+ beq _08087BFE
+_08087BFC:
+ movs r4, #1
+_08087BFE:
+ adds r0, r4, #0
+ pop {r4, pc}
+ .align 2, 0
+.else
+ push {r4, lr}
+ adds r2, r0, #0
+ lsls r1, r1, #3
+ ldr r0, _08088188 @ =gUnk_080FC3E4
+ adds r1, r1, r0
+ movs r4, #0
+ adds r0, r2, #0
+ adds r0, #0x7c
+ ldrb r0, [r0]
+ ldrb r3, [r1, #6]
+ cmp r0, r3
+ bhs _08088266
+ ldrb r0, [r1, #6]
+ cmp r0, #0x10
+ beq _0808819E
+ cmp r0, #0x10
+ bgt _0808818C
+ cmp r0, #8
+ beq _08088194
+ b _08088268
+ .align 2, 0
+_08088188: .4byte gUnk_080FC3E4
+_0808818C:
+ cmp r0, #0x20
+ beq _080881A6
+ cmp r0, #0x40
+ bne _08088268
+_08088194:
+ ldr r0, [r1]
+ ldrh r1, [r1, #4]
+ bl CheckLocalFlagByBank
+ b _08088262
+_0808819E:
+ ldrh r0, [r1, #4]
+.ifndef JP
+ bl CheckKinstoneFused
+.endif
+ b _08088262
+_080881A6:
+ ldrh r0, [r1, #4]
+ cmp r0, #5
+ bhi _08088268
+ lsls r0, r0, #2
+ ldr r1, _080881B8 @ =_080881BC
+ adds r0, r0, r1
+ ldr r0, [r0]
+ mov pc, r0
+ .align 2, 0
+_080881B8: .4byte _080881BC
+_080881BC: @ jump table
+ .4byte _080881D4 @ case 0
+ .4byte _080881F0 @ case 1
+ .4byte _080881FE @ case 2
+ .4byte _0808821A @ case 3
+ .4byte _08088236 @ case 4
+ .4byte _08088252 @ case 5
+_080881D4:
+ movs r0, #0x20
+ bl CheckKinstoneFused
+ cmp r0, #0
+ bne _08088266
+ movs r0, #0x10
+ bl CheckKinstoneFused
+ cmp r0, #0
+ bne _08088266
+ movs r0, #0x19
+_080881EA:
+ bl CheckKinstoneFused
+ b _08088262
+_080881F0:
+ adds r0, r2, #0
+ adds r0, #0x7c
+ ldrb r0, [r0]
+ cmp r0, #4
+ bls _08088268
+ movs r0, #0x28
+ b _080881EA
+_080881FE:
+ movs r0, #0x54
+ bl CheckKinstoneFused
+ cmp r0, #0
+ bne _08088266
+ movs r0, #0x56
+ bl CheckKinstoneFused
+ cmp r0, #0
+ bne _08088266
+ movs r0, #0x3d
+ bl CheckKinstoneFused
+ b _08088262
+_0808821A:
+ movs r0, #0x3b
+ bl CheckKinstoneFused
+ cmp r0, #0
+ bne _08088266
+ movs r0, #0x4a
+ bl CheckKinstoneFused
+ cmp r0, #0
+ bne _08088266
+ movs r0, #0xd
+ bl CheckKinstoneFused
+ b _08088262
+_08088236:
+ movs r0, #0x49
+ bl CheckKinstoneFused
+ cmp r0, #0
+ bne _08088266
+ movs r0, #0x55
+ bl CheckKinstoneFused
+ cmp r0, #0
+ bne _08088266
+ movs r0, #0x3c
+ bl CheckKinstoneFused
+ b _08088262
+_08088252:
+ adds r0, r2, #0
+ adds r0, #0x7c
+ ldrb r0, [r0]
+ cmp r0, #1
+ bls _08088268
+ movs r0, #0x12
+ bl CheckGlobalFlag
+_08088262:
+ cmp r0, #0
+ beq _08088268
+_08088266:
+ movs r4, #1
+_08088268:
+ adds r0, r4, #0
+ pop {r4, pc}
+.endif
+.endif
+ .syntax divided
diff --git a/asm/non_matching/figurineDevice/sub_08088328.inc b/asm/non_matching/figurineDevice/sub_08088328.inc
new file mode 100644
index 00000000..07949bf6
--- /dev/null
+++ b/asm/non_matching/figurineDevice/sub_08088328.inc
@@ -0,0 +1,257 @@
+ .syntax unified
+.ifdef EU
+ push {r4, r5, r6, r7, lr}
+ mov r7, r8
+ push {r7}
+ adds r6, r0, #0
+ movs r4, #0x7f
+_08087CC6:
+ bl Random
+ adds r5, r0, #0
+ ands r5, r4
+ cmp r5, #0x63
+ bhi _08087CC6
+ adds r0, r6, #0
+ adds r0, #0x81
+ ldrb r0, [r0]
+ rsbs r0, r0, #0
+ bl sub_080542C0
+ bl Random
+ movs r1, #0x7f
+ ands r1, r0
+ adds r4, r1, #1
+ adds r7, r4, #0
+ adds r0, r6, #0
+ bl sub_08088424
+ adds r0, r6, #0
+ adds r0, #0x83
+ ldrb r0, [r0]
+ cmp r5, r0
+ bhs _08087D34EU
+ movs r5, #0
+ movs r0, #0x7e
+ adds r0, r0, r6
+ mov r8, r0
+_08087D02EU:
+ cmp r5, #0
+ bne _08087D72
+ cmp r4, #0x88
+ bls _08087D0C
+ movs r4, #1
+_08087D0C:
+ adds r0, r6, #0
+ adds r1, r4, #0
+ bl sub_08088160
+ cmp r0, #0
+ beq _08087D2C
+ ldr r0, _08087D28 @ =gUnk_02002B0E
+ adds r1, r4, #0
+ bl ReadBit
+ cmp r0, #0
+ bne _08087D2C
+ movs r5, #1
+ b _08087D2E
+ .align 2, 0
+_08087D28: .4byte gUnk_02002B0E
+_08087D2C:
+ adds r4, #1
+_08087D2E:
+ cmp r7, r4
+ bne _08087D02EU
+ b _08087D6E
+_08087D34EU:
+ movs r5, #1
+ movs r0, #0x7e
+ adds r0, r0, r6
+ mov r8, r0
+_08087D3C:
+ cmp r5, #0
+ beq _08087DA4
+ cmp r4, #0x88
+ bls _08087D46
+ movs r4, #1
+_08087D46:
+ adds r0, r6, #0
+ adds r1, r4, #0
+ bl sub_08088160
+ cmp r0, #0
+ beq _08087D68
+ ldr r0, _08087D64 @ =gUnk_02002B0E
+ adds r1, r4, #0
+ bl ReadBit
+ cmp r0, #0
+ beq _08087D68
+ movs r5, #0
+ b _08087D6A
+ .align 2, 0
+_08087D64: .4byte gUnk_02002B0E
+_08087D68:
+ adds r4, #1
+_08087D6A:
+ cmp r7, r4
+ bne _08087D3C
+_08087D6E:
+ cmp r5, #0
+ beq _08087DA4
+_08087D72:
+ ldr r0, _08087D94 @ =gSave
+ adds r0, #0xb0
+ ldrb r1, [r0]
+ adds r1, #1
+ strb r1, [r0]
+ adds r0, r6, #0
+ adds r0, #0x7c
+ lsls r1, r1, #0x18
+ lsrs r1, r1, #0x18
+ ldrb r0, [r0]
+ cmp r1, r0
+ beq _08087D98
+ movs r0, #7
+ bl SetRoomFlag
+ b _08087DA4
+ .align 2, 0
+_08087D94: .4byte gSave
+_08087D98:
+ movs r0, #0x5f
+ bl SetLocalFlag
+ movs r0, #8
+ bl SetRoomFlag
+_08087DA4:
+ mov r0, r8
+ strb r4, [r0]
+ ldr r0, [r6, #0x50]
+ adds r0, #0x7e
+ strb r4, [r0]
+ pop {r3}
+ mov r8, r3
+ pop {r4, r5, r6, r7, pc}
+.else
+ push {r4, r5, r6, r7, lr}
+ mov r7, r8
+ push {r7}
+ adds r6, r0, #0
+ movs r4, #0x7f
+_08088332:
+ bl Random
+ adds r5, r0, #0
+ ands r5, r4
+ cmp r5, #0x63
+ bhi _08088332
+ adds r0, r6, #0
+ adds r0, #0x81
+ ldrb r0, [r0]
+ rsbs r0, r0, #0
+ bl sub_080542C0
+ bl Random
+ movs r1, #0x7f
+ ands r1, r0
+ adds r4, r1, #1
+ adds r7, r4, #0
+ adds r0, r6, #0
+ bl sub_08088424
+ adds r0, r6, #0
+ adds r0, #0x83
+ ldrb r0, [r0]
+ lsls r0, r0, #0x18
+ asrs r0, r0, #0x18
+ cmp r5, r0
+ bhs _080883A4
+ movs r5, #0
+ movs r0, #0x7d
+ adds r0, r0, r6
+ mov r8, r0
+_08088372:
+ cmp r5, #0
+ bne _080883E2
+ cmp r4, #0x88
+ bls _0808837C
+ movs r4, #1
+_0808837C:
+ adds r0, r6, #0
+ adds r1, r4, #0
+ bl sub_08088160
+ cmp r0, #0
+ beq _0808839C
+ ldr r0, _08088398 @ =gUnk_02002B0E
+ adds r1, r4, #0
+ bl ReadBit
+ cmp r0, #0
+ bne _0808839C
+ movs r5, #1
+ b _0808839E
+ .align 2, 0
+_08088398: .4byte gUnk_02002B0E
+_0808839C:
+ adds r4, #1
+_0808839E:
+ cmp r7, r4
+ bne _08088372
+ b _080883DE
+_080883A4:
+ movs r5, #1
+ movs r0, #0x7d
+ adds r0, r0, r6
+ mov r8, r0
+_080883AC:
+ cmp r5, #0
+ beq _08088414
+ cmp r4, #0x88
+ bls _080883B6
+ movs r4, #1
+_080883B6:
+ adds r0, r6, #0
+ adds r1, r4, #0
+ bl sub_08088160
+ cmp r0, #0
+ beq _080883D8
+ ldr r0, _080883D4 @ =gUnk_02002B0E
+ adds r1, r4, #0
+ bl ReadBit
+ cmp r0, #0
+ beq _080883D8
+ movs r5, #0
+ b _080883DA
+ .align 2, 0
+_080883D4: .4byte gUnk_02002B0E
+_080883D8:
+ adds r4, #1
+_080883DA:
+ cmp r7, r4
+ bne _080883AC
+_080883DE:
+ cmp r5, #0
+ beq _08088414
+_080883E2:
+ ldr r0, _08088404 @ =gSave
+ adds r0, #0xb0
+ ldrb r1, [r0]
+ adds r1, #1
+ strb r1, [r0]
+ adds r0, r6, #0
+ adds r0, #0x80
+ lsls r1, r1, #0x18
+ lsrs r1, r1, #0x18
+ ldrb r0, [r0]
+ cmp r1, r0
+ beq _08088408
+ movs r0, #7
+ bl SetRoomFlag
+ b _08088414
+ .align 2, 0
+_08088404: .4byte gSave
+_08088408:
+ movs r0, #0x5f
+ bl SetLocalFlag
+ movs r0, #8
+ bl SetRoomFlag
+_08088414:
+ mov r0, r8
+ strb r4, [r0]
+ ldr r0, [r6, #0x50]
+ adds r0, #0x7d
+ strb r4, [r0]
+ pop {r3}
+ mov r8, r3
+ pop {r4, r5, r6, r7, pc}
+.endif
+ .syntax divided
diff --git a/asm/object/figurineDevice.s b/asm/object/figurineDevice.s
deleted file mode 100644
index c321c27d..00000000
--- a/asm/object/figurineDevice.s
+++ /dev/null
@@ -1,2231 +0,0 @@
- .include "asm/macros.inc"
-
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
-
- thumb_func_start FigurineDevice
-FigurineDevice: @ 0x08087BAC
- push {lr}
- ldr r2, _08087BC0 @ =gUnk_08120A94
- ldrb r1, [r0, #0xc]
- lsls r1, r1, #2
- adds r1, r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- pop {pc}
- .align 2, 0
-_08087BC0: .4byte gUnk_08120A94
-
- thumb_func_start sub_08087BC4
-sub_08087BC4: @ 0x08087BC4
- push {r4, r5, lr}
- adds r4, r0, #0
- ldrb r0, [r4, #0xa]
- adds r0, #1
- movs r5, #0
- strb r0, [r4, #0xc]
- ldrb r0, [r4, #0xa]
- cmp r0, #1
- beq _08087C04
- cmp r0, #1
- bgt _08087BE0
- cmp r0, #0
- beq _08087BEA
- b _08087CA6
-_08087BE0:
- cmp r0, #2
- beq _08087C64
- cmp r0, #3
- beq _08087C7C
- b _08087CA6
-_08087BEA:
- movs r0, #0x5e
- bl CheckLocalFlag
- cmp r0, #0
- beq _08087C16
- adds r1, r4, #0
- adds r1, #0x7a
- movs r0, #1
- strb r0, [r1]
- adds r0, r4, #0
- bl sub_080787B4
- b _08087C1C
-_08087C04:
- movs r0, #0x22
- movs r1, #3
- movs r2, #0
- bl CreateObject
- cmp r0, #0
- beq _08087C16
- str r4, [r0, #0x50]
- str r0, [r4, #0x54]
-_08087C16:
- adds r0, r4, #0
- adds r0, #0x7a
- strb r5, [r0]
-_08087C1C:
- ldrb r0, [r4, #0x19]
- movs r1, #0xc0
- orrs r0, r1
- strb r0, [r4, #0x19]
- adds r2, r4, #0
- adds r2, #0x29
- ldrb r0, [r2]
- movs r1, #7
- orrs r0, r1
- strb r0, [r2]
- movs r0, #0x2e
- ldrsh r1, [r4, r0]
- ldr r2, _08087C60 @ =gRoomControls
- ldrh r0, [r2, #6]
- subs r1, r1, r0
- asrs r1, r1, #4
- movs r3, #0x3f
- ands r1, r3
- movs r5, #0x32
- ldrsh r0, [r4, r5]
- ldrh r2, [r2, #8]
- subs r0, r0, r2
- asrs r0, r0, #4
- ands r0, r3
- lsls r0, r0, #6
- orrs r1, r0
- adds r0, r4, #0
- adds r0, #0x78
- strh r1, [r0]
- adds r0, r4, #0
- bl sub_08087F58
- b _08087CA6
- .align 2, 0
-_08087C60: .4byte gRoomControls
-_08087C64:
- adds r0, r4, #0
- adds r0, #0x7a
- strb r5, [r0]
- adds r0, r4, #0
- movs r1, #7
- bl SetDefaultPriority
- adds r0, r4, #0
- movs r1, #1
- bl InitializeAnimation
- b _08087CA6
-_08087C7C:
- movs r0, #0x1e
- strb r0, [r4, #0xe]
- strb r5, [r4, #0xf]
- adds r1, r4, #0
- adds r1, #0x81
- movs r0, #1
- strb r0, [r1]
- adds r0, r4, #0
- adds r0, #0x7a
- strb r5, [r0]
- adds r0, #1
- strb r5, [r0]
-.ifdef EU
- adds r0, #1
-.else
- adds r0, #5
-.endif
- strb r5, [r0]
- adds r0, r4, #0
- bl sub_0808804C
- adds r0, r4, #0
- movs r1, #6
- bl SetDefaultPriority
-_08087CA6:
- pop {r4, r5, pc}
-
- thumb_func_start sub_08087CA8
-sub_08087CA8: @ 0x08087CA8
- push {r4, r5, lr}
- adds r4, r0, #0
- adds r5, r4, #0
- adds r5, #0x7a
- ldrb r0, [r5]
- cmp r0, #1
- beq _08087CCA
- cmp r0, #1
- bgt _08087D02
- cmp r0, #0
- bne _08087D02
- movs r0, #1
- strb r0, [r5]
- adds r0, r4, #0
- bl sub_080787B4
- b _08087D1A
-_08087CCA:
- adds r1, r4, #0
- adds r1, #0x39
- movs r0, #0
- ldrsb r0, [r1, r0]
- cmp r0, #0
- beq _08087D1A
- movs r0, #0
- strb r0, [r1]
- bl ResetPlayerAnimationAndAction
- movs r0, #0x5e
- bl CheckLocalFlag
- cmp r0, #0
- beq _08087CFA
- movs r0, #2
- strb r0, [r5]
- bl SetRoomFlag
- movs r0, #7
- movs r1, #0xff
- bl MenuFadeIn
- b _08087D1A
-_08087CFA:
- movs r0, #5
- bl SetRoomFlag
- b _08087D1A
-_08087D02:
- movs r0, #2
- bl CheckRoomFlag
- cmp r0, #0
- bne _08087D1A
- adds r1, r4, #0
- adds r1, #0x7a
- movs r0, #1
- strb r0, [r1]
- adds r0, r4, #0
- bl sub_080787B4
-_08087D1A:
- pop {r4, r5, pc}
-
- thumb_func_start sub_08087D1C
-sub_08087D1C: @ 0x08087D1C
- push {r4, r5, lr}
- adds r5, r0, #0
- adds r4, r5, #0
- adds r4, #0x7a
- ldrb r0, [r4]
- cmp r0, #1
- beq _08087D60
- cmp r0, #1
- bgt _08087D34
- cmp r0, #0
- beq _08087D3A
- b _08087DB0
-_08087D34:
- cmp r0, #2
- beq _08087D5A
- b _08087DB0
-_08087D3A:
- movs r0, #0
- bl CheckRoomFlag
- cmp r0, #0
- beq _08087DB0
- movs r0, #0x5e
- bl CheckLocalFlag
- cmp r0, #0
- beq _08087D54
- movs r0, #1
- strb r0, [r4]
- b _08087DB0
-_08087D54:
- movs r0, #2
- strb r0, [r4]
- b _08087DB0
-_08087D5A:
- movs r0, #0x5e
- bl SetLocalFlag
-_08087D60:
- adds r1, r5, #0
- adds r1, #0x7a
- movs r0, #0
- strb r0, [r1]
- ldr r0, [r5, #0x54]
- bl sub_08088328
- movs r0, #0
- bl ClearRoomFlag
- movs r0, #0x22
- movs r1, #2
- movs r2, #0
- bl CreateObject
- adds r4, r0, #0
- cmp r4, #0
- beq _08087DAA
- str r5, [r4, #0x50]
- adds r0, r5, #0
-.ifdef EU
- adds r0, #0x7e
-.else
- adds r0, #0x7d
-.endif
- ldrb r0, [r0]
- strb r0, [r4, #0xf]
- ldr r1, _08087DB4 @ =gUnk_080FC3E4
- ldrb r0, [r4, #0xf]
- lsls r0, r0, #3
- adds r0, r0, r1
- ldrb r0, [r0, #7]
- strb r0, [r4, #0xb]
- movs r2, #0x80
- lsls r2, r2, #0xc
- movs r3, #0xe0
- lsls r3, r3, #0xb
- adds r0, r5, #0
- adds r1, r4, #0
- bl PositionRelative
-_08087DAA:
- ldr r0, _08087DB8 @ =0x00000111
- bl EnqueueSFX
-_08087DB0:
- pop {r4, r5, pc}
- .align 2, 0
-_08087DB4: .4byte gUnk_080FC3E4
-_08087DB8: .4byte 0x00000111
-
- thumb_func_start sub_08087DBC
-sub_08087DBC: @ 0x08087DBC
- push {r4, lr}
- adds r4, r0, #0
- bl GetNextFrame
- adds r2, r4, #0
- adds r2, #0x7a
- ldrb r0, [r2]
- cmp r0, #1
- beq _08087E10
- cmp r0, #1
- bgt _08087E3C
- cmp r0, #0
- bne _08087E3C
- adds r0, r4, #0
- adds r0, #0x5a
- ldrb r1, [r0]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- beq _08087E5A
- movs r0, #1
- strb r0, [r2]
- movs r0, #0x28
- strb r0, [r4, #0xe]
- ldr r1, _08087E0C @ =gUnk_08120AA8
- ldrb r0, [r4, #0xb]
- adds r0, r0, r1
- ldrb r1, [r0]
- adds r0, r4, #0
- bl ChangeObjPalette
- adds r0, r4, #0
- movs r1, #2
- bl InitializeAnimation
- movs r0, #0x88
- lsls r0, r0, #1
- bl SoundReq
- b _08087E5A
- .align 2, 0
-_08087E0C: .4byte gUnk_08120AA8
-_08087E10:
- adds r0, r4, #0
- adds r0, #0x5a
- ldrb r1, [r0]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- beq _08087E5A
- ldrb r0, [r4, #0xe]
- subs r0, #1
- strb r0, [r4, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _08087E5A
- movs r0, #2
- strb r0, [r2]
- bl SetRoomFlag
- ldrb r1, [r4, #0xf]
- movs r0, #7
- bl MenuFadeIn
- b _08087E5A
-_08087E3C:
- movs r0, #2
- bl CheckRoomFlag
- cmp r0, #0
- bne _08087E5A
- ldrb r1, [r4, #0x18]
- movs r0, #4
- rsbs r0, r0, #0
- ands r0, r1
- strb r0, [r4, #0x18]
-.ifdef EU
- movs r0, #9
-.else
- movs r0, #4
-.endif
- bl ClearRoomFlag
- bl DeleteThisEntity
-_08087E5A:
- pop {r4, pc}
-
- thumb_func_start sub_08087E5C
-sub_08087E5C: @ 0x08087E5C
-.ifdef EU
- push {r4, r5, r6, lr}
- adds r4, r0, #0
- adds r5, r4, #0
- adds r5, #0x7a
- ldrb r1, [r5]
- cmp r1, #1
- beq _08087888
- cmp r1, #1
- bgt _08087850
- cmp r1, #0
- beq _08087856
- b _0808790C
-_08087850:
- cmp r1, #2
- beq _080878EA
- b _0808790C
-_08087856:
- adds r0, r4, #0
- adds r0, #0x7b
- ldrb r0, [r0]
- cmp r0, #4
- bne _08087880
- movs r0, #1
- bl CheckRoomFlag
- cmp r0, #0
- beq _0808790C
- movs r0, #1
- strb r0, [r5]
- adds r1, r4, #0
- adds r1, #0x81
- strb r0, [r1]
- bl ClearRoomFlag
- adds r0, r4, #0
- bl sub_0808826C
- b _080878E2
-_08087880:
- adds r0, r4, #0
- bl sub_080880D8
- b _0808790C
-_08087888:
- ldrb r0, [r4, #0xe]
- cmp r0, #0
- beq _08087892
- subs r0, #1
- strb r0, [r4, #0xe]
-_08087892:
- ldr r2, _080878B0 @ =gInput
- ldrh r0, [r2, #2]
- ands r1, r0
- cmp r1, #0
- beq _080878B4
- movs r0, #0x6a
- bl SoundReq
- movs r0, #2
- strb r0, [r5]
- movs r0, #0x3c
- strb r0, [r4, #0xe]
- bl sub_08050384
- b _0808790C
- .align 2, 0
-_080878B0: .4byte gInput
-_080878B4:
- adds r0, r4, #0
- adds r0, #0x81
- ldrb r6, [r0]
- ldrh r1, [r2, #4]
- adds r5, r0, #0
- cmp r1, #0x40
- beq _080878C8
- cmp r1, #0x80
- beq _080878D2
- b _080878DC
-_080878C8:
- adds r0, r4, #0
- movs r1, #1
- bl sub_08087F94
- b _080878DC
-_080878D2:
- movs r1, #1
- rsbs r1, r1, #0
- adds r0, r4, #0
- bl sub_08087F94
-_080878DC:
- ldrb r5, [r5]
- cmp r6, r5
- beq _0808790C
-_080878E2:
- adds r0, r4, #0
- bl sub_080882A8
- b _0808790C
-_080878EA:
- movs r0, #0
- strb r0, [r5]
- adds r1, r4, #0
- adds r1, #0x7b
- movs r0, #4
- strb r0, [r1]
- movs r0, #3
- bl SetRoomFlag
- ldr r0, _08087910 @ =0x0000431A
- bl MessageFromTarget
- ldr r1, _08087914 @ =gMessage
- adds r0, r4, #0
- adds r0, #0x81
- ldrb r0, [r0]
- str r0, [r1, #0x10]
-_0808790C:
- pop {r4, r5, r6, pc}
- .align 2, 0
-_08087910: .4byte 0x0000431A
-_08087914: .4byte gMessage
-
-.else
- push {r4, r5, r6, r7, lr}
- adds r4, r0, #0
- adds r5, r4, #0
- adds r5, #0x7a
- ldrb r1, [r5]
- cmp r1, #1
- beq _08087EAC
- cmp r1, #1
- bgt _08087E74
- cmp r1, #0
- beq _08087E7A
- b _08087F4E
-_08087E74:
- cmp r1, #2
- beq _08087F24
- b _08087F4E
-_08087E7A:
- adds r0, r4, #0
- adds r0, #0x7b
- ldrb r0, [r0]
- cmp r0, #4
- bne _08087EA4
- movs r0, #1
- bl CheckRoomFlag
- cmp r0, #0
- beq _08087F4E
- movs r0, #1
- strb r0, [r5]
- adds r1, r4, #0
- adds r1, #0x81
- strb r0, [r1]
- bl ClearRoomFlag
- adds r0, r4, #0
- bl sub_0808826C
- b _08087F1C
-_08087EA4:
- adds r0, r4, #0
- bl sub_080880D8
- b _08087F4E
-_08087EAC:
- ldrb r0, [r4, #0xe]
- cmp r0, #0
- beq _08087EB6
- subs r0, #1
- strb r0, [r4, #0xe]
-_08087EB6:
- ldr r6, _08087ED4 @ =gInput
- ldrh r0, [r6, #2]
- ands r1, r0
- cmp r1, #0
- beq _08087ED8
- movs r0, #0x6a
- bl SoundReq
- movs r0, #2
- strb r0, [r5]
- movs r0, #0x3c
- strb r0, [r4, #0xe]
- bl sub_08050384
- b _08087F4E
- .align 2, 0
-_08087ED4: .4byte gInput
-_08087ED8:
- adds r2, r4, #0
- adds r2, #0x81
- ldrb r7, [r2]
- ldrh r1, [r6]
- movs r0, #0x80
- lsls r0, r0, #1
- ands r0, r1
- movs r3, #1
- adds r5, r2, #0
- cmp r0, #0
- beq _08087EF0
- movs r3, #0xa
-_08087EF0:
- ldrh r1, [r6, #4]
-.ifdef JP
- cmp r1, #0x40
- beq _08087F04
- cmp r1, #0x80
- beq _08087F0E
- b _08087F16
- .align 2, 0
-.else
- ldr r0, _08087F00 @ =0xFFFFFEFF
- ands r1, r0
- cmp r1, #0x40
- beq _08087F04
- cmp r1, #0x80
- beq _08087F0E
- b _08087F16
- .align 2, 0
-_08087F00: .4byte 0xFFFFFEFF
-.endif
-_08087F04:
- adds r0, r4, #0
- adds r1, r3, #0
- bl sub_08087F94
- b _08087F16
-_08087F0E:
- rsbs r1, r3, #0
- adds r0, r4, #0
- bl sub_08087F94
-_08087F16:
- ldrb r5, [r5]
- cmp r7, r5
- beq _08087F4E
-_08087F1C:
- adds r0, r4, #0
- bl sub_080882A8
- b _08087F4E
-_08087F24:
- movs r0, #0
- strb r0, [r5]
- adds r1, r4, #0
- adds r1, #0x7b
- movs r0, #4
- strb r0, [r1]
- movs r0, #3
- bl SetRoomFlag
- ldr r0, _08087F50 @ =0x0000431A
- bl MessageFromTarget
- ldr r1, _08087F54 @ =gMessage
- movs r0, #1
- strb r0, [r1, #6]
- movs r0, #0xc
- strb r0, [r1, #7]
- adds r0, r4, #0
- adds r0, #0x81
- ldrb r0, [r0]
- str r0, [r1, #0x10]
-_08087F4E:
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_08087F50: .4byte 0x0000431A
-_08087F54: .4byte gMessage
-.endif
-
- thumb_func_start sub_08087F58
-sub_08087F58: @ 0x08087F58
- push {r4, r5, lr}
- ldrb r1, [r0, #0xa]
- cmp r1, #1
- bgt _08087F8C
- cmp r1, #0
- blt _08087F8C
- ldr r5, _08087F90 @ =0x00004022
- adds r4, r0, #0
- adds r4, #0x78
- ldrh r1, [r4]
- subs r1, #1
- adds r0, r5, #0
- movs r2, #1
- bl SetTile
- ldrh r1, [r4]
- adds r0, r5, #0
- movs r2, #1
- bl SetTile
- ldrh r1, [r4]
- adds r1, #1
- adds r0, r5, #0
- movs r2, #1
- bl SetTile
-_08087F8C:
- pop {r4, r5, pc}
- .align 2, 0
-_08087F90: .4byte 0x00004022
-
- thumb_func_start sub_08087F94
-sub_08087F94: @ 0x08087F94
-.ifdef JP
- push {r4, r5, r6, r7, lr}
- adds r5, r0, #0
- adds r4, r1, #0
- movs r0, #0x5f
- bl CheckLocalFlag
- cmp r0, #0
- bne _08087E3E
- adds r0, r5, #0
- adds r0, #0x83
- movs r7, #0
- ldrsb r7, [r0, r7]
- adds r3, r7, r4
- mov ip, r0
- cmp r4, #0
- bge _08087E0A
- adds r2, r5, #0
- adds r2, #0x82
- movs r0, #0
- ldrsb r0, [r2, r0]
- cmp r3, r0
- bge _08087DF4
- mov r0, ip
- movs r1, #0
- ldrsb r1, [r0, r1]
- ldrb r3, [r2]
- movs r0, #0
- ldrsb r0, [r2, r0]
- cmp r1, r0
- beq _08087E3E
- mov r2, ip
- strb r3, [r2]
- adds r1, r5, #0
- adds r1, #0x81
- movs r0, #1
- b _08087E00
-_08087DF4:
- mov r0, ip
- strb r3, [r0]
- adds r1, r5, #0
- adds r1, #0x81
- ldrb r0, [r1]
- adds r0, r0, r4
-_08087E00:
- strb r0, [r1]
- movs r0, #0x69
- bl SoundReq
- b _08087E58
-_08087E0A:
- adds r1, r5, #0
- adds r1, #0x81
- ldrb r6, [r1]
- adds r2, r6, r4
- ldr r0, _08087E2C @ =0x02002A40
- adds r0, #0xc2
- ldrh r0, [r0]
- cmp r2, r0
- ble _08087E30
- cmp r0, r6
- beq _08087E3E
- adds r2, r0, #0
- subs r4, r2, r6
- adds r3, r7, r4
- cmp r3, #0x64
- ble _08087E4C
- b _08087E46
- .align 2, 0
-_08087E2C: .4byte 0x02002A40
-_08087E30:
- cmp r3, #0x64
- ble _08087E4C
- mov r2, ip
- movs r0, #0
- ldrsb r0, [r2, r0]
- cmp r0, #0x64
- bne _08087E46
-_08087E3E:
- adds r0, r5, #0
- bl sub_08088034
- b _08087E58
-_08087E46:
- movs r3, #0x64
- subs r4, r3, r7
- adds r2, r6, r4
-_08087E4C:
- mov r0, ip
- strb r3, [r0]
- strb r2, [r1]
- movs r0, #0x69
- bl SoundReq
-_08087E58:
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-.else
-.ifdef EU
- push {r4, r5, r6, r7, lr}
- adds r5, r0, #0
- adds r6, r1, #0
- adds r7, r5, #0
- adds r7, #0x83
- ldrb r0, [r7]
- adds r4, r0, r6
- movs r0, #0x5f
- bl CheckLocalFlag
- cmp r0, #0
- bne _080879CE
- cmp r6, #0
- bge _0808799E
- adds r0, r5, #0
- adds r0, #0x82
- ldrb r1, [r0]
- cmp r4, r1
- bhs _0808798A
- ldrb r0, [r7]
- cmp r0, r1
- beq _080879CE
- strb r1, [r7]
- adds r1, r5, #0
- adds r1, #0x81
- movs r0, #1
- b _08087994
-_0808798A:
- strb r4, [r7]
- adds r1, r5, #0
- adds r1, #0x81
- ldrb r0, [r1]
- adds r0, r0, r6
-_08087994:
- strb r0, [r1]
- movs r0, #0x69
- bl SoundReq
- b _080879EC
-_0808799E:
- adds r1, r5, #0
- adds r1, #0x81
- ldrb r3, [r1]
- adds r2, r3, r6
- ldr r0, _080879C0 @ =gSave
- adds r0, #0xc2
- ldrh r0, [r0]
- cmp r2, r0
- bls _080879C4
- cmp r0, r3
- beq _080879CE
- adds r2, r0, #0
- subs r0, r2, r3
- ldrb r7, [r7]
- adds r4, r0, r7
- b _080879DE
- .align 2, 0
-_080879C0: .4byte gSave
-_080879C4:
- cmp r4, #0x64
- bls _080879DE
- ldrb r0, [r7]
- cmp r0, #0x64
- bne _080879D6
-_080879CE:
- adds r0, r5, #0
- bl sub_08088034
- b _080879EC
-_080879D6:
- movs r4, #0x64
- ldrb r0, [r7]
- subs r6, r4, r0
- adds r2, r3, r6
-_080879DE:
- adds r0, r5, #0
- adds r0, #0x83
- strb r4, [r0]
- strb r2, [r1]
- movs r0, #0x69
- bl SoundReq
-_080879EC:
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-.else
- push {r4, r5, r6, r7, lr}
- adds r5, r0, #0
- adds r4, r1, #0
- movs r0, #0x5f
- bl CheckLocalFlag
- cmp r0, #0
- bne _08088014
- adds r0, r5, #0
- adds r0, #0x83
- movs r1, #0
- ldrsb r1, [r0, r1]
- mov ip, r1
- adds r3, r1, r4
- adds r7, r0, #0
- cmp r4, #0
- bge _08087FEA
- adds r2, r5, #0
- adds r2, #0x82
- movs r0, #0
- ldrsb r0, [r2, r0]
- cmp r3, r0
- bge _08087FD6
- movs r1, #0
- ldrsb r1, [r7, r1]
- ldrb r3, [r2]
- cmp r1, r0
- beq _08088014
- strb r3, [r7]
- adds r1, r5, #0
- adds r1, #0x81
- movs r0, #1
- b _08087FE0
-_08087FD6:
- strb r3, [r7]
- adds r1, r5, #0
- adds r1, #0x81
- ldrb r0, [r1]
- adds r0, r0, r4
-_08087FE0:
- strb r0, [r1]
- movs r0, #0x69
- bl SoundReq
- b _08088032
-_08087FEA:
- adds r1, r5, #0
- adds r1, #0x81
- ldrb r6, [r1]
- adds r2, r6, r4
- ldr r0, _0808801C @ =gSave
- adds r0, #0xc2
- ldrh r0, [r0]
- cmp r2, r0
- ble _08088008
- cmp r0, r6
- beq _08088014
- adds r2, r0, #0
- subs r4, r2, r6
- mov r0, ip
- adds r3, r0, r4
-_08088008:
- cmp r3, #0x64
- ble _08088028
- movs r0, #0
- ldrsb r0, [r7, r0]
- cmp r0, #0x64
- bne _08088020
-_08088014:
- adds r0, r5, #0
- bl sub_08088034
- b _08088032
- .align 2, 0
-_0808801C: .4byte gSave
-_08088020:
- movs r3, #0x64
- mov r0, ip
- subs r4, r3, r0
- adds r2, r6, r4
-_08088028:
- strb r3, [r7]
- strb r2, [r1]
- movs r0, #0x69
- bl SoundReq
-_08088032:
- pop {r4, r5, r6, r7, pc}
-.endif
-.endif
-
- thumb_func_start sub_08088034
-sub_08088034: @ 0x08088034
- push {lr}
- adds r1, r0, #0
- ldrb r0, [r1, #0xe]
- cmp r0, #0
- bne _08088048
- movs r0, #0x14
- strb r0, [r1, #0xe]
- movs r0, #0x6d
- bl SoundReq
-_08088048:
- pop {pc}
- .align 2, 0
-
- thumb_func_start sub_0808804C
-sub_0808804C: @ 0x0808804C
- push {r4, r5, lr}
- adds r5, r0, #0
- movs r4, #0
- ldr r0, _08088060 @ =gSave
- ldrb r0, [r0, #6]
- cmp r0, #0
- beq _08088064
- movs r4, #9
- b _080880D0
- .align 2, 0
-_08088060: .4byte gSave
-_08088064:
- movs r0, #6
- bl CheckGlobalFlag
- cmp r0, #0
- beq _08088072
- movs r4, #7
- b _080880D0
-_08088072:
- movs r0, #0x80
- lsls r0, r0, #4
- movs r1, #0x77
- bl CheckLocalFlagByBank
- cmp r0, #0
- beq _08088084
- movs r4, #6
- b _080880D0
-_08088084:
- movs r0, #0xc0
- lsls r0, r0, #2
- movs r1, #0x32
- bl CheckLocalFlagByBank
- cmp r0, #0
- beq _08088096
- movs r4, #5
- b _080880D0
-_08088096:
- movs r0, #5
- bl CheckGlobalFlag
- cmp r0, #0
- beq _080880A4
- movs r4, #4
- b _080880D0
-_080880A4:
- movs r0, #4
- bl CheckGlobalFlag
- cmp r0, #0
- beq _080880B2
- movs r4, #3
- b _080880D0
-_080880B2:
- movs r0, #0x80
- lsls r0, r0, #1
-.ifdef JP
- movs r1, #0x9b
-.else
-.ifdef EU
- movs r1, #0x9b
-.else
-.ifdef DEMO_JP
- movs r1, #0x9b @ TODO deduplicate
-.else
- movs r1, #0x9c
-.endif
-.endif
-.endif
- bl CheckLocalFlagByBank
- cmp r0, #0
- beq _080880C4
- movs r4, #2
- b _080880D0
-_080880C4:
- movs r0, #3
- bl CheckGlobalFlag
- cmp r0, #0
- beq _080880D0
- movs r4, #1
-_080880D0:
- adds r0, r5, #0
-.ifdef EU
- adds r0, #0x7d
-.else
- adds r0, #0x7c
-.endif
- strb r4, [r0]
- pop {r4, r5, pc}
-
- thumb_func_start sub_080880D8
-sub_080880D8: @ 0x080880D8
- push {r4, r5, r6, r7, lr}
- adds r7, r0, #0
- adds r0, #0x7b
- ldrb r1, [r0]
- ldr r0, _08088158 @ =gUnk_08120AAC
- adds r6, r1, r0
- ldrb r4, [r6]
- ldrb r0, [r6, #1]
- cmp r4, r0
- bhs _0808810A
- adds r5, r7, #0
-.ifdef EU
- adds r5, #0x7c
-.else
- adds r5, #0x80
-.endif
-_080880F0:
- adds r0, r7, #0
- adds r1, r4, #0
- bl sub_08088160
- cmp r0, #0
- beq _08088102
- ldrb r0, [r5]
- adds r0, #1
- strb r0, [r5]
-_08088102:
- adds r4, #1
- ldrb r0, [r6, #1]
- cmp r4, r0
- blo _080880F0
-_0808810A:
- adds r1, r7, #0
- adds r1, #0x7b
- ldrb r0, [r1]
- adds r0, #1
- strb r0, [r1]
- lsls r0, r0, #0x18
- lsrs r0, r0, #0x18
- cmp r0, #4
- bne _08088156
- ldr r5, _0808815C @ =gSave
- adds r0, r7, #0
-.ifdef EU
- adds r0, #0x7c
-.else
- adds r0, #0x80
-.endif
- ldrb r1, [r5, #9]
- adds r4, r0, #0
- ldrb r0, [r4]
- cmp r1, r0
- beq _0808813A
- cmp r1, #0
- beq _08088136
- movs r0, #6
- bl SetRoomFlag
-_08088136:
- ldrb r0, [r4]
- strb r0, [r5, #9]
-_0808813A:
- movs r0, #0x5f
- bl CheckLocalFlag
- cmp r0, #0
- beq _08088156
- ldr r0, _0808815C @ =gSave
- adds r0, #0xb0
- ldrb r1, [r4]
- ldrb r0, [r0]
- cmp r1, r0
- beq _08088156
- movs r0, #0x5f
- bl ClearLocalFlag
-_08088156:
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_08088158: .4byte gUnk_08120AAC
-_0808815C: .4byte gSave
-
- thumb_func_start sub_08088160
-sub_08088160: @ 0x08088160
-.ifdef JP
- push {r4, lr}
- adds r2, r0, #0
- lsls r1, r1, #3
- ldr r0, _08087FB0 @ =gUnk_080FC3E4
- adds r1, r1, r0
- movs r4, #0
- adds r0, r2, #0
- adds r0, #0x7c
- ldrb r0, [r0]
- ldrb r3, [r1, #6]
- cmp r0, r3
- bhs _08088068
- ldrb r0, [r1, #6]
- cmp r0, #0x10
- beq _08087FC6
- cmp r0, #0x10
- bgt _08087FB4
- cmp r0, #8
- beq _08087FBC
- b _0808806A
- .align 2, 0
-_08087FB0: .4byte gUnk_080FC3E4
-_08087FB4:
- cmp r0, #0x20
- beq _08087FCA
- cmp r0, #0x40
- bne _0808806A
-_08087FBC:
- ldr r0, [r1]
- ldrh r1, [r1, #4]
- bl CheckLocalFlagByBank
- b _08088064EU
-_08087FC6:
- ldrh r0, [r1, #4]
- b _08088060EU
-_08087FCA:
- ldrh r0, [r1, #4]
- cmp r0, #4
- bhi _0808806A
- lsls r0, r0, #2
- ldr r1, _08087FDC @ =_08087FE0
- adds r0, r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08087FDC: .4byte _08087FE0
-_08087FE0: @ jump table
- .4byte _08087FF4 @ case 0
- .4byte _0808800C @ case 1
- .4byte _0808801A @ case 2
- .4byte _08088032 @ case 3
- .4byte _0808804A @ case 4
-_08087FF4:
- movs r0, #0x20
- bl CheckKinstoneFused
- cmp r0, #0
- bne _08088068
- movs r0, #0x10
- bl CheckKinstoneFused
- cmp r0, #0
- bne _08088068
- movs r0, #0x19
- b _08088060EU
-_0808800C:
- adds r0, r2, #0
- adds r0, #0x7c
- ldrb r0, [r0]
- cmp r0, #4
- bls _0808806A
- movs r0, #0x28
- b _08088060EU
-_0808801A:
- movs r0, #0x54
- bl CheckKinstoneFused
- cmp r0, #0
- bne _08088068
- movs r0, #0x56
- bl CheckKinstoneFused
- cmp r0, #0
- bne _08088068
- movs r0, #0x3d
- b _08088060EU
-_08088032:
- movs r0, #0x3b
- bl CheckKinstoneFused
- cmp r0, #0
- bne _08088068
- movs r0, #0x4a
- bl CheckKinstoneFused
- cmp r0, #0
- bne _08088068
- movs r0, #0xd
- b _08088060EU
-_0808804A:
- movs r0, #0x49
- bl CheckKinstoneFused
- cmp r0, #0
- bne _08088068
- movs r0, #0x55
- bl CheckKinstoneFused
- cmp r0, #0
- bne _08088068
- movs r0, #0x3c
-_08088060EU:
- bl CheckKinstoneFused
-_08088064EU:
- cmp r0, #0
- beq _0808806A
-_08088068:
- movs r4, #1
-_0808806A:
- adds r0, r4, #0
- pop {r4, pc}
- .align 2, 0
-
-.else
-.ifdef EU
- push {r4, lr}
- adds r2, r0, #0
- lsls r1, r1, #3
- ldr r0, _08087B44 @ =gUnk_080FC3E4
- adds r1, r1, r0
- movs r4, #0
- adds r0, r2, #0
- adds r0, #0x7d
- ldrb r0, [r0]
- ldrb r3, [r1, #6]
- cmp r0, r3
- bhs _08087BFC
- ldrb r0, [r1, #6]
- cmp r0, #0x10
- beq _08087B5A
- cmp r0, #0x10
- bgt _08087B48
- cmp r0, #8
- beq _08087B50
- b _08087BFE
- .align 2, 0
-_08087B44: .4byte gUnk_080FC3E4
-_08087B48:
- cmp r0, #0x20
- beq _08087B5E
- cmp r0, #0x40
- bne _08087BFE
-_08087B50:
- ldr r0, [r1]
- ldrh r1, [r1, #4]
- bl CheckLocalFlagByBank
- b _08087BF8
-_08087B5A:
- ldrh r0, [r1, #4]
- b _08087BF4
-_08087B5E:
- ldrh r0, [r1, #4]
- cmp r0, #4
- bhi _08087BFE
- lsls r0, r0, #2
- ldr r1, _08087B70 @ =_08087B74
- adds r0, r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08087B70: .4byte _08087B74
-_08087B74: @ jump table
- .4byte _08087B88 @ case 0
- .4byte _08087BA0 @ case 1
- .4byte _08087BAE @ case 2
- .4byte _08087BC6 @ case 3
- .4byte _08087BDE @ case 4
-_08087B88:
- movs r0, #0x20
- bl CheckKinstoneFused
- cmp r0, #0
- bne _08087BFC
- movs r0, #0x10
- bl CheckKinstoneFused
- cmp r0, #0
- bne _08087BFC
- movs r0, #0x19
- b _08087BF4
-_08087BA0:
- adds r0, r2, #0
- adds r0, #0x7d
- ldrb r0, [r0]
- cmp r0, #4
- bls _08087BFE
- movs r0, #0x28
- b _08087BF4
-_08087BAE:
- movs r0, #0x54
- bl CheckKinstoneFused
- cmp r0, #0
- bne _08087BFC
- movs r0, #0x56
- bl CheckKinstoneFused
- cmp r0, #0
- bne _08087BFC
- movs r0, #0x3d
- b _08087BF4
-_08087BC6:
- movs r0, #0x3b
- bl CheckKinstoneFused
- cmp r0, #0
- bne _08087BFC
- movs r0, #0x4a
- bl CheckKinstoneFused
- cmp r0, #0
- bne _08087BFC
- movs r0, #0xd
- b _08087BF4
-_08087BDE:
- movs r0, #0x49
- bl CheckKinstoneFused
- cmp r0, #0
- bne _08087BFC
- movs r0, #0x55
- bl CheckKinstoneFused
- cmp r0, #0
- bne _08087BFC
- movs r0, #0x3c
-_08087BF4:
- bl CheckKinstoneFused
-_08087BF8:
- cmp r0, #0
- beq _08087BFE
-_08087BFC:
- movs r4, #1
-_08087BFE:
- adds r0, r4, #0
- pop {r4, pc}
- .align 2, 0
-.else
- push {r4, lr}
- adds r2, r0, #0
- lsls r1, r1, #3
- ldr r0, _08088188 @ =gUnk_080FC3E4
- adds r1, r1, r0
- movs r4, #0
- adds r0, r2, #0
- adds r0, #0x7c
- ldrb r0, [r0]
- ldrb r3, [r1, #6]
- cmp r0, r3
- bhs _08088266
- ldrb r0, [r1, #6]
- cmp r0, #0x10
- beq _0808819E
- cmp r0, #0x10
- bgt _0808818C
- cmp r0, #8
- beq _08088194
- b _08088268
- .align 2, 0
-_08088188: .4byte gUnk_080FC3E4
-_0808818C:
- cmp r0, #0x20
- beq _080881A6
- cmp r0, #0x40
- bne _08088268
-_08088194:
- ldr r0, [r1]
- ldrh r1, [r1, #4]
- bl CheckLocalFlagByBank
- b _08088262
-_0808819E:
- ldrh r0, [r1, #4]
-.ifndef JP
- bl CheckKinstoneFused
-.endif
- b _08088262
-_080881A6:
- ldrh r0, [r1, #4]
- cmp r0, #5
- bhi _08088268
- lsls r0, r0, #2
- ldr r1, _080881B8 @ =_080881BC
- adds r0, r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080881B8: .4byte _080881BC
-_080881BC: @ jump table
- .4byte _080881D4 @ case 0
- .4byte _080881F0 @ case 1
- .4byte _080881FE @ case 2
- .4byte _0808821A @ case 3
- .4byte _08088236 @ case 4
- .4byte _08088252 @ case 5
-_080881D4:
- movs r0, #0x20
- bl CheckKinstoneFused
- cmp r0, #0
- bne _08088266
- movs r0, #0x10
- bl CheckKinstoneFused
- cmp r0, #0
- bne _08088266
- movs r0, #0x19
-_080881EA:
- bl CheckKinstoneFused
- b _08088262
-_080881F0:
- adds r0, r2, #0
- adds r0, #0x7c
- ldrb r0, [r0]
- cmp r0, #4
- bls _08088268
- movs r0, #0x28
- b _080881EA
-_080881FE:
- movs r0, #0x54
- bl CheckKinstoneFused
- cmp r0, #0
- bne _08088266
- movs r0, #0x56
- bl CheckKinstoneFused
- cmp r0, #0
- bne _08088266
- movs r0, #0x3d
- bl CheckKinstoneFused
- b _08088262
-_0808821A:
- movs r0, #0x3b
- bl CheckKinstoneFused
- cmp r0, #0
- bne _08088266
- movs r0, #0x4a
- bl CheckKinstoneFused
- cmp r0, #0
- bne _08088266
- movs r0, #0xd
- bl CheckKinstoneFused
- b _08088262
-_08088236:
- movs r0, #0x49
- bl CheckKinstoneFused
- cmp r0, #0
- bne _08088266
- movs r0, #0x55
- bl CheckKinstoneFused
- cmp r0, #0
- bne _08088266
- movs r0, #0x3c
- bl CheckKinstoneFused
- b _08088262
-_08088252:
- adds r0, r2, #0
- adds r0, #0x7c
- ldrb r0, [r0]
- cmp r0, #1
- bls _08088268
- movs r0, #0x12
- bl CheckGlobalFlag
-_08088262:
- cmp r0, #0
- beq _08088268
-_08088266:
- movs r4, #1
-_08088268:
- adds r0, r4, #0
- pop {r4, pc}
-.endif
-.endif
-
- thumb_func_start sub_0808826C
-sub_0808826C: @ 0x0808826C
- push {r4, r5, lr}
- adds r5, r0, #0
- movs r4, #0x64
-.ifdef EU
- adds r0, #0x7c
-.else
- adds r0, #0x80
-.endif
- ldrb r1, [r0]
- ldr r0, _080882A4 @ =gSave
- adds r0, #0xb0
- ldrb r0, [r0]
- subs r0, r1, r0
- muls r4, r0, r4
- adds r0, r4, #0
- bl __divsi3
- adds r4, r0, #0
- cmp r4, #0
- bne _08088298
- movs r0, #0x5f
- bl CheckLocalFlag
- cmp r0, #0
- bne _08088298
- movs r4, #1
-_08088298:
- adds r0, r5, #0
- adds r0, #0x83
- strb r4, [r0]
- subs r0, #1
- strb r4, [r0]
- pop {r4, r5, pc}
- .align 2, 0
-_080882A4: .4byte gSave
-
- thumb_func_start sub_080882A8
-sub_080882A8: @ 0x080882A8
- push {r4, r5, r6, lr}
- adds r6, r0, #0
- bl sub_08050384
- adds r0, r6, #0
- adds r0, #0x81
- ldrb r0, [r0]
- ldr r4, _080882F4 @ =gUnk_020227E8
- ldr r5, _080882F8 @ =0x00202020
- adds r1, r4, #0
- adds r2, r5, #0
- bl sub_08057044
- adds r0, r6, #0
- adds r0, #0x83
- ldrb r0, [r0]
-.ifndef EU
- lsls r0, r0, #0x18
- asrs r0, r0, #0x18
-.endif
- adds r4, #8
- adds r1, r4, #0
- adds r2, r5, #0
- bl sub_08057044
- movs r0, #0x80
- lsls r0, r0, #0x12
- ldrb r0, [r0, #7]
- cmp r0, #0
- bne _08088304
- ldr r1, _080882FC @ =gUnk_08120AE4
- ldrb r0, [r6, #0xb]
- lsls r0, r0, #1
- adds r0, r0, r1
- ldrh r0, [r0]
- ldr r1, _08088300 @ =gUnk_08120AB4
- bl sub_0805F46C
- b _08088314
- .align 2, 0
-_080882F4: .4byte gUnk_020227E8
-_080882F8: .4byte 0x00202020
-_080882FC: .4byte gUnk_08120AE4
-_08088300: .4byte gUnk_08120AB4
-_08088304:
- ldr r1, _0808831C @ =gUnk_08120AE4
- ldrb r0, [r6, #0xb]
- lsls r0, r0, #1
- adds r0, r0, r1
- ldrh r0, [r0]
- ldr r1, _08088320 @ =gUnk_08120ACC
- bl sub_0805F46C
-_08088314:
- ldr r1, _08088324 @ =gScreen
- movs r0, #1
- strh r0, [r1, #0xe]
- pop {r4, r5, r6, pc}
- .align 2, 0
-_0808831C: .4byte gUnk_08120AE4
-_08088320: .4byte gUnk_08120ACC
-_08088324: .4byte gScreen
-
- thumb_func_start sub_08088328
-sub_08088328: @ 0x08088328
-.ifdef EU
- push {r4, r5, r6, r7, lr}
- mov r7, r8
- push {r7}
- adds r6, r0, #0
- movs r4, #0x7f
-_08087CC6:
- bl Random
- adds r5, r0, #0
- ands r5, r4
- cmp r5, #0x63
- bhi _08087CC6
- adds r0, r6, #0
- adds r0, #0x81
- ldrb r0, [r0]
- rsbs r0, r0, #0
- bl sub_080542C0
- bl Random
- movs r1, #0x7f
- ands r1, r0
- adds r4, r1, #1
- adds r7, r4, #0
- adds r0, r6, #0
- bl sub_08088424
- adds r0, r6, #0
- adds r0, #0x83
- ldrb r0, [r0]
- cmp r5, r0
- bhs _08087D34EU
- movs r5, #0
- movs r0, #0x7e
- adds r0, r0, r6
- mov r8, r0
-_08087D02EU:
- cmp r5, #0
- bne _08087D72
- cmp r4, #0x88
- bls _08087D0C
- movs r4, #1
-_08087D0C:
- adds r0, r6, #0
- adds r1, r4, #0
- bl sub_08088160
- cmp r0, #0
- beq _08087D2C
- ldr r0, _08087D28 @ =gUnk_02002B0E
- adds r1, r4, #0
- bl ReadBit
- cmp r0, #0
- bne _08087D2C
- movs r5, #1
- b _08087D2E
- .align 2, 0
-_08087D28: .4byte gUnk_02002B0E
-_08087D2C:
- adds r4, #1
-_08087D2E:
- cmp r7, r4
- bne _08087D02EU
- b _08087D6E
-_08087D34EU:
- movs r5, #1
- movs r0, #0x7e
- adds r0, r0, r6
- mov r8, r0
-_08087D3C:
- cmp r5, #0
- beq _08087DA4
- cmp r4, #0x88
- bls _08087D46
- movs r4, #1
-_08087D46:
- adds r0, r6, #0
- adds r1, r4, #0
- bl sub_08088160
- cmp r0, #0
- beq _08087D68
- ldr r0, _08087D64 @ =gUnk_02002B0E
- adds r1, r4, #0
- bl ReadBit
- cmp r0, #0
- beq _08087D68
- movs r5, #0
- b _08087D6A
- .align 2, 0
-_08087D64: .4byte gUnk_02002B0E
-_08087D68:
- adds r4, #1
-_08087D6A:
- cmp r7, r4
- bne _08087D3C
-_08087D6E:
- cmp r5, #0
- beq _08087DA4
-_08087D72:
- ldr r0, _08087D94 @ =gSave
- adds r0, #0xb0
- ldrb r1, [r0]
- adds r1, #1
- strb r1, [r0]
- adds r0, r6, #0
- adds r0, #0x7c
- lsls r1, r1, #0x18
- lsrs r1, r1, #0x18
- ldrb r0, [r0]
- cmp r1, r0
- beq _08087D98
- movs r0, #7
- bl SetRoomFlag
- b _08087DA4
- .align 2, 0
-_08087D94: .4byte gSave
-_08087D98:
- movs r0, #0x5f
- bl SetLocalFlag
- movs r0, #8
- bl SetRoomFlag
-_08087DA4:
- mov r0, r8
- strb r4, [r0]
- ldr r0, [r6, #0x50]
- adds r0, #0x7e
- strb r4, [r0]
- pop {r3}
- mov r8, r3
- pop {r4, r5, r6, r7, pc}
-
-.else
- push {r4, r5, r6, r7, lr}
- mov r7, r8
- push {r7}
- adds r6, r0, #0
- movs r4, #0x7f
-_08088332:
- bl Random
- adds r5, r0, #0
- ands r5, r4
- cmp r5, #0x63
- bhi _08088332
- adds r0, r6, #0
- adds r0, #0x81
- ldrb r0, [r0]
- rsbs r0, r0, #0
- bl sub_080542C0
- bl Random
- movs r1, #0x7f
- ands r1, r0
- adds r4, r1, #1
- adds r7, r4, #0
- adds r0, r6, #0
- bl sub_08088424
- adds r0, r6, #0
- adds r0, #0x83
- ldrb r0, [r0]
- lsls r0, r0, #0x18
- asrs r0, r0, #0x18
- cmp r5, r0
- bhs _080883A4
- movs r5, #0
- movs r0, #0x7d
- adds r0, r0, r6
- mov r8, r0
-_08088372:
- cmp r5, #0
- bne _080883E2
- cmp r4, #0x88
- bls _0808837C
- movs r4, #1
-_0808837C:
- adds r0, r6, #0
- adds r1, r4, #0
- bl sub_08088160
- cmp r0, #0
- beq _0808839C
- ldr r0, _08088398 @ =gUnk_02002B0E
- adds r1, r4, #0
- bl ReadBit
- cmp r0, #0
- bne _0808839C
- movs r5, #1
- b _0808839E
- .align 2, 0
-_08088398: .4byte gUnk_02002B0E
-_0808839C:
- adds r4, #1
-_0808839E:
- cmp r7, r4
- bne _08088372
- b _080883DE
-_080883A4:
- movs r5, #1
- movs r0, #0x7d
- adds r0, r0, r6
- mov r8, r0
-_080883AC:
- cmp r5, #0
- beq _08088414
- cmp r4, #0x88
- bls _080883B6
- movs r4, #1
-_080883B6:
- adds r0, r6, #0
- adds r1, r4, #0
- bl sub_08088160
- cmp r0, #0
- beq _080883D8
- ldr r0, _080883D4 @ =gUnk_02002B0E
- adds r1, r4, #0
- bl ReadBit
- cmp r0, #0
- beq _080883D8
- movs r5, #0
- b _080883DA
- .align 2, 0
-_080883D4: .4byte gUnk_02002B0E
-_080883D8:
- adds r4, #1
-_080883DA:
- cmp r7, r4
- bne _080883AC
-_080883DE:
- cmp r5, #0
- beq _08088414
-_080883E2:
- ldr r0, _08088404 @ =gSave
- adds r0, #0xb0
- ldrb r1, [r0]
- adds r1, #1
- strb r1, [r0]
- adds r0, r6, #0
- adds r0, #0x80
- lsls r1, r1, #0x18
- lsrs r1, r1, #0x18
- ldrb r0, [r0]
- cmp r1, r0
- beq _08088408
- movs r0, #7
- bl SetRoomFlag
- b _08088414
- .align 2, 0
-_08088404: .4byte gSave
-_08088408:
- movs r0, #0x5f
- bl SetLocalFlag
- movs r0, #8
- bl SetRoomFlag
-_08088414:
- mov r0, r8
- strb r4, [r0]
- ldr r0, [r6, #0x50]
- adds r0, #0x7d
- strb r4, [r0]
- pop {r3}
- mov r8, r3
- pop {r4, r5, r6, r7, pc}
-.endif
-
- thumb_func_start sub_08088424
-sub_08088424: @ 0x08088424
- push {lr}
- adds r1, r0, #0
- ldr r0, _08088440 @ =gSave
- adds r0, #0xb0
- ldrb r0, [r0]
- cmp r0, #0x31
- bhi _08088444
- adds r1, #0x83
-.ifdef EU
- ldrb r0, [r1, #0x0]
- cmp r0, #0xe
- bhi _08088476
-.else
- movs r0, #0
- ldrsb r0, [r1, r0]
- cmp r0, #0xe
- bgt _08088476
-.endif
- movs r0, #0xf
- b _08088474
- .align 2, 0
-_08088440: .4byte gSave
-_08088444:
- cmp r0, #0x4f
- bhi _08088456
- adds r1, #0x83
-.ifdef EU
- ldrb r0, [r1, #0x0]
- cmp r0, #0xb
- bhi _08088476
-.else
- movs r0, #0
- ldrsb r0, [r1, r0]
- cmp r0, #0xb
- bgt _08088476
-.endif
- movs r0, #0xc
- b _08088474
-_08088456:
- cmp r0, #0x6d
- bhi _08088468
- adds r1, #0x83
-.ifdef EU
- ldrb r0, [r1, #0x0]
- cmp r0, #8
- bhi _08088476
-.else
- movs r0, #0
- ldrsb r0, [r1, r0]
- cmp r0, #8
- bgt _08088476
-.endif
- movs r0, #9
- b _08088474
-_08088468:
- adds r1, #0x83
-.ifdef EU
- ldrb r0, [r1, #0x0]
- cmp r0, #5
- bhi _08088476
-.else
- movs r0, #0
- ldrsb r0, [r1, r0]
- cmp r0, #5
- bgt _08088476
-.endif
- movs r0, #6
-_08088474:
- strb r0, [r1]
-_08088476:
- pop {pc}
-
- thumb_func_start sub_08088478
-sub_08088478: @ 0x08088478
- push {r4, lr}
- movs r4, #0
- movs r0, #8
- bl CheckRoomFlag
- cmp r0, #0
- bne _080884A4
- movs r0, #7
- bl CheckRoomFlag
- cmp r0, #0
- bne _0808849C
- ldr r1, _08088498 @ =0x00004322
- movs r4, #1
- b _080884D2
- .align 2, 0
-_08088498: .4byte 0x00004322
-_0808849C:
- ldr r1, _080884A0 @ =0x00004325
- b _080884D2
- .align 2, 0
-_080884A0: .4byte 0x00004325
-_080884A4:
- ldr r1, _080884C0 @ =gSave
- adds r0, r1, #0
- adds r0, #0xb0
- ldrb r0, [r0]
- cmp r0, #0x82
- beq _080884C8
- cmp r0, #0x88
- bne _080884D0
- adds r1, #0xb1
- movs r0, #0xff
- strb r0, [r1]
- ldr r1, _080884C4 @ =0x00004329
- b _080884D2
- .align 2, 0
-_080884C0: .4byte gSave
-_080884C4: .4byte 0x00004329
-_080884C8:
- ldrb r0, [r1, #6]
- ldr r1, _080884F4 @ =0x00004328
- cmp r0, #0
- beq _080884D2
-_080884D0:
- ldr r1, _080884F8 @ =0x00004327
-_080884D2:
- adds r0, r1, #0
- bl MessageFromTarget
- ldr r1, _080884FC @ =gMessage
- movs r0, #1
- strb r0, [r1, #6]
- movs r0, #0xc
- strb r0, [r1, #7]
- cmp r4, #0
- beq _080884EA
- movs r0, #5
- str r0, [r1, #0x10]
-_080884EA:
-.ifndef EU
- ldr r1, _08088500 @ =gPlayerEntity
- movs r0, #6
- strb r0, [r1, #0x14]
-.endif
- pop {r4, pc}
- .align 2, 0
-_080884F4: .4byte 0x00004328
-_080884F8: .4byte 0x00004327
-_080884FC: .4byte gMessage
-.ifndef EU
-_08088500: .4byte gPlayerEntity
-.endif
-
- thumb_func_start sub_08088504
-sub_08088504: @ 0x08088504
- push {lr}
- ldr r0, _08088518 @ =gSave
- adds r0, #0xb0
- ldrb r0, [r0]
- cmp r0, #0x82
- beq _08088520
- cmp r0, #0x88
- bne _08088528
- ldr r0, _0808851C @ =0x0000432F
- b _0808852A
- .align 2, 0
-_08088518: .4byte gSave
-_0808851C: .4byte 0x0000432F
-_08088520:
- ldr r0, _08088524 @ =0x00004314
- b _0808852A
- .align 2, 0
-_08088524: .4byte 0x00004314
-_08088528:
- ldr r0, _0808853C @ =0x00004311
-_0808852A:
- bl MessageFromTarget
- ldr r0, _08088540 @ =gMessage
- movs r1, #1
- strb r1, [r0, #6]
- movs r1, #0xc
- strb r1, [r0, #7]
- pop {pc}
- .align 2, 0
-_0808853C: .4byte 0x00004311
-_08088540: .4byte gMessage
-
- thumb_func_start sub_08088544
-sub_08088544: @ 0x08088544
- push {lr}
- ldr r0, _08088568 @ =gSave
- adds r0, #0xb0
- ldrb r0, [r0]
- ldr r1, _0808856C @ =0x00004315
- cmp r0, #0x82
- beq _08088554
- subs r1, #7
-_08088554:
- adds r0, r1, #0
- bl MessageFromTarget
- ldr r0, _08088570 @ =gMessage
- movs r1, #1
- strb r1, [r0, #6]
- movs r1, #0xc
- strb r1, [r0, #7]
- pop {pc}
- .align 2, 0
-_08088568: .4byte gSave
-_0808856C: .4byte 0x00004315
-_08088570: .4byte gMessage
-
- thumb_func_start sub_08088574
-sub_08088574: @ 0x08088574
- push {lr}
-.ifdef EU
- movs r0, #0xa
-.else
- movs r0, #9
-.endif
- bl CheckRoomFlag
- cmp r0, #0
- beq _08088594
- movs r0, #0x5f
- bl CheckLocalFlag
- ldr r1, _08088590 @ =0x0000430C
- cmp r0, #0
- beq _08088596
- adds r1, #7
- b _08088596
- .align 2, 0
-_08088590: .4byte 0x0000430C
-_08088594:
- ldr r1, _080885A8 @ =0x0000430B
-_08088596:
- adds r0, r1, #0
- bl MessageFromTarget
- ldr r0, _080885AC @ =gMessage
- movs r1, #1
- strb r1, [r0, #6]
- movs r1, #0xc
- strb r1, [r0, #7]
- pop {pc}
- .align 2, 0
-_080885A8: .4byte 0x0000430B
-_080885AC: .4byte gMessage
-
- thumb_func_start sub_080885B0
-sub_080885B0: @ 0x080885B0
- push {lr}
- movs r0, #8
- bl CheckRoomFlag
- cmp r0, #0
- bne _080885E8
- movs r0, #7
- bl CheckRoomFlag
- cmp r0, #0
- bne _0808860A
- movs r0, #5
- bl ModRupees
- ldr r0, _080885E0 @ =0x00004326
- bl MessageFromTarget
- ldr r1, _080885E4 @ =gMessage
- movs r0, #1
- strb r0, [r1, #6]
- movs r0, #0xc
- strb r0, [r1, #7]
- b _0808860A
- .align 2, 0
-_080885E0: .4byte 0x00004326
-_080885E4: .4byte gMessage
-_080885E8:
- ldr r1, _08088618 @ =gSave
- adds r0, r1, #0
- adds r0, #0xb1
- ldrb r0, [r0]
- cmp r0, #0
- beq _0808860A
- adds r1, #0xbb
- movs r0, #1
- strb r0, [r1]
- movs r0, #0x3e
- movs r1, #0
- movs r2, #0
- bl CreateItemEntity
- movs r0, #0x59
- bl SetGlobalFlag
-_0808860A:
- movs r0, #8
- bl ClearRoomFlag
- movs r0, #7
- bl ClearRoomFlag
- pop {pc}
- .align 2, 0
-_08088618: .4byte gSave
-
-.ifndef EU
- thumb_func_start sub_0808861C
-sub_0808861C: @ 0x0808861C
-.ifdef JP
- push {r4, lr}
- adds r4, r1, #0
- movs r0, #0xa8
- movs r1, #0x54
- movs r2, #0xc
- movs r3, #8
- bl CheckPlayerInRegion
- str r0, [r4, #0x14]
- ldr r0, _0808844C @ =0x03001160
- ldrb r0, [r0, #0x14]
- cmp r0, #0
- beq _0808843E
- movs r0, #0
- str r0, [r4, #0x14]
-_0808843E:
- ldr r2, _08088450 @ =0x02033280
- ldrb r1, [r2, #7]
- movs r0, #1
- orrs r0, r1
- strb r0, [r2, #7]
- pop {r4, pc}
- .align 2, 0
-_0808844C: .4byte 0x03001160
-_08088450: .4byte 0x02033280
-
-.else
- push {r4, lr}
- adds r4, r1, #0
- movs r0, #0xa8
- movs r1, #0x54
- movs r2, #0xc
- movs r3, #8
- bl CheckPlayerInRegion
- str r0, [r4, #0x14]
- ldr r1, _08088650 @ =gPlayerEntity
- ldrb r0, [r1, #0x14]
- cmp r0, #0
- bne _0808863E
- movs r2, #0x36
- ldrsh r0, [r1, r2]
- cmp r0, #0
- beq _08088642
-_0808863E:
- movs r0, #0
- str r0, [r4, #0x14]
-_08088642:
- ldr r2, _08088654 @ =gActiveScriptInfo
- ldrb r1, [r2, #7]
- movs r0, #1
- orrs r0, r1
- strb r0, [r2, #7]
- pop {r4, pc}
- .align 2, 0
-_08088650: .4byte gPlayerEntity
-_08088654: .4byte gActiveScriptInfo
-.endif
-
-.ifndef JP
- thumb_func_start sub_08088658
-sub_08088658: @ 0x08088658
- push {r4, lr}
- adds r4, r1, #0
- movs r0, #0x78
- movs r1, #0x78
- movs r2, #0x10
- movs r3, #8
- bl CheckPlayerInRegion
- str r0, [r4, #0x14]
- ldr r0, _08088684 @ =gPlayerEntity
- movs r1, #0x36
- ldrsh r0, [r0, r1]
- cmp r0, #0
- beq _08088678
- movs r0, #0
- str r0, [r4, #0x14]
-_08088678:
- ldr r2, _08088688 @ =gActiveScriptInfo
- ldrb r1, [r2, #7]
- movs r0, #1
- orrs r0, r1
- strb r0, [r2, #7]
- pop {r4, pc}
- .align 2, 0
-_08088684: .4byte gPlayerEntity
-_08088688: .4byte gActiveScriptInfo
-.else
-.ifdef DEMO_JP @ TODO deduplicate
- thumb_func_start sub_08088658
-sub_08088658: @ 0x08088658
- push {r4, lr}
- adds r4, r1, #0
- movs r0, #0x78
- movs r1, #0x78
- movs r2, #0x10
- movs r3, #8
- bl CheckPlayerInRegion
- str r0, [r4, #0x14]
- ldr r0, _08088684 @ =gPlayerEntity
- movs r1, #0x36
- ldrsh r0, [r0, r1]
- cmp r0, #0
- beq _08088678
- movs r0, #0
- str r0, [r4, #0x14]
-_08088678:
- ldr r2, _08088688 @ =gActiveScriptInfo
- ldrb r1, [r2, #7]
- movs r0, #1
- orrs r0, r1
- strb r0, [r2, #7]
- pop {r4, pc}
- .align 2, 0
-_08088684: .4byte gPlayerEntity
-_08088688: .4byte gActiveScriptInfo
-
-.endif
-.endif
-.endif
diff --git a/assets/assets.json b/assets/assets.json
index dc420540..87373fd9 100644
--- a/assets/assets.json
+++ b/assets/assets.json
@@ -42989,63 +42989,6 @@
"type": "animation"
},
{
- "path": "figurineDevice/gUnk_08120AA8.bin",
- "start": 1182376,
- "size": 4
- },
- {
- "path": "figurineDevice/gUnk_08120AAC.bin",
- "start": 1182380,
- "size": 8
- },
- {
- "path": "figurineDevice/gUnk_08120AB4_EU.bin",
- "variants": [
- "EU"
- ],
- "starts": {
- "EU": 1180156
- },
- "size": 24
- },
- {
- "path": "figurineDevice/gUnk_08120AB4_1_USA-JP-DEMO_USA-DEMO_JP.bin",
- "variants": [
- "USA",
- "JP",
- "DEMO_USA",
- "DEMO_JP"
- ],
- "start": 1182388,
- "size": 24
- },
- {
- "path": "figurineDevice/gUnk_08120ACC_EU.bin",
- "variants": [
- "EU"
- ],
- "starts": {
- "EU": 1180180
- },
- "size": 24
- },
- {
- "path": "figurineDevice/gUnk_08120ACC_1_USA-JP-DEMO_USA-DEMO_JP.bin",
- "variants": [
- "USA",
- "JP",
- "DEMO_USA",
- "DEMO_JP"
- ],
- "start": 1182412,
- "size": 24
- },
- {
- "path": "figurineDevice/gUnk_08120AE4.bin",
- "start": 1182436,
- "size": 4
- },
- {
"path": "animations/gSpriteAnimations_EyeSwitch_0.bin",
"start": 1182516,
"size": 17,
diff --git a/data/const/object/figurineDevice.s b/data/const/object/figurineDevice.s
deleted file mode 100644
index ae54cd04..00000000
--- a/data/const/object/figurineDevice.s
+++ /dev/null
@@ -1,37 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
- .align 2
-
-gUnk_08120A94:: @ 08120A94
- .4byte sub_08087BC4
- .4byte sub_08087CA8
- .4byte sub_08087D1C
- .4byte sub_08087DBC
- .4byte sub_08087E5C
-
-gUnk_08120AA8:: @ 08120AA8
- .incbin "figurineDevice/gUnk_08120AA8.bin"
-
-gUnk_08120AAC:: @ 08120AAC
- .incbin "figurineDevice/gUnk_08120AAC.bin"
-
-gUnk_08120AB4:: @ 08120AB4
-.ifdef EU
- @ TODO only small differences
- .incbin "figurineDevice/gUnk_08120AB4_EU.bin"
-.else
- .incbin "figurineDevice/gUnk_08120AB4_1_USA-JP-DEMO_USA-DEMO_JP.bin"
-.endif
-
-gUnk_08120ACC:: @ 08120ACC
-.ifdef EU
- @ TODO only small differences
- .incbin "figurineDevice/gUnk_08120ACC_EU.bin"
-.else
- .incbin "figurineDevice/gUnk_08120ACC_1_USA-JP-DEMO_USA-DEMO_JP.bin"
-.endif
-
-gUnk_08120AE4:: @ 08120AE4
- .incbin "figurineDevice/gUnk_08120AE4.bin"
diff --git a/include/fileselect.h b/include/fileselect.h
index eb37d549..627c8778 100644
--- a/include/fileselect.h
+++ b/include/fileselect.h
@@ -39,11 +39,6 @@ typedef struct {
u8 filler12[0x6];
} struct_080FC844;
-typedef struct {
- union SplitWord _0;
- union SplitWord _4;
-} struct_020227E8;
-
extern struct_020227E8 gUnk_020227E8[];
typedef struct {
diff --git a/include/flags.h b/include/flags.h
index b08a5908..f0e2056a 100644
--- a/include/flags.h
+++ b/include/flags.h
@@ -3,15 +3,15 @@
#include "global.h"
-u32 CheckFlags(u32);
-u32 CheckGlobalFlag(u32);
-u32 CheckGlobalFlags(u32, u32);
-extern u32 CheckLocalFlag(u32);
-extern u32 CheckLocalFlagByBank(u32, u32);
-u32 CheckLocalFlags(u32, u32);
-u32 CheckLocalFlagsByBank(u32, u32, u32);
-u32 CheckRoomFlag(u32);
-u32 CheckRoomFlags(u32, u32);
+bool32 CheckFlags(u32);
+bool32 CheckGlobalFlag(u32);
+bool32 CheckGlobalFlags(u32, u32);
+extern bool32 CheckLocalFlag(u32);
+extern bool32 CheckLocalFlagByBank(u32, u32);
+bool32 CheckLocalFlags(u32, u32);
+bool32 CheckLocalFlagsByBank(u32, u32, u32);
+bool32 CheckRoomFlag(u32);
+bool32 CheckRoomFlags(u32, u32);
void ClearFlag(u32);
void ClearGlobalFlag(u32);
diff --git a/include/functions.h b/include/functions.h
index 2273b938..4766fbec 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -114,6 +114,7 @@ extern u32 sub_080542AC(u32);
extern void sub_08054564();
extern void sub_08054570(void);
extern s32 sub_08056338(void);
+extern void sub_08057044(u32, struct_020227E8*, u32);
extern void sub_080575C8(u32);
extern void sub_08057688(void);
extern void sub_080580B0(u32);
diff --git a/include/object.h b/include/object.h
index 83933d73..65575e33 100644
--- a/include/object.h
+++ b/include/object.h
@@ -260,7 +260,7 @@ void Object1E(Entity*);
void Object1F(Entity*);
void Object20(Entity*);
void Object21(Entity*);
-void FigurineDevice(Entity*);
+void FigurineDevice();
void EyeSwitch(Entity*);
void PressurePlate();
void BigBarrel(Entity*);
diff --git a/include/structures.h b/include/structures.h
index eba95243..a9c77886 100644
--- a/include/structures.h
+++ b/include/structures.h
@@ -146,4 +146,9 @@ typedef struct {
} OAMControls;
extern OAMControls gOAMControls;
+typedef struct {
+ union SplitWord _0;
+ union SplitWord _4;
+} struct_020227E8;
+
#endif
diff --git a/linker.ld b/linker.ld
index 3d0e875b..87fab217 100644
--- a/linker.ld
+++ b/linker.ld
@@ -676,7 +676,7 @@ SECTIONS {
asm/object/object1F.o(.text);
asm/object/object20.o(.text);
asm/object/object21.o(.text);
- asm/object/figurineDevice.o(.text);
+ src/object/figurineDevice.o(.text);
asm/object/eyeSwitch.o(.text);
src/object/pressurePlate.o(.text);
asm/object/bigBarrel.o(.text);
@@ -1400,7 +1400,7 @@ SECTIONS {
data/const/object/object20.o(.rodata);
data/animations/object/object20.o(.rodata);
data/const/object/object21.o(.rodata);
- data/const/object/figurineDevice.o(.rodata);
+ src/object/figurineDevice.o(.rodata);
data/animations/object/figurineDevice.o(.rodata);
data/const/object/eyeSwitch.o(.rodata);
data/animations/object/eyeSwitch.o(.rodata);
diff --git a/src/menu/figurine_menu.c b/src/menu/figurine_menu.c
index 20dcd0f4..4d9c30ce 100644
--- a/src/menu/figurine_menu.c
+++ b/src/menu/figurine_menu.c
@@ -449,8 +449,7 @@ const struct_08128184 gUnk_08128184 = {
0xffu,
};
-extern u8 gUnk_020227E8[];
-extern void sub_08057044(u32, u8*, u8*);
+extern struct_020227E8 gUnk_020227E8[];
extern void sub_0805F46C(u32, const struct_0812816C*);
void sub_080A4BA0(u32 arg1, u32 arg2) {
@@ -478,7 +477,7 @@ void sub_080A4BA0(u32 arg1, u32 arg2) {
if (r5 <= 0 || tmp < r5) {
r5 = -1;
} else {
- sub_08057044(r5, gUnk_020227E8, (void*)0x303030);
+ sub_08057044(r5, gUnk_020227E8, 0x303030);
if (sub_080A4948(r5) == 0) {
r5 += 0x8000;
} else {
diff --git a/src/message.c b/src/message.c
index b0219506..6f2ba45b 100644
--- a/src/message.c
+++ b/src/message.c
@@ -845,10 +845,10 @@ u32 sub_08056FEC(u32 this, u8* param_2) {
return iVar4;
}
-void sub_08057044(u32 a1, u32* a2, u32 a3) {
+void sub_08057044(u32 a1, struct_020227E8* a2, u32 a3) {
u32 z[2];
u32 tmp = sub_08056FEC(a1, (u8*)z);
u32 first = z[0];
first <<= 8 * (3 - tmp);
- *a2 = first | a3;
+ a2->_0.WORD = first | a3;
}
diff --git a/src/npc/phonograph.c b/src/npc/phonograph.c
index 3627a725..dd731979 100644
--- a/src/npc/phonograph.c
+++ b/src/npc/phonograph.c
@@ -12,7 +12,6 @@ void sub_0806EABC(Entity* this);
void sub_0806EABC(Entity* this, u32 param);
#endif
-extern void sub_08057044(u32, struct_020227E8*, u32);
extern u32 gUnk_081146B8;
extern s8 gUnk_081145E4[];
diff --git a/src/object/figurineDevice.c b/src/object/figurineDevice.c
new file mode 100644
index 00000000..7e910f59
--- /dev/null
+++ b/src/object/figurineDevice.c
@@ -0,0 +1,578 @@
+/**
+ * @file figurineDevice.c
+ * @ingroup Objects
+ *
+ * @brief Figurine Device object
+ */
+
+#define NENT_DEPRECATED
+#include "global.h"
+#include "object.h"
+#include "functions.h"
+#include "message.h"
+#include "fileselect.h"
+#include "screen.h"
+#include "item.h"
+
+typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u8 unk_68[0x10];
+ /*0x78*/ u16 unk_78;
+ /*0x7a*/ u8 unk_7a;
+ /*0x7b*/ u8 unk_7b;
+#ifdef EU
+ /*0x7c*/ u8 unk_80;
+ /*0x7d*/ u8 unk_7c;
+ /*0x7e*/ u8 unk_7d;
+ /*0x7f*/ u8 unk_7e[2];
+#else
+ /*0x7c*/ u8 unk_7c;
+ /*0x7d*/ u8 unk_7d;
+ /*0x7e*/ u8 unk_7e[2];
+ /*0x80*/ u8 unk_80;
+#endif
+ /*0x81*/ u8 unk_81;
+ /*0x82*/ s8 unk_82;
+#ifdef EU
+ /*0x83*/ u8 unk_83;
+#else
+ /*0x83*/ s8 unk_83;
+#endif
+} FigurineDeviceEntity;
+
+extern void sub_080542C0(s32);
+extern u8 gUnk_020227F0;
+typedef struct {
+ u32 unk_0;
+ u16 unk_4;
+ u8 unk_6;
+ u8 unk_7;
+} struct_080FC3E4;
+extern const struct_080FC3E4 gUnk_080FC3E4[];
+
+void sub_0808804C(FigurineDeviceEntity*);
+void sub_08087F58(FigurineDeviceEntity*);
+void sub_08088328(FigurineDeviceEntity*);
+void sub_0808826C(FigurineDeviceEntity*);
+void sub_080882A8(FigurineDeviceEntity*);
+void sub_080880D8(FigurineDeviceEntity*);
+void sub_08087F94(FigurineDeviceEntity*, s32);
+void sub_08088034(FigurineDeviceEntity*);
+bool32 sub_08088160(FigurineDeviceEntity*, s32);
+void sub_08088424(FigurineDeviceEntity*);
+void FigurineDevice_Init(FigurineDeviceEntity*);
+void FigurineDevice_Action1(FigurineDeviceEntity*);
+void FigurineDevice_Action2(FigurineDeviceEntity*);
+void FigurineDevice_Action3(FigurineDeviceEntity*);
+void FigurineDevice_Action4(FigurineDeviceEntity*);
+
+void FigurineDevice(FigurineDeviceEntity* this) {
+
+ static void (*const FigurineDevice_Actions[])(FigurineDeviceEntity*) = {
+ FigurineDevice_Init, FigurineDevice_Action1, FigurineDevice_Action2,
+ FigurineDevice_Action3, FigurineDevice_Action4,
+ };
+
+ FigurineDevice_Actions[super->action](this);
+}
+
+void FigurineDevice_Init(FigurineDeviceEntity* this) {
+ Entity* entity;
+
+ super->action = super->type + 1;
+ switch (super->type) {
+ case 0:
+ if (CheckLocalFlag(0x5e)) {
+ this->unk_7a = 1;
+ sub_080787B4(super);
+ } else {
+ this->unk_7a = 0;
+ }
+ super->spriteRendering.b3 = 3;
+ super->spritePriority.b0 = 7;
+ this->unk_78 = COORD_TO_TILE(super);
+ sub_08087F58(this);
+ break;
+ case 1:
+ entity = CreateObject(FIGURINE_DEVICE, 3, 0);
+ if (entity != NULL) {
+ entity->parent = super;
+ super->child = entity;
+ }
+ this->unk_7a = 0;
+ super->spriteRendering.b3 = 3;
+ super->spritePriority.b0 = 7;
+ this->unk_78 = COORD_TO_TILE(super);
+ sub_08087F58(this);
+ break;
+
+ case 2:
+ this->unk_7a = 0;
+ SetDefaultPriority(super, 7);
+ InitializeAnimation(super, 1);
+ break;
+ case 3:
+ super->actionDelay = 0x1e;
+ super->field_0xf = 0;
+ this->unk_81 = 1;
+ this->unk_7a = 0;
+ this->unk_7b = 0;
+ this->unk_80 = 0;
+ sub_0808804C(this);
+ SetDefaultPriority(super, 6);
+ break;
+ }
+}
+
+void FigurineDevice_Action1(FigurineDeviceEntity* this) {
+ switch (this->unk_7a) {
+ case 0:
+ this->unk_7a = 1;
+ sub_080787B4(super);
+ break;
+ case 1:
+ if (super->interactType != 0) {
+ super->interactType = 0;
+ ResetPlayerAnimationAndAction();
+ if (CheckLocalFlag(0x5e)) {
+ this->unk_7a = 2;
+ SetRoomFlag(2);
+ MenuFadeIn(7, 0xff);
+ } else {
+ SetRoomFlag(5);
+ }
+ }
+ break;
+ case 2:
+ default:
+ if (CheckRoomFlag(2) == 0) {
+ this->unk_7a = 1;
+ sub_080787B4(super);
+ }
+ break;
+ }
+}
+
+void FigurineDevice_Action2(FigurineDeviceEntity* this) {
+ Entity* entity;
+ const u8* ptr;
+
+ switch (this->unk_7a) {
+ case 0:
+ if (CheckRoomFlag(0)) {
+ if (CheckLocalFlag(0x5e)) {
+ this->unk_7a = 1;
+ } else {
+ this->unk_7a = 2;
+ }
+ }
+ break;
+ case 2:
+ SetLocalFlag(0x5e);
+ case 1:
+ this->unk_7a = 0;
+ sub_08088328((FigurineDeviceEntity*)super->child);
+ ClearRoomFlag(0);
+ entity = CreateObject(FIGURINE_DEVICE, 2, 0);
+ if (entity != NULL) {
+ entity->parent = super;
+ entity->field_0xf = this->unk_7d;
+ ptr = (u8*)gUnk_080FC3E4; // FIXME use struct
+ entity->type2 = ptr[(entity->field_0xf << 3) + 7];
+ PositionRelative(super, entity, 0x80000, 0x70000);
+ }
+ EnqueueSFX(SFX_111);
+ break;
+ }
+}
+
+void FigurineDevice_Action3(FigurineDeviceEntity* this) {
+ static const u8 gUnk_08120AA8[] = {
+ 0,
+ 1,
+ 2,
+ 4,
+ };
+
+ GetNextFrame(super);
+ switch (this->unk_7a) {
+ case 0:
+ if ((super->frame & 0x80) != 0) {
+ this->unk_7a = 1;
+ super->actionDelay = 0x28;
+ ChangeObjPalette(super, gUnk_08120AA8[super->type2]);
+ InitializeAnimation(super, 2);
+ SoundReq(SFX_110);
+ }
+ break;
+
+ case 1:
+ if (((super->frame & 0x80) != 0) && (--super->actionDelay == 0)) {
+ this->unk_7a = 2;
+ SetRoomFlag(2);
+ MenuFadeIn(7, super->field_0xf);
+ }
+ break;
+ case 2:
+ default:
+ if (!CheckRoomFlag(2)) {
+ super->spriteSettings.draw = 0;
+#ifdef EU
+ ClearRoomFlag(9);
+#else
+ ClearRoomFlag(4);
+#endif
+ DeleteThisEntity();
+ }
+ break;
+ }
+}
+
+void FigurineDevice_Action4(FigurineDeviceEntity* this) {
+ u8 old_81;
+ s32 tmp;
+
+ switch (this->unk_7a) {
+ case 0:
+ if (this->unk_7b == 4) {
+ if (!CheckRoomFlag(1)) {
+ return;
+ }
+ this->unk_7a = 1;
+ this->unk_81 = 1;
+ ClearRoomFlag(1);
+ sub_0808826C(this);
+ sub_080882A8(this);
+ } else {
+ sub_080880D8(this);
+ }
+ break;
+ case 1:
+ if (super->actionDelay != 0) {
+ super->actionDelay--;
+ }
+ if ((gInput.newKeys & 1) != 0) {
+ SoundReq(SFX_TEXTBOX_SELECT);
+ this->unk_7a = 2;
+ super->actionDelay = 0x3c;
+ sub_08050384();
+ return;
+ }
+ old_81 = this->unk_81;
+#ifndef EU
+ if ((gInput.heldKeys & 0x100) != 0) {
+ tmp = 10;
+ } else {
+ tmp = 1;
+ }
+#ifdef JP
+ switch (gInput.unk4) {
+#else
+ switch (gInput.unk4 & 0xfffffeff) {
+#endif
+ case 0x40:
+ sub_08087F94(this, tmp);
+ break;
+ case 0x80:
+ sub_08087F94(this, -tmp);
+ break;
+ }
+ if (old_81 != this->unk_81) {
+ sub_080882A8(this);
+ }
+#else
+ switch (gInput.unk4) {
+ case 0x40:
+ sub_08087F94(this, 1);
+ break;
+ case 0x80:
+ sub_08087F94(this, -1);
+ break;
+ }
+ if (old_81 != this->unk_81) {
+ sub_080882A8(this);
+ }
+#endif
+ break;
+ case 2:
+ this->unk_7a = 0;
+ this->unk_7b = 4;
+ SetRoomFlag(3);
+ MessageFromTarget(0x431a);
+#ifndef EU
+ gMessage.textWindowPosX = 1;
+ gMessage.textWindowPosY = 0xc;
+#endif
+ gMessage.field_0x10 = this->unk_81;
+ break;
+ }
+}
+
+void sub_08087F58(FigurineDeviceEntity* this) {
+ switch (super->type) {
+ case 0:
+ case 1:
+ SetTile(0x4022, this->unk_78 - 1, 1);
+ SetTile(0x4022, this->unk_78, 1);
+ SetTile(0x4022, this->unk_78 + 1, 1);
+ break;
+ }
+}
+
+ASM_FUNC("asm/non_matching/figurineDevice/sub_08087F94.inc", void sub_08087F94(FigurineDeviceEntity* this, s32 param_2))
+
+void sub_08088034(FigurineDeviceEntity* this) {
+ if (super->actionDelay == 0) {
+ super->actionDelay = 0x14;
+ SoundReq(SFX_MENU_ERROR);
+ }
+}
+
+void sub_0808804C(FigurineDeviceEntity* this) {
+ u8 result = 0;
+ if (gSave.unk6 != 0) {
+ result = 9;
+ } else if (CheckGlobalFlag(LV5_CLEAR)) {
+ result = 7;
+ } else if (CheckLocalFlagByBank(0x800, 0x77)) {
+ result = 6;
+ } else if (CheckLocalFlagByBank(0x300, 0x32)) {
+ result = 5;
+ } else if (CheckGlobalFlag(LV4_CLEAR)) {
+ result = 4;
+ } else if (CheckGlobalFlag(LV3_CLEAR)) {
+ result = 3;
+#if defined(JP) || defined(DEMO_JP) || defined(EU)
+ } else if (CheckLocalFlagByBank(0x100, 0x9b)) {
+#else
+ } else if (CheckLocalFlagByBank(0x100, 0x9c)) {
+#endif
+ result = 2;
+ } else if (CheckGlobalFlag(LV2_CLEAR)) {
+ result = 1;
+ }
+ this->unk_7c = result;
+}
+
+void sub_080880D8(FigurineDeviceEntity* this) {
+ static const u8 gUnk_08120AAC[] = {
+ 1, 37, 68, 100, 137, 0, 0, 0,
+ };
+
+ const u8* ptr = &gUnk_08120AAC[this->unk_7b];
+ u32 it = ptr[0];
+ while (it < ptr[1]) {
+ if (sub_08088160(this, it)) {
+ this->unk_80++;
+ }
+ it++;
+ }
+ if (++this->unk_7b == 4) {
+ if (gSave.field_0x9[0] != this->unk_80) {
+ if (gSave.field_0x9[0] != 0) {
+ SetRoomFlag(6);
+ }
+ gSave.field_0x9[0] = this->unk_80;
+ }
+ if (CheckLocalFlag(0x5f) && (this->unk_80 != gSave.stats.filler[0])) {
+ ClearLocalFlag(0x5f);
+ }
+ }
+}
+
+ASM_FUNC("asm/non_matching/figurineDevice/sub_08088160.inc",
+ bool32 sub_08088160(FigurineDeviceEntity* this, s32 param_2))
+
+void sub_0808826C(FigurineDeviceEntity* this) {
+ s32 tmp = 0x64;
+ tmp *= ((this->unk_80 - gSave.stats.filler[0]));
+ tmp = tmp / this->unk_80;
+ if (tmp == 0 && !CheckLocalFlag(0x5f)) {
+ tmp = 1;
+ }
+ this->unk_83 = tmp;
+ this->unk_82 = this->unk_83;
+}
+
+void sub_080882A8(FigurineDeviceEntity* this) {
+#ifdef EU
+ static const u8 gUnk_08120AB4[] = {
+ 206, 79, 3, 2, 0, 208, 0, 6, 0, 13, 0, 2, 0, 0, 0, 0, 128, 240, 104, 56, 2, 0, 1, 0,
+ };
+ static const u8 gUnk_08120ACC[] = {
+ 206, 79, 3, 2, 0, 208, 0, 6, 0, 13, 0, 2, 0, 0, 0, 0, 128, 240, 208, 59, 2, 0, 1, 0,
+ };
+#else
+ static const u8 gUnk_08120AB4[] = {
+ 206, 79, 3, 2, 0, 208, 0, 6, 0, 13, 0, 2, 0, 0, 0, 0, 128, 240, 104, 136, 2, 0, 1, 0,
+ };
+ static const u8 gUnk_08120ACC[] = {
+ 206, 79, 3, 2, 0, 208, 0, 6, 0, 13, 0, 2, 0, 0, 0, 0, 128, 240, 208, 139, 2, 0, 1, 0,
+ };
+#endif
+ static const u16 gUnk_08120AE4[] = { 0x4318, 0x4319 };
+ u8* ptr;
+ sub_08050384();
+ sub_08057044(this->unk_81, gUnk_020227E8, 0x202020);
+ sub_08057044(this->unk_83, &gUnk_020227E8[1], 0x202020);
+ ptr = (u8*)0x02000000;
+ if (ptr[7] == 0) {
+ sub_0805F46C((u32)gUnk_08120AE4[super->type2], &gUnk_08120AB4);
+ } else {
+ sub_0805F46C((u32)gUnk_08120AE4[super->type2], &gUnk_08120ACC);
+ }
+ gScreen.bg0.updated = 1;
+}
+
+ASM_FUNC("asm/non_matching/figurineDevice/sub_08088328.inc", void sub_08088328(FigurineDeviceEntity* this))
+
+void sub_08088424(FigurineDeviceEntity* this) {
+ if (gSave.stats.filler[0] < 0x32) {
+ if (this->unk_83 < 0x0f) {
+ this->unk_83 = 0x0f;
+ }
+ } else if (gSave.stats.filler[0] < 0x50) {
+ if (this->unk_83 < 0xc) {
+ this->unk_83 = 0xc;
+ }
+ } else if (gSave.stats.filler[0] < 0x6e) {
+ if (this->unk_83 < 9) {
+ this->unk_83 = 9;
+ }
+ } else {
+ if (this->unk_83 < 6) {
+ this->unk_83 = 6;
+ }
+ }
+}
+
+void sub_08088478(void) {
+ u32 messageIndex;
+ bool32 set0x10 = FALSE;
+ if (!CheckRoomFlag(8)) {
+ if (!CheckRoomFlag(7)) {
+ messageIndex = 0x4322;
+ set0x10 = TRUE;
+ } else {
+ messageIndex = 0x4325;
+ }
+ } else {
+ switch (gSave.stats.filler[0]) {
+ case 0x88:
+ gSave.stats.filler[1] = 0xff;
+ messageIndex = 0x4329;
+ break;
+ case 0x82:
+ if (gSave.unk6 != 0) {
+ messageIndex = 0x4327;
+ } else {
+ messageIndex = 0x4328;
+ }
+ break;
+ default:
+ messageIndex = 0x4327;
+ }
+ }
+ MessageFromTarget(messageIndex);
+ gMessage.textWindowPosX = 1;
+ gMessage.textWindowPosY = 0xc;
+ if (set0x10) {
+ gMessage.field_0x10 = 5;
+ }
+#ifndef EU
+ gPlayerEntity.animationState = 6;
+#endif
+}
+
+void sub_08088504(void) {
+ u32 index;
+ switch (gSave.stats.filler[0]) {
+ case 0x88:
+ index = 0x432f;
+ break;
+ case 0x82:
+ index = 0x4314;
+ break;
+ default:
+ index = 0x4311;
+ break;
+ }
+ MessageFromTarget(index);
+ gMessage.textWindowPosX = 1;
+ gMessage.textWindowPosY = 0xc;
+}
+
+void sub_08088544(void) {
+ u32 index;
+ if (gSave.stats.filler[0] != 0x82) {
+ index = 0x430e;
+ } else {
+ index = 0x4315;
+ }
+ MessageFromTarget(index);
+ gMessage.textWindowPosX = 1;
+ gMessage.textWindowPosY = 0xc;
+}
+
+void sub_08088574(void) {
+ u32 index;
+#ifdef EU
+ if (CheckRoomFlag(0xa)) {
+#else
+ if (CheckRoomFlag(9)) {
+#endif
+ if (CheckLocalFlag(0x5f)) {
+ index = 0x4313;
+ } else {
+ index = 0x430c;
+ }
+ } else {
+ index = 0x430b;
+ }
+ MessageFromTarget(index);
+ gMessage.textWindowPosX = 1;
+ gMessage.textWindowPosY = 0xc;
+}
+
+void sub_080885B0(void) {
+ if (!CheckRoomFlag(8)) {
+ if (!CheckRoomFlag(7)) {
+ ModRupees(5);
+ MessageFromTarget(0x4326);
+ gMessage.textWindowPosX = 1;
+ gMessage.textWindowPosY = 0xc;
+ }
+ } else if (gSave.stats.filler[1] != 0) {
+ // GOT ALL THEM FIGURINES (:
+ gSave.stats.hasAllFigurines = 1;
+ CreateItemEntity(ITEM_QST_CARLOV_MEDAL, 0, 0);
+ SetGlobalFlag(FIGURE_ALLCOMP);
+ }
+ ClearRoomFlag(8);
+ ClearRoomFlag(7);
+}
+
+#ifndef EU
+void sub_0808861C(FigurineDeviceEntity* this, ScriptExecutionContext* context) {
+ context->condition = CheckPlayerInRegion(0xa8, 0x54, 0xc, 8);
+#ifdef JP
+ if ((gPlayerEntity.animationState != 0)) {
+#else
+ if ((gPlayerEntity.animationState != 0) || (gPlayerEntity.z.HALF.HI != 0)) {
+#endif
+ context->condition = 0;
+ }
+ gActiveScriptInfo.flags |= 1;
+}
+
+#if !defined(JP)
+void sub_08088658(FigurineDeviceEntity* this, ScriptExecutionContext* context) {
+ context->condition = CheckPlayerInRegion(0x78, 0x78, 0x10, 8);
+ if (gPlayerEntity.z.HALF.HI != 0) {
+ context->condition = 0;
+ }
+ gActiveScriptInfo.flags |= 1;
+}
+#endif
+
+#endif