From eda6ecfb9a70fb287fa073ccdcf347226fd7d353 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sun, 27 Feb 2022 00:03:05 +0100 Subject: [PATCH] Decompile FigurineDevice --- asm/non_matching/ForceEquipItem.inc | 44 - .../figurineDevice/sub_08087F94.inc | 265 ++ .../figurineDevice/sub_08088160.inc | 365 +++ .../figurineDevice/sub_08088328.inc | 257 ++ asm/object/figurineDevice.s | 2231 ----------------- assets/assets.json | 57 - data/const/object/figurineDevice.s | 37 - include/fileselect.h | 5 - include/flags.h | 18 +- include/functions.h | 1 + include/object.h | 2 +- include/structures.h | 5 + linker.ld | 4 +- src/menu/figurine_menu.c | 5 +- src/message.c | 4 +- src/npc/phonograph.c | 1 - src/object/figurineDevice.c | 578 +++++ 17 files changed, 1487 insertions(+), 2392 deletions(-) delete mode 100644 asm/non_matching/ForceEquipItem.inc create mode 100644 asm/non_matching/figurineDevice/sub_08087F94.inc create mode 100644 asm/non_matching/figurineDevice/sub_08088160.inc create mode 100644 asm/non_matching/figurineDevice/sub_08088328.inc delete mode 100644 asm/object/figurineDevice.s delete mode 100644 data/const/object/figurineDevice.s create mode 100644 src/object/figurineDevice.c 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 @@ -42988,63 +42988,6 @@ "size": 15, "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, 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