mirror of https://github.com/zeldaret/tmc.git
commit
bdf796fffe
|
@ -1,149 +0,0 @@
|
||||||
.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
|
|
|
@ -1012,8 +1012,40 @@ void sub_08036998(OctorokBossEntity* this) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Calculate tail angles regular */
|
/** Calculate tail angles regular */
|
||||||
ASM_FUNC("asm/non_matching/octorokBoss/sub_080369D0.inc",
|
void sub_080369D0(OctorokBossEntity* this, s32 radius, s32 angleSpeed) {
|
||||||
void sub_080369D0(OctorokBossEntity* this, s32 radius, s32 angleSpeed))
|
u32 index;
|
||||||
|
s32 tmp;
|
||||||
|
s8 angleDiff;
|
||||||
|
OctorokBossHeap* heap = this->heap;
|
||||||
|
// Calculate the angle for the tail end
|
||||||
|
(heap->tailObjects[0])->angle.HALF.HI = (heap->tailObjects[heap->tailCount - 1])->angle.HALF.HI + this->timer;
|
||||||
|
// iterate tails from 0 to tailCount-1 to calculate the angles
|
||||||
|
for (index = 0; index < (u8)(heap->tailCount - 1); index++) {
|
||||||
|
if ((heap->tailObjects[index])->angle.HALF.HI != (heap->tailObjects[index + 1])->angle.HALF.HI) {
|
||||||
|
angleDiff = (heap->tailObjects[index + 1])->angle.HALF.HI - (heap->tailObjects[index])->angle.HALF.HI;
|
||||||
|
if (angleDiff >= 1) {
|
||||||
|
if (angleDiff > (u8)angleSpeed) {
|
||||||
|
(heap->tailObjects[index + 1])->angle.HALF.HI =
|
||||||
|
(heap->tailObjects[index])->angle.HALF.HI + angleSpeed;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (angleDiff < (s8)-angleSpeed) {
|
||||||
|
(heap->tailObjects[index + 1])->angle.HALF.HI =
|
||||||
|
(heap->tailObjects[index])->angle.HALF.HI - angleSpeed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// iterate tails from tailCount-1 to 0 to calculate the positions
|
||||||
|
for (index = heap->tailCount - 1; index != 0; index--) {
|
||||||
|
tmp = FixedMul(gSineTable[heap->tailObjects[index - 1]->angle.HALF.HI ^ 0x80], radius << 4);
|
||||||
|
tmp = FixedDiv(tmp, 0x100);
|
||||||
|
heap->tailObjects[index - 1]->base.x.WORD = heap->tailObjects[index]->base.x.WORD + ((tmp << 0x10) >> 8);
|
||||||
|
tmp = FixedMul(gSineTable[(heap->tailObjects[index - 1]->angle.HALF.HI ^ 0x80) + 0x40], radius << 4);
|
||||||
|
tmp = FixedDiv(tmp, 0x100);
|
||||||
|
heap->tailObjects[index - 1]->base.y.WORD = heap->tailObjects[index]->base.y.WORD - ((tmp << 0x10) >> 8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** Calculate tail angles frozen sub_08036AF0 */
|
/** Calculate tail angles frozen sub_08036AF0 */
|
||||||
ASM_FUNC("asm/non_matching/octorokBoss/sub_08036AF0.inc",
|
ASM_FUNC("asm/non_matching/octorokBoss/sub_08036AF0.inc",
|
||||||
|
|
Loading…
Reference in New Issue