diff --git a/asm/cloudPiranha.s b/asm/cloudPiranha.s index 9dd83b3c..b5829666 100644 --- a/asm/cloudPiranha.s +++ b/asm/cloudPiranha.s @@ -383,7 +383,7 @@ sub_080386B8: @ 0x080386B8 bl EnqueueSFX adds r0, r4, #0 movs r1, #0x70 - bl sub_0801D2B4 + bl ChangeObjPalette ldrb r1, [r4, #0x15] lsrs r1, r1, #2 adds r0, r4, #0 @@ -470,7 +470,7 @@ sub_08038754: @ 0x08038754 bl EnqueueSFX adds r0, r4, #0 movs r1, #0x71 - bl sub_0801D2B4 + bl ChangeObjPalette ldrb r2, [r4, #0x15] movs r0, #0xf ands r0, r2 diff --git a/asm/code_080011C4.s b/asm/code_080011C4.s index 4a8cd46a..a08f6287 100644 --- a/asm/code_080011C4.s +++ b/asm/code_080011C4.s @@ -1443,8 +1443,8 @@ _080028EE: _080028F2: bx lr - thumb_func_start sub_080028F4 -sub_080028F4: @ 0x080028F4 + thumb_func_start GetRandomByWeight +GetRandomByWeight: @ 0x080028F4 push {r4, lr} adds r4, r0, #0 bl Random diff --git a/asm/code_0801CEC0.s b/asm/code_0801CEC0.s index cd2bb1f4..e7fbc193 100644 --- a/asm/code_0801CEC0.s +++ b/asm/code_0801CEC0.s @@ -433,8 +433,8 @@ _0801D2AE: .align 2, 0 _0801D2B0: .4byte gPaletteList - thumb_func_start sub_0801D2B4 -sub_0801D2B4: @ 0x0801D2B4 + thumb_func_start ChangeObjPalette +ChangeObjPalette: @ 0x0801D2B4 push {r4, r5, lr} adds r4, r0, #0 adds r5, r1, #0 diff --git a/asm/code_08054C04.s b/asm/code_08054C04.s index c10cd693..8cf1ccc5 100644 --- a/asm/code_08054C04.s +++ b/asm/code_08054C04.s @@ -446,7 +446,7 @@ sub_08054EFC: @ 0x08054EFC subs r0, #0x10 strh r0, [r1, #0x32] adds r0, r4, #0 - bl sub_0806FAD8 + bl ResolveEntityBelow _08054F54: movs r0, #0xfd bl SoundReq diff --git a/asm/code_08078778.s b/asm/code_08078778.s index c1242ad4..52fad31a 100644 --- a/asm/code_08078778.s +++ b/asm/code_08078778.s @@ -3204,7 +3204,7 @@ _0807A06A: beq _0807A084 strb r1, [r0] ldr r0, _0807A090 @ =gPlayerEntity - bl sub_0801D2B4 + bl ChangeObjPalette _0807A084: pop {pc} .align 2, 0 diff --git a/asm/figurineDevice.s b/asm/figurineDevice.s index fa20a78c..988d7aac 100644 --- a/asm/figurineDevice.s +++ b/asm/figurineDevice.s @@ -311,7 +311,7 @@ sub_08087DBC: @ 0x08087DBC adds r0, r0, r1 ldrb r1, [r0] adds r0, r4, #0 - bl sub_0801D2B4 + bl ChangeObjPalette adds r0, r4, #0 movs r1, #2 bl InitializeAnimation diff --git a/asm/furniture.s b/asm/furniture.s index 88a5b769..9b2cf28d 100644 --- a/asm/furniture.s +++ b/asm/furniture.s @@ -242,7 +242,7 @@ _0809075C: bne _080907C8 adds r0, r7, #0 movs r1, #0x7e - bl sub_0801D2B4 + bl ChangeObjPalette b _080907C8 .align 2, 0 _08090778: .4byte gRoomControls @@ -1062,7 +1062,7 @@ sub_08090E4C: @ 0x08090E4C lsls r1, r1, #2 adds r1, r1, r2 ldr r1, [r1] - bl sub_0801D2B4 + bl ChangeObjPalette pop {pc} .align 2, 0 _08090E60: .4byte gUnk_08122244 diff --git a/asm/giantTwig.s b/asm/giantTwig.s index c4ddf8e7..18e680b7 100644 --- a/asm/giantTwig.s +++ b/asm/giantTwig.s @@ -295,7 +295,7 @@ _0809396C: bl sub_08093984 adds r0, r5, #0 movs r1, #0x7b - bl sub_0801D2B4 + bl ChangeObjPalette pop {r4, r5, r6, pc} .align 2, 0 _0809397C: .4byte gRoomControls @@ -377,7 +377,7 @@ sub_080939C0: @ 0x080939C0 bl sub_08093A1C adds r0, r4, #0 movs r1, #0x7a - bl sub_0801D2B4 + bl ChangeObjPalette pop {r4, r5, pc} .align 2, 0 _08093A14: .4byte gRoomControls diff --git a/asm/gleerok.s b/asm/gleerok.s index db1ba73b..a5cc71d5 100644 --- a/asm/gleerok.s +++ b/asm/gleerok.s @@ -3749,7 +3749,7 @@ sub_0802EB9C: @ 0x0802EB9C push {r4, lr} adds r4, r0, #0 ldr r0, _0802EBBC @ =gUnk_080CD850 - bl sub_080028F4 + bl GetRandomByWeight ldr r1, _0802EBC0 @ =gUnk_080CD854 adds r0, r0, r1 ldrb r1, [r0] @@ -3782,7 +3782,7 @@ sub_0802EBC4: @ 0x0802EBC4 lsls r0, r0, #2 adds r0, r0, r1 ldr r0, [r0] - bl sub_080028F4 + bl GetRandomByWeight ldr r2, _0802EC1C @ =gUnk_080CD878 ldrb r1, [r5] lsls r1, r1, #2 diff --git a/asm/macroDecorations.s b/asm/macroDecorations.s index 0d6cd142..562923e6 100644 --- a/asm/macroDecorations.s +++ b/asm/macroDecorations.s @@ -64,7 +64,7 @@ _08097E1C: adds r1, r0, #0 adds r1, #0xb adds r0, r4, #0 - bl sub_0801D2B4 + bl ChangeObjPalette b _08097EA2 _08097E46: ldrb r0, [r4, #0xb] @@ -83,7 +83,7 @@ _08097E5C: bne _08097E9C adds r0, r4, #0 movs r1, #0xd - bl sub_0801D2B4 + bl ChangeObjPalette _08097E68: ldrb r0, [r4, #0x1b] movs r1, #0x3f @@ -110,7 +110,7 @@ _08097E76: strb r0, [r2] adds r0, r4, #0 movs r1, #0xb - bl sub_0801D2B4 + bl ChangeObjPalette _08097E9C: adds r0, r4, #0 bl sub_08097F34 diff --git a/asm/macroPlayer.s b/asm/macroPlayer.s index c7c6bf90..26025e39 100644 --- a/asm/macroPlayer.s +++ b/asm/macroPlayer.s @@ -90,7 +90,7 @@ _0808CB70: movs r5, #0 str r5, [r4, #0x34] adds r1, r4, #0 - bl sub_0806FAD8 + bl ResolveEntityBelow ldrb r0, [r4, #0xd] cmp r0, #0 beq _0808CB98 @@ -212,7 +212,7 @@ sub_0808CBE8: @ 0x0808CBE8 bl sub_0807A094 adds r1, r0, #0 adds r0, r4, #0 - bl sub_0801D2B4 + bl ChangeObjPalette movs r0, #0x3c movs r1, #1 movs r2, #0 diff --git a/asm/non_matching/octorokBoss/OctorokBoss_Init.inc b/asm/non_matching/octorokBoss/OctorokBoss_Init.inc new file mode 100644 index 00000000..f9d23b7e --- /dev/null +++ b/asm/non_matching/octorokBoss/OctorokBoss_Init.inc @@ -0,0 +1,331 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + adds r4, r0, #0 + movs r0, #1 + strb r0, [r4, #0xc] + ldrb r0, [r4, #0x18] + movs r1, #3 + orrs r0, r1 + strb r0, [r4, #0x18] + ldrb r0, [r4, #0xa] + cmp r0, #6 + bls _0803573A + b _08035974 +_0803573A: + lsls r0, r0, #2 + ldr r1, _08035744 @ =_08035748 + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_08035744: .4byte _08035748 +_08035748: @ jump table + .4byte _08035764 @ case 0 + .4byte _080358D8 @ case 1 + .4byte _080358D8 @ case 2 + .4byte _080358D8 @ case 3 + .4byte _080358D8 @ case 4 + .4byte _08035920 @ case 5 + .4byte _08035940 @ case 6 +_08035764: + adds r2, r4, #0 + adds r2, #0x29 + ldrb r1, [r2] + movs r0, #8 + rsbs r0, r0, #0 + ands r0, r1 + movs r1, #4 + orrs r0, r1 + strb r0, [r2] + adds r0, r4, #0 + adds r0, #0x7c + movs r5, #0 + strb r5, [r0] + movs r0, #1 + strb r0, [r4, #0xe] + movs r0, #0x30 + bl zMalloc + adds r2, r0, #0 + adds r0, r4, #0 + adds r0, #0x84 + str r2, [r0] + mov r8, r0 + cmp r2, #0 + bne _0803579E + adds r0, r4, #0 + bl sub_0804A7D4 + b _080359A6 +_0803579E: + str r2, [r4, #0x64] + mov r1, r8 + ldr r0, [r1] + strb r5, [r0, #6] + ldr r1, [r1] + movs r0, #2 + strb r0, [r1] + mov r2, r8 + ldr r0, [r2] + strb r5, [r0, #2] + ldr r1, [r2] + movs r0, #5 + strb r0, [r1, #1] + ldrb r0, [r4, #0x19] + movs r1, #3 + orrs r0, r1 + strb r0, [r4, #0x19] + adds r2, r4, #0 + adds r2, #0x6d + ldrb r0, [r2] + movs r1, #1 + orrs r0, r1 + strb r0, [r2] + adds r0, r4, #0 + adds r0, #0x76 + movs r1, #0xa0 + strh r1, [r0] + subs r0, #2 + strh r1, [r0] + adds r0, #6 + strh r5, [r0] + movs r5, #0 + movs r0, #0x79 + adds r0, r0, r4 + mov sb, r0 + mov r7, r8 +_080357E6: + adds r6, r5, #1 + movs r0, #0x39 + adds r1, r6, #0 + bl CreateEnemy + adds r1, r0, #0 + str r1, [r4, #0x54] + cmp r1, #0 + beq _08035816 + adds r0, r4, #0 + bl CopyPosition + ldr r0, [r4, #0x54] + str r4, [r0, #0x50] + ldr r0, [r4, #0x54] + adds r0, #0x84 + ldr r1, [r7] + str r1, [r0] + ldr r1, [r7] + lsls r0, r5, #2 + adds r1, #0x20 + adds r1, r1, r0 + ldr r0, [r4, #0x54] + str r0, [r1] +_08035816: + adds r5, r6, #0 + cmp r5, #3 + bls _080357E6 + movs r0, #0x39 + movs r1, #5 + bl CreateEnemy + adds r1, r0, #0 + str r1, [r4, #0x54] + cmp r1, #0 + beq _08035840 + adds r0, r4, #0 + bl CopyPosition + ldr r0, [r4, #0x54] + str r4, [r0, #0x50] + ldr r0, [r4, #0x54] + adds r0, #0x84 + mov r2, r8 + ldr r1, [r2] + str r1, [r0] +_08035840: + movs r0, #0x39 + movs r1, #6 + bl CreateEnemy + adds r1, r0, #0 + str r1, [r4, #0x54] + cmp r1, #0 + beq _0803586A + adds r0, r4, #0 + bl CopyPosition + ldr r0, [r4, #0x54] + str r4, [r0, #0x50] + ldr r0, [r4, #0x54] + adds r0, #0x84 + mov r2, r8 + ldr r1, [r2] + str r1, [r0] + ldr r1, [r2] + ldr r0, [r4, #0x54] + str r0, [r1, #0xc] +_0803586A: + movs r5, #0 + mov r7, r8 +_0803586E: + movs r0, #0x39 + movs r1, #7 + bl CreateEnemy + str r0, [r4, #0x54] + adds r6, r5, #1 + cmp r0, #0 + beq _080358A0 + strb r5, [r0, #0xb] + ldr r1, [r4, #0x54] + adds r0, r4, #0 + bl CopyPosition + ldr r0, [r4, #0x54] + str r4, [r0, #0x50] + ldr r0, [r4, #0x54] + adds r0, #0x84 + ldr r1, [r7] + str r1, [r0] + ldr r1, [r7] + lsls r0, r6, #2 + adds r1, #0xc + adds r1, r1, r0 + ldr r0, [r4, #0x54] + str r0, [r1] +_080358A0: + adds r5, r6, #0 + cmp r5, #3 + bls _0803586E + movs r1, #0 + movs r0, #3 + strb r0, [r4, #0xc] + strb r1, [r4, #0xd] + movs r0, #0x3c + mov r1, sb + strb r0, [r1] + ldr r1, _080358D0 @ =gPlayerEntity + ldrb r2, [r1, #0x18] + subs r0, #0x40 + ands r0, r2 + strb r0, [r1, #0x18] + ldrh r0, [r4, #0x2e] + strh r0, [r1, #0x2e] + ldrh r0, [r4, #0x32] + subs r0, #0xa0 + strh r0, [r1, #0x32] + ldr r0, _080358D4 @ =gRoomControls + str r4, [r0, #0x30] + b _08035974 + .align 2, 0 +_080358D0: .4byte gPlayerEntity +_080358D4: .4byte gRoomControls +_080358D8: + movs r1, #0 + movs r0, #0x10 + strb r0, [r4, #0xe] + adds r0, r4, #0 + adds r0, #0x79 + strb r1, [r0] + ldrb r1, [r4, #0xa] + movs r2, #2 + adds r0, r2, #0 + ands r0, r1 + cmp r0, #0 + bne _080358F4 + strb r2, [r4, #0xf] + b _080358F8 +_080358F4: + movs r0, #0xfe + strb r0, [r4, #0xf] +_080358F8: + adds r0, r4, #0 + adds r0, #0x74 + movs r2, #0x80 + lsls r2, r2, #1 + strh r2, [r0] + ldrb r1, [r4, #0xa] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + bne _08035918 + adds r1, r4, #0 + adds r1, #0x76 + movs r0, #0xff + lsls r0, r0, #8 + strh r0, [r1] + b _08035974 +_08035918: + adds r0, r4, #0 + adds r0, #0x76 + strh r2, [r0] + b _08035974 +_08035920: + adds r0, r4, #0 + adds r0, #0x76 + movs r1, #0x80 + lsls r1, r1, #1 + strh r1, [r0] + subs r0, #2 + strh r1, [r0] + adds r1, r4, #0 + adds r1, #0x79 + movs r0, #0x1c + strb r0, [r1] + adds r0, r4, #0 + adds r0, #0x84 + ldr r0, [r0] + str r4, [r0, #8] + b _08035974 +_08035940: + adds r0, r4, #0 + adds r0, #0x76 + movs r2, #0 + movs r1, #0x80 + lsls r1, r1, #1 + strh r1, [r0] + subs r0, #2 + strh r1, [r0] + adds r3, r4, #0 + adds r3, #0x29 + ldrb r1, [r3] + movs r0, #8 + rsbs r0, r0, #0 + ands r0, r1 + strb r0, [r3] + adds r0, r4, #0 + adds r0, #0x79 + strb r2, [r0] + movs r0, #0x10 + strb r0, [r4, #0xe] + movs r0, #1 + strb r0, [r4, #0xf] + adds r1, r4, #0 + adds r1, #0x7d + movs r0, #0x80 + strb r0, [r1] +_08035974: + ldrb r0, [r4, #0xa] + cmp r0, #6 + beq _08035990 + ldr r0, _0803598C @ =gUnk_080CF08C + ldrb r1, [r4, #0xa] + lsls r1, r1, #2 + adds r1, r1, r0 + ldrb r1, [r1] + adds r0, r4, #0 + bl InitializeAnimation + b _080359A0 + .align 2, 0 +_0803598C: .4byte gUnk_080CF08C +_08035990: + ldr r0, _080359B0 @ =gUnk_080CF08C + ldrb r1, [r4, #0xa] + lsls r1, r1, #2 + adds r1, r1, r0 + ldrb r1, [r1] + adds r0, r4, #0 + bl InitAnimationForceUpdate +_080359A0: + adds r0, r4, #0 + bl OctorokBoss_Action1 +_080359A6: + pop {r3, r4} + mov r8, r3 + mov sb, r4 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_080359B0: .4byte gUnk_080CF08C + .syntax divided diff --git a/asm/non_matching/octorokBoss/sub_08036998.inc b/asm/non_matching/octorokBoss/sub_08036998.inc new file mode 100644 index 00000000..c718c47d --- /dev/null +++ b/asm/non_matching/octorokBoss/sub_08036998.inc @@ -0,0 +1,33 @@ + .syntax unified + push {r4, lr} + adds r2, r0, #0 + adds r3, r2, #0 + adds r3, #0x79 + ldrb r0, [r2, #0xf] + ldrb r4, [r3] + adds r1, r0, r4 + strb r1, [r3] + ldrb r4, [r2, #0xf] + movs r0, #0xf + ldrsb r0, [r2, r0] + cmp r0, #0 + bge _080369BE + ldrb r0, [r2, #0xe] + lsls r1, r1, #0x18 + lsls r0, r0, #0x18 + cmn r1, r0 + bge _080369CC + b _080369C8 +_080369BE: + movs r0, #0 + ldrsb r0, [r3, r0] + ldrb r1, [r2, #0xe] + cmp r0, r1 + ble _080369CC +_080369C8: + rsbs r0, r4, #0 + strb r0, [r2, #0xf] +_080369CC: + pop {r4, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/octorokBoss/sub_080369D0.inc b/asm/non_matching/octorokBoss/sub_080369D0.inc new file mode 100644 index 00000000..13584527 --- /dev/null +++ b/asm/non_matching/octorokBoss/sub_080369D0.inc @@ -0,0 +1,149 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + mov ip, r1 + adds r6, r2, #0 + adds r1, r0, #0 + adds r1, #0x84 + ldr r4, [r1] + ldr r2, [r4, #0xc] + ldrb r1, [r4, #1] + subs r1, #1 + lsls r1, r1, #2 + adds r3, r4, #0 + adds r3, #0xc + adds r1, r3, r1 + ldr r1, [r1] + adds r1, #0x7b + adds r0, #0x79 + ldrb r0, [r0] + ldrb r1, [r1] + adds r0, r0, r1 + adds r2, #0x7b + strb r0, [r2] + ldrb r0, [r4, #1] + movs r2, #0 + cmp r0, #1 + beq _08036A58 + adds r5, r3, #0 + lsls r0, r6, #0x18 + lsrs r0, r0, #0x18 + mov r8, r0 + rsbs r0, r6, #0 + lsls r0, r0, #0x18 + asrs r7, r0, #0x18 +_08036A16: + lsls r0, r2, #2 + adds r0, r5, r0 + ldr r1, [r0] + adds r1, #0x7b + adds r2, #1 + lsls r0, r2, #2 + adds r0, r5, r0 + ldr r0, [r0] + adds r3, r0, #0 + adds r3, #0x7b + ldrb r1, [r1] + ldrb r0, [r3] + cmp r1, r0 + beq _08036A4C + subs r0, r0, r1 + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + ble _08036A44 + cmp r0, r8 + ble _08036A4C + adds r0, r1, r6 + b _08036A4A +_08036A44: + cmp r0, r7 + bge _08036A4C + subs r0, r1, r6 +_08036A4A: + strb r0, [r3] +_08036A4C: + ldrb r0, [r4, #1] + subs r0, #1 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r2, r0 + blo _08036A16 +_08036A58: + ldrb r0, [r4, #1] + subs r2, r0, #1 + cmp r2, #0 + beq _08036AE4 + ldr r0, _08036AEC @ =gSineTable + mov sb, r0 + movs r1, #0x80 + mov r8, r1 + mov r1, ip + lsls r0, r1, #0x14 + asrs r6, r0, #0x10 + lsls r0, r2, #2 + adds r0, #8 + adds r5, r0, r4 + movs r7, #0x80 + lsls r7, r7, #1 +_08036A78: + subs r4, r2, #1 + ldr r0, [r5] + adds r0, #0x7b + ldrb r0, [r0] + mov r1, r8 + eors r0, r1 + lsls r0, r0, #1 + add r0, sb + movs r1, #0 + ldrsh r0, [r0, r1] + adds r1, r6, #0 + bl FixedMul + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + adds r1, r7, #0 + bl FixedDiv + ldr r2, [r5] + ldr r1, [r5, #4] + lsls r0, r0, #0x10 + asrs r0, r0, #8 + ldr r1, [r1, #0x2c] + adds r1, r1, r0 + str r1, [r2, #0x2c] + ldr r0, [r5] + adds r0, #0x7b + ldrb r0, [r0] + mov r1, r8 + eors r0, r1 + adds r0, #0x40 + lsls r0, r0, #1 + add r0, sb + movs r1, #0 + ldrsh r0, [r0, r1] + adds r1, r6, #0 + bl FixedMul + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + adds r1, r7, #0 + bl FixedDiv + ldr r2, [r5] + ldr r1, [r5, #4] + lsls r0, r0, #0x10 + asrs r0, r0, #8 + ldr r1, [r1, #0x30] + subs r1, r1, r0 + str r1, [r2, #0x30] + subs r5, #4 + adds r2, r4, #0 + cmp r2, #0 + bne _08036A78 +_08036AE4: + pop {r3, r4} + mov r8, r3 + mov sb, r4 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_08036AEC: .4byte gSineTable + .syntax divided diff --git a/asm/non_matching/octorokBoss/sub_08036AF0.inc b/asm/non_matching/octorokBoss/sub_08036AF0.inc new file mode 100644 index 00000000..c8749e0f --- /dev/null +++ b/asm/non_matching/octorokBoss/sub_08036AF0.inc @@ -0,0 +1,210 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0xc + str r1, [sp] + mov r8, r2 + adds r0, #0x84 + ldr r0, [r0] + str r0, [sp, #4] + ldrb r0, [r0, #1] + subs r4, r0, #1 + cmp r4, #0 + bne _08036B10 + b _08036C80 +_08036B10: + ldr r0, [sp, #4] + adds r0, #0xc + str r0, [sp, #8] + lsls r0, r1, #0x14 + asrs r0, r0, #0x10 + mov sl, r0 +_08036B1C: + mov r1, r8 + cmp r1, #0 + bne _08036BC0 + lsls r0, r4, #2 + ldr r2, [sp, #8] + adds r6, r2, r0 + ldr r0, [r6] + subs r4, #1 + lsls r1, r4, #2 + adds r5, r2, r1 + ldr r2, [r5] + movs r3, #0x2e + ldrsh r1, [r2, r3] + movs r3, #0x32 + ldrsh r2, [r2, r3] + bl sub_080041DC + mov sb, r4 + ldr r1, [sp] + cmp r1, r0 + blo _08036B48 + b _08036C78 +_08036B48: + ldr r2, [r5] + ldr r3, [r6] + ldr r0, [r2, #0x2c] + ldr r1, [r3, #0x2c] + subs r0, r0, r1 + ldr r1, [r2, #0x30] + ldr r2, [r3, #0x30] + subs r1, r1, r2 + bl sub_080045DA + ldr r1, [r5] + adds r1, #0x7b + strb r0, [r1] + ldr r0, [r5] + adds r0, #0x7b + ldrb r0, [r0] + lsls r0, r0, #1 + ldr r2, _08036BBC @ =gSineTable + adds r0, r0, r2 + movs r3, #0 + ldrsh r0, [r0, r3] + mov r1, sl + bl FixedMul + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + movs r1, #0x80 + lsls r1, r1, #1 + bl FixedDiv + ldr r2, [r5] + ldr r1, [r6] + lsls r0, r0, #0x10 + asrs r0, r0, #8 + ldr r1, [r1, #0x2c] + adds r1, r1, r0 + str r1, [r2, #0x2c] + ldr r0, [r5] + adds r0, #0x7b + ldrb r0, [r0] + adds r0, #0x40 + lsls r0, r0, #1 + ldr r1, _08036BBC @ =gSineTable + adds r0, r0, r1 + movs r2, #0 + ldrsh r0, [r0, r2] + mov r1, sl + bl FixedMul + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + movs r1, #0x80 + lsls r1, r1, #1 + bl FixedDiv + ldr r2, [r5] + ldr r1, [r6] + b _08036C6E + .align 2, 0 +_08036BBC: .4byte gSineTable +_08036BC0: + subs r2, r4, #1 + lsls r0, r2, #2 + ldr r3, [sp, #8] + adds r0, r3, r0 + ldr r0, [r0] + adds r5, r0, #0 + adds r5, #0x7b + lsls r1, r4, #2 + adds r0, r3, r1 + ldr r0, [r0] + adds r0, #0x7b + ldrb r4, [r5] + ldrb r3, [r0] + adds r7, r1, #0 + ldr r6, [sp, #4] + adds r6, #0xc + mov sb, r2 + cmp r4, r3 + beq _08036C0E + subs r0, r3, r4 + lsls r0, r0, #0x18 + asrs r1, r0, #0x18 + cmp r1, #0 + ble _08036BFE + mov r2, r8 + lsls r0, r2, #0x18 + lsrs r0, r0, #0x18 + cmp r1, r0 + ble _08036C0E + subs r0, r3, r2 + b _08036C0C +_08036BFE: + mov r2, r8 + rsbs r0, r2, #0 + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r1, r0 + bge _08036C0E + adds r0, r3, r2 +_08036C0C: + strb r0, [r5] +_08036C0E: + mov r3, sb + lsls r4, r3, #2 + adds r4, r6, r4 + ldr r0, [r4] + adds r0, #0x7b + ldrb r0, [r0] + lsls r0, r0, #1 + ldr r1, _08036C8C @ =gSineTable + adds r0, r0, r1 + movs r2, #0 + ldrsh r0, [r0, r2] + mov r1, sl + bl FixedMul + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + movs r1, #0x80 + lsls r1, r1, #1 + bl FixedDiv + ldr r2, [r4] + adds r5, r6, r7 + ldr r1, [r5] + lsls r0, r0, #0x10 + asrs r0, r0, #8 + ldr r1, [r1, #0x2c] + adds r1, r1, r0 + str r1, [r2, #0x2c] + ldr r0, [r4] + adds r0, #0x7b + ldrb r0, [r0] + adds r0, #0x40 + lsls r0, r0, #1 + ldr r3, _08036C8C @ =gSineTable + adds r0, r0, r3 + movs r1, #0 + ldrsh r0, [r0, r1] + mov r1, sl + bl FixedMul + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + movs r1, #0x80 + lsls r1, r1, #1 + bl FixedDiv + ldr r2, [r4] + ldr r1, [r5] +_08036C6E: + lsls r0, r0, #0x10 + asrs r0, r0, #8 + ldr r1, [r1, #0x30] + subs r1, r1, r0 + str r1, [r2, #0x30] +_08036C78: + mov r4, sb + cmp r4, #0 + beq _08036C80 + b _08036B1C +_08036C80: + add sp, #0xc + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_08036C8C: .4byte gSineTable + .syntax divided diff --git a/asm/object87.s b/asm/non_matching/octorokBossObject/OctorokBossObject_Action1.inc similarity index 53% rename from asm/object87.s rename to asm/non_matching/octorokBossObject/OctorokBossObject_Action1.inc index 2af555eb..a4dc209d 100644 --- a/asm/object87.s +++ b/asm/non_matching/octorokBossObject/OctorokBossObject_Action1.inc @@ -1,353 +1,4 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - .syntax unified - - .text - - - thumb_func_start Object87 -Object87: @ 0x08099EFC - push {lr} - ldr r2, _08099F10 @ =gUnk_08123840 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08099F10: .4byte gUnk_08123840 - - thumb_func_start sub_08099F14 -sub_08099F14: @ 0x08099F14 - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - movs r0, #1 - strb r0, [r5, #0xc] - movs r0, #0x80 - lsls r0, r0, #2 - strh r0, [r5, #0x24] - ldrb r0, [r5, #0xa] - cmp r0, #9 - bls _08099F2A - b _0809A1B6 -_08099F2A: - lsls r0, r0, #2 - ldr r1, _08099F34 @ =_08099F38 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08099F34: .4byte _08099F38 -_08099F38: @ jump table - .4byte _08099F60 @ case 0 - .4byte _08099F70 @ case 1 - .4byte _08099F82 @ case 2 - .4byte _0809A00C @ case 3 - .4byte _0809A0AA @ case 4 - .4byte _0809A0B0 @ case 5 - .4byte _0809A058 @ case 6 - .4byte _0809A11C @ case 7 - .4byte _0809A132 @ case 8 - .4byte _0809A1B0 @ case 9 -_08099F60: - adds r2, r5, #0 - adds r2, #0x79 - movs r0, #0 - movs r1, #0x96 - strb r1, [r2] - strb r0, [r5, #0xe] - movs r0, #0x1e - strb r0, [r5, #0xf] -_08099F70: - adds r0, r5, #0 - movs r1, #0 - bl InitializeAnimation - movs r0, #0x92 - lsls r0, r0, #1 - bl EnqueueSFX - b _0809A1B6 -_08099F82: - ldr r0, [r5, #0x50] - adds r0, #0x7b - ldrb r0, [r0] - adds r0, #0x80 - rsbs r0, r0, #0 - strb r0, [r5, #0x15] - bl Random - movs r1, #1 - ands r1, r0 - cmp r1, #0 - beq _08099FCE - bl Random - adds r1, r0, #0 - movs r0, #3 - ands r1, r0 - cmp r1, #1 - beq _08099FBC - cmp r1, #1 - blo _08099FB6 - cmp r1, #2 - beq _08099FC2 - cmp r1, #3 - beq _08099FC8 - b _08099FCE -_08099FB6: - ldrb r0, [r5, #0x15] - subs r0, #0x10 - b _08099FCC -_08099FBC: - ldrb r0, [r5, #0x15] - adds r0, #0x10 - b _08099FCC -_08099FC2: - ldrb r0, [r5, #0x15] - subs r0, #8 - b _08099FCC -_08099FC8: - ldrb r0, [r5, #0x15] - adds r0, #8 -_08099FCC: - strb r0, [r5, #0x15] -_08099FCE: - bl Random - movs r1, #0x3f - ands r0, r1 - movs r1, #0xf0 - subs r1, r1, r0 - strh r1, [r5, #0x24] - lsls r1, r1, #0x10 - asrs r1, r1, #0x11 - lsls r1, r1, #8 - ldrb r2, [r5, #0x15] - adds r0, r5, #0 - bl sub_0806F62C - ldrh r1, [r5, #0x24] - lsls r1, r1, #0x10 - asrs r1, r1, #0x11 - lsls r1, r1, #8 - ldrb r2, [r5, #0x15] - adds r0, r5, #0 - bl sub_0806F62C - adds r0, r5, #0 - movs r1, #5 - bl InitializeAnimation - movs r0, #0xa6 - lsls r0, r0, #1 - bl SoundReq - b _0809A1B6 -_0809A00C: - ldr r0, [r5, #0x50] - adds r0, #0x7b - ldrb r0, [r0] - adds r0, #0x80 - rsbs r0, r0, #0 - strb r0, [r5, #0x15] - movs r1, #0x90 - lsls r1, r1, #7 - ldrb r2, [r5, #0x15] - adds r0, r5, #0 - bl sub_0806F62C - bl Random - movs r1, #1 - ands r1, r0 - cmp r1, #0 - beq _0809A040 - bl Random - movs r1, #0x3f - ands r0, r1 - ldrb r1, [r5, #0x15] - adds r0, r0, r1 - strb r0, [r5, #0x15] - b _0809A04E -_0809A040: - bl Random - movs r1, #0x3f - ands r0, r1 - ldrb r1, [r5, #0x15] - subs r1, r1, r0 - strb r1, [r5, #0x15] -_0809A04E: - adds r0, r5, #0 - movs r1, #6 - bl InitializeAnimation - b _0809A1B6 -_0809A058: - bl Random - movs r1, #0x2f - ands r1, r0 - movs r4, #0x30 - subs r4, r4, r1 - lsls r4, r4, #8 - bl Random - movs r2, #0xff - ands r2, r0 - adds r0, r5, #0 - adds r1, r4, #0 - bl sub_0806F62C - bl Random - movs r1, #1 - ands r1, r0 - cmp r1, #0 - beq _0809A092 - bl Random - movs r1, #0x3f - ands r0, r1 - ldrb r1, [r5, #0x15] - adds r0, r0, r1 - strb r0, [r5, #0x15] - b _0809A0A0 -_0809A092: - bl Random - movs r1, #0x3f - ands r0, r1 - ldrb r1, [r5, #0x15] - subs r1, r1, r0 - strb r1, [r5, #0x15] -_0809A0A0: - adds r0, r5, #0 - movs r1, #5 - bl InitializeAnimation - b _0809A1B6 -_0809A0AA: - movs r0, #0xc3 - lsls r0, r0, #2 - b _0809A1B4 -_0809A0B0: - adds r2, r5, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2] - movs r0, #0x18 - str r0, [r5, #0x78] - adds r7, r5, #0 - adds r7, #0x76 - movs r1, #0 - movs r0, #0x80 - lsls r0, r0, #3 - strh r0, [r7] - adds r4, r5, #0 - adds r4, #0x74 - strh r0, [r4] - adds r6, r5, #0 - adds r6, #0x7a - strh r1, [r6] - ldr r0, [r5, #0x50] - adds r0, #0x7b - ldrb r1, [r0] - rsbs r1, r1, #0 - lsls r1, r1, #0x18 - ldr r3, _0809A118 @ =gUnk_0812388C - ldrb r2, [r5, #0xb] - lsls r0, r2, #1 - adds r0, #1 - lsls r0, r0, #1 - adds r0, r0, r3 - lsrs r1, r1, #0x18 - ldrh r0, [r0] - adds r1, r1, r0 - lsls r2, r2, #2 - adds r2, r2, r3 - ldrh r2, [r2] - adds r0, r5, #0 - bl sub_0806F62C - ldrh r1, [r7] - ldrh r2, [r4] - ldrh r3, [r6] - adds r0, r5, #0 - bl sub_0805EC9C - adds r0, r5, #0 - movs r1, #7 - bl InitializeAnimation - b _0809A1B6 - .align 2, 0 -_0809A118: .4byte gUnk_0812388C -_0809A11C: - movs r0, #0 - strb r0, [r5, #0xe] - adds r0, r5, #0 - movs r1, #8 - bl InitializeAnimation - ldr r0, [r5, #0x50] - adds r1, r5, #0 - bl CopyPosition - b _0809A1B6 -_0809A132: - ldr r0, [r5, #0x50] - adds r0, #0x7c - ldrb r0, [r0] - movs r1, #0 - strb r0, [r5, #0xb] - movs r0, #4 - strb r0, [r5, #0xe] - strb r1, [r5, #0xf] - ldr r3, _0809A1A0 @ =gRoomControls - ldrh r0, [r5, #0x2e] - ldrh r1, [r3, #6] - subs r0, r0, r1 - movs r1, #0xf8 - lsls r1, r1, #1 - adds r2, r1, #0 - ands r0, r2 - movs r1, #0x82 - adds r1, r1, r5 - mov ip, r1 - strh r0, [r1] - ldrh r1, [r5, #0x32] - ldrh r0, [r3, #8] - subs r1, r1, r0 - ands r1, r2 - adds r3, r5, #0 - adds r3, #0x80 - strh r1, [r3] - adds r4, r5, #0 - adds r4, #0x84 - mov r0, ip - ldrh r2, [r0] - subs r2, #0x10 - asrs r2, r2, #4 - lsrs r1, r1, #4 - lsls r0, r1, #5 - subs r0, r0, r1 - adds r2, r2, r0 - str r2, [r4] - mov r1, ip - ldrh r0, [r1] - ldrh r1, [r3] - ldrb r3, [r5, #0xb] - bl sub_0809A6F8 - ldr r0, [r5, #0x50] - adds r0, #0x7c - ldrb r1, [r0] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _0809A1A8 - ldr r0, _0809A1A4 @ =0x000001A3 - bl SoundReq - b _0809A1B6 - .align 2, 0 -_0809A1A0: .4byte gRoomControls -_0809A1A4: .4byte 0x000001A3 -_0809A1A8: - movs r0, #0xe8 - bl SoundReq - b _0809A1B6 -_0809A1B0: - movs r0, #0xf0 - lsls r0, r0, #1 -_0809A1B4: - str r0, [r5, #0x78] -_0809A1B6: - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_0809A1B8 -sub_0809A1B8: @ 0x0809A1B8 push {r4, r5, r6, r7, lr} mov r7, sl mov r6, sb @@ -588,7 +239,7 @@ _0809A394: cmp r1, r0 beq _0809A38E movs r0, #8 - bl sub_0805308C + bl ChangeLightLevel b _0809A632 .align 2, 0 _0809A3B0: .4byte gRoomVars @@ -925,158 +576,4 @@ _0809A632: .align 2, 0 _0809A640: .4byte gRoomControls _0809A644: .4byte gPlayerEntity - - thumb_func_start sub_0809A648 -sub_0809A648: @ 0x0809A648 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r7, r0, #0 - bl GetNextFrame - ldrb r0, [r7, #0xe] - subs r0, #1 - strb r0, [r7, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - beq _0809A6EC - ldr r4, [r7, #0x50] - adds r0, r4, #0 - adds r0, #0x74 - ldrh r1, [r0] - movs r0, #0x80 - lsls r0, r0, #9 - bl __divsi3 - movs r2, #0x24 - ldrsh r1, [r7, r2] - adds r5, r1, #0 - muls r5, r0, r5 - adds r4, #0x7b - ldrb r1, [r4] - ldrb r0, [r7, #0x15] - subs r0, r0, r1 - movs r1, #0x7b - adds r1, r1, r7 - mov r8, r1 - strb r0, [r1] - ldr r6, _0809A6E8 @ =gSineTable - ldrb r0, [r1] - lsls r0, r0, #1 - adds r0, r0, r6 - movs r2, #0 - ldrsh r0, [r0, r2] - lsls r5, r5, #8 - asrs r5, r5, #0x10 - adds r1, r5, #0 - bl FixedMul - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - movs r4, #0x80 - lsls r4, r4, #1 - adds r1, r4, #0 - bl FixedDiv - ldr r1, [r7, #0x50] - lsls r0, r0, #0x10 - asrs r0, r0, #8 - ldr r1, [r1, #0x2c] - adds r1, r1, r0 - str r1, [r7, #0x2c] - mov r1, r8 - ldrb r0, [r1] - adds r0, #0x40 - lsls r0, r0, #1 - adds r0, r0, r6 - movs r2, #0 - ldrsh r0, [r0, r2] - adds r1, r5, #0 - bl FixedMul - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - adds r1, r4, #0 - bl FixedDiv - ldr r1, [r7, #0x50] - lsls r0, r0, #0x10 - asrs r0, r0, #8 - ldr r1, [r1, #0x30] - subs r1, r1, r0 - str r1, [r7, #0x30] - b _0809A6F0 - .align 2, 0 -_0809A6E8: .4byte gSineTable -_0809A6EC: - bl DeleteThisEntity -_0809A6F0: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_0809A6F8 -sub_0809A6F8: @ 0x0809A6F8 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - adds r5, r1, #0 - adds r6, r2, #0 - adds r7, r3, #0 - bl sub_0809A758 - cmp r0, #0 - beq _0809A754 - ldr r0, _0809A738 @ =gUnk_081238A0 - lsls r1, r6, #1 - adds r1, r1, r0 - ldrh r0, [r1] - cmp r0, #0 - beq _0809A750 - movs r0, #1 - ands r0, r7 - cmp r0, #0 - beq _0809A73C - ldrh r0, [r1] - lsrs r1, r4, #4 - movs r3, #0x3f - ands r1, r3 - lsrs r2, r5, #4 - ands r2, r3 - lsls r2, r2, #6 - orrs r1, r2 - movs r2, #1 - bl sub_0807B9B8 - b _0809A750 - .align 2, 0 -_0809A738: .4byte gUnk_081238A0 -_0809A73C: - lsrs r0, r4, #4 - movs r2, #0x3f - ands r0, r2 - lsrs r1, r5, #4 - ands r1, r2 - lsls r1, r1, #6 - orrs r0, r1 - movs r1, #1 - bl sub_0807BA8C -_0809A750: - movs r0, #1 - b _0809A756 -_0809A754: - movs r0, #0 -_0809A756: - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_0809A758 -sub_0809A758: @ 0x0809A758 - push {lr} - adds r2, r0, #0 - cmp r2, #0xf - bls _0809A770 - movs r0, #0xf8 - lsls r0, r0, #1 - cmp r2, r0 - bhi _0809A770 - cmp r1, #0xf0 - bhi _0809A770 - movs r0, #1 - b _0809A772 -_0809A770: - movs r0, #0 -_0809A772: - pop {pc} + .syntax divided diff --git a/asm/non_matching/playerItemSword/sub_080A758C.inc b/asm/non_matching/playerItemSword/sub_080A758C.inc index 8b41d1a3..ea464702 100644 --- a/asm/non_matching/playerItemSword/sub_080A758C.inc +++ b/asm/non_matching/playerItemSword/sub_080A758C.inc @@ -135,7 +135,7 @@ _080A7692: bl sub_08079BD8 ldr r4, _080A76B4 @ =gUnk_0812906C ldr r0, _080A76B8 @ =gUnk_08129068 - bl sub_080028F4 + bl GetRandomByWeight lsls r0, r0, #1 adds r0, r0, r4 ldrh r0, [r0] diff --git a/asm/object1E.s b/asm/object1E.s index 0bb09357..81b20f1a 100644 --- a/asm/object1E.s +++ b/asm/object1E.s @@ -92,7 +92,7 @@ _08087594: lsls r1, r1, #1 _080875A2: adds r0, r4, #0 - bl sub_0801D2B4 + bl ChangeObjPalette ldrb r0, [r4, #0x14] cmp r0, #1 beq _080875B8 diff --git a/asm/object21.s b/asm/object21.s index 1c03e043..d5afeabd 100644 --- a/asm/object21.s +++ b/asm/object21.s @@ -81,7 +81,7 @@ sub_08087A10: @ 0x08087A10 beq _08087A26 adds r0, r4, #0 movs r1, #3 - bl sub_0801D2B4 + bl ChangeObjPalette _08087A26: ldrb r0, [r4, #0xa] cmp r0, #2 @@ -92,7 +92,7 @@ _08087A26: adds r1, r1, r0 ldrb r1, [r1] adds r0, r4, #0 - bl sub_0801D2B4 + bl ChangeObjPalette _08087A3C: ldrb r0, [r4, #0xa] cmp r0, #4 diff --git a/asm/object29.s b/asm/object29.s index 72e20190..2bc1cfc4 100644 --- a/asm/object29.s +++ b/asm/object29.s @@ -119,7 +119,7 @@ _0808921C: bl sub_08016A30 adds r0, r4, #0 movs r1, #0x15 - bl sub_0801D2B4 + bl ChangeObjPalette b _08089246 _0808923A: ldrb r1, [r4, #0xb] @@ -225,7 +225,7 @@ _0808991A: bl sub_08016A30 adds r0, r4, #0 movs r1, #0x15 - bl sub_0801D2B4 + bl ChangeObjPalette b _08089940 _08089934: ldrb r1, [r4, #0xb] diff --git a/asm/object3E.s b/asm/object3E.s index 031a6fdf..2345a89d 100644 --- a/asm/object3E.s +++ b/asm/object3E.s @@ -222,7 +222,7 @@ _0808D24E: adds r0, r0, r4 ldrh r1, [r0] adds r0, r5, #0 - bl sub_0801D2B4 + bl ChangeObjPalette ldrb r0, [r5, #0xf] lsls r0, r0, #1 adds r0, r0, r4 @@ -668,7 +668,7 @@ sub_0808D59C: @ 0x0808D59C adds r0, r0, r4 ldrh r1, [r0] adds r0, r5, #0 - bl sub_0801D2B4 + bl ChangeObjPalette ldrb r0, [r5, #0xf] lsls r0, r0, #1 adds r0, r0, r4 diff --git a/asm/object6A.s b/asm/object6A.s index 6ce1e494..086fa52d 100644 --- a/asm/object6A.s +++ b/asm/object6A.s @@ -341,7 +341,7 @@ _08094CA0: blt _08094CCC adds r0, r5, #0 adds r1, r5, #0 - bl sub_0806FAD8 + bl ResolveEntityBelow _08094CCC: ldrb r4, [r5, #0xa] ldrb r0, [r5, #0xb] @@ -1008,7 +1008,7 @@ sub_08095120: @ 0x08095120 bl SetDefaultPriority adds r0, r4, #0 adds r1, r4, #0 - bl sub_0806FAD8 + bl ResolveEntityBelow adds r0, r4, #0 bl sub_0807DD64 adds r0, r4, #0 @@ -1059,7 +1059,7 @@ sub_08095188: @ 0x08095188 bl SetDefaultPriority adds r0, r4, #0 adds r1, r4, #0 - bl sub_0806FAD8 + bl ResolveEntityBelow adds r0, r4, #0 bl sub_0807DD64 adds r0, r4, #0 @@ -1364,7 +1364,7 @@ _080953E0: movs r1, #0 _0809540C: adds r0, r4, #0 - bl sub_0801D2B4 + bl ChangeObjPalette _08095412: pop {r4, pc} .align 2, 0 @@ -1540,7 +1540,7 @@ _0809550A: adds r0, r0, r1 ldrh r1, [r0] adds r0, r4, #0 - bl sub_0801D2B4 + bl ChangeObjPalette adds r0, r4, #0 bl sub_0807DD64 ldrb r1, [r4, #0xb] @@ -1807,7 +1807,7 @@ sub_08095754: @ 0x08095754 bl CopyPosition adds r0, r5, #0 adds r1, r4, #0 - bl sub_0806FAD8 + bl ResolveEntityBelow _0809577A: pop {r4, r5, pc} @@ -1858,7 +1858,7 @@ sub_080957B4: @ 0x080957B4 bl CopyPosition adds r0, r5, #0 adds r1, r4, #0 - bl sub_0806FAD8 + bl ResolveEntityBelow _080957DA: pop {r4, r5, pc} @@ -2570,7 +2570,7 @@ sub_08095D30: @ 0x08095D30 rsbs r0, r0, #0 ands r1, r0 adds r0, r2, #0 - bl sub_0801D2B4 + bl ChangeObjPalette _08095D4E: pop {pc} .align 2, 0 @@ -2854,7 +2854,7 @@ _08095F68: movs r1, #4 _08095F6A: adds r0, r4, #0 - bl sub_0801D2B4 + bl ChangeObjPalette ldr r0, _08095F90 @ =gPlayerEntity adds r0, #0x5a ldrb r1, [r0] @@ -3056,7 +3056,7 @@ sub_080960C4: @ 0x080960C4 strb r0, [r4, #0x19] adds r0, r5, #0 adds r1, r4, #0 - bl sub_0806FAD8 + bl ResolveEntityBelow ldr r1, [r6, #4] adds r0, r4, #0 bl StartCutscene diff --git a/asm/object91.s b/asm/object91.s index 9a3ffce8..1df7bfef 100644 --- a/asm/object91.s +++ b/asm/object91.s @@ -291,7 +291,7 @@ _0809C5E0: @ jump table _0809C600: ldr r0, [r5, #0x50] adds r1, r5, #0 - bl sub_0806FAD8 + bl ResolveEntityBelow ldr r0, [r5, #0x50] ldrb r0, [r0, #0xd] adds r6, r5, #0 @@ -382,7 +382,7 @@ _0809C6B4: .4byte gUnk_08123E1C _0809C6B8: ldr r0, [r5, #0x50] adds r1, r5, #0 - bl sub_0806FAD8 + bl ResolveEntityBelow ldr r0, [r5, #0x50] ldrb r0, [r0, #0xd] adds r6, r5, #0 @@ -741,10 +741,10 @@ _0809C948: bl LoadFixedGFX adds r0, r5, #0 movs r1, #0xef - bl sub_0801D2B4 + bl ChangeObjPalette ldr r0, [r5, #0x50] movs r1, #0xef - bl sub_0801D2B4 + bl ChangeObjPalette adds r0, r5, #0 movs r1, #0xef bl sub_0809CC30 @@ -1112,7 +1112,7 @@ sub_0809CC30: @ 0x0809CC30 adds r4, #0x84 ldr r0, [r4] ldr r0, [r0, #8] - bl sub_0801D2B4 + bl ChangeObjPalette movs r5, #0 _0809CC42: ldr r0, [r4] @@ -1121,7 +1121,7 @@ _0809CC42: adds r0, r0, r1 ldr r0, [r0] adds r1, r6, #0 - bl sub_0801D2B4 + bl ChangeObjPalette adds r5, #1 cmp r5, #3 bls _0809CC42 diff --git a/asm/object96.s b/asm/object96.s index 26f40c61..4cc9016a 100644 --- a/asm/object96.s +++ b/asm/object96.s @@ -223,7 +223,7 @@ sub_0809D91C: @ 0x0809D91C cmp r1, #0 beq _0809D934 adds r0, r4, #0 - bl sub_0806FAD8 + bl ResolveEntityBelow _0809D934: movs r0, #0x72 bl SoundReq diff --git a/asm/objectB3.s b/asm/objectB3.s index 158006ad..bb58c920 100644 --- a/asm/objectB3.s +++ b/asm/objectB3.s @@ -70,7 +70,7 @@ _080A0A5E: adds r0, r0, r1 ldrb r1, [r0] adds r0, r4, #0 - bl sub_0801D2B4 + bl ChangeObjPalette _080A0AB0: adds r0, r4, #0 bl GetNextFrame diff --git a/asm/objectB4.s b/asm/objectB4.s index 1a6cea59..eb36b53e 100644 --- a/asm/objectB4.s +++ b/asm/objectB4.s @@ -95,7 +95,7 @@ _080A0C08: strh r0, [r4, #0x32] adds r0, r5, #0 adds r1, r4, #0 - bl sub_0806FAD8 + bl ResolveEntityBelow _080A0C40: ldrb r0, [r5, #0xf] adds r0, #1 @@ -136,7 +136,7 @@ _080A0C6E: strh r0, [r4, #0x32] adds r0, r5, #0 adds r1, r4, #0 - bl sub_0806FAD8 + bl ResolveEntityBelow _080A0C92: ldrb r0, [r5, #0xf] adds r0, #1 diff --git a/asm/objectOnSpinyBeetle.s b/asm/objectOnSpinyBeetle.s index 461d78a1..76679025 100644 --- a/asm/objectOnSpinyBeetle.s +++ b/asm/objectOnSpinyBeetle.s @@ -67,7 +67,7 @@ _080985AC: _080985AE: ldr r1, [r4, #0x50] adds r0, r4, #0 - bl sub_0806FAD8 + bl ResolveEntityBelow adds r0, r4, #0 bl sub_08098918 pop {r4, r5, pc} @@ -569,7 +569,7 @@ _0809892E: strb r0, [r2] ldr r1, [r4, #0x50] adds r0, r4, #0 - bl sub_0806FAD8 + bl ResolveEntityBelow _08098968: ldr r2, _0809898C @ =gUnk_08123558 adds r0, r6, #0 @@ -606,7 +606,7 @@ _08098990: strb r0, [r2] ldr r1, [r4, #0x50] adds r0, r4, #0 - bl sub_0806FAD8 + bl ResolveEntityBelow _080989B2: strh r5, [r4, #0x36] adds r1, r4, #0 diff --git a/asm/octorokBoss.s b/asm/octorokBoss.s deleted file mode 100644 index 8c6ff919..00000000 --- a/asm/octorokBoss.s +++ /dev/null @@ -1,4789 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start OctorokBoss -OctorokBoss: @ 0x080351BC - push {r4, r5, lr} - adds r5, r0, #0 - ldr r4, _080351D4 @ =gUnk_080CF040 - bl GetNextFunction - lsls r0, r0, #2 - adds r0, r0, r4 - ldr r1, [r0] - adds r0, r5, #0 - bl _call_via_r1 - pop {r4, r5, pc} - .align 2, 0 -_080351D4: .4byte gUnk_080CF040 - - thumb_func_start sub_080351D8 -sub_080351D8: @ 0x080351D8 - push {r4, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0xa] - cmp r1, #0 - bne _08035204 - movs r0, #2 - strb r0, [r4, #0xc] - strb r1, [r4, #0xd] - adds r0, r4, #0 - adds r0, #0x42 - strb r1, [r0] - adds r1, r4, #0 - adds r1, #0x45 - movs r0, #1 - strb r0, [r1] - adds r0, r4, #0 - bl sub_080368D8 - adds r0, r4, #0 - bl sub_0803520C - b _08035208 -_08035204: - bl DeleteThisEntity -_08035208: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803520C -sub_0803520C: @ 0x0803520C - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x7c - ldrb r0, [r0] - cmp r0, #0 - bne _08035238 - ldrb r0, [r4, #0xd] - cmp r0, #3 - beq _0803524C - ldr r2, _08035234 @ =gRoomControls - adds r0, r4, #0 - adds r0, #0x84 - ldr r1, [r0] - ldr r0, [r1, #0xc] - str r0, [r2, #0x30] - movs r0, #0x5a - strb r0, [r1, #7] - bl sub_08078B48 - b _0803524C - .align 2, 0 -_08035234: .4byte gRoomControls -_08035238: - adds r0, r4, #0 - adds r0, #0x84 - ldr r1, [r0] - ldrb r0, [r1, #7] - cmp r0, #0 - beq _0803524C - subs r0, #1 - strb r0, [r1, #7] - bl sub_08078B48 -_0803524C: - ldr r1, _08035284 @ =gUnk_080CF054 - ldrb r0, [r4, #0xd] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - ldrb r0, [r4, #0xd] - cmp r0, #3 - bls _08035266 - bl sub_08078B48 -_08035266: - adds r0, r4, #0 - bl sub_0800445C - adds r0, r4, #0 - adds r0, #0x76 - ldrh r1, [r0] - subs r0, #2 - ldrh r2, [r0] - adds r0, #6 - ldrh r3, [r0] - adds r0, r4, #0 - bl sub_0805EC9C - pop {r4, pc} - .align 2, 0 -_08035284: .4byte gUnk_080CF054 - - thumb_func_start sub_08035288 -sub_08035288: @ 0x08035288 - push {r4, lr} - adds r2, r0, #0 - adds r0, #0x76 - movs r4, #0 - movs r1, #0xa0 - strh r1, [r0] - subs r0, #2 - strh r1, [r0] - adds r3, r2, #0 - adds r3, #0x84 - ldr r0, [r3] - strb r4, [r0, #6] - adds r0, r2, #0 - adds r0, #0x7c - ldrb r1, [r0] - adds r0, r1, #0 - cmp r0, #4 - bne _080352C8 - strb r0, [r2, #0xd] - ldr r0, _080352C4 @ =gUnk_02034490 - movs r1, #1 - strb r1, [r0] - bl sub_08078B48 - movs r0, #0x94 - lsls r0, r0, #1 - bl SoundReq - b _080352FA - .align 2, 0 -_080352C4: .4byte gUnk_02034490 -_080352C8: - movs r0, #1 - ands r0, r1 - cmp r0, #0 - bne _080352DA - strb r4, [r2, #0xb] - adds r1, r2, #0 - adds r1, #0x79 - movs r0, #0x3c - b _080352F4 -_080352DA: - ldr r1, [r3] - ldrb r0, [r1, #1] - cmp r0, #3 - bls _080352E6 - subs r0, #1 - strb r0, [r1, #1] -_080352E6: - ldr r0, [r3] - ldr r0, [r0, #0xc] - adds r0, #0x7d - strb r4, [r0] - adds r1, r2, #0 - adds r1, #0x79 - movs r0, #0x78 -_080352F4: - strb r0, [r1] - movs r0, #1 - strb r0, [r2, #0xd] -_080352FA: - pop {r4, pc} - - thumb_func_start sub_080352FC -sub_080352FC: @ 0x080352FC -.ifdef JP - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - adds r5, r0, #0 - adds r0, #0x7c - ldrb r0, [r0] - movs r6, #1 - adds r4, r6, #0 - ands r4, r0 - cmp r4, #0 - bne _08035390 - adds r0, r5, #0 - adds r0, #0x84 - ldr r1, [r0] - ldr r1, [r1, #0xc] - adds r1, #0x7d - ldrb r2, [r1] - mov sb, r0 - cmp r2, #0 - beq _080352D0 - subs r0, r2, #1 - strb r0, [r1] -_080352D0: - ldr r3, _08035334 @ =gRoomControls - movs r0, #0x84 - lsls r0, r0, #1 - adds r1, r0, #0 - ldrh r0, [r3, #6] - adds r1, r1, r0 - ldrh r0, [r5, #0x2e] - subs r1, r1, r0 - adds r1, #4 - lsls r1, r1, #0x10 - lsrs r1, r1, #0x10 - ldrh r0, [r3, #8] - ldrh r2, [r5, #0x32] - subs r0, r0, r2 - adds r0, #0x8c - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - cmp r1, #8 - bhi _080352FAJP - cmp r0, #8 - bls _08035338 -_080352FAJP: - mov r1, sb - ldr r0, [r1] - strb r6, [r0, #2] - ldrh r0, [r3, #6] - movs r1, #0x84 - lsls r1, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #0x10 - ldr r1, [r5, #0x2c] - subs r0, r0, r1 - ldrh r1, [r3, #8] - adds r1, #0x88 - lsls r1, r1, #0x10 - ldr r2, [r5, #0x30] - subs r1, r1, r2 - bl sub_080045DA - asrs r0, r0, #3 - strb r0, [r5, #0x15] - movs r0, #0x80 - lsls r0, r0, #1 - strh r0, [r5, #0x24] - adds r0, r5, #0 - bl ProcessMovement - adds r7, r5, #0 - adds r7, #0x79 - b _080353FA - .align 2, 0 -_08035334: .4byte gRoomControls -_08035338: - ldrb r0, [r5, #0xb] - cmp r0, #0 - bne _0803537C - adds r0, r5, #0 - movs r1, #0x87 - movs r2, #5 - movs r3, #0 - bl CreateObjectWithParent - adds r0, r5, #0 - movs r1, #0x87 - movs r2, #5 - movs r3, #1 - bl CreateObjectWithParent - adds r0, r5, #0 - movs r1, #0x87 - movs r2, #5 - movs r3, #2 - bl CreateObjectWithParent - adds r0, r5, #0 - movs r1, #0x87 - movs r2, #5 - movs r3, #3 - bl CreateObjectWithParent - adds r0, r5, #0 - movs r1, #0x87 - movs r2, #5 - movs r3, #4 - bl CreateObjectWithParent - strb r6, [r5, #0xb] -_0803537C: - mov r1, sb - ldr r0, [r1] - strb r4, [r0, #2] - adds r1, r5, #0 - adds r1, #0x79 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - adds r7, r1, #0 - b _080353FA -_08035390: - adds r0, r5, #0 - adds r0, #0x84 - ldr r1, [r0] - ldrb r1, [r1, #1] - subs r4, r1, #1 - mov sb, r0 - adds r7, r5, #0 - adds r7, #0x79 - cmp r4, #0 - beq _080353DC - mov ip, sb - movs r0, #1 - mov sl, r0 - lsls r0, r4, #2 - subs r6, r0, #4 - movs r1, #3 - mov r8, r1 -_080353B2: - mov r1, ip - ldr r0, [r1] - adds r0, #0xc - adds r0, r0, r6 - ldr r3, [r0] - ldrb r2, [r3, #0x18] - lsls r1, r2, #0x1e - lsrs r1, r1, #0x1e - mov r0, sl - orrs r1, r0 - mov r0, r8 - ands r1, r0 - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, #0x18] - subs r6, #4 - subs r4, #1 - cmp r4, #0 - bne _080353B2 -_080353DC: - ldr r1, _08035450 @ =gScreenTransition - ldr r0, [r1] - movs r1, #2 - ands r0, r1 - cmp r0, #0 - beq _080353F4 - adds r0, r5, #0 - movs r1, #0x87 - movs r2, #6 - movs r3, #0 - bl CreateObjectWithParent -_080353F4: - ldrb r0, [r7] - subs r0, #1 - strb r0, [r7] -_080353FA: - ldrb r0, [r7] - cmp r0, #0 - bne _0803548C - movs r0, #2 - strb r0, [r5, #0xd] - adds r4, r5, #0 - adds r4, #0x7c - ldrb r0, [r4] - adds r0, #1 - strb r0, [r4] - adds r0, r5, #0 - bl sub_080AE068 - ldrb r1, [r4] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - bne _08035454 - adds r1, r5, #0 - adds r1, #0x3f - movs r0, #0x5f - strb r0, [r1] - movs r1, #0x84 - lsls r1, r1, #1 - adds r0, r5, #0 - bl LoadFixedGFX - adds r0, r5, #0 - movs r1, #0xef - bl sub_0801D2B4 - adds r0, r5, #0 - movs r1, #0xef - bl sub_08036F14 - mov r1, sb - ldr r0, [r1] - ldr r0, [r0, #0xc] - movs r1, #1 - bl InitAnimationForceUpdate - b _08035480 - .align 2, 0 -_08035450: .4byte gScreenTransition -_08035454: - adds r1, r5, #0 - adds r1, #0x3f - movs r0, #0x61 - strb r0, [r1] - ldr r1, _08035498 @ =0x00000109 - adds r0, r5, #0 - bl LoadFixedGFX - adds r0, r5, #0 - movs r1, #0xf0 - bl sub_0801D2B4 - adds r0, r5, #0 - movs r1, #0xf3 - bl sub_08036F14 - mov r1, sb - ldr r0, [r1] - ldr r0, [r0, #0xc] - movs r1, #2 - bl InitAnimationForceUpdate -_08035480: - adds r0, r5, #0 - movs r1, #0x87 - movs r2, #8 - movs r3, #0 - bl CreateObjectWithParent -_0803548C: - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08035498: .4byte 0x00000109 - -.else -.ifdef DEMO_JP @ TODO same as JP - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - adds r5, r0, #0 - adds r0, #0x7c - ldrb r0, [r0] - movs r6, #1 - adds r4, r6, #0 - ands r4, r0 - cmp r4, #0 - bne _08035390 - adds r0, r5, #0 - adds r0, #0x84 - ldr r1, [r0] - ldr r1, [r1, #0xc] - adds r1, #0x7d - ldrb r2, [r1] - mov sb, r0 - cmp r2, #0 - beq _080352D0 - subs r0, r2, #1 - strb r0, [r1] -_080352D0: - ldr r3, _08035334 @ =gRoomControls - movs r0, #0x84 - lsls r0, r0, #1 - adds r1, r0, #0 - ldrh r0, [r3, #6] - adds r1, r1, r0 - ldrh r0, [r5, #0x2e] - subs r1, r1, r0 - adds r1, #4 - lsls r1, r1, #0x10 - lsrs r1, r1, #0x10 - ldrh r0, [r3, #8] - ldrh r2, [r5, #0x32] - subs r0, r0, r2 - adds r0, #0x8c - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - cmp r1, #8 - bhi _080352FAJP - cmp r0, #8 - bls _08035338 -_080352FAJP: - mov r1, sb - ldr r0, [r1] - strb r6, [r0, #2] - ldrh r0, [r3, #6] - movs r1, #0x84 - lsls r1, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #0x10 - ldr r1, [r5, #0x2c] - subs r0, r0, r1 - ldrh r1, [r3, #8] - adds r1, #0x88 - lsls r1, r1, #0x10 - ldr r2, [r5, #0x30] - subs r1, r1, r2 - bl sub_080045DA - asrs r0, r0, #3 - strb r0, [r5, #0x15] - movs r0, #0x80 - lsls r0, r0, #1 - strh r0, [r5, #0x24] - adds r0, r5, #0 - bl ProcessMovement - adds r7, r5, #0 - adds r7, #0x79 - b _080353FA - .align 2, 0 -_08035334: .4byte gRoomControls -_08035338: - ldrb r0, [r5, #0xb] - cmp r0, #0 - bne _0803537C - adds r0, r5, #0 - movs r1, #0x87 - movs r2, #5 - movs r3, #0 - bl CreateObjectWithParent - adds r0, r5, #0 - movs r1, #0x87 - movs r2, #5 - movs r3, #1 - bl CreateObjectWithParent - adds r0, r5, #0 - movs r1, #0x87 - movs r2, #5 - movs r3, #2 - bl CreateObjectWithParent - adds r0, r5, #0 - movs r1, #0x87 - movs r2, #5 - movs r3, #3 - bl CreateObjectWithParent - adds r0, r5, #0 - movs r1, #0x87 - movs r2, #5 - movs r3, #4 - bl CreateObjectWithParent - strb r6, [r5, #0xb] -_0803537C: - mov r1, sb - ldr r0, [r1] - strb r4, [r0, #2] - adds r1, r5, #0 - adds r1, #0x79 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - adds r7, r1, #0 - b _080353FA -_08035390: - adds r0, r5, #0 - adds r0, #0x84 - ldr r1, [r0] - ldrb r1, [r1, #1] - subs r4, r1, #1 - mov sb, r0 - adds r7, r5, #0 - adds r7, #0x79 - cmp r4, #0 - beq _080353DC - mov ip, sb - movs r0, #1 - mov sl, r0 - lsls r0, r4, #2 - subs r6, r0, #4 - movs r1, #3 - mov r8, r1 -_080353B2: - mov r1, ip - ldr r0, [r1] - adds r0, #0xc - adds r0, r0, r6 - ldr r3, [r0] - ldrb r2, [r3, #0x18] - lsls r1, r2, #0x1e - lsrs r1, r1, #0x1e - mov r0, sl - orrs r1, r0 - mov r0, r8 - ands r1, r0 - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, #0x18] - subs r6, #4 - subs r4, #1 - cmp r4, #0 - bne _080353B2 -_080353DC: - ldr r1, _08035450 @ =gScreenTransition - ldr r0, [r1] - movs r1, #2 - ands r0, r1 - cmp r0, #0 - beq _080353F4 - adds r0, r5, #0 - movs r1, #0x87 - movs r2, #6 - movs r3, #0 - bl CreateObjectWithParent -_080353F4: - ldrb r0, [r7] - subs r0, #1 - strb r0, [r7] -_080353FA: - ldrb r0, [r7] - cmp r0, #0 - bne _0803548C - movs r0, #2 - strb r0, [r5, #0xd] - adds r4, r5, #0 - adds r4, #0x7c - ldrb r0, [r4] - adds r0, #1 - strb r0, [r4] - adds r0, r5, #0 - bl sub_080AE068 - ldrb r1, [r4] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - bne _08035454 - adds r1, r5, #0 - adds r1, #0x3f - movs r0, #0x5f - strb r0, [r1] - movs r1, #0x84 - lsls r1, r1, #1 - adds r0, r5, #0 - bl LoadFixedGFX - adds r0, r5, #0 - movs r1, #0xef - bl sub_0801D2B4 - adds r0, r5, #0 - movs r1, #0xef - bl sub_08036F14 - mov r1, sb - ldr r0, [r1] - ldr r0, [r0, #0xc] - movs r1, #1 - bl InitAnimationForceUpdate - b _08035480 - .align 2, 0 -_08035450: .4byte gScreenTransition -_08035454: - adds r1, r5, #0 - adds r1, #0x3f - movs r0, #0x61 - strb r0, [r1] - ldr r1, _08035498 @ =0x00000109 - adds r0, r5, #0 - bl LoadFixedGFX - adds r0, r5, #0 - movs r1, #0xf0 - bl sub_0801D2B4 - adds r0, r5, #0 - movs r1, #0xf3 - bl sub_08036F14 - mov r1, sb - ldr r0, [r1] - ldr r0, [r0, #0xc] - movs r1, #2 - bl InitAnimationForceUpdate -_08035480: - adds r0, r5, #0 - movs r1, #0x87 - movs r2, #8 - movs r3, #0 - bl CreateObjectWithParent -_0803548C: - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08035498: .4byte 0x00000109 - -.else -.ifdef EU - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - adds r5, r0, #0 - adds r0, #0x7c - ldrb r0, [r0] - movs r6, #1 - adds r4, r6, #0 - ands r4, r0 - cmp r4, #0 - bne _0803536C - adds r0, r5, #0 - adds r0, #0x84 - ldr r1, [r0] - ldr r1, [r1, #0xc] - adds r1, #0x7d - ldrb r2, [r1] - mov sb, r0 - cmp r2, #0 - beq _080352AC - subs r0, r2, #1 - strb r0, [r1] -_080352AC: - ldr r3, _08035310 @ =gRoomControls - movs r0, #0x84 - lsls r0, r0, #1 - adds r1, r0, #0 - ldrh r0, [r3, #6] - adds r1, r1, r0 - ldrh r0, [r5, #0x2e] - subs r1, r1, r0 - adds r1, #4 - lsls r1, r1, #0x10 - lsrs r1, r1, #0x10 - ldrh r0, [r3, #8] - ldrh r2, [r5, #0x32] - subs r0, r0, r2 - adds r0, #0x8c - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - cmp r1, #8 - bhi _080352D6 - cmp r0, #8 - bls _08035314 -_080352D6: - mov r1, sb - ldr r0, [r1] - strb r6, [r0, #2] - ldrh r0, [r3, #6] - movs r1, #0x84 - lsls r1, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #0x10 - ldr r1, [r5, #0x2c] - subs r0, r0, r1 - ldrh r1, [r3, #8] - adds r1, #0x88 - lsls r1, r1, #0x10 - ldr r2, [r5, #0x30] - subs r1, r1, r2 - bl sub_080045DA - asrs r0, r0, #3 - strb r0, [r5, #0x15] - movs r0, #0x80 - lsls r0, r0, #1 - strh r0, [r5, #0x24] - adds r0, r5, #0 - bl ProcessMovement - adds r7, r5, #0 - adds r7, #0x79 - b _080353D6 - .align 2, 0 -_08035310: .4byte gRoomControls -_08035314: - ldrb r0, [r5, #0xb] - cmp r0, #0 - bne _08035358 - adds r0, r5, #0 - movs r1, #0x87 - movs r2, #5 - movs r3, #0 - bl CreateObjectWithParent - adds r0, r5, #0 - movs r1, #0x87 - movs r2, #5 - movs r3, #1 - bl CreateObjectWithParent - adds r0, r5, #0 - movs r1, #0x87 - movs r2, #5 - movs r3, #2 - bl CreateObjectWithParent - adds r0, r5, #0 - movs r1, #0x87 - movs r2, #5 - movs r3, #3 - bl CreateObjectWithParent - adds r0, r5, #0 - movs r1, #0x87 - movs r2, #5 - movs r3, #4 - bl CreateObjectWithParent - strb r6, [r5, #0xb] -_08035358: - mov r1, sb - ldr r0, [r1] - strb r4, [r0, #2] - adds r1, r5, #0 - adds r1, #0x79 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - adds r7, r1, #0 - b _080353D6 -_0803536C: - adds r0, r5, #0 - adds r0, #0x84 - ldr r1, [r0] - ldrb r1, [r1, #1] - subs r4, r1, #1 - mov sb, r0 - adds r7, r5, #0 - adds r7, #0x79 - cmp r4, #0 - beq _080353B8 - mov ip, sb - movs r0, #1 - mov sl, r0 - lsls r0, r4, #2 - subs r6, r0, #4 - movs r1, #3 - mov r8, r1 -_0803538E: - mov r1, ip - ldr r0, [r1] - adds r0, #0xc - adds r0, r0, r6 - ldr r3, [r0] - ldrb r2, [r3, #0x18] - lsls r1, r2, #0x1e - lsrs r1, r1, #0x1e - mov r0, sl - orrs r1, r0 - mov r0, r8 - ands r1, r0 - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, #0x18] - subs r6, #4 - subs r4, #1 - cmp r4, #0 - bne _0803538E -_080353B8: - ldr r1, _0803542C @ =gScreenTransition - ldr r0, [r1] - movs r1, #2 - ands r0, r1 - cmp r0, #0 - beq _080353D0 - adds r0, r5, #0 - movs r1, #0x87 - movs r2, #6 - movs r3, #0 - bl CreateObjectWithParent -_080353D0: - ldrb r0, [r7] - subs r0, #1 - strb r0, [r7] -_080353D6: - ldrb r0, [r7] - cmp r0, #0 - bne _08035468 - movs r0, #2 - strb r0, [r5, #0xd] - adds r4, r5, #0 - adds r4, #0x7c - ldrb r0, [r4] - adds r0, #1 - strb r0, [r4] - adds r0, r5, #0 - bl sub_080AE068 - ldrb r1, [r4] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - bne _08035430 - adds r1, r5, #0 - adds r1, #0x3f - movs r0, #0x5f - strb r0, [r1] - movs r1, #0x84 - lsls r1, r1, #1 - adds r0, r5, #0 - bl LoadFixedGFX - adds r0, r5, #0 - movs r1, #0xef - bl sub_0801D2B4 - adds r0, r5, #0 - movs r1, #0xef - bl sub_08036F14 - mov r1, sb - ldr r0, [r1] - ldr r0, [r0, #0xc] - movs r1, #1 - bl InitAnimationForceUpdate - b _0803545C - .align 2, 0 -_0803542C: .4byte gScreenTransition -_08035430: - adds r1, r5, #0 - adds r1, #0x3f - movs r0, #0x61 - strb r0, [r1] - ldr r1, _08035474 @ =0x00000109 - adds r0, r5, #0 - bl LoadFixedGFX - adds r0, r5, #0 - movs r1, #0xf0 - bl sub_0801D2B4 - adds r0, r5, #0 - movs r1, #0xf3 - bl sub_08036F14 - mov r1, sb - ldr r0, [r1] - ldr r0, [r0, #0xc] - movs r1, #2 - bl InitAnimationForceUpdate -_0803545C: - adds r0, r5, #0 - movs r1, #0x87 - movs r2, #8 - movs r3, #0 - bl CreateObjectWithParent -_08035468: - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08035474: .4byte 0x00000109 - -.else - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - adds r5, r0, #0 - adds r0, #0x7c - ldrb r0, [r0] - movs r6, #1 - adds r4, r6, #0 - ands r4, r0 - cmp r4, #0 - bne _080353EC - adds r0, r5, #0 - adds r0, #0x84 - ldr r1, [r0] - ldr r1, [r1, #0xc] - adds r1, #0x7d - ldrb r2, [r1] - mov sb, r0 - cmp r2, #0 - beq _0803532C - subs r0, r2, #1 - strb r0, [r1] -_0803532C: - ldr r3, _0803538C @ =gRoomControls - movs r0, #0x84 - lsls r0, r0, #1 - adds r1, r0, #0 - ldrh r2, [r3, #6] - adds r1, r1, r2 - ldrh r0, [r5, #0x2e] - subs r1, r1, r0 - adds r1, #4 - lsls r1, r1, #0x10 - lsrs r1, r1, #0x10 - ldrh r0, [r3, #8] - ldrh r2, [r5, #0x32] - subs r0, r0, r2 - adds r0, #0x8c - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - cmp r1, #8 - bhi _08035356 - cmp r0, #8 - bls _08035394 -_08035356: - mov r1, sb - ldr r0, [r1] - strb r6, [r0, #2] - ldrh r0, [r3, #6] - movs r2, #0x2e - ldrsh r1, [r5, r2] - ldr r2, _08035390 @ =0xFFFFFEF8 - adds r1, r1, r2 - subs r0, r0, r1 - ldrh r1, [r3, #8] - movs r3, #0x32 - ldrsh r2, [r5, r3] - subs r2, #0x88 - subs r1, r1, r2 - bl sub_080045DA - asrs r0, r0, #3 - strb r0, [r5, #0x15] - movs r0, #0x80 - lsls r0, r0, #1 - strh r0, [r5, #0x24] - adds r0, r5, #0 - bl ProcessMovement - adds r7, r5, #0 - adds r7, #0x79 - b _08035456 - .align 2, 0 -_0803538C: .4byte gRoomControls -_08035390: .4byte 0xFFFFFEF8 -_08035394: - ldrb r0, [r5, #0xb] - cmp r0, #0 - bne _080353D8 - adds r0, r5, #0 - movs r1, #0x87 - movs r2, #5 - movs r3, #0 - bl CreateObjectWithParent - adds r0, r5, #0 - movs r1, #0x87 - movs r2, #5 - movs r3, #1 - bl CreateObjectWithParent - adds r0, r5, #0 - movs r1, #0x87 - movs r2, #5 - movs r3, #2 - bl CreateObjectWithParent - adds r0, r5, #0 - movs r1, #0x87 - movs r2, #5 - movs r3, #3 - bl CreateObjectWithParent - adds r0, r5, #0 - movs r1, #0x87 - movs r2, #5 - movs r3, #4 - bl CreateObjectWithParent - strb r6, [r5, #0xb] -_080353D8: - mov r1, sb - ldr r0, [r1] - strb r4, [r0, #2] - adds r1, r5, #0 - adds r1, #0x79 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - adds r7, r1, #0 - b _08035456 -_080353EC: - adds r0, r5, #0 - adds r0, #0x84 - ldr r1, [r0] - ldrb r1, [r1, #1] - subs r4, r1, #1 - mov sb, r0 - adds r7, r5, #0 - adds r7, #0x79 - cmp r4, #0 - beq _08035438 - mov ip, sb - movs r2, #1 - mov sl, r2 - lsls r0, r4, #2 - subs r6, r0, #4 - movs r3, #3 - mov r8, r3 -_0803540E: - mov r1, ip - ldr r0, [r1] - adds r0, #0xc - adds r0, r0, r6 - ldr r3, [r0] - ldrb r2, [r3, #0x18] - lsls r1, r2, #0x1e - lsrs r1, r1, #0x1e - mov r0, sl - orrs r1, r0 - mov r0, r8 - ands r1, r0 - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, #0x18] - subs r6, #4 - subs r4, #1 - cmp r4, #0 - bne _0803540E -_08035438: - ldr r1, _080354AC @ =gScreenTransition - ldr r0, [r1] - movs r1, #2 - ands r0, r1 - cmp r0, #0 - beq _08035450 - adds r0, r5, #0 - movs r1, #0x87 - movs r2, #6 - movs r3, #0 - bl CreateObjectWithParent -_08035450: - ldrb r0, [r7] - subs r0, #1 - strb r0, [r7] -_08035456: - ldrb r0, [r7] - cmp r0, #0 - bne _080354E8 - movs r0, #2 - strb r0, [r5, #0xd] - adds r4, r5, #0 - adds r4, #0x7c - ldrb r0, [r4] - adds r0, #1 - strb r0, [r4] - adds r0, r5, #0 - bl sub_080AE068 - ldrb r1, [r4] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - bne _080354B0 - adds r1, r5, #0 - adds r1, #0x3f - movs r0, #0x5f - strb r0, [r1] - movs r1, #0x84 - lsls r1, r1, #1 - adds r0, r5, #0 - bl LoadFixedGFX - adds r0, r5, #0 - movs r1, #0xef - bl sub_0801D2B4 - adds r0, r5, #0 - movs r1, #0xef - bl sub_08036F14 - mov r2, sb - ldr r0, [r2] - ldr r0, [r0, #0xc] - movs r1, #1 - bl InitAnimationForceUpdate - b _080354DC - .align 2, 0 -_080354AC: .4byte gScreenTransition -_080354B0: - adds r1, r5, #0 - adds r1, #0x3f - movs r0, #0x61 - strb r0, [r1] - ldr r1, _080354F4 @ =0x00000109 - adds r0, r5, #0 - bl LoadFixedGFX - adds r0, r5, #0 - movs r1, #0xf0 - bl sub_0801D2B4 - adds r0, r5, #0 - movs r1, #0xf3 - bl sub_08036F14 - mov r3, sb - ldr r0, [r3] - ldr r0, [r0, #0xc] - movs r1, #2 - bl InitAnimationForceUpdate -_080354DC: - adds r0, r5, #0 - movs r1, #0x87 - movs r2, #8 - movs r3, #0 - bl CreateObjectWithParent -_080354E8: - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080354F4: .4byte 0x00000109 -.endif -.endif -.endif - - thumb_func_start sub_080354F8 -sub_080354F8: @ 0x080354F8 - push {lr} - adds r1, r0, #0 - adds r0, #0x84 - ldr r0, [r0] - ldr r0, [r0, #0xc] - adds r2, r0, #0 - adds r2, #0x7d - ldrb r0, [r2] - cmp r0, #0x80 - beq _08035512 - adds r0, #1 - strb r0, [r2] - b _08035522 -_08035512: - movs r0, #3 - strb r0, [r1, #0xd] - adds r1, #0x79 - movs r0, #0x96 - strb r0, [r1] - ldr r1, _08035524 @ =gRoomControls - ldr r0, _08035528 @ =gPlayerEntity - str r0, [r1, #0x30] -_08035522: - pop {pc} - .align 2, 0 -_08035524: .4byte gRoomControls -_08035528: .4byte gPlayerEntity - - thumb_func_start sub_0803552C -sub_0803552C: @ 0x0803552C - push {lr} - adds r2, r0, #0 - adds r1, r2, #0 - adds r1, #0x79 - ldrb r0, [r1] - subs r0, #1 - movs r3, #0 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - bne _08035570 - ldr r1, _08035574 @ =gUnk_080CF070 - adds r0, r2, #0 - adds r0, #0x7c - ldrb r0, [r0] - adds r0, r0, r1 - ldrb r0, [r0] - adds r1, r2, #0 - adds r1, #0x45 - strb r0, [r1] - ldrb r0, [r2, #0x10] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r2, #0x10] - movs r0, #1 - strb r0, [r2, #0xc] - strb r3, [r2, #0xd] - adds r0, r2, #0 - adds r0, #0x7e - strb r3, [r0] - adds r0, r2, #0 - bl sub_08036DA0 -_08035570: - pop {pc} - .align 2, 0 -_08035574: .4byte gUnk_080CF070 - - thumb_func_start sub_08035578 -sub_08035578: @ 0x08035578 - push {lr} - movs r1, #5 - strb r1, [r0, #0xd] - movs r1, #0x87 - movs r2, #9 - movs r3, #0 - bl CreateObjectWithParent - adds r1, r0, #0 - cmp r1, #0 - beq _08035592 - ldr r0, _08035594 @ =gRoomControls - str r1, [r0, #0x30] -_08035592: - pop {pc} - .align 2, 0 -_08035594: .4byte gRoomControls - - thumb_func_start sub_08035598 -sub_08035598: @ 0x08035598 - adds r2, r0, #0 - movs r1, #0 - movs r0, #6 - strb r0, [r2, #0xd] - adds r3, r2, #0 - adds r3, #0x79 - movs r0, #0x78 - strb r0, [r3] - adds r0, r2, #0 - adds r0, #0x80 - strb r1, [r0] - adds r0, #2 - strb r1, [r0] - bx lr - - thumb_func_start sub_080355B4 -sub_080355B4: @ 0x080355B4 - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - adds r7, r0, #0 - adds r1, r7, #0 - adds r1, #0x7b - ldrb r0, [r1] - subs r0, #4 - strb r0, [r1] - adds r1, #6 - ldrb r0, [r1] - adds r0, #8 - strb r0, [r1] - adds r4, r7, #0 - adds r4, #0x80 - ldrb r1, [r4] - movs r5, #0x80 - adds r0, r5, #0 - ands r0, r1 - cmp r0, #0 - beq _080355FA - bl Random - movs r1, #3 - ands r0, r1 - ldrb r1, [r4] - subs r1, r1, r0 - strb r1, [r4] - ands r1, r5 - lsls r1, r1, #0x18 - lsrs r1, r1, #0x18 - cmp r1, #0 - bne _08035616 - b _08035614 -_080355FA: - bl Random - movs r1, #3 - ands r0, r1 - ldrb r2, [r4] - adds r1, r0, r2 - strb r1, [r4] - lsls r0, r1, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x18 - bls _08035616 - movs r0, #0x80 - orrs r1, r0 -_08035614: - strb r1, [r4] -_08035616: - ldr r0, _080356E4 @ =gSineTable - mov r8, r0 - movs r1, #0x81 - adds r1, r1, r7 - mov sb, r1 - ldrb r0, [r1] - lsls r0, r0, #1 - add r0, r8 - movs r2, #0 - ldrsh r0, [r0, r2] - adds r6, r7, #0 - adds r6, #0x80 - ldrb r2, [r6] - movs r4, #0x7f - adds r1, r4, #0 - ands r1, r2 - lsls r1, r1, #8 - bl FixedMul - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - movs r5, #0x80 - lsls r5, r5, #1 - adds r1, r5, #0 - bl FixedDiv - lsrs r0, r0, #8 - adds r1, r7, #0 - adds r1, #0x62 - strb r0, [r1] - mov r1, sb - ldrb r0, [r1] - adds r0, #0x40 - lsls r0, r0, #1 - add r0, r8 - movs r2, #0 - ldrsh r0, [r0, r2] - ldrb r1, [r6] - ands r4, r1 - lsls r4, r4, #8 - adds r1, r4, #0 - bl FixedMul - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - adds r1, r5, #0 - bl FixedDiv - lsls r0, r0, #0x10 - asrs r0, r0, #8 - rsbs r0, r0, #0 - asrs r0, r0, #0x10 - adds r1, r7, #0 - adds r1, #0x63 - strb r0, [r1] - adds r1, #0x16 - ldrb r0, [r1] - cmp r0, #0 - bne _080356EC - ldr r0, _080356E8 @ =gScreenTransition - ldr r0, [r0] - movs r1, #0xf - ands r0, r1 - cmp r0, #0 - bne _080356B2 - adds r0, r7, #0 - movs r1, #0x48 - movs r2, #0 - bl CreateFx - adds r0, r7, #0 - adds r0, #0x84 - ldr r0, [r0] - ldr r0, [r0, #0x20] - movs r1, #0x48 - movs r2, #0 - bl CreateFx -_080356B2: - adds r1, r7, #0 - adds r1, #0x82 - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x79 - bne _080356F0 - adds r0, r7, #0 - adds r0, #0x84 - ldr r0, [r0] - ldr r0, [r0, #8] - adds r0, #0x45 - movs r1, #1 - strb r1, [r0] - movs r0, #0x94 - lsls r0, r0, #1 - bl SoundReq - adds r0, r7, #0 - bl sub_0804A7D4 - b _080356F0 - .align 2, 0 -_080356E4: .4byte gSineTable -_080356E8: .4byte gScreenTransition -_080356EC: - subs r0, #1 - strb r0, [r1] -_080356F0: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_080356F8 -sub_080356F8: @ 0x080356F8 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _08035718 @ =gUnk_080CF078 - ldrb r0, [r4, #0xc] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - ldrb r0, [r4, #0x19] - movs r1, #0xc0 - orrs r0, r1 - strb r0, [r4, #0x19] - pop {r4, pc} - .align 2, 0 -_08035718: .4byte gUnk_080CF078 - - thumb_func_start sub_0803571C -sub_0803571C: @ 0x0803571C - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - adds r4, r0, #0 - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r0, [r4, #0x18] - movs r1, #3 - orrs r0, r1 - strb r0, [r4, #0x18] - ldrb r0, [r4, #0xa] - cmp r0, #6 - bls _0803573A - b _08035974 -_0803573A: - lsls r0, r0, #2 - ldr r1, _08035744 @ =_08035748 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08035744: .4byte _08035748 -_08035748: @ jump table - .4byte _08035764 @ case 0 - .4byte _080358D8 @ case 1 - .4byte _080358D8 @ case 2 - .4byte _080358D8 @ case 3 - .4byte _080358D8 @ case 4 - .4byte _08035920 @ case 5 - .4byte _08035940 @ case 6 -_08035764: - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #4 - orrs r0, r1 - strb r0, [r2] - adds r0, r4, #0 - adds r0, #0x7c - movs r5, #0 - strb r5, [r0] - movs r0, #1 - strb r0, [r4, #0xe] - movs r0, #0x30 - bl zMalloc - adds r2, r0, #0 - adds r0, r4, #0 - adds r0, #0x84 - str r2, [r0] - mov r8, r0 - cmp r2, #0 - bne _0803579E - adds r0, r4, #0 - bl sub_0804A7D4 - b _080359A6 -_0803579E: - str r2, [r4, #0x64] - mov r1, r8 - ldr r0, [r1] - strb r5, [r0, #6] - ldr r1, [r1] - movs r0, #2 - strb r0, [r1] - mov r2, r8 - ldr r0, [r2] - strb r5, [r0, #2] - ldr r1, [r2] - movs r0, #5 - strb r0, [r1, #1] - ldrb r0, [r4, #0x19] - movs r1, #3 - orrs r0, r1 - strb r0, [r4, #0x19] - adds r2, r4, #0 - adds r2, #0x6d - ldrb r0, [r2] - movs r1, #1 - orrs r0, r1 - strb r0, [r2] - adds r0, r4, #0 - adds r0, #0x76 - movs r1, #0xa0 - strh r1, [r0] - subs r0, #2 - strh r1, [r0] - adds r0, #6 - strh r5, [r0] - movs r5, #0 - movs r0, #0x79 - adds r0, r0, r4 - mov sb, r0 - mov r7, r8 -_080357E6: - adds r6, r5, #1 - movs r0, #0x39 - adds r1, r6, #0 - bl CreateEnemy - adds r1, r0, #0 - str r1, [r4, #0x54] - cmp r1, #0 - beq _08035816 - adds r0, r4, #0 - bl CopyPosition - ldr r0, [r4, #0x54] - str r4, [r0, #0x50] - ldr r0, [r4, #0x54] - adds r0, #0x84 - ldr r1, [r7] - str r1, [r0] - ldr r1, [r7] - lsls r0, r5, #2 - adds r1, #0x20 - adds r1, r1, r0 - ldr r0, [r4, #0x54] - str r0, [r1] -_08035816: - adds r5, r6, #0 - cmp r5, #3 - bls _080357E6 - movs r0, #0x39 - movs r1, #5 - bl CreateEnemy - adds r1, r0, #0 - str r1, [r4, #0x54] - cmp r1, #0 - beq _08035840 - adds r0, r4, #0 - bl CopyPosition - ldr r0, [r4, #0x54] - str r4, [r0, #0x50] - ldr r0, [r4, #0x54] - adds r0, #0x84 - mov r2, r8 - ldr r1, [r2] - str r1, [r0] -_08035840: - movs r0, #0x39 - movs r1, #6 - bl CreateEnemy - adds r1, r0, #0 - str r1, [r4, #0x54] - cmp r1, #0 - beq _0803586A - adds r0, r4, #0 - bl CopyPosition - ldr r0, [r4, #0x54] - str r4, [r0, #0x50] - ldr r0, [r4, #0x54] - adds r0, #0x84 - mov r2, r8 - ldr r1, [r2] - str r1, [r0] - ldr r1, [r2] - ldr r0, [r4, #0x54] - str r0, [r1, #0xc] -_0803586A: - movs r5, #0 - mov r7, r8 -_0803586E: - movs r0, #0x39 - movs r1, #7 - bl CreateEnemy - str r0, [r4, #0x54] - adds r6, r5, #1 - cmp r0, #0 - beq _080358A0 - strb r5, [r0, #0xb] - ldr r1, [r4, #0x54] - adds r0, r4, #0 - bl CopyPosition - ldr r0, [r4, #0x54] - str r4, [r0, #0x50] - ldr r0, [r4, #0x54] - adds r0, #0x84 - ldr r1, [r7] - str r1, [r0] - ldr r1, [r7] - lsls r0, r6, #2 - adds r1, #0xc - adds r1, r1, r0 - ldr r0, [r4, #0x54] - str r0, [r1] -_080358A0: - adds r5, r6, #0 - cmp r5, #3 - bls _0803586E - movs r1, #0 - movs r0, #3 - strb r0, [r4, #0xc] - strb r1, [r4, #0xd] - movs r0, #0x3c - mov r1, sb - strb r0, [r1] - ldr r1, _080358D0 @ =gPlayerEntity - ldrb r2, [r1, #0x18] - subs r0, #0x40 - ands r0, r2 - strb r0, [r1, #0x18] - ldrh r0, [r4, #0x2e] - strh r0, [r1, #0x2e] - ldrh r0, [r4, #0x32] - subs r0, #0xa0 - strh r0, [r1, #0x32] - ldr r0, _080358D4 @ =gRoomControls - str r4, [r0, #0x30] - b _08035974 - .align 2, 0 -_080358D0: .4byte gPlayerEntity -_080358D4: .4byte gRoomControls -_080358D8: - movs r1, #0 - movs r0, #0x10 - strb r0, [r4, #0xe] - adds r0, r4, #0 - adds r0, #0x79 - strb r1, [r0] - ldrb r1, [r4, #0xa] - movs r2, #2 - adds r0, r2, #0 - ands r0, r1 - cmp r0, #0 - bne _080358F4 - strb r2, [r4, #0xf] - b _080358F8 -_080358F4: - movs r0, #0xfe - strb r0, [r4, #0xf] -_080358F8: - adds r0, r4, #0 - adds r0, #0x74 - movs r2, #0x80 - lsls r2, r2, #1 - strh r2, [r0] - ldrb r1, [r4, #0xa] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - bne _08035918 - adds r1, r4, #0 - adds r1, #0x76 - movs r0, #0xff - lsls r0, r0, #8 - strh r0, [r1] - b _08035974 -_08035918: - adds r0, r4, #0 - adds r0, #0x76 - strh r2, [r0] - b _08035974 -_08035920: - adds r0, r4, #0 - adds r0, #0x76 - movs r1, #0x80 - lsls r1, r1, #1 - strh r1, [r0] - subs r0, #2 - strh r1, [r0] - adds r1, r4, #0 - adds r1, #0x79 - movs r0, #0x1c - strb r0, [r1] - adds r0, r4, #0 - adds r0, #0x84 - ldr r0, [r0] - str r4, [r0, #8] - b _08035974 -_08035940: - adds r0, r4, #0 - adds r0, #0x76 - movs r2, #0 - movs r1, #0x80 - lsls r1, r1, #1 - strh r1, [r0] - subs r0, #2 - strh r1, [r0] - adds r3, r4, #0 - adds r3, #0x29 - ldrb r1, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r3] - adds r0, r4, #0 - adds r0, #0x79 - strb r2, [r0] - movs r0, #0x10 - strb r0, [r4, #0xe] - movs r0, #1 - strb r0, [r4, #0xf] - adds r1, r4, #0 - adds r1, #0x7d - movs r0, #0x80 - strb r0, [r1] -_08035974: - ldrb r0, [r4, #0xa] - cmp r0, #6 - beq _08035990 - ldr r0, _0803598C @ =gUnk_080CF08C - ldrb r1, [r4, #0xa] - lsls r1, r1, #2 - adds r1, r1, r0 - ldrb r1, [r1] - adds r0, r4, #0 - bl InitializeAnimation - b _080359A0 - .align 2, 0 -_0803598C: .4byte gUnk_080CF08C -_08035990: - ldr r0, _080359B0 @ =gUnk_080CF08C - ldrb r1, [r4, #0xa] - lsls r1, r1, #2 - adds r1, r1, r0 - ldrb r1, [r1] - adds r0, r4, #0 - bl InitAnimationForceUpdate -_080359A0: - adds r0, r4, #0 - bl sub_08035B94 -_080359A6: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080359B0: .4byte gUnk_080CF08C - - thumb_func_start sub_080359B4 -sub_080359B4: @ 0x080359B4 - push {r4, lr} - adds r4, r0, #0 - bl sub_08078B48 - ldr r1, _080359F0 @ =gUnk_02034490 - movs r0, #1 - strb r0, [r1] - adds r0, r4, #0 - bl sub_08036F60 - ldr r1, _080359F4 @ =gUnk_080CF0AC - ldrb r0, [r4, #0xd] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - adds r0, r4, #0 - adds r0, #0x76 - ldrh r1, [r0] - subs r0, #2 - ldrh r2, [r0] - adds r0, #6 - ldrh r3, [r0] - adds r0, r4, #0 - bl sub_0805EC9C - pop {r4, pc} - .align 2, 0 -_080359F0: .4byte gUnk_02034490 -_080359F4: .4byte gUnk_080CF0AC - - thumb_func_start sub_080359F8 -sub_080359F8: @ 0x080359F8 - push {lr} - adds r2, r0, #0 - adds r1, r2, #0 - adds r1, #0x79 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - bne _08035A22 - movs r0, #1 - strb r0, [r2, #0xd] - adds r1, #9 - adds r0, #0xff - strh r0, [r1] - adds r0, r2, #0 - adds r0, #0x84 - ldr r1, [r0] - movs r0, #2 - strb r0, [r1] -_08035A22: - pop {pc} - - thumb_func_start sub_08035A24 -sub_08035A24: @ 0x08035A24 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x7b - ldrb r0, [r0] - cmp r0, #0x80 - bne _08035A54 - adds r2, r4, #0 - adds r2, #0x79 - movs r1, #0 - movs r0, #0x3c - strb r0, [r2] - movs r0, #2 - strb r0, [r4, #0xd] - adds r0, r4, #0 - adds r0, #0x84 - ldr r0, [r0] - strb r1, [r0] - ldr r0, _08035A50 @ =0x00000159 - bl SoundReq - b _08035A64 - .align 2, 0 -_08035A50: .4byte 0x00000159 -_08035A54: - adds r1, r4, #0 - adds r1, #0x7a - adds r0, r4, #0 - adds r0, #0x82 - ldrh r0, [r0] - ldrh r2, [r1] - adds r0, r0, r2 - strh r0, [r1] -_08035A64: - adds r0, r4, #0 - movs r1, #0xf - bl sub_08036FAC - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08035A70 -sub_08035A70: @ 0x08035A70 - push {r4, lr} - adds r2, r0, #0 - adds r1, r2, #0 - adds r1, #0x79 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - bne _08035AA8 - movs r0, #3 - strb r0, [r2, #0xd] - movs r0, #0x3c - strb r0, [r1] - ldr r2, _08035AAC @ =gPlayerEntity - ldrb r3, [r2, #0x18] - lsls r1, r3, #0x1e - lsrs r1, r1, #0x1e - movs r4, #1 - orrs r1, r4 - subs r0, #0x40 - ands r0, r3 - orrs r0, r1 - strb r0, [r2, #0x18] - ldr r0, _08035AB0 @ =gRoomControls - str r2, [r0, #0x30] - strb r4, [r0, #0xe] -_08035AA8: - pop {r4, pc} - .align 2, 0 -_08035AAC: .4byte gPlayerEntity -_08035AB0: .4byte gRoomControls - - thumb_func_start sub_08035AB4 -sub_08035AB4: @ 0x08035AB4 - push {r4, r5, r6, lr} - adds r6, r0, #0 - adds r5, r6, #0 - adds r5, #0x79 - ldrb r0, [r5] - subs r0, #1 - strb r0, [r5] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - bne _08035AE4 - ldr r1, _08035AE8 @ =gPlayerEntity - movs r0, #0x10 - strb r0, [r1, #0x15] - movs r4, #4 - strb r4, [r1, #0x14] - movs r0, #0x1e - movs r1, #0 - movs r2, #0 - bl sub_08078AC0 - movs r0, #0x3c - strb r0, [r5] - strb r4, [r6, #0xd] -_08035AE4: - pop {r4, r5, r6, pc} - .align 2, 0 -_08035AE8: .4byte gPlayerEntity - - thumb_func_start sub_08035AEC -sub_08035AEC: @ 0x08035AEC - push {lr} - adds r3, r0, #0 - adds r2, r3, #0 - adds r2, #0x79 - ldrb r0, [r2] - subs r1, r0, #1 - strb r1, [r2] - lsls r0, r1, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - bne _08035B18 - movs r0, #5 - strb r0, [r3, #0xd] - movs r0, #0x2d - strb r0, [r2] - ldr r1, _08035B14 @ =gPlayerEntity - movs r0, #0 - strb r0, [r1, #0x14] - b _08035B2C - .align 2, 0 -_08035B14: .4byte gPlayerEntity -_08035B18: - lsls r0, r1, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x1e - bne _08035B2C - ldr r0, _08035B30 @ =gPlayerEntity - movs r2, #0x18 - rsbs r2, r2, #0 - movs r1, #0xc - bl CreateSpeechBubbleExclamationMark -_08035B2C: - pop {pc} - .align 2, 0 -_08035B30: .4byte gPlayerEntity - - thumb_func_start sub_08035B34 -sub_08035B34: @ 0x08035B34 - push {r4, r5, lr} - adds r3, r0, #0 - ldr r2, _08035B70 @ =gPlayerEntity - ldrb r5, [r2, #0x14] - cmp r5, #4 - bne _08035B7C - adds r2, r3, #0 - adds r2, #0x79 - ldrb r0, [r2] - adds r1, r0, #1 - strb r1, [r2] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x1e - bls _08035B92 - movs r4, #0 - movs r0, #1 - strb r0, [r3, #0xc] - strb r4, [r3, #0xd] - ldr r0, _08035B74 @ =gRoomControls - strb r5, [r0, #0xe] - adds r0, r3, #0 - bl sub_08036C90 - ldr r0, _08035B78 @ =gUnk_02034490 - strb r4, [r0] - movs r0, #0x2e - bl SoundReq - b _08035B92 - .align 2, 0 -_08035B70: .4byte gPlayerEntity -_08035B74: .4byte gRoomControls -_08035B78: .4byte gUnk_02034490 -_08035B7C: - adds r1, r3, #0 - adds r1, #0x79 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - bne _08035B92 - movs r0, #4 - strb r0, [r2, #0x14] -_08035B92: - pop {r4, r5, pc} - - thumb_func_start sub_08035B94 -sub_08035B94: @ 0x08035B94 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r5, r0, #0 - ldrb r0, [r5, #0xa] - cmp r0, #0 - beq _08035BAE - ldr r0, [r5, #0x50] - adds r0, #0x3d - ldrb r0, [r0] - adds r1, r5, #0 - adds r1, #0x3d - strb r0, [r1] -_08035BAE: - ldrb r0, [r5, #0xa] - cmp r0, #7 - bls _08035BB6 - b _08035F6C -_08035BB6: - lsls r0, r0, #2 - ldr r1, _08035BC0 @ =_08035BC4 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08035BC0: .4byte _08035BC4 -_08035BC4: @ jump table - .4byte _08035F16 @ case 0 - .4byte _08035BE4 @ case 1 - .4byte _08035BE4 @ case 2 - .4byte _08035BE4 @ case 3 - .4byte _08035BE4 @ case 4 - .4byte _08035E78 @ case 5 - .4byte _08035DB0 @ case 6 - .4byte _08035D14 @ case 7 -_08035BE4: - ldr r0, [r5, #0x50] - adds r0, #0x6d - ldrb r1, [r0] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _08035BF6 - bl DeleteThisEntity -_08035BF6: - adds r1, r5, #0 - adds r1, #0x84 - ldr r0, [r1] - ldr r0, [r0, #8] - adds r0, #0x45 - ldrb r0, [r0] - adds r6, r1, #0 - adds r7, r5, #0 - adds r7, #0x76 - movs r1, #0x74 - adds r1, r1, r5 - mov r8, r1 - cmp r0, #1 - bne _08035C42 - ldrh r1, [r7] - movs r2, #0 - ldrsh r0, [r7, r2] - cmp r0, #0 - bge _08035C20 - subs r0, r1, #4 - b _08035C22 -_08035C20: - adds r0, r1, #4 -_08035C22: - strh r0, [r7] - adds r0, r5, #0 - adds r0, #0x74 - ldrh r2, [r0] - movs r3, #0 - ldrsh r1, [r0, r3] - mov r8, r0 - cmp r1, #0 - bge _08035C3C - subs r0, r2, #4 - mov r1, r8 - strh r0, [r1] - b _08035C42 -_08035C3C: - adds r0, r2, #4 - mov r2, r8 - strh r0, [r2] -_08035C42: - ldr r0, [r5, #0x50] - adds r1, r5, #0 - bl sub_0806FAD8 - ldr r0, [r6] - ldrb r0, [r0, #2] - cmp r0, #0 - bne _08035C66 - ldr r1, [r5, #0x50] - ldrb r0, [r1, #0xc] - cmp r0, #3 - beq _08035C66 - ldrb r0, [r1, #0xd] - subs r0, #3 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #1 - bls _08035C82 -_08035C66: - movs r0, #0xf - ldrsb r0, [r5, r0] - cmp r0, #0 - bge _08035C76 - ldr r0, [r6] - ldrb r0, [r0] - rsbs r0, r0, #0 - b _08035C7A -_08035C76: - ldr r0, [r6] - ldrb r0, [r0] -_08035C7A: - strb r0, [r5, #0xf] - adds r0, r5, #0 - bl sub_08036998 -_08035C82: - ldr r4, [r5, #0x50] - adds r0, r4, #0 - adds r0, #0x76 - ldrh r1, [r0] - movs r0, #0x80 - lsls r0, r0, #9 - bl __divsi3 - adds r3, r0, #0 - lsls r0, r3, #0xd - lsrs r3, r0, #8 - ldr r0, _08035CB0 @ =0xFFFFE000 - adds r3, r3, r0 - ldr r0, [r6] - ldr r0, [r0, #8] - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #1 - bne _08035CB4 - movs r1, #0x88 - lsls r1, r1, #6 - adds r3, r3, r1 - b _08035CBC - .align 2, 0 -_08035CB0: .4byte 0xFFFFE000 -_08035CB4: - lsrs r0, r3, #1 - movs r2, #0x88 - lsls r2, r2, #6 - adds r3, r0, r2 -_08035CBC: - adds r2, r4, #0 - adds r2, #0x7b - ldr r1, _08035D0C @ =gUnk_080CF0D8 - ldrb r0, [r5, #0xa] - subs r0, #1 - adds r0, r0, r1 - ldrb r0, [r0] - ldrb r2, [r2] - adds r0, r0, r2 - rsbs r0, r0, #0 - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - adds r0, r5, #0 - adds r2, r3, #0 - bl sub_08036914 - ldr r2, [r5, #0x50] - adds r2, #0x7b - ldr r1, _08035D10 @ =gUnk_080CF0DC - ldrb r0, [r5, #0xa] - subs r0, #1 - adds r0, r0, r1 - ldrb r1, [r0] - ldrb r2, [r2] - adds r1, r1, r2 - adds r0, r5, #0 - adds r0, #0x79 - ldrb r0, [r0] - adds r0, r0, r1 - adds r1, r5, #0 - adds r1, #0x7b - strb r0, [r1] - ldrh r1, [r7] - mov r3, r8 - ldrh r2, [r3] - adds r0, r5, #0 - adds r0, #0x7a - ldrh r3, [r0] - b _08035E70 - .align 2, 0 -_08035D0C: .4byte gUnk_080CF0D8 -_08035D10: .4byte gUnk_080CF0DC -_08035D14: - adds r4, r5, #0 - adds r4, #0x84 - ldr r0, [r4] - ldr r0, [r0, #8] - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #1 - bhi _08035D28 - bl DeleteThisEntity -_08035D28: - ldr r0, [r4] - ldrb r0, [r0, #1] - subs r0, #2 - ldrb r1, [r5, #0xb] - cmp r0, r1 - bge _08035D38 - bl DeleteThisEntity -_08035D38: - ldr r0, [r5, #0x50] - adds r1, r5, #0 - bl ResolveEntityOnTop - ldr r0, [r4] - ldrb r0, [r0, #1] - subs r0, #2 - ldrb r2, [r5, #0xb] - cmp r0, r2 - bne _08035D8A - ldr r0, [r5, #0x50] - adds r1, r5, #0 - bl ResolveEntityOnTop - ldr r4, [r5, #0x50] - adds r0, r4, #0 - adds r0, #0x74 - ldrh r1, [r0] - movs r0, #0x80 - lsls r0, r0, #9 - bl __divsi3 - adds r3, r0, #0 - lsls r0, r3, #0xd - lsrs r3, r0, #8 - adds r4, #0x7b - ldrb r0, [r4] - rsbs r0, r0, #0 - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - adds r0, r5, #0 - adds r2, r3, #0 - bl sub_08036914 - ldr r0, [r5, #0x50] - adds r0, #0x7b - ldrb r0, [r0] - rsbs r0, r0, #0 - adds r1, r5, #0 - adds r1, #0x7b - strb r0, [r1] -_08035D8A: - ldr r0, [r5, #0x50] - adds r0, #0x7c - ldrb r1, [r0] - movs r3, #1 - adds r0, r3, #0 - ands r0, r1 - cmp r0, #0 - beq _08035D9C - b _08035F6C -_08035D9C: - ldrb r2, [r5, #0x18] - lsls r1, r2, #0x1e - lsrs r1, r1, #0x1e - orrs r1, r3 - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5, #0x18] - b _08035F6C -_08035DB0: - adds r6, r5, #0 - adds r6, #0x84 - ldr r0, [r6] - ldr r0, [r0, #8] - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #1 - bhi _08035DC4 - bl DeleteThisEntity -_08035DC4: - adds r0, r5, #0 - bl UpdateAnimationSingleFrame - ldr r0, [r5, #0x50] - adds r0, #0x7c - ldrb r1, [r0] - movs r3, #1 - adds r0, r3, #0 - ands r0, r1 - cmp r0, #0 - beq _08035E24 - adds r0, r5, #0 - adds r0, #0x7d - ldrb r1, [r0] - adds r0, r5, #0 - movs r2, #0x10 - bl sub_08036AF0 - adds r2, r5, #0 - adds r2, #0x41 - ldrb r1, [r2] - movs r3, #0x7f - adds r0, r3, #0 - ands r0, r1 - adds r4, r2, #0 - cmp r0, #7 - bne _08035E56 - ldrb r1, [r5, #0x10] - adds r0, r3, #0 - ands r0, r1 - strb r0, [r5, #0x10] - adds r0, r5, #0 - movs r1, #0x87 - movs r2, #0 - movs r3, #0 - bl CreateObjectWithParent - adds r1, r0, #0 - str r1, [r5, #0x54] - cmp r1, #0 - beq _08035E56 - ldr r0, [r5, #0x50] - str r0, [r1, #0x50] - ldr r0, [r5, #0x54] - adds r0, #0x84 - ldr r1, [r6] - str r1, [r0] - b _08035E56 -_08035E24: - ldrb r1, [r5, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r5, #0x10] - ldrb r2, [r5, #0x18] - lsls r1, r2, #0x1e - lsrs r1, r1, #0x1e - orrs r1, r3 - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5, #0x18] - adds r0, r5, #0 - bl sub_08036998 - adds r0, r5, #0 - adds r0, #0x7d - ldrb r1, [r0] - adds r0, r5, #0 - movs r2, #4 - bl sub_080369D0 - adds r4, r5, #0 - adds r4, #0x41 -_08035E56: - movs r0, #0 - strb r0, [r4] - adds r0, r5, #0 - adds r0, #0x76 - ldrh r1, [r0] - subs r0, #2 - ldrh r2, [r0] - adds r0, #6 - ldrh r3, [r0] - rsbs r3, r3, #0 - movs r0, #0x80 - lsls r0, r0, #8 - eors r3, r0 -_08035E70: - adds r0, r5, #0 - bl sub_0805EC9C - b _08035F6C -_08035E78: - adds r4, r5, #0 - adds r4, #0x45 - ldrb r0, [r4] - cmp r0, #1 - bne _08035E88 - movs r0, #0 - strb r0, [r4] - b _08035F6C -_08035E88: - ldr r0, [r5, #0x50] - adds r1, r5, #0 - bl sub_0806FAD8 - ldr r0, [r5, #0x50] - ldrb r0, [r0, #0xd] - adds r7, r5, #0 - adds r7, #0x76 - adds r6, r5, #0 - adds r6, #0x79 - cmp r0, #4 - beq _08035EC2 - ldrb r0, [r4] - cmp r0, #1 - beq _08035EC2 - ldrb r0, [r6] - cmp r0, #0x1c - bls _08035EB0 - subs r0, #1 - strb r0, [r6] -_08035EB0: - ldrh r0, [r7] - movs r1, #0x80 - lsls r1, r1, #1 - cmp r0, r1 - bls _08035EC0 - subs r0, #1 - strh r0, [r7] - b _08035EC2 -_08035EC0: - strh r1, [r7] -_08035EC2: - ldr r4, [r5, #0x50] - adds r0, r4, #0 - adds r0, #0x74 - ldrh r1, [r0] - movs r0, #0x80 - lsls r0, r0, #9 - bl __divsi3 - adds r3, r0, #0 - ldrb r0, [r6] - lsls r0, r0, #8 - muls r0, r3, r0 - lsrs r3, r0, #8 - adds r4, #0x7b - ldrb r0, [r4] - adds r0, #0x80 - rsbs r0, r0, #0 - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - adds r0, r5, #0 - adds r2, r3, #0 - bl sub_08036914 - ldr r0, [r5, #0x50] - adds r0, #0x7b - ldrb r0, [r0] - adds r1, r5, #0 - adds r1, #0x7b - strb r0, [r1] - ldrh r1, [r7] - adds r0, r5, #0 - adds r0, #0x74 - ldrh r2, [r0] - adds r0, #6 - ldrh r3, [r0] - adds r0, r5, #0 - bl sub_0805EC9C - adds r0, r5, #0 - bl sub_0800445C - b _08035F6C -_08035F16: - adds r0, r5, #0 - bl sub_0800445C - adds r0, r5, #0 - bl sub_08036F60 - adds r0, r5, #0 - adds r0, #0x84 - ldr r1, [r0] - ldrb r0, [r1, #6] - cmp r0, #0 - beq _08035F48 - subs r0, #1 - strb r0, [r1, #6] - ldr r0, _08035F74 @ =gScreenTransition - ldr r0, [r0] - movs r1, #3 - ands r0, r1 - cmp r0, #0 - bne _08035F48 - adds r0, r5, #0 - movs r1, #0xf - movs r2, #3 - bl CreateProjectileWithParent -_08035F48: - ldr r1, _08035F78 @ =gUnk_080CF0C4 - ldrb r0, [r5, #0xd] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r5, #0 - bl _call_via_r1 - adds r0, r5, #0 - adds r0, #0x76 - ldrh r1, [r0] - subs r0, #2 - ldrh r2, [r0] - adds r0, #6 - ldrh r3, [r0] - adds r0, r5, #0 - bl sub_0805EC9C -_08035F6C: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08035F74: .4byte gScreenTransition -_08035F78: .4byte gUnk_080CF0C4 - - thumb_func_start sub_08035F7C -sub_08035F7C: @ 0x08035F7C - push {r4, r5, lr} - adds r4, r0, #0 - ldr r2, _08035FD0 @ =gPlayerEntity - ldr r0, [r2, #0x2c] - ldr r1, [r4, #0x2c] - subs r0, r0, r1 - ldr r1, [r2, #0x30] - ldr r2, [r4, #0x30] - subs r1, r1, r2 - bl sub_080045DA - adds r1, r4, #0 - adds r1, #0x7b - ldrb r1, [r1] - rsbs r1, r1, #0 - movs r2, #0x80 - eors r1, r2 - subs r0, r0, r1 - lsls r0, r0, #0x18 - lsrs r2, r0, #0x18 - adds r0, r4, #0 - adds r0, #0x7c - ldrb r1, [r0] - movs r0, #1 - ands r0, r1 - movs r1, #0x20 - cmp r0, #0 - bne _08035FB6 - movs r1, #8 -_08035FB6: - cmn r2, r1 - ble _08035FEE - cmp r2, r1 - bge _08035FEE - adds r0, r4, #0 - adds r0, #0x81 - ldrb r0, [r0] - cmp r0, #0xff - beq _08035FD4 - adds r0, r4, #0 - bl sub_08036C90 - b _08036074 - .align 2, 0 -_08035FD0: .4byte gPlayerEntity -_08035FD4: - adds r0, r4, #0 - adds r0, #0x78 - ldrb r0, [r0] - cmp r0, #0 - bne _08035FE6 - adds r0, r4, #0 - bl sub_08036E00 - b _08036028 -_08035FE6: - adds r0, r4, #0 - bl sub_08036D70 - b _08036028 -_08035FEE: - cmp r2, #0x80 - bls _0803600E - adds r2, r4, #0 - adds r2, #0x7a - adds r0, r4, #0 - adds r0, #0x82 - ldrh r0, [r0] - ldrh r1, [r2] - adds r0, r0, r1 - movs r1, #0 - strh r0, [r2] - adds r0, r4, #0 - adds r0, #0x84 - ldr r0, [r0] - strb r1, [r0, #4] - b _08036028 -_0803600E: - adds r2, r4, #0 - adds r2, #0x7a - adds r1, r4, #0 - adds r1, #0x82 - ldrh r0, [r2] - ldrh r1, [r1] - subs r0, r0, r1 - strh r0, [r2] - adds r0, r4, #0 - adds r0, #0x84 - ldr r1, [r0] - movs r0, #1 - strb r0, [r1, #4] -_08036028: - adds r0, r4, #0 - adds r0, #0x7b - ldrb r0, [r0] - rsbs r0, r0, #0 - movs r1, #0x80 - eors r0, r1 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x1b - strb r0, [r4, #0x15] - adds r5, r4, #0 - adds r5, #0x7c - ldrb r1, [r5] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _0803606C - adds r3, r4, #0 - adds r3, #0x82 - ldrh r2, [r3] - ldr r0, _08036060 @ =0x0000027F - cmp r2, r0 - bhi _0803606C - ldrb r1, [r5] - cmp r1, #1 - beq _08036064 - cmp r1, #3 - beq _08036068 - b _0803606C - .align 2, 0 -_08036060: .4byte 0x0000027F -_08036064: - adds r0, r2, #1 - b _0803606A -_08036068: - adds r0, r2, #2 -_0803606A: - strh r0, [r3] -_0803606C: - adds r0, r4, #0 - movs r1, #0x1f - bl sub_08036FAC -_08036074: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08036078 -sub_08036078: @ 0x08036078 - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r4, #0 - adds r5, #0x79 - ldrb r0, [r5] - subs r0, #1 - strb r0, [r5] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - beq _080360A0 - adds r0, r4, #0 - adds r0, #0x7c - ldrb r1, [r0] - cmp r1, #0 - beq _080360A0 - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _080360B2 -_080360A0: - adds r1, r4, #0 - adds r1, #0x78 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - adds r0, r4, #0 - bl sub_08036D4C - b _080360BE -_080360B2: - adds r0, r4, #0 - bl ProcessMovement - cmp r0, #0 - bne _080360BE - strb r0, [r5] -_080360BE: - adds r0, r4, #0 - movs r1, #0x1f - bl sub_08036FAC - pop {r4, r5, pc} - - thumb_func_start sub_080360C8 -sub_080360C8: @ 0x080360C8 - push {lr} - adds r2, r0, #0 - adds r1, r2, #0 - adds r1, #0x79 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - bne _080360E4 - adds r0, r2, #0 - bl sub_08036DA0 -_080360E4: - pop {pc} - .align 2, 0 - - thumb_func_start sub_080360E8 -sub_080360E8: @ 0x080360E8 - push {r4, lr} - adds r4, r0, #0 - adds r1, r4, #0 - adds r1, #0x79 - ldrb r0, [r1] - cmp r0, #0 - bne _08036178 - adds r0, r4, #0 - bl ProcessMovement - movs r2, #0 - ldrb r0, [r4, #0x15] - cmp r0, #0 - beq _08036116 - cmp r0, #0x10 - beq _08036116 - ldrh r0, [r4, #0x2a] - movs r1, #0xee - lsls r1, r1, #8 - ands r1, r0 - rsbs r0, r1, #0 - orrs r0, r1 - lsrs r2, r0, #0x1f -_08036116: - ldrb r0, [r4, #0x15] - cmp r0, #0x18 - beq _0803612C - cmp r0, #8 - beq _0803612C - ldrh r1, [r4, #0x2a] - movs r0, #0xee - ands r0, r1 - cmp r0, #0 - beq _0803612C - movs r2, #1 -_0803612C: - cmp r2, #0 - beq _0803617C - adds r1, r4, #0 - adds r1, #0x42 - movs r0, #0x20 - strb r0, [r1] - adds r1, #4 - movs r0, #0x80 - lsls r0, r0, #2 - strh r0, [r1] - ldrb r0, [r4, #0x15] - movs r1, #0x10 - eors r0, r1 - adds r1, r4, #0 - adds r1, #0x3e - strb r0, [r1] - adds r0, r4, #0 - adds r0, #0x84 - ldr r1, [r0] - ldrb r0, [r1, #6] - adds r0, #0x3c - strb r0, [r1, #6] - adds r0, r4, #0 - bl sub_08036C90 - movs r0, #0x3c - movs r1, #0 - bl sub_08080964 - movs r0, #0xac - lsls r0, r0, #1 - bl SoundReq - movs r0, #0xa6 - lsls r0, r0, #1 - bl SoundReq - b _0803617C -_08036178: - subs r0, #1 - strb r0, [r1] -_0803617C: - adds r0, r4, #0 - movs r1, #0xf - bl sub_08036FAC - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08036188 -sub_08036188: @ 0x08036188 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r1, _080361EC @ =gUnk_080CF0E0 - ldrb r0, [r5, #0xb] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r5, #0 - bl _call_via_r1 - adds r0, r5, #0 - bl sub_08036FE4 - adds r0, r5, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #0 - beq _080361EA - ldr r4, _080361F0 @ =gPlayerEntity - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - adds r1, r4, #0 - adds r1, #0x38 - movs r0, #2 - strb r0, [r1] - bl sub_08078B48 - bl sub_08077B20 - str r5, [r4, #0x50] - adds r0, r5, #0 - adds r0, #0x7b - ldrb r1, [r0] - adds r1, #0x80 - rsbs r1, r1, #0 - lsls r1, r1, #0x18 - lsrs r1, r1, #0x18 - movs r2, #0xe0 - lsls r2, r2, #6 - adds r0, r4, #0 - bl sub_08036914 -_080361EA: - pop {r4, r5, pc} - .align 2, 0 -_080361EC: .4byte gUnk_080CF0E0 -_080361F0: .4byte gPlayerEntity - - thumb_func_start sub_080361F4 -sub_080361F4: @ 0x080361F4 - push {lr} - adds r2, r0, #0 - adds r0, #0x7d - ldrb r0, [r0] - cmp r0, #4 - bne _08036208 - adds r0, r2, #0 - bl sub_08036D4C - b _08036236 -_08036208: - adds r1, r2, #0 - adds r1, #0x82 - movs r0, #0x80 - lsls r0, r0, #1 - strh r0, [r1] - movs r0, #1 - strb r0, [r2, #0xb] - subs r1, #6 - ldrb r1, [r1] - ands r0, r1 - cmp r0, #0 - bne _08036228 - adds r1, r2, #0 - adds r1, #0x79 - movs r0, #0x16 - b _0803622E -_08036228: - adds r1, r2, #0 - adds r1, #0x79 - movs r0, #0 -_0803622E: - strb r0, [r1] - ldr r0, _08036238 @ =0x00000155 - bl SoundReq -_08036236: - pop {pc} - .align 2, 0 -_08036238: .4byte 0x00000155 - - thumb_func_start sub_0803623C -sub_0803623C: @ 0x0803623C - push {lr} - adds r2, r0, #0 - adds r1, r2, #0 - adds r1, #0x74 - ldrh r0, [r1] - cmp r0, #0xbf - bhi _08036250 - adds r0, #1 - strh r0, [r1] - b _080362A0 -_08036250: - adds r3, r2, #0 - adds r3, #0x79 - ldrb r0, [r3] - subs r0, #1 - strb r0, [r3] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - bne _080362A0 - adds r0, r2, #0 - adds r0, #0x7d - ldrb r1, [r0] - cmp r1, #1 - bne _08036292 - movs r0, #3 - strb r0, [r2, #0xb] - adds r0, r2, #0 - adds r0, #0x7c - ldrb r0, [r0] - ands r1, r0 - cmp r1, #0 - beq _08036280 - movs r0, #0x3c - b _08036282 -_08036280: - movs r0, #0x78 -_08036282: - strb r0, [r3] - adds r0, r2, #0 - adds r0, #0x84 - ldr r1, [r0] - subs r0, #9 - ldrb r0, [r0] - strb r0, [r1, #3] - b _0803629A -_08036292: - movs r0, #2 - strb r0, [r2, #0xb] - movs r0, #0x2d - strb r0, [r3] -_0803629A: - ldr r0, _080362A4 @ =0x00000155 - bl SoundReq -_080362A0: - pop {pc} - .align 2, 0 -_080362A4: .4byte 0x00000155 - - thumb_func_start sub_080362A8 -sub_080362A8: @ 0x080362A8 - push {r4, lr} - adds r2, r0, #0 - movs r0, #0x79 - adds r0, r0, r2 - mov ip, r0 - ldrb r0, [r0] - cmp r0, #0 - bne _080362FA - adds r4, r2, #0 - adds r4, #0x76 - adds r1, r2, #0 - adds r1, #0x74 - ldrh r3, [r1] - ldrh r0, [r4] - cmp r0, r3 - bhs _080362D0 - adds r0, r3, #0 - subs r0, #8 - strh r0, [r1] - b _08036300 -_080362D0: - movs r0, #3 - strb r0, [r2, #0xb] - ldrh r0, [r4] - strh r0, [r1] - adds r0, r2, #0 - adds r0, #0x7d - ldrb r0, [r0] - cmp r0, #2 - beq _080362E6 - movs r0, #0x3c - b _080362FC -_080362E6: - movs r0, #0 - mov r1, ip - strb r0, [r1] - adds r0, r2, #0 - movs r1, #0x87 - movs r2, #4 - movs r3, #0 - bl CreateObjectWithParent - b _08036300 -_080362FA: - subs r0, #1 -_080362FC: - mov r1, ip - strb r0, [r1] -_08036300: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08036304 -sub_08036304: @ 0x08036304 - push {lr} - mov ip, r0 - ldr r0, _08036328 @ =gScreenTransition - ldr r0, [r0] - movs r1, #2 - ands r0, r1 - cmp r0, #0 - beq _0803632C - mov r2, ip - adds r2, #0x84 - ldr r0, [r2] - ldr r1, [r0, #8] - adds r1, #0x76 - ldrh r0, [r1] - subs r0, #8 - strh r0, [r1] - b _08036350 - .align 2, 0 -_08036328: .4byte gScreenTransition -_0803632C: - mov r2, ip - adds r2, #0x84 - ldr r0, [r2] - ldr r1, [r0, #8] - adds r1, #0x76 - ldrh r0, [r1] - adds r0, #8 - strh r0, [r1] - ldr r0, [r2] - ldr r0, [r0, #8] - adds r3, r0, #0 - adds r3, #0x76 - ldrh r0, [r3] - movs r1, #0xc0 - lsls r1, r1, #1 - cmp r0, r1 - bls _08036350 - strh r1, [r3] -_08036350: - mov r0, ip - adds r0, #0x7d - ldrb r1, [r0] - adds r3, r0, #0 - cmp r1, #1 - beq _0803637A - ldr r0, [r2] - ldr r0, [r0, #8] - adds r1, r0, #0 - adds r1, #0x79 - ldrb r0, [r1] - cmp r0, #0x1f - bhi _0803637A - adds r0, #1 - strb r0, [r1] - ldr r0, [r2] - ldr r1, [r0, #8] - adds r1, #0x76 - ldrh r0, [r1] - adds r0, #8 - strh r0, [r1] -_0803637A: - ldr r0, _0803638C @ =gUnk_080CF0F0 - ldrb r1, [r3] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - mov r0, ip - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0803638C: .4byte gUnk_080CF0F0 - - thumb_func_start sub_08036390 -sub_08036390: @ 0x08036390 - push {r4, lr} - adds r4, r0, #0 - movs r1, #0xf - movs r2, #0 - bl CreateProjectileWithParent - str r0, [r4, #0x54] - cmp r0, #0 - beq _080363B4 - str r4, [r0, #0x50] - ldr r0, [r4, #0x54] - adds r1, r4, #0 - adds r1, #0x7b - ldrb r1, [r1] - rsbs r1, r1, #0 - movs r2, #0x80 - eors r1, r2 - strb r1, [r0, #0x15] -_080363B4: - adds r0, r4, #0 - adds r0, #0x84 - ldr r0, [r0] - ldr r1, [r0, #8] - adds r1, #0x79 - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - adds r0, r4, #0 - bl sub_08036C90 - pop {r4, pc} - - thumb_func_start sub_080363CC -sub_080363CC: @ 0x080363CC - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r4, r0, #0 - adds r7, r4, #0 - adds r7, #0x80 - ldrb r2, [r7] - cmp r2, #0 - bne _080364CC - ldr r5, _08036498 @ =gPlayerEntity - ldr r0, [r5, #0x2c] - ldr r1, [r4, #0x2c] - subs r0, r0, r1 - ldr r1, [r5, #0x30] - ldr r2, [r4, #0x30] - subs r1, r1, r2 - bl sub_080045DA - strb r0, [r4, #0x15] - adds r2, r4, #0 - adds r2, #0x7b - ldrb r0, [r2] - adds r0, #0x80 - rsbs r0, r0, #0 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - ldrb r1, [r4, #0x15] - subs r3, r0, r1 - mov r8, r2 - cmp r3, #0 - bge _0803640C - rsbs r3, r3, #0 -_0803640C: - adds r6, r4, #0 - adds r6, #0x79 - cmp r3, #0xf - bgt _080364AA - adds r0, r4, #0 - adds r1, r5, #0 - movs r2, #0xf0 - bl sub_0806FC80 - cmp r0, #0 - beq _080364AA - ldr r2, _0803649C @ =gPlayerState - ldr r1, [r2, #0x30] - movs r0, #0x80 - lsls r0, r0, #4 - ands r0, r1 - cmp r0, #0 - bne _080364A4 - ldrb r1, [r5, #0x10] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _080364AA - movs r1, #0xa0 - lsls r1, r1, #2 - mov r0, r8 - ldrb r2, [r0] - rsbs r2, r2, #0 - adds r0, r5, #0 - bl sub_0806F62C - adds r0, r4, #0 - adds r1, r5, #0 - movs r2, #0x48 - bl sub_0806FC80 - cmp r0, #0 - beq _080364AA - movs r0, #1 - strb r0, [r7] - movs r0, #2 - strb r0, [r6] - ldr r2, _080364A0 @ =gRoomControls - ldrh r0, [r2, #6] - movs r1, #0x84 - lsls r1, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #0x10 - ldr r1, [r4, #0x2c] - subs r0, r0, r1 - ldrh r1, [r2, #8] - adds r1, #0x88 - lsls r1, r1, #0x10 - ldr r2, [r4, #0x30] - subs r1, r1, r2 - bl sub_080045DA - adds r2, r4, #0 - adds r2, #0x84 - ldr r1, [r2] - strb r0, [r1, #3] - ldr r1, [r2] - ldrb r0, [r1, #3] - adds r0, #0x80 - rsbs r0, r0, #0 - strb r0, [r1, #3] - movs r0, #0xed - bl SoundReq - b _080364AA - .align 2, 0 -_08036498: .4byte gPlayerEntity -_0803649C: .4byte gPlayerState -_080364A0: .4byte gRoomControls -_080364A4: - ldr r0, _080364C4 @ =0xFFFFF7FF - ands r1, r0 - str r1, [r2, #0x30] -_080364AA: - ldr r0, _080364C8 @ =gScreenTransition - ldr r0, [r0] - movs r1, #3 - ands r0, r1 - cmp r0, #0 - bne _0803657A - adds r0, r4, #0 - movs r1, #0x87 - movs r2, #2 - movs r3, #0 - bl CreateObjectWithParent - b _0803657A - .align 2, 0 -_080364C4: .4byte 0xFFFFF7FF -_080364C8: .4byte gScreenTransition -_080364CC: - adds r0, r4, #0 - adds r0, #0x7c - ldrb r1, [r0] - movs r5, #1 - adds r0, r5, #0 - ands r0, r1 - adds r3, r4, #0 - adds r3, #0x84 - cmp r0, #0 - bne _080364F0 - ldr r0, [r3] - adds r1, r4, #0 - adds r1, #0x7b - ldrb r0, [r0, #3] - mov r8, r1 - ldrb r6, [r1] - cmp r0, r6 - bne _08036570 -_080364F0: - cmp r2, #1 - bne _08036510 - movs r0, #2 - strb r0, [r7] - strb r0, [r4, #0xb] - adds r1, r4, #0 - adds r1, #0x79 - movs r0, #0x2d - strb r0, [r1] - adds r1, #9 - movs r2, #0 - adds r0, #0xd3 - strh r0, [r1] - ldr r0, [r3] - strb r2, [r0, #2] - b _08036652 -_08036510: - movs r0, #0 - strb r0, [r7] - adds r1, r4, #0 - adds r1, #0x82 - movs r0, #0x80 - lsls r0, r0, #1 - strh r0, [r1] - ldr r0, [r3] - ldr r1, [r0, #8] - adds r1, #0x79 - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - ldr r1, _0803656C @ =gPlayerEntity - ldrb r2, [r1, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r2 - movs r2, #1 - orrs r0, r2 - strb r0, [r1, #0x18] - ldrb r2, [r1, #0x10] - movs r0, #0x7f - ands r0, r2 - strb r0, [r1, #0x10] - adds r1, #0x38 - strb r5, [r1] - movs r0, #0x80 - lsls r0, r0, #3 - adds r1, r4, #0 - adds r1, #0x7b - ldrb r1, [r1] - adds r1, #0x80 - rsbs r1, r1, #0 - lsls r1, r1, #0x18 - lsrs r1, r1, #0x1b - movs r2, #0x30 - bl sub_080792BC - adds r0, r4, #0 - bl sub_08036C90 - movs r0, #0xef - bl SoundReq - b _08036652 - .align 2, 0 -_0803656C: .4byte gPlayerEntity -_08036570: - adds r1, r4, #0 - adds r1, #0x79 - movs r0, #2 - strb r0, [r1] - adds r6, r1, #0 -_0803657A: - ldrb r0, [r6] - cmp r0, #0 - bne _08036598 - adds r0, r4, #0 - adds r0, #0x76 - ldrh r0, [r0] - adds r1, r4, #0 - adds r1, #0x74 - movs r2, #0 - strh r0, [r1] - strb r2, [r4, #0xb] - adds r0, r4, #0 - bl sub_08036C90 - b _08036652 -_08036598: - subs r2, r0, #1 - strb r2, [r6] - ldr r0, _080365E4 @ =gPlayerState - ldr r1, [r0, #0x30] - movs r0, #0x80 - lsls r0, r0, #4 - cmp r1, r0 - bne _080365F8 - lsls r0, r2, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x3c - bne _080365F8 - ldr r2, _080365E8 @ =gPlayerEntity - ldr r0, [r2, #0x2c] - ldr r1, [r4, #0x2c] - subs r0, r0, r1 - ldr r1, [r2, #0x30] - ldr r2, [r4, #0x30] - subs r1, r1, r2 - bl sub_080045DA - adds r3, r0, #0 - mov r7, r8 - ldrb r2, [r7] - rsbs r0, r2, #0 - movs r1, #0x80 - eors r0, r1 - subs r0, r3, r0 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x80 - bls _080365EC - adds r0, r4, #0 - adds r0, #0x84 - ldr r1, [r0] - adds r0, r2, #0 - adds r0, #0x30 - b _080365F6 - .align 2, 0 -_080365E4: .4byte gPlayerState -_080365E8: .4byte gPlayerEntity -_080365EC: - adds r0, r4, #0 - adds r0, #0x84 - ldr r1, [r0] - adds r0, r2, #0 - subs r0, #0x30 -_080365F6: - strb r0, [r1, #3] -_080365F8: - adds r0, r4, #0 - adds r0, #0x7c - ldrb r0, [r0] - movs r5, #1 - adds r2, r5, #0 - ands r2, r0 - cmp r2, #0 - bne _08036652 - adds r3, r4, #0 - adds r3, #0x84 - ldr r1, [r3] - ldrb r0, [r1, #3] - mov r6, r8 - ldrb r6, [r6] - cmp r0, r6 - beq _08036650 - strb r5, [r1, #2] - ldr r0, [r3] - ldrb r0, [r0, #3] - mov r7, r8 - ldrb r1, [r7] - subs r0, r0, r1 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x80 - bls _0803663E - adds r2, r4, #0 - adds r2, #0x7a - adds r0, r4, #0 - adds r0, #0x82 - ldrh r1, [r2] - ldrh r0, [r0] - subs r1, r1, r0 - strh r1, [r2] - b _08036652 -_0803663E: - adds r1, r4, #0 - adds r1, #0x7a - adds r0, r4, #0 - adds r0, #0x82 - ldrh r0, [r0] - ldrh r2, [r1] - adds r0, r0, r2 - strh r0, [r1] - b _08036652 -_08036650: - strb r2, [r1, #2] -_08036652: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_08036658 -sub_08036658: @ 0x08036658 - push {r4, r5, lr} - adds r5, r0, #0 - adds r4, r5, #0 - adds r4, #0x79 - ldrb r1, [r4] - adds r0, r1, #0 - cmp r0, #0xff - bne _08036678 - movs r0, #0 - strb r0, [r5, #0xb] - adds r0, r5, #0 - bl sub_08036C90 - movs r0, #0x78 - strb r0, [r4] - b _080366AC -_08036678: - adds r0, r1, #1 - strb r0, [r4] - movs r0, #1 - rsbs r0, r0, #0 - bl sub_0805308C - ldr r0, _080366B0 @ =gScreenTransition - ldr r1, [r0] - movs r0, #3 - ands r0, r1 - cmp r0, #0 - bne _080366AC - movs r0, #7 - ands r1, r0 - cmp r1, #0 - bne _080366A0 - movs r0, #0x92 - lsls r0, r0, #1 - bl SoundReq -_080366A0: - adds r0, r5, #0 - movs r1, #0x87 - movs r2, #3 - movs r3, #0 - bl CreateObjectWithParent -_080366AC: - pop {r4, r5, pc} - .align 2, 0 -_080366B0: .4byte gScreenTransition - - thumb_func_start sub_080366B4 -sub_080366B4: @ 0x080366B4 - push {r4, lr} - adds r4, r0, #0 - adds r2, r4, #0 - adds r2, #0x79 - ldrb r0, [r2] - adds r1, r0, #0 - cmp r1, #0 - bne _080366D4 - adds r0, r4, #0 - adds r0, #0x84 - ldr r0, [r0] - strb r1, [r0, #2] - adds r0, r4, #0 - bl sub_08036C90 - b _08036706 -_080366D4: - subs r0, #1 - strb r0, [r2] - ldr r0, _08036708 @ =gScreenTransition - ldr r0, [r0] - movs r1, #3 - ands r0, r1 - cmp r0, #0 - bne _08036706 - adds r0, r4, #0 - movs r1, #0xf - movs r2, #2 - bl CreateProjectileWithParent - str r0, [r4, #0x54] - cmp r0, #0 - beq _08036706 - str r4, [r0, #0x50] - ldr r2, [r4, #0x54] - adds r0, r4, #0 - adds r0, #0x7b - ldrb r0, [r0] - rsbs r0, r0, #0 - movs r1, #0x80 - eors r0, r1 - strb r0, [r2, #0x15] -_08036706: - pop {r4, pc} - .align 2, 0 -_08036708: .4byte gScreenTransition - - thumb_func_start sub_0803670C -sub_0803670C: @ 0x0803670C - push {r4, lr} - adds r4, r0, #0 - ldr r1, _0803675C @ =gUnk_080CF100 - ldrb r0, [r4, #0xd] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - adds r0, r4, #0 - adds r0, #0x84 - ldr r1, [r0] - ldrb r0, [r1, #6] - cmp r0, #0 - beq _08036746 - subs r0, #1 - strb r0, [r1, #6] - ldr r0, _08036760 @ =gScreenTransition - ldr r0, [r0] - movs r1, #7 - ands r0, r1 - cmp r0, #0 - bne _08036746 - adds r0, r4, #0 - movs r1, #0xf - movs r2, #3 - bl CreateProjectileWithParent -_08036746: - adds r0, r4, #0 - adds r0, #0x76 - ldrh r1, [r0] - subs r0, #2 - ldrh r2, [r0] - adds r0, #6 - ldrh r3, [r0] - adds r0, r4, #0 - bl sub_0805EC9C - pop {r4, pc} - .align 2, 0 -_0803675C: .4byte gUnk_080CF100 -_08036760: .4byte gScreenTransition - - thumb_func_start sub_08036764 -sub_08036764: @ 0x08036764 - push {r4, lr} - adds r4, r0, #0 - movs r1, #0 - movs r0, #1 - strb r0, [r4, #0xd] - movs r0, #0x80 - lsls r0, r0, #2 - strh r0, [r4, #0x24] - strh r1, [r4, #0x2a] - adds r0, r4, #0 - adds r0, #0x7b - ldrb r0, [r0] - rsbs r0, r0, #0 - movs r1, #0x80 - eors r0, r1 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x1b - strb r0, [r4, #0x15] - adds r1, r4, #0 - adds r1, #0x79 - movs r0, #0x78 - strb r0, [r1] - adds r1, #9 - movs r0, #0xc0 - lsls r0, r0, #1 - strh r0, [r1] - adds r0, r4, #0 - adds r0, #0x84 - ldr r1, [r0] - movs r0, #4 - strb r0, [r1] - adds r0, r4, #0 - bl sub_080368D8 - adds r0, r4, #0 - bl sub_080367B0 - pop {r4, pc} - - thumb_func_start sub_080367B0 -sub_080367B0: @ 0x080367B0 - push {r4, r5, lr} - adds r4, r0, #0 - bl ProcessMovement - ldrh r0, [r4, #0x2a] - cmp r0, #0 - beq _0803683A - movs r0, #2 - strb r0, [r4, #0xd] - adds r3, r4, #0 - adds r3, #0x84 - ldr r1, [r3] - adds r0, r4, #0 - adds r0, #0x7b - ldrb r0, [r0] - strb r0, [r1, #3] - ldrh r1, [r4, #0x2a] - movs r0, #0xee - lsls r0, r0, #8 - ands r0, r1 - cmp r0, #0 - beq _080367E4 - ldr r1, [r3] - ldrb r0, [r1, #3] - rsbs r0, r0, #0 - strb r0, [r1, #3] -_080367E4: - ldrh r1, [r4, #0x2a] - movs r0, #0xee - ands r0, r1 - cmp r0, #0 - beq _080367FE - ldr r0, [r3] - ldrb r1, [r0, #3] - rsbs r1, r1, #0 - movs r5, #0x80 - rsbs r5, r5, #0 - adds r2, r5, #0 - eors r1, r2 - strb r1, [r0, #3] -_080367FE: - adds r1, r4, #0 - adds r1, #0x42 - movs r0, #0x18 - strb r0, [r1] - adds r1, #4 - movs r0, #0x80 - lsls r0, r0, #2 - strh r0, [r1] - ldrb r0, [r4, #0x15] - movs r1, #0x10 - eors r0, r1 - adds r1, r4, #0 - adds r1, #0x3e - strb r0, [r1] - ldr r1, [r3] - ldrb r0, [r1, #6] - adds r0, #0x1e - strb r0, [r1, #6] - movs r0, #0x1e - movs r1, #0 - bl sub_08080964 - movs r0, #0xac - lsls r0, r0, #1 - bl SoundReq - movs r0, #0xa6 - lsls r0, r0, #1 - bl SoundReq -_0803683A: - adds r1, r4, #0 - adds r1, #0x79 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - bne _08036852 - subs r1, #0x34 - movs r0, #0 - strb r0, [r1] -_08036852: - ldr r0, _08036868 @ =gScreenTransition - ldr r0, [r0] - movs r1, #0x1f - ands r0, r1 - cmp r0, #0 - bne _08036864 - ldr r0, _0803686C @ =0x00000159 - bl SoundReq -_08036864: - pop {r4, r5, pc} - .align 2, 0 -_08036868: .4byte gScreenTransition -_0803686C: .4byte 0x00000159 - - thumb_func_start sub_08036870 -sub_08036870: @ 0x08036870 - push {lr} - adds r3, r0, #0 - adds r0, #0x84 - ldr r0, [r0] - ldrb r1, [r0, #3] - movs r0, #0x7b - adds r0, r0, r3 - mov ip, r0 - ldrb r0, [r0] - subs r1, r1, r0 - adds r0, r1, #7 - cmp r0, #0xe - bhi _080368AA - movs r2, #0 - movs r0, #1 - strb r0, [r3, #0xd] - mov r1, ip - ldrb r0, [r1] - rsbs r0, r0, #0 - movs r1, #0x80 - eors r0, r1 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x1b - strb r0, [r3, #0x15] - strh r2, [r3, #0x2a] - adds r0, r3, #0 - bl ProcessMovement - b _080368D4 -_080368AA: - lsls r0, r1, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x80 - bls _080368C4 - adds r2, r3, #0 - adds r2, #0x7a - adds r0, r3, #0 - adds r0, #0x82 - ldrh r1, [r2] - ldrh r0, [r0] - subs r1, r1, r0 - strh r1, [r2] - b _080368D4 -_080368C4: - adds r1, r3, #0 - adds r1, #0x7a - adds r0, r3, #0 - adds r0, #0x82 - ldrh r0, [r0] - ldrh r2, [r1] - adds r0, r0, r2 - strh r0, [r1] -_080368D4: - pop {pc} - .align 2, 0 - - thumb_func_start sub_080368D8 -sub_080368D8: @ 0x080368D8 - push {lr} - adds r3, r0, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #0 - beq _08036902 - ldr r2, _08036910 @ =gPlayerEntity - ldrb r1, [r2, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r2, #0x18] - ldrb r1, [r2, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r2, #0x10] - adds r2, #0x38 - movs r0, #1 - strb r0, [r2] -_08036902: - adds r0, r3, #0 - adds r0, #0x76 - movs r1, #0xa0 - strh r1, [r0] - subs r0, #2 - strh r1, [r0] - pop {pc} - .align 2, 0 -_08036910: .4byte gPlayerEntity - - thumb_func_start sub_08036914 -sub_08036914: @ 0x08036914 - push {r4, r5, r6, lr} - mov r6, sb - mov r5, r8 - push {r5, r6} - adds r5, r0, #0 - adds r4, r1, #0 - adds r6, r2, #0 - ldr r0, _08036994 @ =gSineTable - mov sb, r0 - lsls r0, r4, #1 - add r0, sb - movs r1, #0 - ldrsh r0, [r0, r1] - lsls r6, r6, #0x10 - asrs r6, r6, #0x10 - adds r1, r6, #0 - bl FixedMul - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - movs r1, #0x80 - lsls r1, r1, #1 - mov r8, r1 - bl FixedDiv - ldr r1, [r5, #0x50] - lsls r0, r0, #0x10 - asrs r0, r0, #8 - ldr r1, [r1, #0x2c] - adds r1, r1, r0 - str r1, [r5, #0x2c] - adds r4, #0x40 - lsls r4, r4, #1 - add r4, sb - movs r1, #0 - ldrsh r0, [r4, r1] - adds r1, r6, #0 - bl FixedMul - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - mov r1, r8 - bl FixedDiv - ldr r2, [r5, #0x50] - lsls r0, r0, #0x10 - asrs r0, r0, #8 - ldr r1, [r2, #0x30] - subs r1, r1, r0 - str r1, [r5, #0x30] - adds r2, #0x62 - ldrb r0, [r2] - adds r1, r5, #0 - adds r1, #0x62 - strb r0, [r1] - ldr r0, [r5, #0x50] - adds r0, #0x63 - ldrb r0, [r0] - adds r5, #0x63 - strb r0, [r5] - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, pc} - .align 2, 0 -_08036994: .4byte gSineTable - - thumb_func_start sub_08036998 -sub_08036998: @ 0x08036998 - push {r4, lr} - adds r2, r0, #0 - adds r3, r2, #0 - adds r3, #0x79 - ldrb r0, [r2, #0xf] - ldrb r4, [r3] - adds r1, r0, r4 - strb r1, [r3] - ldrb r4, [r2, #0xf] - movs r0, #0xf - ldrsb r0, [r2, r0] - cmp r0, #0 - bge _080369BE - ldrb r0, [r2, #0xe] - lsls r1, r1, #0x18 - lsls r0, r0, #0x18 - cmn r1, r0 - bge _080369CC - b _080369C8 -_080369BE: - movs r0, #0 - ldrsb r0, [r3, r0] - ldrb r1, [r2, #0xe] - cmp r0, r1 - ble _080369CC -_080369C8: - rsbs r0, r4, #0 - strb r0, [r2, #0xf] -_080369CC: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080369D0 -sub_080369D0: @ 0x080369D0 - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - mov ip, r1 - adds r6, r2, #0 - adds r1, r0, #0 - adds r1, #0x84 - ldr r4, [r1] - ldr r2, [r4, #0xc] - ldrb r1, [r4, #1] - subs r1, #1 - lsls r1, r1, #2 - adds r3, r4, #0 - adds r3, #0xc - adds r1, r3, r1 - ldr r1, [r1] - adds r1, #0x7b - adds r0, #0x79 - ldrb r0, [r0] - ldrb r1, [r1] - adds r0, r0, r1 - adds r2, #0x7b - strb r0, [r2] - ldrb r0, [r4, #1] - movs r2, #0 - cmp r0, #1 - beq _08036A58 - adds r5, r3, #0 - lsls r0, r6, #0x18 - lsrs r0, r0, #0x18 - mov r8, r0 - rsbs r0, r6, #0 - lsls r0, r0, #0x18 - asrs r7, r0, #0x18 -_08036A16: - lsls r0, r2, #2 - adds r0, r5, r0 - ldr r1, [r0] - adds r1, #0x7b - adds r2, #1 - lsls r0, r2, #2 - adds r0, r5, r0 - ldr r0, [r0] - adds r3, r0, #0 - adds r3, #0x7b - ldrb r1, [r1] - ldrb r0, [r3] - cmp r1, r0 - beq _08036A4C - subs r0, r0, r1 - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - ble _08036A44 - cmp r0, r8 - ble _08036A4C - adds r0, r1, r6 - b _08036A4A -_08036A44: - cmp r0, r7 - bge _08036A4C - subs r0, r1, r6 -_08036A4A: - strb r0, [r3] -_08036A4C: - ldrb r0, [r4, #1] - subs r0, #1 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r2, r0 - blo _08036A16 -_08036A58: - ldrb r0, [r4, #1] - subs r2, r0, #1 - cmp r2, #0 - beq _08036AE4 - ldr r0, _08036AEC @ =gSineTable - mov sb, r0 - movs r1, #0x80 - mov r8, r1 - mov r1, ip - lsls r0, r1, #0x14 - asrs r6, r0, #0x10 - lsls r0, r2, #2 - adds r0, #8 - adds r5, r0, r4 - movs r7, #0x80 - lsls r7, r7, #1 -_08036A78: - subs r4, r2, #1 - ldr r0, [r5] - adds r0, #0x7b - ldrb r0, [r0] - mov r1, r8 - eors r0, r1 - lsls r0, r0, #1 - add r0, sb - movs r1, #0 - ldrsh r0, [r0, r1] - adds r1, r6, #0 - bl FixedMul - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - adds r1, r7, #0 - bl FixedDiv - ldr r2, [r5] - ldr r1, [r5, #4] - lsls r0, r0, #0x10 - asrs r0, r0, #8 - ldr r1, [r1, #0x2c] - adds r1, r1, r0 - str r1, [r2, #0x2c] - ldr r0, [r5] - adds r0, #0x7b - ldrb r0, [r0] - mov r1, r8 - eors r0, r1 - adds r0, #0x40 - lsls r0, r0, #1 - add r0, sb - movs r1, #0 - ldrsh r0, [r0, r1] - adds r1, r6, #0 - bl FixedMul - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - adds r1, r7, #0 - bl FixedDiv - ldr r2, [r5] - ldr r1, [r5, #4] - lsls r0, r0, #0x10 - asrs r0, r0, #8 - ldr r1, [r1, #0x30] - subs r1, r1, r0 - str r1, [r2, #0x30] - subs r5, #4 - adds r2, r4, #0 - cmp r2, #0 - bne _08036A78 -_08036AE4: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08036AEC: .4byte gSineTable - - thumb_func_start sub_08036AF0 -sub_08036AF0: @ 0x08036AF0 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #0xc - str r1, [sp] - mov r8, r2 - adds r0, #0x84 - ldr r0, [r0] - str r0, [sp, #4] - ldrb r0, [r0, #1] - subs r4, r0, #1 - cmp r4, #0 - bne _08036B10 - b _08036C80 -_08036B10: - ldr r0, [sp, #4] - adds r0, #0xc - str r0, [sp, #8] - lsls r0, r1, #0x14 - asrs r0, r0, #0x10 - mov sl, r0 -_08036B1C: - mov r1, r8 - cmp r1, #0 - bne _08036BC0 - lsls r0, r4, #2 - ldr r2, [sp, #8] - adds r6, r2, r0 - ldr r0, [r6] - subs r4, #1 - lsls r1, r4, #2 - adds r5, r2, r1 - ldr r2, [r5] - movs r3, #0x2e - ldrsh r1, [r2, r3] - movs r3, #0x32 - ldrsh r2, [r2, r3] - bl sub_080041DC - mov sb, r4 - ldr r1, [sp] - cmp r1, r0 - blo _08036B48 - b _08036C78 -_08036B48: - ldr r2, [r5] - ldr r3, [r6] - ldr r0, [r2, #0x2c] - ldr r1, [r3, #0x2c] - subs r0, r0, r1 - ldr r1, [r2, #0x30] - ldr r2, [r3, #0x30] - subs r1, r1, r2 - bl sub_080045DA - ldr r1, [r5] - adds r1, #0x7b - strb r0, [r1] - ldr r0, [r5] - adds r0, #0x7b - ldrb r0, [r0] - lsls r0, r0, #1 - ldr r2, _08036BBC @ =gSineTable - adds r0, r0, r2 - movs r3, #0 - ldrsh r0, [r0, r3] - mov r1, sl - bl FixedMul - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - movs r1, #0x80 - lsls r1, r1, #1 - bl FixedDiv - ldr r2, [r5] - ldr r1, [r6] - lsls r0, r0, #0x10 - asrs r0, r0, #8 - ldr r1, [r1, #0x2c] - adds r1, r1, r0 - str r1, [r2, #0x2c] - ldr r0, [r5] - adds r0, #0x7b - ldrb r0, [r0] - adds r0, #0x40 - lsls r0, r0, #1 - ldr r1, _08036BBC @ =gSineTable - adds r0, r0, r1 - movs r2, #0 - ldrsh r0, [r0, r2] - mov r1, sl - bl FixedMul - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - movs r1, #0x80 - lsls r1, r1, #1 - bl FixedDiv - ldr r2, [r5] - ldr r1, [r6] - b _08036C6E - .align 2, 0 -_08036BBC: .4byte gSineTable -_08036BC0: - subs r2, r4, #1 - lsls r0, r2, #2 - ldr r3, [sp, #8] - adds r0, r3, r0 - ldr r0, [r0] - adds r5, r0, #0 - adds r5, #0x7b - lsls r1, r4, #2 - adds r0, r3, r1 - ldr r0, [r0] - adds r0, #0x7b - ldrb r4, [r5] - ldrb r3, [r0] - adds r7, r1, #0 - ldr r6, [sp, #4] - adds r6, #0xc - mov sb, r2 - cmp r4, r3 - beq _08036C0E - subs r0, r3, r4 - lsls r0, r0, #0x18 - asrs r1, r0, #0x18 - cmp r1, #0 - ble _08036BFE - mov r2, r8 - lsls r0, r2, #0x18 - lsrs r0, r0, #0x18 - cmp r1, r0 - ble _08036C0E - subs r0, r3, r2 - b _08036C0C -_08036BFE: - mov r2, r8 - rsbs r0, r2, #0 - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r1, r0 - bge _08036C0E - adds r0, r3, r2 -_08036C0C: - strb r0, [r5] -_08036C0E: - mov r3, sb - lsls r4, r3, #2 - adds r4, r6, r4 - ldr r0, [r4] - adds r0, #0x7b - ldrb r0, [r0] - lsls r0, r0, #1 - ldr r1, _08036C8C @ =gSineTable - adds r0, r0, r1 - movs r2, #0 - ldrsh r0, [r0, r2] - mov r1, sl - bl FixedMul - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - movs r1, #0x80 - lsls r1, r1, #1 - bl FixedDiv - ldr r2, [r4] - adds r5, r6, r7 - ldr r1, [r5] - lsls r0, r0, #0x10 - asrs r0, r0, #8 - ldr r1, [r1, #0x2c] - adds r1, r1, r0 - str r1, [r2, #0x2c] - ldr r0, [r4] - adds r0, #0x7b - ldrb r0, [r0] - adds r0, #0x40 - lsls r0, r0, #1 - ldr r3, _08036C8C @ =gSineTable - adds r0, r0, r3 - movs r1, #0 - ldrsh r0, [r0, r1] - mov r1, sl - bl FixedMul - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - movs r1, #0x80 - lsls r1, r1, #1 - bl FixedDiv - ldr r2, [r4] - ldr r1, [r5] -_08036C6E: - lsls r0, r0, #0x10 - asrs r0, r0, #8 - ldr r1, [r1, #0x30] - subs r1, r1, r0 - str r1, [r2, #0x30] -_08036C78: - mov r4, sb - cmp r4, #0 - beq _08036C80 - b _08036B1C -_08036C80: - add sp, #0xc - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08036C8C: .4byte gSineTable - - thumb_func_start sub_08036C90 -sub_08036C90: @ 0x08036C90 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x7c - ldrb r2, [r0] - cmp r2, #4 - bne _08036CDC - adds r3, r4, #0 - adds r3, #0x81 - ldrb r0, [r3] - cmp r0, #0xff - beq _08036CDC - movs r1, #0 - strb r2, [r4, #0xd] - strb r1, [r4, #0xb] - adds r0, r4, #0 - adds r0, #0x80 - strb r1, [r0] - ldr r1, _08036CFC @ =gUnk_080CF124 - ldrb r0, [r3] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - adds r2, r4, #0 - adds r2, #0x7e - ldrb r1, [r2] - adds r0, r0, r1 - ldrb r0, [r0] - adds r1, r4, #0 - adds r1, #0x7d - strb r0, [r1] - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - ldrb r0, [r1] - cmp r0, #5 - bne _08036D42 - movs r0, #0xff - strb r0, [r3] -_08036CDC: - movs r0, #3 - strb r0, [r4, #0xd] - adds r2, r4, #0 - adds r2, #0x7c - ldrb r1, [r2] - movs r3, #1 - adds r0, r3, #0 - ands r0, r1 - cmp r0, #0 - beq _08036D14 - ldrb r1, [r2] - cmp r1, #1 - beq _08036D00 - cmp r1, #3 - beq _08036D0A - b _08036D42 - .align 2, 0 -_08036CFC: .4byte gUnk_080CF124 -_08036D00: - adds r1, r4, #0 - adds r1, #0x79 - movs r0, #0x1e - strb r0, [r1] - b _08036D42 -_08036D0A: - adds r1, r4, #0 - adds r1, #0x79 - movs r0, #0xa - strb r0, [r1] - b _08036D42 -_08036D14: - ldr r0, _08036D2C @ =gRoomVars - movs r2, #0xc - ldrsh r1, [r0, r2] - movs r0, #0x80 - lsls r0, r0, #1 - cmp r1, r0 - beq _08036D30 - adds r0, r4, #0 - adds r0, #0x79 - strb r3, [r0] - b _08036D42 - .align 2, 0 -_08036D2C: .4byte gRoomVars -_08036D30: - ldr r0, _08036D44 @ =gUnk_080CF10C - bl sub_080028F4 - ldr r1, _08036D48 @ =gUnk_080CF110 - adds r0, r0, r1 - ldrb r1, [r0] - adds r0, r4, #0 - adds r0, #0x79 - strb r1, [r0] -_08036D42: - pop {r4, pc} - .align 2, 0 -_08036D44: .4byte gUnk_080CF10C -_08036D48: .4byte gUnk_080CF110 - - thumb_func_start sub_08036D4C -sub_08036D4C: @ 0x08036D4C - mov ip, r0 - mov r1, ip - adds r1, #0x82 - movs r3, #0 - movs r0, #0x80 - lsls r0, r0, #1 - strh r0, [r1] - mov r2, ip - adds r2, #0x84 - ldr r1, [r2] - movs r0, #2 - strb r0, [r1] - ldr r1, [r2] - movs r0, #0xff - strb r0, [r1, #4] - mov r0, ip - strb r3, [r0, #0xd] - bx lr - - thumb_func_start sub_08036D70 -sub_08036D70: @ 0x08036D70 - push {r4, lr} - adds r4, r0, #0 - movs r1, #1 - strb r1, [r4, #0xd] - movs r0, #0xc0 - strh r0, [r4, #0x24] - adds r0, r4, #0 - adds r0, #0x84 - ldr r0, [r0] - strb r1, [r0] - ldr r0, _08036D98 @ =gUnk_080CF134 - bl sub_080028F4 - ldr r1, _08036D9C @ =gUnk_080CF138 - adds r0, r0, r1 - ldrb r0, [r0] - adds r4, #0x79 - strb r0, [r4] - pop {r4, pc} - .align 2, 0 -_08036D98: .4byte gUnk_080CF134 -_08036D9C: .4byte gUnk_080CF138 - - thumb_func_start sub_08036DA0 -sub_08036DA0: @ 0x08036DA0 - push {r4, lr} - adds r4, r0, #0 - adds r1, r4, #0 - adds r1, #0x81 - movs r0, #0xff - strb r0, [r1] - adds r0, r4, #0 - adds r0, #0x7c - ldrb r0, [r0] - movs r2, #1 - ands r2, r0 - cmp r2, #0 - bne _08036DF0 - ldr r0, _08036DD0 @ =gRoomVars - movs r3, #0xc - ldrsh r1, [r0, r3] - movs r0, #0x80 - lsls r0, r0, #1 - cmp r1, r0 - beq _08036DD4 - adds r0, r4, #0 - adds r0, #0x78 - strb r2, [r0] - b _08036DF8 - .align 2, 0 -_08036DD0: .4byte gRoomVars -_08036DD4: - ldr r0, _08036DE8 @ =gUnk_080CF13C - bl sub_080028F4 - ldr r1, _08036DEC @ =gUnk_080CF13F - adds r0, r0, r1 - ldrb r1, [r0] - adds r0, r4, #0 - adds r0, #0x78 - strb r1, [r0] - b _08036DF8 - .align 2, 0 -_08036DE8: .4byte gUnk_080CF13C -_08036DEC: .4byte gUnk_080CF13F -_08036DF0: - adds r1, r4, #0 - adds r1, #0x78 - movs r0, #0 - strb r0, [r1] -_08036DF8: - adds r0, r4, #0 - bl sub_08036D4C - pop {r4, pc} - - thumb_func_start sub_08036E00 -sub_08036E00: @ 0x08036E00 - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - sub sp, #4 - adds r4, r0, #0 - movs r2, #0 - movs r0, #4 - strb r0, [r4, #0xd] - strb r2, [r4, #0xb] - adds r7, r4, #0 - adds r7, #0x81 - movs r0, #0xff - strb r0, [r7] - adds r0, r4, #0 - adds r0, #0x80 - strb r2, [r0] - adds r6, r4, #0 - adds r6, #0x84 - ldr r0, [r6] - strb r2, [r0, #2] - movs r0, #0x7c - adds r0, r0, r4 - mov r8, r0 - ldrb r5, [r0] - cmp r5, #0 - bne _08036E3E - adds r0, r4, #0 - adds r0, #0x7d - strb r2, [r0] - b _08036F00 -_08036E3E: - cmp r5, #4 - bne _08036ECC - str r2, [sp] - bl Random - movs r1, #3 - mov sb, r1 - ands r0, r1 - ldr r2, [sp] - cmp r0, #0 - beq _08036E62 - ldr r0, _08036E84 @ =gRoomVars - movs r3, #0xc - ldrsh r1, [r0, r3] - movs r0, #0x80 - lsls r0, r0, #1 - cmp r1, r0 - beq _08036E8C -_08036E62: - movs r0, #2 - strb r0, [r4, #0xd] - movs r0, #0x80 - lsls r0, r0, #2 - strh r0, [r4, #0x24] - adds r1, r4, #0 - adds r1, #0x79 - movs r0, #0x3c - strb r0, [r1] - strh r2, [r4, #0x2a] - ldr r0, [r6] - strb r5, [r0] - ldr r0, _08036E88 @ =0x00000159 - bl SoundReq - b _08036F00 - .align 2, 0 -_08036E84: .4byte gRoomVars -_08036E88: .4byte 0x00000159 -_08036E8C: - mov r1, r8 - ldrb r0, [r1] - cmp r0, #4 - bne _08036ECC - adds r0, r4, #0 - adds r0, #0x7e - strb r2, [r0] - bl Random - adds r1, r0, #0 - mov r3, sb - ands r1, r3 - ldr r0, [r6] - ldrb r0, [r0, #5] - cmp r0, r1 - beq _08036EB0 - strb r1, [r7] - b _08036EB8 -_08036EB0: - adds r0, #1 - movs r1, #3 - ands r0, r1 - strb r0, [r7] -_08036EB8: - adds r0, r4, #0 - adds r0, #0x84 - ldr r1, [r0] - subs r0, #3 - ldrb r0, [r0] - strb r0, [r1, #5] - adds r0, r4, #0 - bl sub_08036C90 - b _08036F00 -_08036ECC: - adds r0, r4, #0 - adds r0, #0x7c - ldrb r1, [r0] - movs r0, #1 - ands r0, r1 - ldr r1, _08036F0C @ =gUnk_080CF147 - cmp r0, #0 - bne _08036EDE - ldr r1, _08036F10 @ =gUnk_080CF142 -_08036EDE: - adds r2, r4, #0 - adds r2, #0x7e - ldrb r0, [r2] - adds r0, r1, r0 - ldrb r1, [r0] - adds r0, r4, #0 - adds r0, #0x7d - strb r1, [r0] - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #4 - bls _08036F00 - movs r0, #0 - strb r0, [r2] -_08036F00: - add sp, #4 - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08036F0C: .4byte gUnk_080CF147 -_08036F10: .4byte gUnk_080CF142 - - thumb_func_start sub_08036F14 -sub_08036F14: @ 0x08036F14 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - adds r6, r1, #0 - adds r4, #0x84 - ldr r0, [r4] - ldr r0, [r0, #8] - bl sub_0801D2B4 - movs r5, #0 - adds r7, r4, #0 -_08036F28: - ldr r0, [r7] - lsls r1, r5, #2 - adds r0, #0x20 - adds r0, r0, r1 - ldr r0, [r0] - adds r1, r6, #0 - bl sub_0801D2B4 - adds r5, #1 - cmp r5, #3 - bls _08036F28 - ldr r0, [r4] - ldrb r0, [r0, #1] - subs r5, r0, #1 - cmp r5, #0 - beq _08036F5E -_08036F48: - ldr r0, [r4] - lsls r1, r5, #2 - adds r0, #0xc - adds r0, r0, r1 - ldr r0, [r0] - adds r1, r6, #0 - bl sub_0801D2B4 - subs r5, #1 - cmp r5, #0 - bne _08036F48 -_08036F5E: - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_08036F60 -sub_08036F60: @ 0x08036F60 - push {r4, r5, lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xd] - cmp r0, #4 - beq _08036FA8 - adds r0, r2, #0 - adds r0, #0x7c - ldrb r1, [r0] - movs r4, #1 - adds r0, r4, #0 - ands r0, r1 - cmp r0, #0 - bne _08036FA8 - adds r3, r2, #0 - adds r3, #0x76 - movs r0, #0xe - ldrsb r0, [r2, r0] - ldrh r1, [r3] - adds r0, r0, r1 - strh r0, [r3] - adds r1, r2, #0 - adds r1, #0x74 - movs r0, #0xe - ldrsb r0, [r2, r0] - ldrh r5, [r1] - adds r0, r0, r5 - strh r0, [r1] - ldrh r0, [r3] - cmp r0, #0x9b - bhi _08036FA0 - strb r4, [r2, #0xe] - b _08036FA8 -_08036FA0: - cmp r0, #0xa4 - bls _08036FA8 - movs r0, #0xff - strb r0, [r2, #0xe] -_08036FA8: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08036FAC -sub_08036FAC: @ 0x08036FAC - push {lr} - adds r2, r0, #0 - ldr r0, _08036FD0 @ =gScreenTransition - ldr r0, [r0] - ands r0, r1 - cmp r0, #0 - bne _08036FDE - adds r0, r2, #0 - adds r0, #0x7c - ldrb r1, [r0] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - bne _08036FD8 - ldr r0, _08036FD4 @ =0x00000163 - bl SoundReq - b _08036FDE - .align 2, 0 -_08036FD0: .4byte gScreenTransition -_08036FD4: .4byte 0x00000163 -_08036FD8: - ldr r0, _08036FE0 @ =0x000001B1 - bl SoundReq -_08036FDE: - pop {pc} - .align 2, 0 -_08036FE0: .4byte 0x000001B1 - - thumb_func_start sub_08036FE4 -sub_08036FE4: @ 0x08036FE4 - push {r4, r5, lr} - adds r2, r0, #0 - adds r0, #0x7c - ldrb r1, [r0] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _08037048 - adds r0, r2, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #0 - bne _08037048 - adds r0, r2, #0 - adds r0, #0x82 - ldrh r3, [r0] - adds r4, r0, #0 - cmp r3, #0 - beq _08037048 - adds r0, #2 - ldr r0, [r0] - ldrb r0, [r0, #4] - cmp r0, #0xff - beq _0803702C - cmp r0, #0 - bne _08037022 - adds r1, r2, #0 - adds r1, #0x7a - ldrh r5, [r1] - adds r0, r3, r5 - b _0803702A -_08037022: - adds r1, r2, #0 - adds r1, #0x7a - ldrh r0, [r1] - subs r0, r0, r3 -_0803702A: - strh r0, [r1] -_0803702C: - adds r0, r2, #0 - adds r0, #0x7c - ldrb r0, [r0] - cmp r0, #1 - beq _0803703C - cmp r0, #3 - beq _08037042 - b _08037048 -_0803703C: - ldrh r0, [r4] - subs r0, #1 - b _08037046 -_08037042: - ldrh r0, [r4] - subs r0, #2 -_08037046: - strh r0, [r4] -_08037048: - pop {r4, r5, pc} - .align 2, 0 diff --git a/asm/pullableMushroom.s b/asm/pullableMushroom.s index 61211893..5a2e5078 100644 --- a/asm/pullableMushroom.s +++ b/asm/pullableMushroom.s @@ -37,7 +37,7 @@ sub_0808AA1C: @ 0x0808AA1C bne _0808AA36 adds r0, r5, #0 movs r1, #0 - bl sub_0801D2B4 + bl ChangeObjPalette _0808AA36: ldrb r0, [r5, #0xa] cmp r0, #1 diff --git a/asm/whirlwind.s b/asm/whirlwind.s index 2d7befb7..5babbd3a 100644 --- a/asm/whirlwind.s +++ b/asm/whirlwind.s @@ -84,7 +84,7 @@ sub_08092CDC: @ 0x08092CDC bne _08092D50 ldr r1, _08092D4C @ =0x00000161 adds r0, r4, #0 - bl sub_0801D2B4 + bl ChangeObjPalette adds r0, r4, #0 movs r1, #1 bl InitializeAnimation diff --git a/data/const/enemy/octorokBoss.s b/data/const/enemy/octorokBoss.s deleted file mode 100644 index 01f1ce68..00000000 --- a/data/const/enemy/octorokBoss.s +++ /dev/null @@ -1,111 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_080CF040:: @ 080CF040 - .4byte sub_080356F8 - .4byte sub_080356F8 - .4byte sub_08001324 - .4byte sub_080351D8 - .4byte sub_08001242 - -gUnk_080CF054:: @ 080CF054 - .4byte sub_08035288 - .4byte sub_080352FC - .4byte sub_080354F8 - .4byte sub_0803552C - .4byte sub_08035578 - .4byte sub_08035598 - .4byte sub_080355B4 - -gUnk_080CF070:: @ 080CF070 - .incbin "octorokBoss/gUnk_080CF070.bin" - -gUnk_080CF078:: @ 080CF078 - .4byte sub_0803571C - .4byte sub_08035B94 - .4byte sub_0803520C - .4byte sub_080359B4 - .4byte sub_0803670C - -gUnk_080CF08C:: @ 080CF08C - .incbin "octorokBoss/gUnk_080CF08C.bin" - -gUnk_080CF0AC:: @ 080CF0AC - .4byte sub_080359F8 - .4byte sub_08035A24 - .4byte sub_08035A70 - .4byte sub_08035AB4 - .4byte sub_08035AEC - .4byte sub_08035B34 - -gUnk_080CF0C4:: @ 080CF0C4 - .4byte sub_08035F7C - .4byte sub_08036078 - .4byte sub_080360E8 - .4byte sub_080360C8 - .4byte sub_08036188 - -gUnk_080CF0D8:: @ 080CF0D8 - .incbin "octorokBoss/gUnk_080CF0D8.bin" - -gUnk_080CF0DC:: @ 080CF0DC - .incbin "octorokBoss/gUnk_080CF0DC.bin" - -gUnk_080CF0E0:: @ 080CF0E0 - .4byte sub_080361F4 - .4byte sub_0803623C - .4byte sub_080362A8 - .4byte sub_08036304 - -gUnk_080CF0F0:: @ 080CF0F0 - .4byte sub_08036390 - .4byte sub_080363CC - .4byte sub_08036658 - .4byte sub_080366B4 - -gUnk_080CF100:: @ 080CF100 - .4byte sub_08036764 - .4byte sub_080367B0 - .4byte sub_08036870 - -gUnk_080CF10C:: @ 080CF10C - .incbin "octorokBoss/gUnk_080CF10C.bin" - -gUnk_080CF110:: @ 080CF110 - .incbin "octorokBoss/gUnk_080CF110.bin" - -gUnk_080CF114:: @ 080CF114 - .incbin "octorokBoss/gUnk_080CF114.bin" - -gUnk_080CF119:: @ 080CF119 - .incbin "octorokBoss/gUnk_080CF119.bin" - -gUnk_080CF11E:: @ 080CF11E - .incbin "octorokBoss/gUnk_080CF11E.bin" - -gUnk_080CF124:: @ 080CF124 - .4byte gUnk_080CF114 - .4byte gUnk_080CF119 - .4byte gUnk_080CF11E - .4byte gUnk_080CF119 - -gUnk_080CF134:: @ 080CF134 - .incbin "octorokBoss/gUnk_080CF134.bin" - -gUnk_080CF138:: @ 080CF138 - .incbin "octorokBoss/gUnk_080CF138.bin" - -gUnk_080CF13C:: @ 080CF13C - .incbin "octorokBoss/gUnk_080CF13C.bin" - -gUnk_080CF13F:: @ 080CF13F - .incbin "octorokBoss/gUnk_080CF13F.bin" - -gUnk_080CF142:: @ 080CF142 - .incbin "octorokBoss/gUnk_080CF142.bin" - -gUnk_080CF147:: @ 080CF147 - .incbin "octorokBoss/gUnk_080CF147.bin" diff --git a/data/const/object/object87.s b/data/const/object/object87.s deleted file mode 100644 index 4ec58e72..00000000 --- a/data/const/object/object87.s +++ /dev/null @@ -1,19 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08123840:: @ 08123840 - .4byte sub_08099F14 - .4byte sub_0809A1B8 - .4byte sub_0809A648 - -gUnk_0812384C:: @ 0812384C - .incbin "object87/gUnk_0812384C.bin" - -gUnk_0812388C:: @ 0812388C - .incbin "object87/gUnk_0812388C.bin" - -gUnk_081238A0:: @ 081238A0 - .incbin "object87/gUnk_081238A0.bin" diff --git a/include/coord.h b/include/coord.h index 46494400..52dcf210 100644 --- a/include/coord.h +++ b/include/coord.h @@ -13,7 +13,7 @@ void PositionRelative(Entity*, Entity*, s32, s32); void CopyPositionAndSpriteOffset(Entity* param_1, Entity* param_2); void sub_0806FA90(Entity*, Entity*, s32, s32); void ResolveEntityOnTop(Entity*, Entity*); -void sub_0806FAD8(Entity*, Entity*); +void ResolveEntityBelow(Entity*, Entity*); extern const s16 gSineTable[64]; extern const s16 gCosineTable[256]; diff --git a/include/functions.h b/include/functions.h index 58e54500..4fbf644b 100644 --- a/include/functions.h +++ b/include/functions.h @@ -56,8 +56,11 @@ extern s32 GetItemPrice(); extern void DoExitTransition(ScreenTransitionData*); extern void CreateDustAt(s32, s32, u32); extern void PutItemOnSlot(u32 itemID); -extern void CreateSpeechBubbleSleep(Entity*, u32, u32); +extern Entity* CreateSpeechBubbleQuestionMark(Entity*, s32, s32); +extern Entity* CreateSpeechBubbleExclamationMark(Entity*, s32, s32); +extern Entity* CreateSpeechBubbleSleep(Entity*, s32, s32); extern u32 CheckPlayerProximity(u32, u32, u32, u32); +extern void ChangeLightLevel(s32); // Unidentified extern u32 sub_0806ED78(Entity*); @@ -80,7 +83,7 @@ extern s32 sub_0806ED9C(Entity*, u32, u32); extern void sub_0807000C(Entity*); extern void sub_08068BEC(Entity*, u32); extern s32 sub_0806F078(Entity*, s32); -extern void sub_0801D2B4(Entity*, u32); +extern void ChangeObjPalette(Entity*, u32); extern void sub_0806FD3C(Entity*); extern void sub_0805ED14(u32*); extern void sub_080A7C18(u32, u32, u32); @@ -130,7 +133,6 @@ extern void sub_0807AABC(Entity*); extern void UpdateGlobalProgress(void); extern void sub_0805B4D0(u32); extern void sub_0804D0B4(void); -extern void sub_0805308C(s32); extern void sub_080534AC(); extern void sub_0807BA8C(u32, u32); extern void sub_0804D9B0(); diff --git a/include/object.h b/include/object.h index dc2b6b43..0aec5767 100644 --- a/include/object.h +++ b/include/object.h @@ -140,7 +140,7 @@ typedef enum { SMALL_ICE_BLOCK, BIG_ICE_BLOCK, OBJECT_86, - OBJECT_87, + OCTOROK_BOSS_OBJECT, HUGE_BOOK, OBJECT_89, OBJECT_8A, @@ -336,7 +336,7 @@ extern void BigPushableLever(Entity*); extern void SmallIceBlock(Entity*); extern void BigIceBlock(Entity*); extern void Object86(Entity*); -extern void Object87(Entity*); +extern void OctorokBossObject(Entity*); extern void MacroBook(Entity*); extern void Object89(Entity*); extern void Object8A(Entity*); diff --git a/include/projectile.h b/include/projectile.h new file mode 100644 index 00000000..0ad6e7e9 --- /dev/null +++ b/include/projectile.h @@ -0,0 +1,44 @@ +#ifndef PROJECTILE_H +#define PROJECTILE_H + +typedef enum { + /*00*/ DARK_NUT_SWORD_SLASH, + /*01*/ ROCK_PROJECTILE, + /*02*/ BONE_PROJECTILE, + /*03*/ MOBLIN_SPEAR, + /*04*/ DEKU_SEED_PROJECTILE, + /*05*/ PROJECTILE_5, + /*06*/ DIRT_BALL_PROJECTILE, + /*07*/ WIND_PROJECTILE, + /*08*/ FIRE_PROJECTILE, + /*09*/ ICE_PROJECTILE, + /*0A*/ GLEEROK_PROJECTILE, + /*0B*/ KEATON_DAGGER, + /*0C*/ GUARD_LINE_OF_SIGHT, + /*0D*/ ARROW_PROJECTILE, + /*0E*/ MAZAAL_ENERGY_BEAM, + /*0F*/ OCTOROK_BOSS_PROJECTILE, + /*10*/ STALFOS_PROJECTILE, + /*11*/ LAKITU_CLOUD_PROJECTILE, + /*12*/ LAKITU_LIGHTNING, + /*13*/ MANDIBLES_PROJECTILE, + /*14*/ REMOVABLE_DUST, + /*15*/ SPIDER_WEB, + /*16*/ TORCH_TRAP_PROJECTILE, + /*17*/ GURUGURU_BAR_PROJECTILE, + /*18*/ V1_DARK_MAGIC_PROJECTILE, + /*19*/ BALL_AND_CHAIN, + /*1A*/ V1_FIRE_PROJECTILE, + /*1B*/ CANNONBALL_PROJECTILE, + /*1C*/ V1_EYE_LASER, + /*1D*/ WINDER, + /*1E*/ SPIKED_ROLLERS, + /*1F*/ V2_PROJECTILE, + /*20*/ V3_HAND_PROJECTILE, + /*21*/ V3_ELECTRIC_PROJECTILE, + /*22*/ GYORG_TAIL, + /*23*/ GYORG_MALE_ENERGY_PROJECTILE, + /*24*/ V3_TENNIS_BALL_PROJECTILE, +} Projectile; + +#endif \ No newline at end of file diff --git a/include/room.h b/include/room.h index 8561da49..e3fd4958 100644 --- a/include/room.h +++ b/include/room.h @@ -66,7 +66,7 @@ typedef struct { u8 field_0x9; u8 unk2; u8 filler2; - s16 field_0xc; + s16 lightLevel; u8 filler3[2]; u8 unk_10[4]; u32 roomFlags; diff --git a/linker.ld b/linker.ld index 2013d083..14529356 100644 --- a/linker.ld +++ b/linker.ld @@ -424,7 +424,7 @@ SECTIONS { src/enemy/mazaalHead.o(.text); src/enemy/mazaalMacro.o(.text); src/enemy/mazaalHand.o(.text); - asm/octorokBoss.o(.text); + src/enemy/octorokBoss.o(.text); asm/flyingPot.o(.text); src/enemy/gibdo.o(.text); asm/octorokGolden.o(.text); @@ -840,7 +840,7 @@ SECTIONS { asm/smallIceBlock.o(.text); asm/bigIceBlock.o(.text); src/object/object86.o(.text); - asm/object87.o(.text); + src/object/octorokBossObject.o(.text); asm/macroBook.o(.text); asm/object89.o(.text); asm/object8A.o(.text); @@ -1103,7 +1103,7 @@ SECTIONS { data/animations/enemy/mazaalMacro.o(.rodata); src/enemy/mazaalHand.o(.rodata); data/animations/enemy/mazaalHand.o(.rodata); - data/const/enemy/octorokBoss.o(.rodata); + src/enemy/octorokBoss.o(.rodata); data/animations/enemy/octorokBoss.o(.rodata); data/const/enemy/flyingPot.o(.rodata); data/const/enemy/gibdo.o(.rodata); @@ -1587,7 +1587,7 @@ SECTIONS { data/animations/object/bigIceBlock.o(.rodata); data/const/object/object86.o(.rodata); data/animations/object/object86.o(.rodata); - data/const/object/object87.o(.rodata); + src/object/octorokBossObject.o(.rodata); data/const/object/macroBook.o(.rodata); data/animations/object/macroBook.o(.rodata); data/const/object/object89.o(.rodata); diff --git a/src/coord.c b/src/coord.c index 82d994ea..1856c8a2 100644 --- a/src/coord.c +++ b/src/coord.c @@ -60,7 +60,7 @@ void ResolveEntityOnTop(Entity* param_1, Entity* param_2) { param_2->spritePriority.b0 = gUnk_08114F78[param_1->spritePriority.b0]; } -void sub_0806FAD8(Entity* param_1, Entity* param_2) { +void ResolveEntityBelow(Entity* param_1, Entity* param_2) { param_2->spritePriority.b0 = gUnk_08114F80[param_1->spritePriority.b0]; } diff --git a/src/enemy/madderpillar.c b/src/enemy/madderpillar.c index fd8d170a..45ac8b27 100644 --- a/src/enemy/madderpillar.c +++ b/src/enemy/madderpillar.c @@ -57,7 +57,7 @@ void sub_080298A4(Entity* this) { this->actionDelay = 0; this->hitType = 0x6b; this->field_0x76.HALF.HI = 0; - sub_0801D2B4(this, 0x7f); + ChangeObjPalette(this, 0x7f); EnqueueSFX(0xfe); this->child->action = 2; break; @@ -155,7 +155,7 @@ void sub_08029AE0(Entity* this) { this->speed = 0xa0; this->field_0x74.HALF.HI = 0; sub_08029EEC(this); - sub_0801D2B4(this, 0x77); + ChangeObjPalette(this, 0x77); EnqueueSFX(0x182); } } @@ -217,7 +217,7 @@ void sub_08029C08(Entity* this) { void sub_08029C2C(Entity* this) { if (--this->actionDelay == 0) { this->action = 4; - sub_0801D2B4(this, 0x7f); + ChangeObjPalette(this, 0x7f); EnqueueSFX(0x6c); } } @@ -234,7 +234,7 @@ void sub_08029C6C(Entity* this) { sub_08029BC4(this); if (this->parent->action != 3) { this->action = 1; - sub_0801D2B4(this, 0x77); + ChangeObjPalette(this, 0x77); } else { sub_0802A16C(this); } @@ -271,7 +271,7 @@ void sub_08029D14(Entity* this) { if (this->actionDelay) { if (--this->actionDelay == 0) { InitializeAnimation(this, this->animationState + 0xc); - sub_0801D2B4(this, 0x7f); + ChangeObjPalette(this, 0x7f); EnqueueSFX(0x6c); } } else { @@ -313,7 +313,7 @@ void sub_08029DE4(Entity* this) { sub_08029CF0(this); if (this->parent->action != 3) { this->action = 1; - sub_0801D2B4(this, 0x77); + ChangeObjPalette(this, 0x77); } else { sub_0802A16C(this); } @@ -486,7 +486,7 @@ bool32 sub_0802A14C(Entity* this) { } void sub_0802A16C(Entity* this) { - sub_0801D2B4(this, gUnk_080CCDD4[this->parent->field_0x7a.HWORD >> 2 & 3]); + ChangeObjPalette(this, gUnk_080CCDD4[this->parent->field_0x7a.HWORD >> 2 & 3]); } void sub_0802A18C(Entity* this) { diff --git a/src/enemy/mazaalBracelet.c b/src/enemy/mazaalBracelet.c index acccbab0..eb32b41b 100644 --- a/src/enemy/mazaalBracelet.c +++ b/src/enemy/mazaalBracelet.c @@ -1390,7 +1390,7 @@ void sub_0803BA8C(Entity* this, u32 unk) { } } if (sVar2 != 0) { - sub_0801D2B4(this, sVar2); + ChangeObjPalette(this, sVar2); (*(Entity**)&this->parent->field_0x78)->palette.b.b0 = this->palette.raw << 0x1c >> 0x1c; (*(Entity**)&this->parent->field_0x78)->palette.b.b4 = this->palette.b.b0; this->parent->child->palette.b.b0 = this->palette.raw << 0x1c >> 0x1c; diff --git a/src/enemy/moldworm.c b/src/enemy/moldworm.c index 7fb15f46..56b74703 100644 --- a/src/enemy/moldworm.c +++ b/src/enemy/moldworm.c @@ -483,13 +483,13 @@ bool32 sub_08023A38(u32 unk) { } void sub_08023A68(Entity* this) { - sub_0801D2B4(this, 5); + ChangeObjPalette(this, 5); this->spritePriority.b0 = 7; InitializeAnimation(this, 0x17); } void sub_08023A88(Entity* this, u32 unk) { - sub_0801D2B4(this, 0x22); + ChangeObjPalette(this, 0x22); this->spritePriority.b0 = 4; InitializeAnimation(this, unk); } diff --git a/src/enemy/octorokBoss.c b/src/enemy/octorokBoss.c new file mode 100644 index 00000000..7544b241 --- /dev/null +++ b/src/enemy/octorokBoss.c @@ -0,0 +1,1568 @@ +#include "global.h" +#include "audio.h" +#include "enemy.h" +#include "functions.h" +#include "object.h" +#include "projectile.h" +#include "random.h" +#include "room.h" +#include "structures.h" +#include "structures.h" +#include "utils.h" + +extern void sub_08078AC0(u32, u32, u32); +extern u32 GetRandomByWeight(const u8*); +extern u32 sub_0806FC80(Entity*, Entity*, s32); +extern void sub_080792BC(s32, u32, u32); + +enum OctorokRotation { ROTATION_CW, ROTATION_CCW, NO_ROTATION = 0xff }; + +typedef struct HelperStruct { + u8 field_0x0; // [0,1,2,4] is later stored in this->field_0xf + u8 tailCount; + u8 field_0x2; // [0,1] + u8 targetAngle; // relates to this->field_0x7a.HALF.HI + u8 rotation; // [0,1,0xff] + u8 phase4PrevAttackPattern; // [0-4], sets this->field_0x80.HALF.HI + u8 fallingStonesTimer; + u8 field_0x7; // some sort of counter that is only set when hit for the first time? + Entity* mouthObject; + Entity* tailObjects[5]; + Entity* legObjects[4]; +} HelperStruct; + +static_assert(sizeof(HelperStruct) == 0x30); + +/* +this->field_0x7c.BYTES.byte0 Boss Phase +0: unfrozen +1: frozen 1 +2: unfrozen +3: frozen 2 +4: unfrozen -> death +*/ +#define IS_FROZEN(this) (this->field_0x7c.BYTES.byte0 & 1) +#define GET_BOSS_PHASE(this) (this->field_0x7c.BYTES.byte0) +/* +this->field_0x78.HALF.HI reused timer +*/ +#define GET_TIMER(this) this->field_0x78.HALF.HI +/* +this->field_0x78.HALF.LO turns until the next attack +*/ +#define GET_ATTACK_WAIT_TURNS(this) this->field_0x78.HALF.LO +/* +this->field_0x7a.HALF.HI angle of legs +*/ +#define GET_ANGLE(this) this->field_0x7a.HWORD +#define GET_ANGLE_HI(this) this->field_0x7a.HALF.HI +/* +this->field_0x82.HWORD angular speed +*/ +#define GET_ANGULAR_VEL(this) this->field_0x82.HWORD + +enum OctorokBossPart { WHOLE, LEG_BR, LEG_FR, LEG_FL, LEG_BL, MOUTH, TAIL_END, TAIL }; +enum OctorokBossAction { + INIT, // 0 + ACTION1, // 1 + HIT, // 2 + INTRO, // 3 + BURNING, // 4 +}; + +enum OctorokBossAttack { + ATTACK_SPITROCK, // 0 + ATTACK_VACUUM, // 1 + ATTACK_SMOKE, // 2 + ATTACK_FREEZE, // 3 + NO_ATTACK, // 4 + END_OF_ATTACK_PATTERN // 5 +}; + +enum OctorokBossAction1SubAction { + ACTION1_AIMTOWARDSPLAYER, // Moving around with step sounds + ACTION1_WAITFORTURN, // Also step sounds + ACTION1_SUBACTION2, // Step sounds, some kind of attack that is started in OctorokBoss_StartRegularAttack? + ACTION1_WAITFORATTACK, // Wait for GET_TIMER(), then OctorokBoss_SetWaitTurnsForNextAttack + ACTION1_ATTACK, // Attack +}; + +/* +this->field_0x7c.BYTES.byte1 currentAttack +*/ +#define GET_CURRENT_ATTACK(this) this->field_0x7c.BYTES.byte1 +/* +this->field_0x7c.BYTES.byte2 nextAttackIndex +*/ +#define GET_NEXT_ATTACK_INDEX(this) this->field_0x7c.BYTES.byte2 + +/* +for TAIL_END object: +this->field_0x7c.BYTES.byte1 tailRadius +*/ +#define GET_TAIL_RADIUS(this) this->field_0x7c.BYTES.byte1 + +#define GET_HELPER(this) (*(HelperStruct**)&this->cutsceneBeh) + +// Which attack pattern is currently used in phase 4 +#define GET_PHASE4_ATTACK_PATTERN(this) this->field_0x80.HALF.HI + +extern void (*const OctorokBoss_Functions[])(Entity*); +extern void (*const OctorokBoss_Hit_SubActions[])(Entity*); +extern const u8 OctorokBoss_HealthPerPhase[]; +extern void (*const OctorokBoss_Actions[])(Entity*); +extern const u8 gUnk_080CF08C[]; +extern void (*const OctorokBoss_Intro_SubActions[])(Entity*); +extern void (*const OctorokBoss_Action1_SubActions[])(Entity*); +extern const u8 OctorokBoss_LegAngleOffset[]; +extern const u8 OctorokBoss_LegAngleOffset2[]; +extern void (*const OctorokBoss_Action1_Attack_Type2s[])(Entity*); +extern void (*const OctorokBoss_AttackFunctions[])(Entity*); +extern void (*const OctorokBoss_Burning_SubActions[])(Entity*); +extern const u8 OctorokBoss_AttackTimerWeights[]; +extern const u8 OctorokBoss_AttackTimerValues[]; +extern const u8* const OctorokBoss_Phase4AttackPatterns[]; +extern const u8 OctorokBoss_TurnTimeWeights[]; +extern const u8 OctorokBoss_TurnTimeValues[]; +extern const u8 OctorokBoss_WaitForAttackTurnsWeights[]; +extern const u8 OctorokBoss_WaitForAttackTurnsValues[]; +extern const u8 OctorokBoss_NormalAttackPatterns[]; +extern const u8 OctorokBoss_FrozenAttackPatterns[]; + +void OctorokBoss_Hit(Entity*); +void OctorokBoss_Action1(Entity*); +void OctorokBoss_Burning_SubAction1(Entity*); +void sub_080368D8(Entity*); +void sub_08036914(Entity*, s32, s32); +void sub_08036998(Entity*); +void sub_080369D0(Entity*, s32, s32); +void sub_08036AF0(Entity*, s32, s32); +void OctorokBoss_SetAttackTimer(Entity*); +void OctorokBoss_ResetToSubAction0(Entity*); +void OctorokBoss_WaitAnotherTurn(Entity*); +void OctorokBoss_SetWaitTurnsForNextAttack(Entity*); +void OctorokBoss_StartRegularAttack(Entity*); +void OctorokBoss_ChangePalette(Entity*, u32); +void sub_08036F60(Entity*); +void OctorokBoss_StepSound(Entity*, u32); +void sub_08036FE4(Entity*); + +void OctorokBoss(Entity* this) { + OctorokBoss_Functions[GetNextFunction(this)](this); +} + +void OctorokBoss_OnHealthZero(Entity* this) { + if (this->type == WHOLE) { + this->action = HIT; + this->subAction = 0; + this->knockbackDuration = 0; + this->health = 1; + sub_080368D8(this); + OctorokBoss_Hit(this); + } else { + DeleteThisEntity(); + } +} + +/* +Hit SubActions +0: Start +1-3: +4- +*/ +void OctorokBoss_Hit(Entity* this) { + if (GET_BOSS_PHASE(this) == 0) { + if (this->subAction != 3) { + gRoomControls.cameraTarget = GET_HELPER(this)->tailObjects[0]; + GET_HELPER(this)->field_0x7 = 0x5a; + sub_08078B48(); + } + } else { + if (GET_HELPER(this)->field_0x7 != 0) { + GET_HELPER(this)->field_0x7--; + sub_08078B48(); + } + } + OctorokBoss_Hit_SubActions[this->subAction](this); + if (this->subAction > 3) { + sub_08078B48(); + } + sub_0800445C(this); + sub_0805EC9C(this, this->field_0x76.HWORD, this->field_0x74.HWORD, GET_ANGLE(this)); +} + +void OctorokBoss_Hit_SubAction0(Entity* this) { + this->field_0x76.HWORD = 0xa0; + this->field_0x74.HWORD = 0xa0; + GET_HELPER(this)->fallingStonesTimer = 0; + if (GET_BOSS_PHASE(this) == 4) { + this->subAction = 4; + gUnk_02034490[0] = 1; + sub_08078B48(); + SoundReq(SFX_BOSS_DIE); + } else { + if (IS_FROZEN(this) == FALSE) { + this->type2 = 0; + GET_TIMER(this) = 0x3c; + } else { + if (GET_HELPER(this)->tailCount > 3) { + GET_HELPER(this)->tailCount--; + } + GET_HELPER(this)->tailObjects[0]->field_0x7c.BYTES.byte1 = 0; + GET_TIMER(this) = 0x78; + } + this->subAction = 1; + } +} + +void OctorokBoss_Hit_SubAction1(Entity* this) { + bool32 frozen = IS_FROZEN(this); + u16 diffX; + u16 diffY; + + if (frozen == 0) { + if (GET_HELPER(this)->tailObjects[0]->field_0x7c.BYTES.byte1 != 0) { + GET_HELPER(this)->tailObjects[0]->field_0x7c.BYTES.byte1--; + } + // Move to the center of the screen before freezing + diffX = 0x108 + gRoomControls.roomOriginX - this->x.HALF.HI + 0x4; + diffY = gRoomControls.roomOriginY - this->y.HALF.HI + 0x8c; + if (diffX > 8 || diffY > 8) { + GET_HELPER(this)->field_0x2 = 1; +#if defined(JP) || defined(DEMO_JP) || defined(EU) + this->direction = ((s32)sub_080045DA((((gRoomControls.roomOriginX + 0x108) << 0x10) - this->x.WORD), + (((gRoomControls.roomOriginY + 0x88) << 0x10) - this->y.WORD))) >> + 3; +#else + this->direction = ((s32)sub_080045DA(gRoomControls.roomOriginX + 0x108 - this->x.HALF.HI, + gRoomControls.roomOriginY + 0x88 - this->y.HALF.HI)) >> + 3; +#endif + this->speed = 0x100; + ProcessMovement(this); + } else { + // Freeze + if (this->type2 == 0) { + CreateObjectWithParent(this, OCTOROK_BOSS_OBJECT, 5, 0); + CreateObjectWithParent(this, OCTOROK_BOSS_OBJECT, 5, 1); + CreateObjectWithParent(this, OCTOROK_BOSS_OBJECT, 5, 2); + CreateObjectWithParent(this, OCTOROK_BOSS_OBJECT, 5, 3); + CreateObjectWithParent(this, OCTOROK_BOSS_OBJECT, 5, 4); + this->type2 = 1; + } + GET_HELPER(this)->field_0x2 = frozen; + GET_TIMER(this)--; + } + } else { + u32 i; + for (i = GET_HELPER(this)->tailCount - 1; i != 0; i--) { + Entity* tail = GET_HELPER(this)->tailObjects[i - 1]; + tail->spriteSettings.draw |= 1; + } + if ((gScreenTransition.frameCount & 2) != 0) { + CreateObjectWithParent(this, OCTOROK_BOSS_OBJECT, 6, 0); + } + GET_TIMER(this)--; + } + if (GET_TIMER(this) == 0) { + this->subAction = 2; + GET_BOSS_PHASE(this)++; + sub_080AE068(this); + if (IS_FROZEN(this) == FALSE) { + this->hitType = 0x5f; + LoadFixedGFX(this, 0x108); + ChangeObjPalette(this, 0xef); + OctorokBoss_ChangePalette(this, 0xef); + InitAnimationForceUpdate(GET_HELPER(this)->tailObjects[0], 1); + } else { + this->hitType = 0x61; + LoadFixedGFX(this, 0x109); + ChangeObjPalette(this, 0xf0); + OctorokBoss_ChangePalette(this, 0xf3); + InitAnimationForceUpdate(GET_HELPER(this)->tailObjects[0], 2); + } + CreateObjectWithParent(this, OCTOROK_BOSS_OBJECT, 8, 0); + } +} + +void OctorokBoss_Hit_SubAction2(Entity* this) { + if (GET_HELPER(this)->tailObjects[0]->field_0x7c.BYTES.byte1 != 0x80) { + GET_HELPER(this)->tailObjects[0]->field_0x7c.BYTES.byte1++; + } else { + this->subAction = 3; + GET_TIMER(this) = 0x96; + gRoomControls.cameraTarget = &gPlayerEntity; + } +} + +void OctorokBoss_Hit_SubAction3(Entity* this) { + if (GET_TIMER(this)-- == 0) { + this->health = OctorokBoss_HealthPerPhase[GET_BOSS_PHASE(this)]; + COLLISION_ON(this); + this->action = ACTION1; + this->subAction = ACTION1_AIMTOWARDSPLAYER; + GET_NEXT_ATTACK_INDEX(this) = 0; + OctorokBoss_SetWaitTurnsForNextAttack(this); + } +} + +void OctorokBoss_Hit_SubAction4(Entity* this) { + Entity* object; + this->subAction = 5; + object = CreateObjectWithParent(this, OCTOROK_BOSS_OBJECT, 9, 0); + if (object != NULL) { + gRoomControls.cameraTarget = object; + } +} + +void OctorokBoss_Hit_SubAction5(Entity* this) { + this->subAction = 6; + GET_TIMER(this) = 0x78; + this->field_0x80.HALF.LO = 0; + this->field_0x82.HALF.LO = 0; +} + +// Wildly rotating with explosion fx +void OctorokBoss_Hit_SubAction6(Entity* this) { + s16 tmp; + + GET_ANGLE_HI(this) -= 4; + this->field_0x80.HALF.HI += 8; + if ((this->field_0x80.HALF.LO & 0x80) != 0) { + this->field_0x80.HALF.LO -= (Random() & 3); + if ((this->field_0x80.HALF.LO & 0x80) == 0) { + this->field_0x80.HALF.LO = ((this->field_0x80.HALF.LO & 0x80) << 0x18) >> 0x18; + } + } else { + this->field_0x80.HALF.LO += (Random() & 3); + if ((this->field_0x80.HALF.LO) >= 0x19) { + this->field_0x80.HALF.LO |= 0x80; + } + } + tmp = FixedMul(gSineTable[this->field_0x80.HALF.HI], (this->field_0x80.HALF.LO & 0x7f) << 8); + tmp = FixedDiv(tmp, 0x100); + this->spriteOffsetX = tmp >> 8; + tmp = FixedMul(gSineTable[this->field_0x80.HALF.HI + 0x40], (this->field_0x80.HALF.LO & 0x7f) * 0x100); + tmp = FixedDiv(tmp, 0x100); + this->spriteOffsetY = -((tmp << 0x10) >> 8) >> 0x10; + if (GET_TIMER(this) == 0) { + if ((gScreenTransition.frameCount & 0xfU) == 0) { + // Explosion in the center + CreateFx(this, 0x48, 0); + // Explosion at the front right leg + CreateFx(GET_HELPER(this)->legObjects[0], 0x48, 0); + } + if (++this->field_0x82.HALF.LO == 0x79) { + GET_HELPER(this)->mouthObject->health = 1; + SoundReq(SFX_BOSS_DIE); + // Kill this boss + sub_0804A7D4(this); + } + } else { + GET_TIMER(this)--; + } +} + +void OctorokBoss_OnTick(Entity* this) { + OctorokBoss_Actions[this->action](this); + this->spriteRendering.b3 = 3; +} + +ASM_FUNC("asm/non_matching/octorokBoss/OctorokBoss_Init.inc", void OctorokBoss_Init(Entity* this)) +/*{ + + // TODO where to use GET_HELPER(this) and where to use helper? + u32 leg; + u32 nextLeg; + u32 tail; + u32 nextTail; + HelperStruct* helper; + + this->action = ACTION1; + this->spriteSettings.draw = 3; + switch (this->type) { + case WHOLE: + this->spritePriority.b0 = 4; + GET_BOSS_PHASE(this) = 0; + this->actionDelay = 1; + helper = (HelperStruct*)zMalloc(sizeof(HelperStruct)); + GET_HELPER(this) = helper; + if (helper == NULL) { + // Kill this boss + sub_0804A7D4(this); + return; + } + this->myHeap = (u32*)helper; + GET_HELPER(this)->fallingStonesTimer = 0; + helper->field_0x0 = 2; + helper->field_0x2 = 0; + helper->tailCount = 5; + this->spriteRendering.b0 = 3; + this->field_0x6c.HALF.HI |= 1; + this->field_0x76.HWORD = 0xa0; + this->field_0x74.HWORD = 0xa0; + GET_ANGLE(this) = 0; + + // Create legs + leg = 0; + while (leg < 4) { + this->child = CreateEnemy(OCTOROK_BOSS, leg + 1); + if (this->child != NULL) { + CopyPosition(this, this->child); + this->child->parent = this; + GET_HELPER(this->child) = helper; + helper->legObjects[leg] = this->child; + } + leg = leg + 1; + } + + // Create mouth + this->child = CreateEnemy(OCTOROK_BOSS, MOUTH); + if (this->child != NULL) { + CopyPosition(this, this->child); + this->child->parent = this; + GET_HELPER(this->child) = GET_HELPER(this); + } + + // Create tail end + this->child = CreateEnemy(OCTOROK_BOSS, TAIL_END); + if (this->child != NULL) { + CopyPosition(this, this->child); + this->child->parent = this; + GET_HELPER(this->child) = helper; + GET_HELPER(this)->tailObjects[0] = this->child; + } + + // Create tails + tail = 0; + while (tail < 4) { + this->child = CreateEnemy(OCTOROK_BOSS, TAIL); + nextTail = tail + 1; + if (this->child != NULL) { + this->child->type2 = tail; + CopyPosition(this, this->child); + this->child->parent = this; + GET_HELPER(this->child) = helper; + helper->tailObjects[tail + 1] = this->child; + } + tail = nextTail; + } + + this->action = INTRO; + this->subAction = 0; + GET_TIMER(this) = 0x3c; + gPlayerEntity.spriteSettings.draw = 0; + gPlayerEntity.x.HALF.HI = this->x.HALF.HI; + gPlayerEntity.y.HALF.HI = this->y.HALF.HI - 0xa0; + gRoomControls.cameraTarget = this; + break; + + case LEG_BR: + case LEG_FR: + case LEG_FL: + case LEG_BL: + this->actionDelay = 0x10; + GET_TIMER(this) = 0; + if ((this->type & 2) == 0) { + this->field_0xf = 2; + } else { + this->field_0xf = 0xfe; + } + this->field_0x74.HWORD = 0x100; + if ((this->type & 1) == 0) { + this->field_0x76.HWORD = 0xff00; + } else { + this->field_0x76.HWORD = 0x100; + } + break; + + case MOUTH: + this->field_0x76.HWORD = 0x100; + this->field_0x74.HWORD = 0x100; + GET_TIMER(this) = 0x1c; + GET_HELPER(this)->mouthObject = this; + break; + + case TAIL_END: + this->field_0x76.HWORD = 0x100; + this->field_0x74.HWORD = 0x100; + this->spritePriority.b0 = 0; + GET_TIMER(this) = 0; + this->actionDelay = 0x10; + this->field_0xf = 1; + GET_TAIL_RADIUS(this) = 0x80; + break; + } + if (this->type != TAIL_END) { + InitializeAnimation(this, gUnk_080CF08C[this->type * 4]); + } else { + InitAnimationForceUpdate(this, gUnk_080CF08C[this->type * 4]); + } + OctorokBoss_Action1(this); +} +*/ + +void OctorokBoss_Intro(Entity* this) { + sub_08078B48(); + gUnk_02034490[0] = 1; + sub_08036F60(this); + OctorokBoss_Intro_SubActions[this->subAction](this); + sub_0805EC9C(this, this->field_0x76.HWORD, this->field_0x74.HWORD, GET_ANGLE(this)); +} + +void OctorokBoss_Intro_SubAction0(Entity* this) { + // Wait until the camera is on the Octorok + if (GET_TIMER(this)-- == 0) { + this->subAction = 1; + GET_ANGULAR_VEL(this) = 0x100; + GET_HELPER(this)->field_0x0 = 2; + } +} + +void OctorokBoss_Intro_SubAction1(Entity* this) { + // Rotate Octorok to player + if (GET_ANGLE_HI(this) == 0x80) { + GET_TIMER(this) = 0x3c; + this->subAction = 2; + GET_HELPER(this)->field_0x0 = 0; + // Octorok scream + SoundReq(SFX_159); + } else { + GET_ANGLE(this) += GET_ANGULAR_VEL(this); + } + OctorokBoss_StepSound(this, 0xf); +} + +void OctorokBoss_Intro_SubAction2(Entity* this) { + // Wait for scream end + if (GET_TIMER(this)-- == 0) { + this->subAction = 3; + GET_TIMER(this) = 0x3c; + gPlayerEntity.spriteSettings.draw |= 1; + gRoomControls.cameraTarget = &gPlayerEntity; + gRoomControls.unk5 = 1; + } +} + +void OctorokBoss_Intro_SubAction3(Entity* this) { + // Move the camera to the player + if (GET_TIMER(this)-- == 0) { + // Move the player inside the arena + gPlayerEntity.direction = 0x10; + gPlayerEntity.animationState = 4; + sub_08078AC0(0x1e, 0, 0); + GET_TIMER(this) = 0x3c; + this->subAction = 4; + } +} + +void OctorokBoss_Intro_SubAction4(Entity* this) { + if (GET_TIMER(this)-- == 0) { + this->subAction = 5; + GET_TIMER(this) = 0x2d; + // Make the player look towards the exit + gPlayerEntity.animationState = 0; + } else { + // Spawn exclamation bubble at a certain time + if (GET_TIMER(this) == 0x1e) { + CreateSpeechBubbleExclamationMark(&gPlayerEntity, 0xc, -0x18); + } + } +} + +void OctorokBoss_Intro_SubAction5(Entity* this) { + if (gPlayerEntity.animationState == 4) { + if (GET_TIMER(this)++ > 0x1e) { + // Play boss theme, enable control and switch to main action + this->action = ACTION1; + this->subAction = 0; + gRoomControls.unk5 = gPlayerEntity.animationState; + OctorokBoss_SetAttackTimer(this); + gUnk_02034490[0] = 0; + SoundReq(BGM_BOSS_THEME); + } + } else { + if (GET_TIMER(this)-- == 0) { + // Player looks back towards Octorok + gPlayerEntity.animationState = 4; + } + } +} + +void OctorokBoss_Action1(Entity* this) { + Entity* object; + u32 radius; + u8 angle; + + if (this->type != WHOLE) { + this->iframes = this->parent->iframes; + } + switch (this->type) { + case LEG_BR: + case LEG_FR: + case LEG_FL: + case LEG_BL: + if ((this->parent->field_0x6c.HALF.HI & 2) != 0) { + DeleteThisEntity(); + } + if (GET_HELPER(this)->mouthObject->health == 1) { + if ((s16)this->field_0x76.HWORD < 0) { + this->field_0x76.HWORD -= 4; + } else { + this->field_0x76.HWORD += 4; + } + if ((s16)this->field_0x74.HWORD < 0) { + this->field_0x74.HWORD -= 4; + } else { + this->field_0x74.HWORD += 4; + } + } + ResolveEntityBelow(this->parent, this); + if (((GET_HELPER(this)->field_0x2 != 0) || (this->parent->action == INTRO)) || + (1 < (u8)(this->parent->subAction - 3))) { + if ((s8)this->field_0xf < 0) { + this->field_0xf = -GET_HELPER(this)->field_0x0; + } else { + this->field_0xf = GET_HELPER(this)->field_0x0; + } + sub_08036998(this); + } + radius = 0x10000 / this->parent->field_0x76.HWORD; + radius = radius << 0xd >> 0x8; + radius = radius - 0x2000; + if (GET_HELPER(this)->mouthObject->health == 1) { + radius = radius + 0x2200; + } else { + radius = (radius >> 1) + 0x2200; + } + angle = -(this->parent->field_0x7a.HALF.HI + OctorokBoss_LegAngleOffset[this->type - 1]); + sub_08036914(this, angle, radius); + GET_ANGLE_HI(this) = + this->parent->field_0x7a.HALF.HI + OctorokBoss_LegAngleOffset2[this->type - 1] + GET_TIMER(this); + sub_0805EC9C(this, this->field_0x76.HWORD, this->field_0x74.HWORD, GET_ANGLE(this)); + break; + + case TAIL: + if (GET_HELPER(this)->mouthObject->health < 2) { + DeleteThisEntity(); + } + if ((GET_HELPER(this)->tailCount - 2) < this->type2) { + DeleteThisEntity(); + } + ResolveEntityOnTop(this->parent, this); + if (GET_HELPER(this)->tailCount - 2 == this->type2) { + ResolveEntityOnTop(this->parent, this); + radius = 0x10000 / this->parent->field_0x74.HWORD; + radius = radius << 0xd >> 0x8; + angle = -this->parent->field_0x7a.HALF.HI; + sub_08036914(this, angle, radius); + GET_ANGLE_HI(this) = -this->parent->field_0x7a.HALF.HI; + } + if (IS_FROZEN(this->parent) == 0) { + this->spriteSettings.draw |= 1; + } + break; + + case TAIL_END: + if (GET_HELPER(this)->mouthObject->health < 2) { + DeleteThisEntity(); + } + UpdateAnimationSingleFrame(this); + if (IS_FROZEN(this->parent)) { + sub_08036AF0(this, GET_TAIL_RADIUS(this), 0x10); + if ((this->bitfield & 0x7f) == 7) { + COLLISION_OFF(this); + object = CreateObjectWithParent(this, OCTOROK_BOSS_OBJECT, 0, 0); + this->child = object; + if (object != NULL) { + object->parent = this->parent; + GET_HELPER(this->child) = GET_HELPER(this); + } + } + } else { + COLLISION_ON(this); + this->spriteSettings.draw |= 1; + sub_08036998(this); + sub_080369D0(this, GET_TAIL_RADIUS(this), 4); + } + this->bitfield = 0; + sub_0805EC9C(this, this->field_0x76.HWORD, this->field_0x74.HWORD, -GET_ANGLE(this) ^ 0x8000); + break; + + case MOUTH: + if (this->health == 1) { + this->health = 0; + } else { + ResolveEntityBelow(this->parent, this); + if ((this->parent->subAction != 4) && (this->health != 1)) { + if (GET_TIMER(this) > 0x1c) { + GET_TIMER(this)--; + } + if (this->field_0x76.HWORD > 0x100) { + this->field_0x76.HWORD--; + } else { + this->field_0x76.HWORD = 0x100; + } + } + radius = 0x10000 / this->parent->field_0x74.HWORD; + radius = radius * (GET_TIMER(this) << 8) >> 8; + angle = -(this->parent->field_0x7a.HALF.HI + 0x80); + sub_08036914(this, angle, radius); + + GET_ANGLE_HI(this) = this->parent->field_0x7a.HALF.HI; + sub_0805EC9C(this, this->field_0x76.HWORD, this->field_0x74.HWORD, GET_ANGLE(this)); + sub_0800445C(this); + } + break; + + case WHOLE: + sub_0800445C(this); + sub_08036F60(this); + if (GET_HELPER(this)->fallingStonesTimer != 0) { + GET_HELPER(this)->fallingStonesTimer--; + if ((gScreenTransition.frameCount & 3) == 0) { + // Falling stones + CreateProjectileWithParent(this, OCTOROK_BOSS_PROJECTILE, 3); + } + } + OctorokBoss_Action1_SubActions[this->subAction](this); + sub_0805EC9C(this, this->field_0x76.HWORD, this->field_0x74.HWORD, GET_ANGLE(this)); + break; + } +} + +void OctorokBoss_Action1_AimTowardsPlayer(Entity* this) { + s32 tmp1; + s32 tmp2; + + tmp1 = (u8)(sub_080045DA(gPlayerEntity.x.WORD - this->x.WORD, gPlayerEntity.y.WORD - this->y.WORD) - + (((u8)(-GET_ANGLE_HI(this)) ^ 0x80))); + if (IS_FROZEN(this) == FALSE) { + tmp2 = 8; + } else { + tmp2 = 32; + } + // Probably that the boss is aiming at the player? + if (tmp1 > -tmp2 && tmp1 < tmp2) { + if (GET_PHASE4_ATTACK_PATTERN(this) != 0xff) { + OctorokBoss_SetAttackTimer(this); + return; + } + if (GET_ATTACK_WAIT_TURNS(this) == 0) { + OctorokBoss_StartRegularAttack(this); + } else { + OctorokBoss_WaitAnotherTurn(this); // Resets to subaction1 + } + } else { + // Rotate to face the player + if ((u32)tmp1 > 0x80) { + GET_ANGLE(this) += GET_ANGULAR_VEL(this); + GET_HELPER(this)->rotation = ROTATION_CW; + } else { + GET_ANGLE(this) -= GET_ANGULAR_VEL(this); + GET_HELPER(this)->rotation = ROTATION_CCW; + } + } + this->direction = (u8)(-GET_ANGLE_HI(this) ^ 0x80U) >> 3; + if (IS_FROZEN(this)) { + if (GET_ANGULAR_VEL(this) < 0x280) { + switch (GET_BOSS_PHASE(this)) { + case 1: + GET_ANGULAR_VEL(this)++; + break; + case 3: + GET_ANGULAR_VEL(this) += 2; + break; + } + } + } + OctorokBoss_StepSound(this, 0x1f); +} + +void OctorokBoss_Action1_WaitForTurn(Entity* this) { + if (((GET_TIMER(this)-- == 0) || (GET_BOSS_PHASE(this) == 0)) || (IS_FROZEN(this))) { + GET_ATTACK_WAIT_TURNS(this)--; + OctorokBoss_ResetToSubAction0(this); + } else { + if (ProcessMovement(this) == 0) { + GET_TIMER(this) = 0; + } + } + OctorokBoss_StepSound(this, 0x1f); +} + +void OctorokBoss_Action1_WaitForAttack(Entity* this) { + if (GET_TIMER(this)-- == 0) { + OctorokBoss_SetWaitTurnsForNextAttack(this); + } +} + +// Charge forwards and let stones fall when a collision occurs. +void OctorokBoss_Action1_ChargeAttack(Entity* this) { + bool32 knockbackCondition; + + if (GET_TIMER(this) == 0) { + ProcessMovement(this); + knockbackCondition = 0; + if ((this->direction != 0) && (this->direction != 0x10)) { + knockbackCondition = BOOLCAST((u32)this->collisions & 0xee00); + } + if (((this->direction != 0x18) && (this->direction != 8)) && ((this->collisions & 0xee) != 0)) { + knockbackCondition = 1; + } + if (knockbackCondition != 0) { + this->knockbackDuration = 0x20; + this->field_0x46 = 0x200; + this->knockbackDirection = this->direction ^ 0x10; + GET_HELPER(this)->fallingStonesTimer += 0x3c; + OctorokBoss_SetAttackTimer(this); + sub_08080964(0x3c, 0); + SoundReq(SFX_158); + SoundReq(SFX_14C); + } + } else { + GET_TIMER(this)--; + } + OctorokBoss_StepSound(this, 0xf); +} + +void OctorokBoss_Action1_Attack(Entity* this) { + OctorokBoss_Action1_Attack_Type2s[this->type2](this); + sub_08036FE4(this); + + if (this->field_0x80.HALF.LO != 0) { + gPlayerEntity.spriteSettings.draw = 0; + gPlayerEntity.flags &= 0x7f; + gPlayerEntity.collisionLayer = 2; + sub_08078B48(); + sub_08077B20(); + gPlayerEntity.parent = this; + sub_08036914(&gPlayerEntity, (u8) - (GET_ANGLE_HI(this) + 0x80), 0x3800); + } +} + +void OctorokBoss_Action1_Attack_Type2_0(Entity* this) { + if (GET_CURRENT_ATTACK(this) == NO_ATTACK) { + OctorokBoss_ResetToSubAction0(this); + } else { + GET_ANGULAR_VEL(this) = 0x100; + this->type2 = 1; + if (IS_FROZEN(this) == FALSE) { + GET_TIMER(this) = 0x16; + } else { + GET_TIMER(this) = 0; + } + SoundReq(SFX_155); + } +} + +void OctorokBoss_Action1_Attack_Type2_1(Entity* this) { + if (this->field_0x74.HWORD < 0xc0) { + this->field_0x74.HWORD++; + } else { + if (GET_TIMER(this)-- == 0) { + if (GET_CURRENT_ATTACK(this) == ATTACK_VACUUM) { + this->type2 = 3; + if (IS_FROZEN(this)) { + GET_TIMER(this) = 0x3c; + } else { + GET_TIMER(this) = 0x78; + } + GET_HELPER(this)->targetAngle = GET_ANGLE_HI(this); + } else { + this->type2 = 2; + GET_TIMER(this) = 0x2d; + } + SoundReq(SFX_155); + } + } +} + +void OctorokBoss_Action1_Attack_Type2_2(Entity* this) { + if (GET_TIMER(this) == 0) { + if (this->field_0x76.HWORD < this->field_0x74.HWORD) { + this->field_0x74.HWORD -= 8; + return; + } + this->type2 = 3; + this->field_0x74.HWORD = this->field_0x76.HWORD; + if (GET_CURRENT_ATTACK(this) != ATTACK_SMOKE) { + GET_TIMER(this) = 0x3c; + } else { + GET_TIMER(this) = 0; + CreateObjectWithParent(this, OCTOROK_BOSS_OBJECT, 4, 0); + } + } else { + GET_TIMER(this)--; + } +} + +void OctorokBoss_Action1_Attack_Type2_3(Entity* this) { + if ((gScreenTransition.frameCount & 2) != 0) { + GET_HELPER(this)->mouthObject->field_0x76.HWORD -= 8; + } else { + GET_HELPER(this)->mouthObject->field_0x76.HWORD += 8; + if (0x180 < GET_HELPER(this)->mouthObject->field_0x76.HWORD) { + GET_HELPER(this)->mouthObject->field_0x76.HWORD = 0x180; + } + } + if (GET_CURRENT_ATTACK(this) != ATTACK_VACUUM) { + if (GET_HELPER(this)->mouthObject->field_0x78.HALF.HI < 0x20) { + GET_HELPER(this)->mouthObject->field_0x78.HALF.HI++; + GET_HELPER(this)->mouthObject->field_0x76.HWORD += 8; + } + } + OctorokBoss_AttackFunctions[GET_CURRENT_ATTACK(this)](this); +} + +void OctorokBoss_ExecuteAttackSpitRock(Entity* this) { + this->child = CreateProjectileWithParent(this, OCTOROK_BOSS_PROJECTILE, 0); + if (this->child != NULL) { + this->child->parent = this; + this->child->direction = ((u8)-GET_ANGLE_HI(this) ^ 0x80); + } + GET_HELPER(this)->mouthObject->field_0x78.HALF.HI++; + + OctorokBoss_SetAttackTimer(this); +} + +void OctorokBoss_ExecuteAttackVacuum(Entity* this) { + s32 tmp; + + if (this->field_0x80.HALF.LO == 0) { + this->direction = sub_080045DA(gPlayerEntity.x.WORD - this->x.WORD, gPlayerEntity.y.WORD - this->y.WORD); + tmp = ((u8) - (GET_ANGLE_HI(this) + 0x80)) - this->direction; + if (tmp < 0) { + tmp = -tmp; + } + if (tmp < 0x10) { + if (sub_0806FC80(this, &gPlayerEntity, 0xf0) != 0) { + if ((gPlayerState.flags & 0x800) == 0) { + if ((gPlayerEntity.flags & 0x80) != 0) { + sub_0806F62C(&gPlayerEntity, 0x280, -GET_ANGLE_HI(this)); + if (sub_0806FC80(this, &gPlayerEntity, 0x48) != 0) { + this->field_0x80.HALF.LO = 1; + GET_TIMER(this) = 2; + GET_HELPER(this)->targetAngle = + sub_080045DA((gRoomControls.roomOriginX + 0x108) * 0x10000 - this->x.WORD, + (gRoomControls.roomOriginY + 0x88) * 0x10000 - this->y.WORD); + GET_HELPER(this)->targetAngle = (u8) - (GET_HELPER(this)->targetAngle + 0x80); + SoundReq(SFX_ED); + } + } + } else { + gPlayerState.flags &= 0xfffff7ff; + } + } + } + if ((gScreenTransition.frameCount & 3) == 0) { + CreateObjectWithParent(this, OCTOROK_BOSS_OBJECT, 2, 0); + } + } else { + if ((IS_FROZEN(this)) || (GET_HELPER(this)->targetAngle == GET_ANGLE_HI(this))) { + if (this->field_0x80.HALF.LO == 1) { + this->field_0x80.HALF.LO = 2; + this->type2 = 2; + GET_TIMER(this) = 0x2d; + GET_ANGULAR_VEL(this) = 0x100; + GET_HELPER(this)->field_0x2 = 0; + return; + } + this->field_0x80.HALF.LO = 0; + GET_ANGULAR_VEL(this) = 0x100; + GET_HELPER(this)->mouthObject->field_0x78.HALF.HI++; + gPlayerEntity.spriteSettings.draw = 1; + gPlayerEntity.flags &= 0x7f; + gPlayerEntity.collisionLayer = 1; + sub_080792BC(0x400, (u32)(-(GET_ANGLE_HI(this) + 0x80) * 0x1000000) >> 0x1b, 0x30); + OctorokBoss_SetAttackTimer(this); + SoundReq(SFX_EF); + return; + } + GET_TIMER(this) = 2; + } + if (GET_TIMER(this) == 0) { + this->field_0x74.HWORD = this->field_0x76.HWORD; + this->type2 = 0; + OctorokBoss_SetAttackTimer(this); + } else { + GET_TIMER(this)--; + if ((gPlayerState.flags == 0x800) && (GET_TIMER(this) == 0x3c)) { + tmp = sub_080045DA(gPlayerEntity.x.WORD - this->x.WORD, gPlayerEntity.y.WORD - this->y.WORD); + if ((u8)((tmp - ((u8)-GET_ANGLE_HI(this) ^ 0x80))) > 0x80) { + GET_HELPER(this)->targetAngle = GET_ANGLE_HI(this) + 0x30; + } else { + GET_HELPER(this)->targetAngle = GET_ANGLE_HI(this) - 0x30; + } + } + if (IS_FROZEN(this) == FALSE) { + if (GET_HELPER(this)->targetAngle != GET_ANGLE_HI(this)) { + GET_HELPER(this)->field_0x2 = 1; + if ((u8)(GET_HELPER(this)->targetAngle - GET_ANGLE_HI(this)) > 0x80) { + GET_ANGLE(this) -= GET_ANGULAR_VEL(this); + } else { + GET_ANGLE(this) += GET_ANGULAR_VEL(this); + } + } else { + GET_HELPER(this)->field_0x2 = IS_FROZEN(this); + } + } + } +} + +void OctorokBoss_ExecuteAttackSmoke(Entity* this) { + if (GET_TIMER(this) == 0xff) { + this->type2 = 0; + OctorokBoss_SetAttackTimer(this); + GET_TIMER(this) = 0x78; + } else { + GET_TIMER(this)++; + ChangeLightLevel(-1); + if ((gScreenTransition.frameCount & 3) == 0) { + if ((gScreenTransition.frameCount & 7) == 0) { + SoundReq(SFX_124); + } + CreateObjectWithParent(this, OCTOROK_BOSS_OBJECT, 3, 0); + } + } +} + +void OctorokBoss_ExecuteAttackFreeze(Entity* this) { + if (GET_TIMER(this) == 0) { + GET_HELPER(this)->field_0x2 = 0; + OctorokBoss_SetAttackTimer(this); + } else { + GET_TIMER(this)--; + if ((gScreenTransition.frameCount & 3) == 0) { + this->child = CreateProjectileWithParent(this, OCTOROK_BOSS_PROJECTILE, 2); + if (this->child != NULL) { + this->child->parent = this; + this->child->direction = (u8)-GET_ANGLE_HI(this) ^ 0x80; + } + } + } +} + +void OctorokBoss_Burning(Entity* this) { + OctorokBoss_Burning_SubActions[this->subAction](this); + if (GET_HELPER(this)->fallingStonesTimer != 0) { + GET_HELPER(this)->fallingStonesTimer--; + if ((gScreenTransition.frameCount & 7) == 0) { + // Falling stones + CreateProjectileWithParent(this, OCTOROK_BOSS_PROJECTILE, 3); + } + } + sub_0805EC9C(this, this->field_0x76.HWORD, this->field_0x74.HWORD, GET_ANGLE(this)); +} + +void OctorokBoss_Burning_SubAction0(Entity* this) { + this->subAction = 1; + this->speed = 0x200; + this->collisions = 0; + this->direction = (u8)(-GET_ANGLE_HI(this) ^ 0x80U) >> 3; + GET_TIMER(this) = 0x78; + GET_ANGULAR_VEL(this) = 0x180; + GET_HELPER(this)->field_0x0 = 4; + sub_080368D8(this); + OctorokBoss_Burning_SubAction1(this); +} + +void OctorokBoss_Burning_SubAction1(Entity* this) { + ProcessMovement(this); + if (this->collisions != 0) { + this->subAction = 2; + GET_HELPER(this)->targetAngle = GET_ANGLE_HI(this); + if ((this->collisions & 0xee00) != 0) { + GET_HELPER(this)->targetAngle = -GET_HELPER(this)->targetAngle; + } + if ((this->collisions & 0xee) != 0) { + GET_HELPER(this)->targetAngle = -GET_HELPER(this)->targetAngle ^ 0x80; + } + this->knockbackDuration = 0x18; + this->field_0x46 = 0x200; + this->knockbackDirection = this->direction ^ 0x10; + GET_HELPER(this)->fallingStonesTimer += 0x1e; + sub_08080964(0x1e, 0); + SoundReq(SFX_158); + SoundReq(SFX_14C); + } + if (GET_TIMER(this)-- == 0) { + this->health = 0; + } + if ((gScreenTransition.frameCount & 0x1f) == 0) { + SoundReq(SFX_159); + } +} + +void OctorokBoss_Burning_SubAction2(Entity* this) { + if ((u32)(GET_HELPER(this)->targetAngle - GET_ANGLE_HI(this) + 7) < 0xf) { + this->subAction = 1; + this->direction = ((u8)-GET_ANGLE_HI(this) ^ 0x80) >> 3; + this->collisions = 0; + ProcessMovement(this); + } else { + if ((u8)(GET_HELPER(this)->targetAngle - GET_ANGLE_HI(this)) >= 0x81) { + GET_ANGLE(this) -= GET_ANGULAR_VEL(this); + } else { + GET_ANGLE(this) += GET_ANGULAR_VEL(this); + } + } +} + +void sub_080368D8(Entity* this) { + if (this->field_0x80.HALF.LO != 0) { + gPlayerEntity.spriteSettings.draw = 1; + gPlayerEntity.flags |= 0x80; + gPlayerEntity.collisionLayer = 1; + } + this->field_0x76.HWORD = 0xa0; + this->field_0x74.HWORD = 0xa0; +} + +void sub_08036914(Entity* this, s32 angle, s32 radius) { + s16 tmp; + + tmp = FixedMul(gSineTable[angle], radius); + tmp = FixedDiv(tmp, 0x100); + this->x.WORD = this->parent->x.WORD + ((tmp << 0x10) >> 8); + tmp = FixedMul(gSineTable[angle + 0x40], radius); + tmp = FixedDiv(tmp, 0x100); + this->y.WORD = this->parent->y.WORD - ((tmp << 0x10) >> 8); + this->spriteOffsetX = this->parent->spriteOffsetX; + this->spriteOffsetY = this->parent->spriteOffsetY; +} + +NONMATCH("asm/non_matching/octorokBoss/sub_08036998.inc", void sub_08036998(Entity* this)) { + u32 tmp; + s8* tmp2; + s8 tmp3; + s32 a, b; + + // TODO regalloc in this awful structure here + tmp2 = &GET_TIMER(this); + tmp = this->field_0xf + (u8)*tmp2; + *tmp2 = tmp; + if ((s8)this->field_0xf < 0) { + a = tmp; + b = -this->actionDelay; + if (a << 0x18 < b << 0x18) { + this->field_0xf = -this->field_0xf; + } + } else { + if (((s8)*tmp2) > ((s32)this->actionDelay)) { + this->field_0xf = -this->field_0xf; + } + } +} +END_NONMATCH + +// Calculate tail angles regular +ASM_FUNC("asm/non_matching/octorokBoss/sub_080369D0.inc", void sub_080369D0(Entity* this, s32 radius, s32 angleSpeed)) +/*{ + s16 r1; + s32 iVar7; + + u32 index; + s32 tmp; + + s16 angleDiff; + Entity** tailObj; + + HelperStruct* helper = GET_HELPER(this); + + // Calculate the angle for the tail end + helper->tailObjects[0]->field_0x7a.HALF.HI = + helper->tailObjects[helper->tailCount - 1]->field_0x7a.HALF.HI + GET_TIMER(this); + + // iterate tails from 0 to tailCount-1 to calculate the angles + for (index = 0; index < helper->tailCount - 1; index++) { + if (helper->tailObjects[index]->field_0x7a.HALF.HI != helper->tailObjects[index + 1]->field_0x7a.HALF.HI) { + angleDiff = + helper->tailObjects[index + 1]->field_0x7a.HALF.HI - helper->tailObjects[index]->field_0x7a.HALF.HI; + if (angleDiff >= 1) { + if ((s8)-angleSpeed > angleDiff) { + helper->tailObjects[index + 1]->field_0x7a.HALF.HI = + helper->tailObjects[index]->field_0x7a.HALF.HI + angleSpeed; + } + } else { + if ((u8)angleSpeed < angleDiff) { + helper->tailObjects[index + 1]->field_0x7a.HALF.HI = + helper->tailObjects[index]->field_0x7a.HALF.HI - angleSpeed; + } + } + } + } + + // iterate tails from tailCount-1 to 0 to calculate the positions + index = helper->tailCount - 1; + tailObj = &helper->tailObjects[index]; + while (index != 0) { + // r1 = (s16)((u32)(radius << 0x14) >> 0x10); + index--; + tmp = FixedMul(gSineTable[(*tailObj)->prev->field_0x7a.HALF.HI ^ 0x80], radius); + tmp = FixedDiv(tmp, 0x100); + (*tailObj)->prev->x.WORD = (*tailObj)->next->x.WORD + ((tmp << 0x10) >> 8); + tmp = FixedMul(gSineTable[((*tailObj)->prev->field_0x7a.HALF.HI ^ 0x80) + 0x40], radius); + tmp = FixedDiv(tmp, 0x100); + (*tailObj)->prev->y.WORD = (*tailObj)->next->y.WORD - ((tmp << 0x10) >> 8); + tailObj--; + } +}*/ + +// calculate tail angles frozen sub_08036AF0 +ASM_FUNC("asm/non_matching/octorokBoss/sub_08036AF0.inc", void sub_08036AF0(Entity* this, s32 radius, s32 angleSpeed)) +/*{ + u8 bVar1; + u8 cVar2; + s16 _newY; + Entity** tailObjects; + u32 uVar5; + + s16 angleDiff; + s16 tmp; + u32 index; + Entity* prevTailObject; + Entity* currentTailObject; + HelperStruct* helper; + + helper = GET_HELPER(this); + for (index = helper->tailCount - 1; index != 0; index--) { + if (angleSpeed == 0) { + if (radius >= sub_080041DC(helper->tailObjects[index], helper->tailObjects[index - 1]->x.HALF.HI, + helper->tailObjects[index - 1]->y.HALF.HI)) { + return; + } else { + helper->tailObjects[index - 1]->field_0x7a.HALF.HI = + sub_080045DA(helper->tailObjects[index - 1]->x.WORD - helper->tailObjects[index]->x.WORD, + helper->tailObjects[index - 1]->y.WORD - helper->tailObjects[index]->y.WORD); + + tmp = FixedMul(gSineTable[helper->tailObjects[index - 1]->field_0x7a.HALF.HI], radius); + tmp = FixedDiv(tmp, 0x100); + helper->tailObjects[index - 1]->x.WORD = helper->tailObjects[index]->x.WORD + (((s32)tmp << 0x10) >> 8); + tmp = FixedMul(gSineTable[helper->tailObjects[index - 1]->field_0x7a.HALF.HI + 0x40], radius); + helper->tailObjects[index - 1]->y.WORD = + helper->tailObjects[index]->y.WORD - ((FixedDiv(tmp, 0x100) << 0x10) >> 8); + } + } else { + if (helper->tailObjects[index - 1]->field_0x7a.HALF.HI != helper->tailObjects[index]->field_0x7a.HALF.HI) { + angleDiff = ((helper->tailObjects[index]->field_0x7a.HALF.HI - + helper->tailObjects[index - 1]->field_0x7a.HALF.HI) * + 0x1000000) >> + 0x18; + if (angleDiff >= 1) { + if ((u8)angleSpeed > angleDiff) { + helper->tailObjects[index - 1]->field_0x7a.HALF.HI = + helper->tailObjects[index]->field_0x7a.HALF.HI - angleSpeed; + } + } else { + if ((s8)-angleSpeed < angleDiff) { + helper->tailObjects[index - 1]->field_0x7a.HALF.HI = + helper->tailObjects[index]->field_0x7a.HALF.HI + angleSpeed; + } + } + } + tmp = FixedMul(gSineTable[helper->tailObjects[index - 1]->field_0x7a.HALF.HI], radius); + tmp = FixedDiv(tmp, 0x100); + helper->tailObjects[index - 1]->x.WORD = helper->tailObjects[index]->x.WORD + ((tmp << 0x10) >> 8); + tmp = FixedMul(gSineTable[helper->tailObjects[index - 1]->field_0x7a.HALF.HI + 0x40], radius); + helper->tailObjects[index - 1]->y.WORD = + helper->tailObjects[index]->y.WORD - ((FixedDiv(tmp, 0x100) << 0x10) >> 8); + } + } +}*/ + +void OctorokBoss_SetAttackTimer(Entity* this) { + const u8* attackPatterns; + if ((GET_BOSS_PHASE(this) == 4) && (GET_PHASE4_ATTACK_PATTERN(this) != 0xff)) { + this->subAction = ACTION1_ATTACK; + this->type2 = 0; + this->field_0x80.HALF.LO = 0; + attackPatterns = OctorokBoss_Phase4AttackPatterns[GET_PHASE4_ATTACK_PATTERN(this)]; + GET_CURRENT_ATTACK(this) = attackPatterns[GET_NEXT_ATTACK_INDEX(this)]; + GET_NEXT_ATTACK_INDEX(this) += 1; + if (GET_CURRENT_ATTACK(this) != END_OF_ATTACK_PATTERN) { + return; + } + // End of this pattern, choose the next pattern. + GET_PHASE4_ATTACK_PATTERN(this) = 0xff; + } + this->subAction = ACTION1_WAITFORATTACK; + if (IS_FROZEN(this)) { + switch (GET_BOSS_PHASE(this)) { + case 1: + GET_TIMER(this) = 30; + break; + case 3: + GET_TIMER(this) = 10; + break; + } + } else { + if ((s16)gRoomVars.lightLevel != 0x100) { + // Constantly attack when its dark. + GET_TIMER(this) = 1; + } else { + GET_TIMER(this) = OctorokBoss_AttackTimerValues[GetRandomByWeight(OctorokBoss_AttackTimerWeights)]; + } + } +} + +void OctorokBoss_ResetToSubAction0(Entity* this) { + GET_ANGULAR_VEL(this) = 0x100; + GET_HELPER(this)->field_0x0 = 2; + GET_HELPER(this)->rotation = NO_ROTATION; + this->subAction = ACTION1_AIMTOWARDSPLAYER; +} + +void OctorokBoss_WaitAnotherTurn(Entity* this) { + this->subAction = ACTION1_WAITFORTURN; + this->speed = 0xc0; + GET_HELPER(this)->field_0x0 = 1; + GET_TIMER(this) = OctorokBoss_TurnTimeValues[GetRandomByWeight(OctorokBoss_TurnTimeWeights)]; +} + +void OctorokBoss_SetWaitTurnsForNextAttack(Entity* this) { + GET_PHASE4_ATTACK_PATTERN(this) = 0xff; + if (IS_FROZEN(this) == FALSE) { + if ((s16)gRoomVars.lightLevel != 0x100) { + // Constantly attack when its dark. + GET_ATTACK_WAIT_TURNS(this) = IS_FROZEN(this); + } else { + GET_ATTACK_WAIT_TURNS(this) = + OctorokBoss_WaitForAttackTurnsValues[GetRandomByWeight(OctorokBoss_WaitForAttackTurnsWeights)]; + } + } else { + GET_ATTACK_WAIT_TURNS(this) = 0; + } + OctorokBoss_ResetToSubAction0(this); +} + +void OctorokBoss_StartRegularAttack(Entity* this) { + const u8* attackPattern; + + // Set us up for an attack + this->subAction = ACTION1_ATTACK; + this->type2 = 0; + GET_PHASE4_ATTACK_PATTERN(this) = 0xff; + this->field_0x80.HALF.LO = 0; + GET_HELPER(this)->field_0x2 = 0; + if (GET_BOSS_PHASE(this) == 0) { + // In phase 0 just spit rocks. + GET_CURRENT_ATTACK(this) = ATTACK_SPITROCK; + return; + } + if (GET_BOSS_PHASE(this) == 4) { + if (((Random() & 3) == 0) || ((s16)gRoomVars.lightLevel != 0x100)) { + this->subAction = ACTION1_SUBACTION2; + this->speed = 0x200; + GET_TIMER(this) = 0x3c; + this->collisions = 0; + GET_HELPER(this)->field_0x0 = 4; + SoundReq(SFX_159); + return; + } + if (GET_BOSS_PHASE(this) == 4) { + // Select a new attack pattern that is not the previous one. + u32 rand; + GET_NEXT_ATTACK_INDEX(this) = 0; + rand = Random() & 3; + if (GET_HELPER(this)->phase4PrevAttackPattern != rand) { + GET_PHASE4_ATTACK_PATTERN(this) = rand; + } else { + GET_PHASE4_ATTACK_PATTERN(this) = (GET_HELPER(this)->phase4PrevAttackPattern + 1) & 3; + } + GET_HELPER(this)->phase4PrevAttackPattern = GET_PHASE4_ATTACK_PATTERN(this); + OctorokBoss_SetAttackTimer(this); + return; + } + } + + if (IS_FROZEN(this) == FALSE) { + attackPattern = OctorokBoss_NormalAttackPatterns; + } else { + attackPattern = OctorokBoss_FrozenAttackPatterns; + } + GET_CURRENT_ATTACK(this) = attackPattern[GET_NEXT_ATTACK_INDEX(this)]; + if (++GET_NEXT_ATTACK_INDEX(this) > 4) { + GET_NEXT_ATTACK_INDEX(this) = 0; + } +} + +void OctorokBoss_ChangePalette(Entity* this, u32 paletteIndex) { + u32 i; + + ChangeObjPalette(GET_HELPER(this)->mouthObject, paletteIndex); + + for (i = 0; i < 4; i++) { + ChangeObjPalette(GET_HELPER(this)->legObjects[i], paletteIndex); + } + + for (i = GET_HELPER(this)->tailCount - 1; i != 0; i--) { + ChangeObjPalette(GET_HELPER(this)->tailObjects[i], paletteIndex); + } +} + +void sub_08036F60(Entity* this) { + if ((this->subAction != 4) && (IS_FROZEN(this) == FALSE)) { + this->field_0x76.HWORD += (s8)this->actionDelay; + this->field_0x74.HWORD += (s8)this->actionDelay; + if (this->field_0x76.HWORD < 0x9c) { + this->actionDelay = 1; + } else { + if (this->field_0x76.HWORD > 0xa4) { + this->actionDelay = 0xff; + } + } + } +} + +void OctorokBoss_StepSound(Entity* this, u32 frameMask) { + if ((gScreenTransition.frameCount & frameMask) == 0) { + if (IS_FROZEN(this) == FALSE) { + SoundReq(SFX_163); + } else { + SoundReq(SFX_ICE_BLOCK_SLIDE); + } + } +} + +void sub_08036FE4(Entity* this) { + if ((IS_FROZEN(this)) && (this->field_0x80.HALF.LO == 0)) { + if (GET_ANGULAR_VEL(this) != 0) { + if (GET_HELPER(this)->rotation != NO_ROTATION) { + if (GET_HELPER(this)->rotation == ROTATION_CW) { + GET_ANGLE(this) += GET_ANGULAR_VEL(this); + } else { + GET_ANGLE(this) -= GET_ANGULAR_VEL(this); + } + } + switch (GET_BOSS_PHASE(this)) { + case 1: + GET_ANGULAR_VEL(this)--; + break; + case 3: + GET_ANGULAR_VEL(this) -= 2; + break; + } + } + } +} + +void (*const OctorokBoss_Functions[])(Entity*) = { + OctorokBoss_OnTick, OctorokBoss_OnTick, sub_08001324, OctorokBoss_OnHealthZero, sub_08001242, +}; + +void (*const OctorokBoss_Hit_SubActions[])(Entity*) = { + OctorokBoss_Hit_SubAction0, OctorokBoss_Hit_SubAction1, OctorokBoss_Hit_SubAction2, OctorokBoss_Hit_SubAction3, + OctorokBoss_Hit_SubAction4, OctorokBoss_Hit_SubAction5, OctorokBoss_Hit_SubAction6, +}; + +const u8 OctorokBoss_HealthPerPhase[] = { + 3, 1, 3, 1, 3, 1, 3, 0, +}; + +void (*const OctorokBoss_Actions[])(Entity*) = { + OctorokBoss_Init, OctorokBoss_Action1, OctorokBoss_Hit, OctorokBoss_Intro, OctorokBoss_Burning, +}; + +const u8 gUnk_080CF08C[] = { + 0, 4, 0, 0, 1, 5, 0, 0, 1, 4, 0, 0, 1, 3, 0, 0, 1, 2, 0, 0, 2, 1, 0, 0, 1, 1, 0, 0, 3, 6, 0, 0, +}; + +void (*const OctorokBoss_Intro_SubActions[])(Entity*) = { + OctorokBoss_Intro_SubAction0, OctorokBoss_Intro_SubAction1, OctorokBoss_Intro_SubAction2, + OctorokBoss_Intro_SubAction3, OctorokBoss_Intro_SubAction4, OctorokBoss_Intro_SubAction5, +}; +void (*const OctorokBoss_Action1_SubActions[])(Entity*) = { + OctorokBoss_Action1_AimTowardsPlayer, OctorokBoss_Action1_WaitForTurn, OctorokBoss_Action1_ChargeAttack, + OctorokBoss_Action1_WaitForAttack, OctorokBoss_Action1_Attack, +}; + +const u8 OctorokBoss_LegAngleOffset[] = { + 40, + 80, + 176, + 216, +}; +const u8 OctorokBoss_LegAngleOffset2[] = { + 128, + 0, + 0, + 128, +}; +void (*const OctorokBoss_Action1_Attack_Type2s[])(Entity*) = { + OctorokBoss_Action1_Attack_Type2_0, + OctorokBoss_Action1_Attack_Type2_1, + OctorokBoss_Action1_Attack_Type2_2, + OctorokBoss_Action1_Attack_Type2_3, +}; +void (*const OctorokBoss_AttackFunctions[])(Entity*) = { + OctorokBoss_ExecuteAttackSpitRock, + OctorokBoss_ExecuteAttackVacuum, + OctorokBoss_ExecuteAttackSmoke, + OctorokBoss_ExecuteAttackFreeze, +}; +void (*const OctorokBoss_Burning_SubActions[])(Entity*) = { + OctorokBoss_Burning_SubAction0, + OctorokBoss_Burning_SubAction1, + OctorokBoss_Burning_SubAction2, +}; + +// These attack timers are only used if the boss isn't frozen and gRoomVars.field_0xc != 0x100 +const u8 OctorokBoss_AttackTimerWeights[] = { + 48, + 96, + 80, + 32, +}; +const u8 OctorokBoss_AttackTimerValues[] = { + 5, + 10, + 15, + 30, +}; + +// 5: don't attack +const u8 OctorokBoss_Phase4AttackPattern0[] = { + ATTACK_SPITROCK, NO_ATTACK, ATTACK_SPITROCK, ATTACK_SMOKE, END_OF_ATTACK_PATTERN, +}; +const u8 OctorokBoss_Phase4AttackPattern1[] = { + ATTACK_VACUUM, NO_ATTACK, ATTACK_SPITROCK, ATTACK_SMOKE, END_OF_ATTACK_PATTERN, +}; +const u8 OctorokBoss_Phase4AttackPattern2[] = { + ATTACK_SPITROCK, NO_ATTACK, ATTACK_SPITROCK, NO_ATTACK, ATTACK_SPITROCK, END_OF_ATTACK_PATTERN, +}; + +const u8* const OctorokBoss_Phase4AttackPatterns[] = { + OctorokBoss_Phase4AttackPattern0, + OctorokBoss_Phase4AttackPattern1, + OctorokBoss_Phase4AttackPattern2, + OctorokBoss_Phase4AttackPattern1, +}; +const u8 OctorokBoss_TurnTimeWeights[] = { + 48, + 96, + 80, + 32, +}; +const u8 OctorokBoss_TurnTimeValues[] = { + 70, + 80, + 90, + 100, +}; +const u8 OctorokBoss_WaitForAttackTurnsWeights[] = { + 64, + 128, + 64, +}; +const u8 OctorokBoss_WaitForAttackTurnsValues[] = { + 1, + 2, + 3, +}; +const u8 OctorokBoss_NormalAttackPatterns[] = { + ATTACK_VACUUM, ATTACK_SPITROCK, ATTACK_VACUUM, ATTACK_SPITROCK, ATTACK_SPITROCK, +}; +const u8 OctorokBoss_FrozenAttackPatterns[] = { + ATTACK_VACUUM, ATTACK_FREEZE, ATTACK_VACUUM, ATTACK_FREEZE, ATTACK_VACUUM, +}; diff --git a/src/enemy/puffstool.c b/src/enemy/puffstool.c index 1d326ef1..207934a9 100644 --- a/src/enemy/puffstool.c +++ b/src/enemy/puffstool.c @@ -68,7 +68,7 @@ void sub_08025020(Entity* this) { this->cutsceneBeh.HWORD = 0x294; this->hitType = 0x83; this->field_0x82.HALF.LO = 0; - sub_0801D2B4(this, 0x7c); + ChangeObjPalette(this, 0x7c); } this->action = 7; this->actionDelay = 0x3c; @@ -133,7 +133,7 @@ void sub_080251AC(Entity* this) { this->cutsceneBeh.HWORD = 0x294; this->hitType = 0x83; this->field_0x82.HALF.LO = 0; - sub_0801D2B4(this, 0x7c); + ChangeObjPalette(this, 0x7c); } GetNextFrame(this); } @@ -360,7 +360,7 @@ void sub_0802563C(Entity* this) { GetNextFrame(this); if (--this->cutsceneBeh.HWORD == 0) { - sub_0801D2B4(this, 0x28); + ChangeObjPalette(this, 0x28); this->hitType = 0x82; this->field_0x82.HALF.LO = 240; sub_080256B4(this); @@ -369,9 +369,9 @@ void sub_0802563C(Entity* this) { u32 tmp3 = gUnk_080CBFF8[this->cutsceneBeh.HWORD >> 4]; if ((this->cutsceneBeh.HWORD & tmp3) == 0) { if (this->cutsceneBeh.HWORD & (tmp3 + 1)) { - sub_0801D2B4(this, 124); + ChangeObjPalette(this, 124); } else { - sub_0801D2B4(this, 40); + ChangeObjPalette(this, 40); } } } diff --git a/src/enemy/treeItem.c b/src/enemy/treeItem.c index 290cac38..ddc645dd 100644 --- a/src/enemy/treeItem.c +++ b/src/enemy/treeItem.c @@ -6,7 +6,7 @@ static bool32 ShouldSpawnTreeItem(Entity*); -extern u32 sub_080028F4(const u8*); +extern u32 GetRandomByWeight(const u8*); extern void sub_08049CF4(Entity*); const u8 gTreeItemDropTables[][16] = { @@ -33,7 +33,7 @@ void TreeItem(Entity* this) { if (this->action == 0) { this->action++; - this->field_0x68.HALF.LO = sub_080028F4(gTreeItemDropTables[this->type]); + this->field_0x68.HALF.LO = GetRandomByWeight(gTreeItemDropTables[this->type]); if (this->field_0x68.HALF.LO > FAIRY_INDEX) { DeleteThisEntity(); } diff --git a/src/enemy/vaatiTransfiguredEye.c b/src/enemy/vaatiTransfiguredEye.c index 05132764..78fa065e 100644 --- a/src/enemy/vaatiTransfiguredEye.c +++ b/src/enemy/vaatiTransfiguredEye.c @@ -228,12 +228,12 @@ void sub_08045A28(Entity* this) { switch (frames) { case 0x20: this->field_0x82.HALF.HI = 1; - sub_0801D2B4(this, 0x13e); + ChangeObjPalette(this, 0x13e); break; case 0x00: case 0x40: this->field_0x82.HALF.HI = 2; - sub_0801D2B4(this, 0x13f); + ChangeObjPalette(this, 0x13f); break; default: break; @@ -243,11 +243,11 @@ void sub_08045A28(Entity* this) { switch (frames) { case 0x10: this->field_0x82.HALF.HI = type; - sub_0801D2B4(this, 0x13b); + ChangeObjPalette(this, 0x13b); break; case 0: this->field_0x82.HALF.HI = 2; - sub_0801D2B4(this, 0x13f); + ChangeObjPalette(this, 0x13f); break; default: break; @@ -257,15 +257,15 @@ void sub_08045A28(Entity* this) { switch (frames) { case 0x20: this->field_0x82.HALF.HI = 1; - sub_0801D2B4(this, 0x13e); + ChangeObjPalette(this, 0x13e); break; case 0x10: this->field_0x82.HALF.HI = 0; - sub_0801D2B4(this, 0x13b); + ChangeObjPalette(this, 0x13b); break; case 0x40: this->field_0x82.HALF.HI = 2; - sub_0801D2B4(this, 0x13f); + ChangeObjPalette(this, 0x13f); break; default: break; @@ -275,7 +275,7 @@ void sub_08045A28(Entity* this) { switch (frames) { case 0: this->field_0x82.HALF.HI = 2; - sub_0801D2B4(this, 0x13f); + ChangeObjPalette(this, 0x13f); break; default: break; @@ -291,11 +291,11 @@ void sub_08045A28(Entity* this) { switch (this->frame & 0x70) { case 0x10: this->field_0x82.HALF.HI = 2; - sub_0801D2B4(this, 0x13b); + ChangeObjPalette(this, 0x13b); break; case 0x20: this->field_0x82.HALF.HI = 1; - sub_0801D2B4(this, 0x13e); + ChangeObjPalette(this, 0x13e); break; default: break; @@ -306,11 +306,11 @@ void sub_08045A28(Entity* this) { switch (temp) { case 0: this->field_0x82.HALF.HI = temp; - sub_0801D2B4(this, 0x13f); + ChangeObjPalette(this, 0x13f); break; case 0x10: this->field_0x82.HALF.HI = 2; - sub_0801D2B4(this, 0x13b); + ChangeObjPalette(this, 0x13b); break; default: break; @@ -320,7 +320,7 @@ void sub_08045A28(Entity* this) { switch (this->frame & 0x70) { case 0: this->field_0x82.HALF.HI = this->frame & 0x70; - sub_0801D2B4(this, 0x13f); + ChangeObjPalette(this, 0x13f); break; default: break; diff --git a/src/enemy/vaatiWrath.c b/src/enemy/vaatiWrath.c index 43d870c1..ad7ac87f 100644 --- a/src/enemy/vaatiWrath.c +++ b/src/enemy/vaatiWrath.c @@ -457,7 +457,7 @@ void VaatiWrathType0ActionA(Entity* this) { this->direction = 0; this->speed = 0x100; this->zVelocity = 0x12000; - sub_0801D2B4(this, 0x16b); + ChangeObjPalette(this, 0x16b); InitAnimationForceUpdate(this, 5); type1 = ((VaatiWrathHeapStruct*)this->myHeap)->type1; type1->subAction = 1; @@ -501,7 +501,7 @@ void VaatiWrathType0ActionB(Entity* this) { if (this->actionDelay == 0) { this->action = 0xc; this->subAction = 0; - sub_0801D2B4(this, 0x140); + ChangeObjPalette(this, 0x140); InitAnimationForceUpdate(this, 8); InitializeAnimation(((VaatiWrathHeapStruct*)this->myHeap)->type1, 0x10); InitializeAnimation(((VaatiWrathHeapStruct*)this->myHeap)->type2, 0x18); @@ -579,7 +579,7 @@ void sub_08041BE8(Entity* this) { entity->updatePriority = 3; sub_080AE068(entity); LoadFixedGFX(entity, 0x1f5); - sub_0801D2B4(entity, 0x16b); + ChangeObjPalette(entity, 0x16b); InitializeAnimation(entity, 0x1a); entity = ((VaatiWrathHeapStruct*)this->myHeap)->type3; @@ -664,9 +664,9 @@ void sub_08041D84(Entity* this) { } else { if (this->field_0xf < 0xf0) { if ((0xb7 < this->field_0xf) && ((this->field_0xf & 7) == 0)) { - sub_0801D2B4(((VaatiWrathHeapStruct*)this->myHeap)->type2, - gUnk_080D0E80[(this->field_0xf - 0xb8) >> 3]); - sub_0801D2B4(this->child, gUnk_080D0E80[(this->field_0xf - 0xb8) >> 3]); + ChangeObjPalette(((VaatiWrathHeapStruct*)this->myHeap)->type2, + gUnk_080D0E80[(this->field_0xf - 0xb8) >> 3]); + ChangeObjPalette(this->child, gUnk_080D0E80[(this->field_0xf - 0xb8) >> 3]); } if (this->field_0xf == 0xe6) { DoFade(7, 4); @@ -674,7 +674,7 @@ void sub_08041D84(Entity* this) { } else { this->subAction = 4; this->spriteSettings.draw = 1; - sub_0801D2B4(this, 0x173); + ChangeObjPalette(this, 0x173); InitAnimationForceUpdate(this, 0xb); } this->field_0xf++; diff --git a/src/manager/manager23.c b/src/manager/manager23.c index 1d895f30..43f0c688 100644 --- a/src/manager/manager23.c +++ b/src/manager/manager23.c @@ -80,7 +80,7 @@ void sub_0805BD5C(Manager23* this) { } else { if (GetTileType(this->field_0x20, this->manager.unk_0b) == 0x76) { SetFlag(this->field_0x3e); - sub_0805308C(this->manager.unk_0e); + ChangeLightLevel(this->manager.unk_0e); DeleteThisEntity(); } } @@ -106,7 +106,7 @@ void sub_0805BDB4(Manager23* this) { return; } SetFlag(this->field_0x3e); - sub_0805308C(this->manager.unk_0e); + ChangeLightLevel(this->manager.unk_0e); this->manager.action = 2; this->field_0x22 = this->field_0x36 * 0x3c; return; @@ -117,7 +117,7 @@ void sub_0805BDB4(Manager23* this) { CreateDustAt(*(s16*)&this->field_0x38, *(s16*)&this->field_0x3a, this->manager.unk_0b); ClearFlag(this->field_0x3e); sub_0807BA8C(this->field_0x20, this->manager.unk_0b); - sub_0805308C(-this->manager.unk_0e); + ChangeLightLevel(-this->manager.unk_0e); this->manager.action = 1; } else { if (CheckFlags(this->field_0x3c) == 0) { @@ -139,7 +139,7 @@ void sub_0805BE70(Manager23* this, u32 param_2) { void sub_0805BE94(Manager23* this) { SetTileType(0x76, ((this->field_0x38 << 0x10) >> 0x14 & 0x3fU) | ((this->field_0x3a << 0x10) >> 0x14 & 0x3fU) << 6, this->manager.unk_0b); - sub_0805308C(this->manager.unk_0e); + ChangeLightLevel(this->manager.unk_0e); DeleteThisEntity(); } diff --git a/src/manager/manager37.c b/src/manager/manager37.c index c1af96f2..937e5b4b 100644 --- a/src/manager/manager37.c +++ b/src/manager/manager37.c @@ -19,8 +19,6 @@ extern void (*const gUnk_08108DD8[])(Manager*); void sub_0805E094(void); -extern Entity* CreateSpeechBubbleExclamationMark(Entity*, u32, u32); - void Manager37_Main(Manager* this) { gUnk_08108DBC[this->unk_0a](this); } diff --git a/src/manager/managerF.c b/src/manager/managerF.c index 432ec49f..09fb8746 100644 --- a/src/manager/managerF.c +++ b/src/manager/managerF.c @@ -253,18 +253,18 @@ void sub_080591CC(ManagerF* this) { this->manager.action = 1; this->manager.unk_0b = CheckFlags(this->unk_3e); if (this->manager.unk_0b) { - gRoomVars.field_0xc = this->unk_3a; + gRoomVars.lightLevel = this->unk_3a; } else { - gRoomVars.field_0xc = this->unk_38; + gRoomVars.lightLevel = this->unk_38; } } else { u32 tmp = CheckFlags(this->unk_3e); if (this->manager.unk_0b != tmp) { this->manager.unk_0b = tmp; if (tmp) { - gRoomVars.field_0xc = this->unk_3a; + gRoomVars.lightLevel = this->unk_3a; } else { - gRoomVars.field_0xc = this->unk_38; + gRoomVars.lightLevel = this->unk_38; } } } @@ -272,16 +272,16 @@ void sub_080591CC(ManagerF* this) { void sub_08059220(ManagerF* this) { const ManagerF_HelperStruct* data; - gRoomVars.field_0xc = 0; + gRoomVars.lightLevel = 0; for (data = gUnk_08108354; data->x != 0xFFFF; data++) { if (CheckPlayerInRegion(data->x, data->y, data->width, data->height)) { - gRoomVars.field_0xc = data->unk_08; + gRoomVars.lightLevel = data->unk_08; } } if (!this->manager.action) { this->manager.action = 1; - gArea.unk_0a = gRoomVars.field_0xc; + gArea.unk_0a = gRoomVars.lightLevel; } } diff --git a/src/npc/bladeBrothers.c b/src/npc/bladeBrothers.c index 95c447f0..10080ffe 100644 --- a/src/npc/bladeBrothers.c +++ b/src/npc/bladeBrothers.c @@ -101,7 +101,7 @@ void sub_08068AA4(Entity* this) { if (this->type2 == 0) { this->type2 += 1; } - sub_0801D2B4(this, gUnk_081115DC[this->type2]); + ChangeObjPalette(this, gUnk_081115DC[this->type2]); } } diff --git a/src/npc/castorWildsStatue.c b/src/npc/castorWildsStatue.c index 366e568d..489b584a 100644 --- a/src/npc/castorWildsStatue.c +++ b/src/npc/castorWildsStatue.c @@ -126,7 +126,7 @@ void CastorWildsStatue_Fusion(Entity* this) { this->spriteSettings.draw = 1; this->y.HALF.HI -= 0x18; InitializeAnimation(this, 1); - sub_0801D2B4(this, 0x17b); + ChangeObjPalette(this, 0x17b); } else { GetNextFrame(this); } diff --git a/src/npc/drLeft.c b/src/npc/drLeft.c index cdc05551..83b60a43 100644 --- a/src/npc/drLeft.c +++ b/src/npc/drLeft.c @@ -28,7 +28,7 @@ void DrLeft(Entity* this) { if (this->action == 0) { this->action += 1; this->frameIndex = 0; - sub_0806FAD8(this, this); + ResolveEntityBelow(this, this); } } } diff --git a/src/npc/gregal.c b/src/npc/gregal.c index db60132d..88487e79 100644 --- a/src/npc/gregal.c +++ b/src/npc/gregal.c @@ -3,7 +3,7 @@ #include "functions.h" #include "npc.h" -void sub_0801D2B4(Entity*, u32); +void ChangeObjPalette(Entity*, u32); extern void (*gUnk_08113D8C[])(Entity*); @@ -24,7 +24,7 @@ void sub_0806CAF4(Entity* this) { if (npc != NULL) { npc->parent = this; CopyPosition(this, npc); - sub_0806FAD8(this, npc); + ResolveEntityBelow(this, npc); } npc = CreateNPC(0x4a, 2, 0); if (npc != NULL) { @@ -118,31 +118,31 @@ void sub_0806CCD0(Entity* this, ScriptExecutionContext* context) { } void sub_0806CCF8(Entity* this) { - sub_0801D2B4(this, 0x10a); + ChangeObjPalette(this, 0x10a); } void sub_0806CD04(Entity* this) { - sub_0801D2B4(this, 0x10b); + ChangeObjPalette(this, 0x10b); } void sub_0806CD14(Entity* this) { - sub_0801D2B4(this, 0x10c); + ChangeObjPalette(this, 0x10c); } void sub_0806CD20(Entity* this) { - sub_0801D2B4(this, 0x10d); + ChangeObjPalette(this, 0x10d); } void sub_0806CD30(Entity* this) { - sub_0801D2B4(this, 0x10e); + ChangeObjPalette(this, 0x10e); } void sub_0806CD3C(Entity* this) { - sub_0801D2B4(this, 0x10f); + ChangeObjPalette(this, 0x10f); } void sub_0806CD4C(Entity* this) { - sub_0801D2B4(this, 0x110); + ChangeObjPalette(this, 0x110); } void sub_0806CD58(Entity* this) { diff --git a/src/npc/pina.c b/src/npc/pina.c index 11a2b55b..4d60768c 100644 --- a/src/npc/pina.c +++ b/src/npc/pina.c @@ -10,8 +10,6 @@ void sub_08063A80(Entity* this); extern void (*gUnk_0810CDF8[])(Entity*); -extern void CreateSpeechBubbleExclamationMark(Entity*, u32, u32); - extern Dialog gUnk_0810CE04[]; void Pina(Entity* this) { diff --git a/src/npc/pita.c b/src/npc/pita.c index b379ba8f..235e4a1a 100644 --- a/src/npc/pita.c +++ b/src/npc/pita.c @@ -10,7 +10,7 @@ extern Hitbox gUnk_0810C428; extern u8 gUnk_0810C430[4]; extern u8 gUnk_0810C435[]; extern u8 gUnk_0810C43D[]; -extern u32 sub_080028F4(const u8*); +extern u32 GetRandomByWeight(const u8*); void Pita(Entity* this) { if (this->action == 0) { @@ -58,7 +58,7 @@ bool32 sub_08062EDC(Entity* this, ScriptExecutionContext* context) { context->condition = FALSE; return FALSE; } else { - tmp = sub_080028F4(gUnk_0810C435); + tmp = GetRandomByWeight(gUnk_0810C435); tmp2 = gUnk_0810C43D[tmp]; sub_080A7C18(0x5c, tmp2, 1); MessageNoOverlap(0x3c05, this); diff --git a/src/npc/rem.c b/src/npc/rem.c index 7298b531..1c4d5c22 100644 --- a/src/npc/rem.c +++ b/src/npc/rem.c @@ -285,7 +285,7 @@ void sub_0806A9E8(Entity* this) { Entity* npc = CreateNPC(0x37, 4, 0); if (npc != NULL) { CopyPosition(this, npc); - sub_0806FAD8(this, npc); + ResolveEntityBelow(this, npc); } } diff --git a/src/npc/stockwell.c b/src/npc/stockwell.c index dc38b634..b83ba2c2 100644 --- a/src/npc/stockwell.c +++ b/src/npc/stockwell.c @@ -4,9 +4,6 @@ #include "textbox.h" #include "functions.h" -extern void CreateSpeechBubbleQuestionMark(Entity*, u32, u32); -extern void CreateSpeechBubbleExclamationMark(Entity*, u32, u32); - extern void (*const gUnk_0810FDC8[])(Entity*); extern void (*const gUnk_0810FDA4[])(Entity*); diff --git a/src/npc/vaatiReborn.c b/src/npc/vaatiReborn.c index bc593edf..89c9ce8f 100644 --- a/src/npc/vaatiReborn.c +++ b/src/npc/vaatiReborn.c @@ -136,7 +136,7 @@ void VaatiRebornAction1(Entity* this) { case 1: if (this->frame & 0x80) { this->subAction = 2; - sub_0801D2B4(this, 0x13f); + ChangeObjPalette(this, 0x13f); InitAnimationForceUpdate(this, this->subAction - 1); } break; diff --git a/src/object.c b/src/object.c index 18b401c3..13fd552e 100644 --- a/src/object.c +++ b/src/object.c @@ -139,7 +139,7 @@ void (*const gObjectFunctions[])(Entity*) = { [SMALL_ICE_BLOCK] = SmallIceBlock, [BIG_ICE_BLOCK] = BigIceBlock, [OBJECT_86] = Object86, - [OBJECT_87] = Object87, + [OCTOROK_BOSS_OBJECT] = OctorokBossObject, [HUGE_BOOK] = MacroBook, [OBJECT_89] = Object89, [OBJECT_8A] = Object8A, diff --git a/src/object/bird.c b/src/object/bird.c index 12bf1815..3045fecb 100644 --- a/src/object/bird.c +++ b/src/object/bird.c @@ -102,7 +102,7 @@ void sub_0809D0AC(Entity* this) { SoundReq(SFX_SECRET); fx = CreateFx(this, FX_DASH, 0); if (fx != NULL) { - sub_0806FAD8(this, fx); + ResolveEntityBelow(this, fx); } } } diff --git a/src/object/fileScreenObjects.c b/src/object/fileScreenObjects.c index f4802a9e..549e2600 100644 --- a/src/object/fileScreenObjects.c +++ b/src/object/fileScreenObjects.c @@ -262,7 +262,7 @@ void sub_0808EB74(Entity* this) { this->x.WORD = entity->x.WORD; this->y.WORD = entity->y.WORD; this->spriteRendering.b3 = entity->spriteRendering.b3; - sub_0806FAD8(entity, this); + ResolveEntityBelow(entity, this); } else { this->x.HALF.HI = 0xF000; this->y.HALF.HI = 0xF000; @@ -312,7 +312,7 @@ void sub_0808EBB8(Entity* this) { default: entity = sub_0808EC80(var0); if (entity) { - sub_0806FAD8(entity, this); + ResolveEntityBelow(entity, this); this->spriteRendering.b3 = entity->spriteRendering.b3; x = entity->x.HALF.HI; y = entity->y.HALF.HI; diff --git a/src/object/lockedDoor.c b/src/object/lockedDoor.c index c7f3c437..f81f63b7 100644 --- a/src/object/lockedDoor.c +++ b/src/object/lockedDoor.c @@ -304,10 +304,10 @@ u32 sub_080837B0(Entity* this) { tmp = gUnk_0811F690[tmp2 - 0x40]; } if (tmp2 == 0x68) { - sub_0801D2B4(this, 0); + ChangeObjPalette(this, 0); } else { if (tmp2 == 0x88) { - sub_0801D2B4(this, 1); + ChangeObjPalette(this, 1); } } LoadFixedGFX(this, tmp); diff --git a/src/object/object49.c b/src/object/object49.c index 8b7c1bf3..5a02a82c 100644 --- a/src/object/object49.c +++ b/src/object/object49.c @@ -184,7 +184,7 @@ void sub_0808F3DC(Entity* this) { // TODO: This block of code might supposed to be a switch statement. if (this->type != 8) { if (this->type == 7) { - sub_0806FAD8(this->child, this); + ResolveEntityBelow(this->child, this); return; } } else { @@ -239,7 +239,7 @@ void sub_0808F498(Entity* this) { this->x.HALF.HI += (s32)Random() % (this->parent->hitbox->width * 2); this->y.HALF.HI -= this->parent->hitbox->height; this->y.HALF.HI += (s32)Random() % (this->parent->hitbox->height * 2); - sub_0801D2B4(this, var0); + ChangeObjPalette(this, var0); InitializeAnimation(this, 4); } } diff --git a/src/object/objectA2.c b/src/object/objectA2.c index de21a664..c7b0a5ea 100644 --- a/src/object/objectA2.c +++ b/src/object/objectA2.c @@ -39,7 +39,7 @@ void sub_0809F318(Entity* this) { this->z.HALF.HI = 0xFFB0; this->spriteOrientation.flipY = 2; this->action = 1; - sub_0801D2B4(this, gUnk_08124704[this->type]); + ChangeObjPalette(this, gUnk_08124704[this->type]); SetDefaultPriority(this, 7); } diff --git a/src/object/octorokBossObject.c b/src/object/octorokBossObject.c new file mode 100644 index 00000000..39d3b2a2 --- /dev/null +++ b/src/object/octorokBossObject.c @@ -0,0 +1,405 @@ +#include "global.h" +#include "entity.h" +#include "coord.h" +#include "audio.h" +#include "functions.h" +#include "random.h" +#include "object.h" + +extern void sub_0807B9B8(s32, s32, s32); + +extern void (*const OctorokBossObject_Actions[])(Entity*); +extern const u16 gUnk_0812384C[]; +extern const u16 gUnk_0812388C[]; +extern const u16 gUnk_081238A0[]; + +bool32 sub_0809A6F8(u32, u32, u32, u32); +bool32 sub_0809A758(u32, u32); + +typedef struct HelperStruct { + u8 field_0x0; // [0,1,2,4] is later stored in this->field_0xf + u8 tailCount; + u8 field_0x2; // [0,1] + u8 field_0x3; // relates to this->field_0x7a.HALF.HI + u8 field_0x4; // [0,1,0xff] + u8 field_0x5; // [0-4], sets this->field_0x80.HALF.HI + u8 fallingStonesTimer; + u8 field_0x7; // some sort of counter that is only set when hit for the first time? + Entity* mouthObject; + Entity* tailObjects[5]; + Entity* legObjects[4]; +} HelperStruct; + +enum OctorokBossObjectType { + TYPE0, // OctorokBoss_Action1 / TAIL_END + TYPE_FIRE, // this->OctorokBossObject_Action1 + TYPE_SUCKING, // OctorokBoss_ExecuteAttackVacuum + TYPE_SMOKE, // OctorokBoss_ExecuteAttackSmoke + TYPE4, // OctorokBoss_Action1_Attack_Type2_2 + TYPE_ICE_CRYSTALS, // OctorokBoss_Hit_SubAction1 + TYPE6, // OctorokBoss_Hit_SubAction1 // Scar thingy appearing on first defrost? + TYPE7, + TYPE8, // OctorokBoss_Hit_SubAction1 + TYPE9 // OctorokBoss_Hit_SubAction4 +}; +#define GET_HELPER(this) (*(HelperStruct**)&this->cutsceneBeh) + +extern u32 sub_0806FC80(Entity*, Entity*, s32); + +void OctorokBossObject(Entity* this) { + OctorokBossObject_Actions[this->action](this); +} + +void OctorokBossObject_Init(Entity* this) { + this->action = 1; + this->speed = 0x200; + switch (this->type) { + case 0: + this->field_0x78.HALF.HI = 0x96; + this->actionDelay = 0; + this->field_0xf = 0x1e; + case 1: + InitializeAnimation(this, 0); + EnqueueSFX(SFX_124); + break; + case 2: + this->direction = -(this->parent->field_0x7a.HALF.HI + -0x80); + if ((Random() & 1) != 0) { + switch (Random() & 3) { + case 0: + this->direction = this->direction - 0x10; + break; + case 1: + this->direction = this->direction + 0x10; + break; + case 2: + this->direction = this->direction - 8; + break; + case 3: + this->direction = this->direction + 8; + break; + } + } + + this->speed = 0xf0 - (Random() & 0x3f); + sub_0806F62C(this, ((s16)this->speed >> 1) << 8, (u32)this->direction); + sub_0806F62C(this, ((s16)this->speed >> 1) << 8, (u32)this->direction); + InitializeAnimation(this, 5); + SoundReq(SFX_14C); + break; + case 3: + this->direction = -(this->parent->field_0x7a.HALF.HI + -0x80); + sub_0806F62C(this, 0x4800, (u32)this->direction); + if ((Random() & 1) != 0) { + this->direction = (Random() & 0x3f) + this->direction; + } else { + this->direction = this->direction - (Random() & 0x3f); + } + InitializeAnimation(this, 6); + break; + case 6: + sub_0806F62C(this, (0x30 - (Random() & 0x2f)) * 0x100, Random() & 0xff); + if ((Random() & 1) != 0) { + this->direction = (Random() & 0x3f) + this->direction; + } else { + this->direction = this->direction - (Random() & 0x3f); + } + InitializeAnimation(this, 5); + break; + case 4: + *(u32*)&this->field_0x78 = 0x30c; + break; + case 5: + this->spritePriority.b0 = 0; + *(u32*)&this->field_0x78 = 0x18; + this->field_0x76.HWORD = 0x400; + this->field_0x74.HWORD = 0x400; + this->field_0x7a.HWORD = 0; + sub_0806F62C(this, + ((-(u32)this->parent->field_0x7a.HALF.HI << 0x18) >> 0x18) + + (u32)gUnk_0812388C[(u32)this->type2 * 2 + 1], + (u32)gUnk_0812388C[(u32)this->type2 * 2]); + sub_0805EC9C(this, this->field_0x76.HWORD, this->field_0x74.HWORD, this->field_0x7a.HWORD); + InitializeAnimation(this, 7); + break; + case 7: + this->actionDelay = 0; + InitializeAnimation(this, 8); + CopyPosition(this->parent, this); + break; + case 8: + this->type2 = this->parent->field_0x7c.BYTES.byte0; + this->actionDelay = 4; + this->field_0xf = 0; + this->field_0x82.HWORD = (this->x.HALF.HI - (gRoomControls.roomOriginX)) & 0x1f0; + this->field_0x80.HWORD = (this->y.HALF.HI - ((u32)gRoomControls.roomOriginY)) & 0x1f0; + *(int*)&this->cutsceneBeh = + ((s32)(this->field_0x82.HWORD - 0x10) >> 4) + (this->field_0x80.HWORD >> 4) * 0x1f; + sub_0809A6F8(this->field_0x82.HWORD, this->field_0x80.HWORD, *(int*)&this->cutsceneBeh, this->type2); + if ((this->parent->field_0x7c.BYTES.byte0 & 1) != 0) { + SoundReq(SFX_1A3); + } else { + SoundReq(SFX_WIND2); + } + break; + case 9: + *(u32*)&this->field_0x78 = 0x1e0; + break; + } +} + +NONMATCH("asm/non_matching/octorokBossObject/OctorokBossObject_Action1.inc", + void OctorokBossObject_Action1(Entity* this)) { + s32 tmp_c; + u32 loop_var; + + s32 t1, t2; + + GetNextFrame(this); + + switch (this->type) { + case 0: + if (this->field_0x78.HALF.HI != 0) { + this->field_0x78.HALF.HI--; + if (this->field_0xf-- == 0) { + this->field_0xf = 5; + this->child = CreateObjectWithParent(this, OCTOROK_BOSS_OBJECT, 1, this->type2); + if (this->child != NULL) { + this->child->parent = this->parent; + GET_HELPER(this->child) = GET_HELPER(this); + } + this->type2 += 1; + } + CopyPosition(GET_HELPER(this)->tailObjects[0], this); + return; + } + case 1: + this->direction = sub_080045DA(GET_HELPER(this)->tailObjects[this->actionDelay]->x.WORD - this->x.WORD, + GET_HELPER(this)->tailObjects[this->actionDelay]->y.WORD - this->y.WORD); + sub_0806F62C(this, this->speed, this->direction); + if (sub_080041A0(this, GET_HELPER(this)->tailObjects[this->actionDelay], 2, 2) == 0) { + return; + } + if (this->type == 0) { + GET_HELPER(this)->tailObjects[this->actionDelay]->spriteSettings.draw &= -2; + } + if ((u32)this->actionDelay == GET_HELPER(this)->tailCount - 1) { + this->action = 2; + this->actionDelay = 0xf0; + this->direction = gUnk_0812384C[(this->type2 & 0xf) * 2] + ((u8)Random() & 0xf); + this->speed = gUnk_0812384C[(this->type2 & 0xf) * 2 + 1] + ((u16)Random() & 0x1ff); + if (this->type != 0) { + return; + } + this->parent->action = 4; + this->parent->subAction = 0; + return; + } + this->actionDelay += 1; + return; + case 2: + if (this->parent->type2 == 3) { + Entity* object = GET_HELPER(this->parent)->mouthObject; + this->direction = sub_080045DA(object->x.WORD - this->x.WORD, object->y.WORD - this->y.WORD); + sub_0806F62C(this, 0x280, this->direction); + if (sub_0806FC80(this, this->parent, 0x48) == 0) { + return; + } + } + DeleteThisEntity(); + break; + case 3: + case 6: + sub_0806F62C(this, 0x80, this->direction); + if (this->frame != 0) { + DeleteThisEntity(); + } + break; + case 4: + if (*(u32*)&this->field_0x78 == 0) { + if ((s16)gRoomVars.lightLevel != 0x100) { + ChangeLightLevel(8); + return; + } else { + } + } else { + if (this->parent->health == 0) { + this->subAction = 1; + *(u32*)&this->field_0x78 = 0; + return; + } + if ((this->subAction == 0) && (this->parent->type2 != 0)) { + return; + } + this->subAction = 1; + *(int*)&this->field_0x78 += -1; + return; + } + DeleteThisEntity(); + break; + case 5: + if (*(int*)&this->field_0x78 == 0) { + if (this->field_0x76.HWORD == 0x100) { + if ((*(u8*)&this->parent->field_0x7c & 1) != 0) { + DeleteThisEntity(); + } + } else { + this->field_0x76.HWORD -= 0x20; + this->field_0x74.HWORD -= 0x20; + } + sub_0805EC9C(this, (u32)this->field_0x76.HWORD, (u32)(u16)this->field_0x74.HWORD, + (u32)(u16)this->field_0x7a.HWORD); + } else { + *(int*)&this->field_0x78 -= 1; + } + CopyPosition(this->parent, this); + sub_0806F62C(this, (u32)gUnk_0812388C[(u32)this->type2 * 2 + 1], + ((u8) - this->parent->field_0x7a.HALF.HI & 0xff) + (u32)gUnk_0812388C[(u32)this->type2 * 2]); + return; + case 7: + if (this->actionDelay == 0) { + CopyPosition(this->parent, this); + return; + } + DeleteThisEntity(); + break; + case 8: + if (this->actionDelay-- != 0) { + return; + } + this->actionDelay = 4; + this->field_0xf++; + t2 = t1 = (*(int*)&this->cutsceneBeh) - this->field_0xf * 0x1f; + this->field_0x7c.HALF_U.HI = this->field_0x82.HWORD; + this->field_0x7a.HWORD = this->field_0x82.HWORD; + this->field_0x7c.HALF_U.LO = this->field_0x80.HWORD - this->field_0xf * 0x10; + this->field_0x78.HWORD = this->field_0x7c.HALF.LO; + tmp_c = sub_0809A6F8(this->field_0x7a.HWORD, this->field_0x78.HWORD, t1, this->type2); + for (loop_var = this->field_0xf; loop_var != 0; loop_var--) { + this->field_0x7a.HWORD -= 0x10; + this->field_0x78.HWORD += 0x10; + t1 += 0x1e; + tmp_c += sub_0809A6F8(this->field_0x7a.HWORD, this->field_0x78.HWORD, t1, this->type2); + this->field_0x7c.HALF.HI += 0x10; + this->field_0x7c.HALF.LO += 0x10; + t2 += 0x20; + tmp_c += sub_0809A6F8(this->field_0x7c.HALF_U.HI, this->field_0x7c.HALF_U.LO, t2, this->type2); + } + t2 = t1 = (*(int*)&this->cutsceneBeh) + this->field_0xf * 0x1f; + this->field_0x7c.HALF.HI = this->field_0x82.HWORD; + this->field_0x7a.HWORD = this->field_0x82.HWORD; + this->field_0x7c.HALF.LO = this->field_0xf * 0x10 + this->field_0x80.HWORD; + this->field_0x78.HWORD = this->field_0x7c.HALF.LO; + tmp_c += sub_0809A6F8(this->field_0x7a.HWORD, this->field_0x78.HWORD, t1, this->type2); + for (loop_var = this->field_0xf - 1; loop_var != 0; loop_var--) { + this->field_0x7a.HWORD -= 0x10; + this->field_0x78.HWORD -= 0x10; + t1 -= 0x20; + tmp_c += sub_0809A6F8(this->field_0x7a.HWORD, this->field_0x78.HWORD, t1, this->type2); + this->field_0x7c.HALF_U.HI += 0x10; + this->field_0x7c.HALF_U.LO -= 0x10; + t2 -= 0x1e; + tmp_c += sub_0809A6F8(this->field_0x7c.HALF_U.HI, this->field_0x7c.HALF_U.LO, t2, this->type2); + } + if (tmp_c == 0) { + DeleteThisEntity(); + } + break; + case 9: + sub_08078B48(); + if ((*(int*)&this->field_0x78)-- == 0) { + gRoomControls.cameraTarget = &gPlayerEntity; + DeleteThisEntity(); + } + break; + } +} +END_NONMATCH + +void OctorokBossObject_Action2(Entity* this) { + s32 tmp; + s32 radius; + + GetNextFrame(this); + if (this->actionDelay-- != 0) { + tmp = (0x10000 / this->parent->field_0x74.HWORD); + radius = (this->speed * tmp) >> 8; + this->field_0x7a.HALF.HI = -this->parent->field_0x7a.HALF.HI + this->direction; + + tmp = FixedMul(gSineTable[this->field_0x7a.HALF.HI], radius); + tmp = FixedDiv(tmp, 0x100); + this->x.WORD = this->parent->x.WORD + ((tmp << 0x10) >> 8); + tmp = FixedMul(gSineTable[this->field_0x7a.HALF.HI + 0x40], radius); + tmp = FixedDiv(tmp, 0x100); + this->y.WORD = this->parent->y.WORD - ((tmp << 0x10) >> 8); + } else { + DeleteThisEntity(); + } +} + +bool32 sub_0809A6F8(u32 param_1, u32 param_2, u32 param_3, u32 param_4) { + if (sub_0809A758(param_1, param_2) != 0) { + if (gUnk_081238A0[param_3] != 0) { + if ((param_4 & 1) != 0) { + sub_0807B9B8(gUnk_081238A0[param_3], (param_1 >> 4 & 0x3f) | (param_2 >> 4 & 0x3f) << 6, 1); + } else { + sub_0807BA8C((param_1 >> 4 & 0x3f) | (param_2 >> 4 & 0x3f) << 6, 1); + } + } + return TRUE; + } else { + return FALSE; + } +} + +bool32 sub_0809A758(u32 param_1, u32 param_2) { + if (param_1 >= 0x10) { + if (param_1 <= 0x1f0 && param_2 <= 0xf0) { + return TRUE; + } + } + return FALSE; +} + +void (*const OctorokBossObject_Actions[])(Entity*) = { + OctorokBossObject_Init, + OctorokBossObject_Action1, + OctorokBossObject_Action2, +}; + +const u16 gUnk_0812384C[] = { + 0, 4096, 16, 6144, 240, 7168, 32, 6144, 224, 5120, 48, 4096, 192, 4096, 208, 7168, + 64, 4096, 192, 6144, 80, 7168, 176, 6144, 96, 5120, 160, 4096, 112, 4096, 144, 7168, +}; +const u16 gUnk_0812388C[] = { + 0, 0, 32, 8192, 96, 8192, 160, 8704, 208, 8192, +}; +const u16 gUnk_081238A0[] = { + 0, 292, 293, 292, 293, 292, 293, 292, 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 292, 293, 292, 293, 292, 293, 293, 293, 0, 347, 1220, 1201, 1202, 1201, 1202, 1201, + 1202, 1236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1220, 1202, 1201, 1201, + 1202, 1201, 1202, 1236, 348, 363, 1205, 1252, 1253, 1229, 1229, 1229, 1229, 1264, 1202, 1201, 1202, 1201, 1202, + 1201, 1202, 1201, 1202, 1201, 1202, 1201, 1202, 1265, 1229, 1229, 1252, 1253, 1229, 1229, 1206, 364, 347, 1221, + 1268, 1269, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1268, 1269, 1229, 1229, + 1229, 1229, 1229, 1229, 1268, 1269, 1229, 1229, 1222, 348, 363, 1205, 1229, 1229, 1229, 1229, 1229, 1229, 1229, + 1229, 1229, 1229, 1252, 1253, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1252, 1253, 1229, 1229, 1229, 1229, + 1229, 1206, 364, 347, 1221, 1229, 1229, 1229, 1229, 1229, 1252, 1253, 1229, 1229, 1229, 1268, 1269, 1229, 1252, + 1253, 1229, 1229, 1229, 1229, 1229, 1268, 1269, 1229, 1229, 1229, 1229, 1229, 1222, 348, 363, 1205, 1229, 1229, + 1229, 1229, 1229, 1268, 1269, 1229, 1229, 1229, 1229, 1229, 1229, 1268, 1269, 1229, 1229, 1229, 1229, 1229, 1229, + 1229, 1229, 1229, 1229, 1229, 1229, 1206, 364, 347, 1221, 1229, 1252, 1253, 1229, 1229, 1229, 1229, 1229, 1229, + 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1252, 1253, 1229, 1222, + 348, 363, 1205, 1229, 1268, 1269, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, + 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1268, 1269, 1229, 1206, 364, 347, 1221, 1229, 1229, 1229, 1229, + 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1252, 1253, 1229, 1229, 1229, 1229, 1229, 1229, + 1229, 1229, 1229, 1229, 1222, 348, 363, 1205, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, + 1229, 1229, 1229, 1229, 1268, 1269, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1206, 364, 347, + 1221, 1252, 1253, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1252, 1253, 1229, 1229, 1229, 1229, 1229, 1229, + 1229, 1229, 1252, 1253, 1229, 1252, 1253, 1229, 1229, 1222, 348, 363, 1205, 1268, 1269, 1229, 1229, 1229, 1252, + 1253, 1229, 1229, 1229, 1268, 1269, 1229, 1252, 1253, 1229, 1229, 1229, 1229, 1229, 1268, 1269, 1229, 1268, 1269, + 1229, 1229, 1206, 364, 347, 1221, 1229, 1229, 1229, 1229, 1229, 1268, 1269, 1229, 1229, 1229, 1229, 1229, 1229, + 1268, 1269, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1222, 348, 363, 1237, 1203, + 1204, 1203, 1204, 1203, 1204, 1203, 1204, 1203, 1204, 1203, 1204, 1203, 1204, 1203, 1204, 1203, 1204, 1203, 1204, + 1203, 1204, 1203, 1203, 1204, 1203, 1204, 1238, 364, 0, 308, 309, 308, 309, 308, 309, 308, 309, 308, + 309, 308, 309, 308, 309, 308, 309, 308, 309, 308, 309, 308, 309, 308, 309, 308, 309, 308, 309, + 308, 0, +}; diff --git a/src/overworld.c b/src/overworld.c index c529f530..aa57fdcd 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -789,7 +789,7 @@ void sub_08052EA0(void) { gRoomVars.unk_10[1] = gRoomVars.unk_10[0]; gRoomVars.unk_10[2] = gRoomVars.unk_10[0]; gRoomVars.unk_10[3] = gRoomVars.unk_10[0]; - gRoomVars.field_0xc = 256; + gRoomVars.lightLevel = 256; gArea.locationIndex = gAreaMetadata[gRoomControls.areaID].location; sub_08049D30(); InitScriptData(); @@ -875,13 +875,13 @@ void sub_08052FF4(u32 area, u32 room) { gArea.currentRoomInfo.bg_anim = gUnk_080B755C[area]; } -void sub_0805308C(s32 a1) { - a1 += gRoomVars.field_0xc; - if (a1 < 0) - a1 = 0; - if (a1 > 256) - a1 = 256; - gRoomVars.field_0xc = a1; +void ChangeLightLevel(s32 lightLevel) { + lightLevel += gRoomVars.lightLevel; + if (lightLevel < 0) + lightLevel = 0; + if (lightLevel > 256) + lightLevel = 256; + gRoomVars.lightLevel = lightLevel; } void sub_080530B0(void) { diff --git a/src/playerItem/playerItemSwordBeam.c b/src/playerItem/playerItemSwordBeam.c index ff4fab24..d3e13b2f 100644 --- a/src/playerItem/playerItemSwordBeam.c +++ b/src/playerItem/playerItemSwordBeam.c @@ -99,6 +99,6 @@ void sub_08019644(Entity* this) { if (gUnk_080B4400[this->field_0x70.WORD] == 0xff) { this->field_0x70.WORD = iVar1; } - sub_0801D2B4(this, (u32)gUnk_080B4400[this->field_0x70.WORD]); + ChangeObjPalette(this, (u32)gUnk_080B4400[this->field_0x70.WORD]); } } diff --git a/src/projectile/mandiblesProjectile.c b/src/projectile/mandiblesProjectile.c index 3162f7ae..c50657f9 100644 --- a/src/projectile/mandiblesProjectile.c +++ b/src/projectile/mandiblesProjectile.c @@ -83,7 +83,7 @@ void MandiblesProjectile_Init(Entity* this) { this->animationState = 0xff; this->field_0x82.HALF.LO = 0; this->spritePriority.b0 = 4; - sub_0806FAD8(this, this->parent); + ResolveEntityBelow(this, this->parent); sub_080AA270(this); } diff --git a/src/projectile/octorokBossProjectile.c b/src/projectile/octorokBossProjectile.c index 048b9661..58b6dbfc 100644 --- a/src/projectile/octorokBossProjectile.c +++ b/src/projectile/octorokBossProjectile.c @@ -4,6 +4,7 @@ #include "functions.h" #include "audio.h" #include "effects.h" +#include "projectile.h" void OctorokBossProjectile_Action2(Entity*); extern void sub_080AE58C(Entity*, u32, u32); @@ -13,6 +14,13 @@ extern void (*const OctorokBossProjectile_Functions[])(Entity*); extern void (*const OctorokBossProjectile_Actions[])(Entity*); extern const u8 gUnk_08129ADC[]; +enum OctorokBossProjectileType { + TYPE0, // rock + TYPE1, // rock fragment + TYPE2, + TYPE3 // falling stones +}; + void OctorokBossProjectile(Entity* this) { OctorokBossProjectile_Functions[GetNextFunction(this)](this); } @@ -132,7 +140,7 @@ void OctorokBossProjectile_Action1(Entity* this) { return; } for (index = 0; index < 3; ++index) { - this->child = CreateProjectileWithParent(this, 0xf, 1); + this->child = CreateProjectileWithParent(this, OCTOROK_BOSS_PROJECTILE, 1); if (this->child != NULL) { this->child->parent = this->parent; this->child->direction = this->direction + gUnk_08129ADC[index]; diff --git a/src/projectile/v1DarkMagicProjectile.c b/src/projectile/v1DarkMagicProjectile.c index dbce3794..529d46e7 100644 --- a/src/projectile/v1DarkMagicProjectile.c +++ b/src/projectile/v1DarkMagicProjectile.c @@ -202,7 +202,7 @@ void sub_080AB034(Entity* this) { } else { tmp = 0x139; } - sub_0801D2B4(this, tmp); + ChangeObjPalette(this, tmp); } void (*const V1DarkMagicProjectile_Functions[])(Entity*) = { diff --git a/src/projectile/v2Projectile.c b/src/projectile/v2Projectile.c index d15834af..c7be6769 100644 --- a/src/projectile/v2Projectile.c +++ b/src/projectile/v2Projectile.c @@ -111,7 +111,7 @@ void sub_080ABEA8(Entity* this) { this->direction = (Random() & 0xf) << 1; } else { this->direction = sub_08049F84(this, 0); - sub_0801D2B4(this, 0x13f); + ChangeObjPalette(this, 0x13f); } InitializeAnimation(this, 0); SoundReq(SFX_193); diff --git a/src/room.c b/src/room.c index aad169d9..f247e280 100644 --- a/src/room.c +++ b/src/room.c @@ -2848,7 +2848,7 @@ u32 sub_unk3_TempleOfDroplets_BigOcto() { extern EntityData gUnk_additional_a_TempleOfDroplets_BigOcto; void sub_StateChange_TempleOfDroplets_BigOcto(void) { - sub_0805308C(0x100); + ChangeLightLevel(0x100); if (CheckGlobalFlag(LV4_CLEAR)) { LoadRoomEntityList(&gUnk_additional_a_TempleOfDroplets_BigOcto); } else { @@ -6105,7 +6105,7 @@ void sub_StateChange_Caves_LonLonRanchSecret(void) { if (CheckLocalFlag(0x11)) { SetRoomFlag(0); SetRoomFlag(1); - sub_0805308C(0x100); + ChangeLightLevel(0x100); if (!CheckLocalFlag(0x12)) { SetTileType(0x73, 0xcb, 1); } diff --git a/src/script.c b/src/script.c index 34da5deb..93e071d2 100644 --- a/src/script.c +++ b/src/script.c @@ -157,8 +157,6 @@ void ScriptCommand_CameraTargetPlayer(Entity* entity, ScriptExecutionContext* co void ScriptCommand_0807F0B4(Entity* entity, ScriptExecutionContext* context); void ScriptCommand_0807F0C8(Entity* entity, ScriptExecutionContext* context); -extern void CreateSpeechBubbleExclamationMark(Entity*, u32, u32); -extern void CreateSpeechBubbleQuestionMark(Entity*, u32, u32); extern void RecoverUI(u32); typedef void (*ScriptCommand)(Entity*, ScriptExecutionContext*); @@ -1861,7 +1859,7 @@ void sub_0807F714(Entity* entity, ScriptExecutionContext* context) { void sub_0807F738(Entity* entity, ScriptExecutionContext* context) { entity->spriteRendering.b3 = gUnk_08114F34[entity->spriteRendering.b3]; - sub_0806FAD8(entity, entity); + ResolveEntityBelow(entity, entity); } void sub_0807F75C(Entity* entity, ScriptExecutionContext* context) {