summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoroctorock <79596758+octorock@users.noreply.github.com>2022-11-06 10:17:28 +0000
committeroctorock <79596758+octorock@users.noreply.github.com>2022-11-06 10:17:28 +0000
commitc495247e06f9da2aefcdb04d96b6857532feb3f8 (patch)
treefbf472956e1af24bfc017d524b62189c82454239
parente4898c53d486bb4aa16dcbda74b310f18c39e02a (diff)
Match FrozenOctorok_Action1
-rw-r--r--asm/non_matching/frozenOctorok/FrozenOctorok_Action1.inc267
-rw-r--r--src/object/frozenOctorok.c85
2 files changed, 83 insertions, 269 deletions
diff --git a/asm/non_matching/frozenOctorok/FrozenOctorok_Action1.inc b/asm/non_matching/frozenOctorok/FrozenOctorok_Action1.inc
deleted file mode 100644
index 4eb27cb8..00000000
--- a/asm/non_matching/frozenOctorok/FrozenOctorok_Action1.inc
+++ /dev/null
@@ -1,267 +0,0 @@
- .syntax unified
- push {r4, r5, r6, r7, lr}
- adds r5, r0, #0
- ldrb r0, [r5, #0xa]
- cmp r0, #7
- bls _0809C5D0
- b _0809C7DE
-_0809C5D0:
- lsls r0, r0, #2
- ldr r1, _0809C5DC @ =_0809C5E0
- adds r0, r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0809C5DC: .4byte _0809C5E0
-_0809C5E0: @ jump table
- .4byte _0809C738 @ case 0
- .4byte _0809C600 @ case 1
- .4byte _0809C600 @ case 2
- .4byte _0809C600 @ case 3
- .4byte _0809C600 @ case 4
- .4byte _0809C6B8 @ case 5
- .4byte _0809C7B4 @ case 6
- .4byte _0809C7D2 @ case 7
-_0809C600:
- ldr r0, [r5, #0x50]
- adds r1, r5, #0
- bl SortEntityBelow
- ldr r0, [r5, #0x50]
- ldrb r0, [r0, #0xd]
- adds r6, r5, #0
- adds r6, #0x84
- cmp r0, #6
- bne _0809C630
- movs r0, #0xf
- ldrsb r0, [r5, r0]
- cmp r0, #0
- bge _0809C624
- ldr r0, [r6]
- ldrb r0, [r0]
- rsbs r0, r0, #0
- b _0809C628
-_0809C624:
- ldr r0, [r6]
- ldrb r0, [r0]
-_0809C628:
- strb r0, [r5, #0xf]
- adds r0, r5, #0
- bl sub_0809CBE4
-_0809C630:
- 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, _0809C660 @ =0xFFFFE000
- adds r3, r3, r0
- ldr r0, [r6]
- ldr r0, [r0, #8]
- adds r0, #0x45
- ldrb r0, [r0]
- cmp r0, #1
- bne _0809C664
- movs r1, #0x88
- lsls r1, r1, #6
- adds r3, r3, r1
- b _0809C66C
- .align 2, 0
-_0809C660: .4byte 0xFFFFE000
-_0809C664:
- lsrs r0, r3, #1
- movs r1, #0x88
- lsls r1, r1, #6
- adds r3, r0, r1
-_0809C66C:
- adds r2, r4, #0
- adds r2, #0x7b
- ldr r1, _0809C6B0 @ =gUnk_08123E18
- 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_0809CB70
- ldr r2, [r5, #0x50]
- adds r2, #0x7b
- ldr r1, _0809C6B4 @ =gUnk_08123E1C
- 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]
- b _0809C7BC
- .align 2, 0
-_0809C6B0: .4byte gUnk_08123E18
-_0809C6B4: .4byte gUnk_08123E1C
-_0809C6B8:
- ldr r0, [r5, #0x50]
- adds r1, r5, #0
- bl SortEntityBelow
- ldr r0, [r5, #0x50]
- ldrb r0, [r0, #0xd]
- adds r6, r5, #0
- adds r6, #0x79
- adds r7, r5, #0
- adds r7, #0x76
- cmp r0, #4
- beq _0809C6F6
- adds r0, r5, #0
- adds r0, #0x45
- ldrb r0, [r0]
- cmp r0, #1
- beq _0809C6F6
- ldrb r0, [r6]
- cmp r0, #0x1c
- bls _0809C6E4
- subs r0, #1
- strb r0, [r6]
-_0809C6E4:
- ldrh r0, [r7]
- movs r1, #0x80
- lsls r1, r1, #1
- cmp r0, r1
- bls _0809C6F4
- subs r0, #1
- strh r0, [r7]
- b _0809C6F6
-_0809C6F4:
- strh r1, [r7]
-_0809C6F6:
- 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_0809CB70
- 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
- b _0809C7C4
-_0809C738:
- movs r0, #0x37
- bl CheckFlags
- cmp r0, #0
- beq _0809C74A
- adds r0, r5, #0
- movs r1, #0x1e
- bl RequestPriorityDuration
-_0809C74A:
- ldr r1, _0809C7A8 @ =FrozenOctorok_Action1SubActions
- ldrb r0, [r5, #0xd]
- lsls r0, r0, #2
- adds r0, r0, r1
- ldr r1, [r0]
- adds r0, r5, #0
- bl _call_via_r1
- ldrb r0, [r5, #0xf]
- cmp r0, #0
- beq _0809C7BC
- ldr r0, _0809C7AC @ =gRoomTransition
- ldr r0, [r0]
- movs r1, #7
- ands r0, r1
- cmp r0, #0
- bne _0809C772
- ldr r0, [r5, #0x54]
- bl CreateSparkle
-_0809C772:
- adds r3, r5, #0
- adds r3, #0x7e
- ldrh r0, [r3]
- cmp r0, #0
- beq _0809C7BC
- ldr r2, [r5, #0x54]
- movs r1, #0
- ldrsh r0, [r3, r1]
- ldr r1, [r2, #0x20]
- subs r1, r1, r0
- str r1, [r2, #0x20]
- ldr r0, [r2, #0x34]
- adds r0, r0, r1
- str r0, [r2, #0x34]
- ldr r0, [r5, #0x54]
- ldr r1, [r0, #0x20]
- movs r0, #0xc0
- lsls r0, r0, #6
- cmp r1, r0
- beq _0809C7A0
- ldr r0, _0809C7B0 @ =0xFFFFD000
- cmp r1, r0
- bne _0809C7BC
-_0809C7A0:
- ldrh r0, [r3]
- rsbs r0, r0, #0
- strh r0, [r3]
- b _0809C7BC
- .align 2, 0
-_0809C7A8: .4byte FrozenOctorok_Action1SubActions
-_0809C7AC: .4byte gRoomTransition
-_0809C7B0: .4byte 0xFFFFD000
-_0809C7B4:
- ldr r0, [r5, #0x50]
- adds r1, r5, #0
- bl CopyPosition
-_0809C7BC:
- adds r0, r5, #0
- adds r0, #0x76
- ldrh r1, [r0]
- subs r0, #2
-_0809C7C4:
- ldrh r2, [r0]
- adds r0, #6
- ldrh r3, [r0]
- adds r0, r5, #0
- bl SetAffineInfo
- b _0809C7DE
-_0809C7D2:
- ldr r0, _0809C7E0 @ =gRoomControls
- ldr r0, [r0, #0x30]
- cmp r0, r5
- beq _0809C7DE
- bl DeleteThisEntity
-_0809C7DE:
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_0809C7E0: .4byte gRoomControls
- .syntax divided
diff --git a/src/object/frozenOctorok.c b/src/object/frozenOctorok.c
index fe537c4b..7805839c 100644
--- a/src/object/frozenOctorok.c
+++ b/src/object/frozenOctorok.c
@@ -40,6 +40,8 @@ void FrozenOctorok_ChangeObjPaletteOfChildren(FrozenOctorokEntity*, u32);
void sub_0809CBE4(FrozenOctorokEntity*);
void sub_0809CB70(FrozenOctorokEntity*, s32, s32);
+extern const u8 gUnk_08123E1C[];
+
void FrozenOctorok(FrozenOctorokEntity* this) {
static void (*const FrozenOctorok_Actions[])(FrozenOctorokEntity*) = {
FrozenOctorok_Init,
@@ -162,8 +164,87 @@ const u8 gUnk_08123E1C[] = {
128,
};
-ASM_FUNC("asm/non_matching/frozenOctorok/FrozenOctorok_Action1.inc",
- void FrozenOctorok_Action1(FrozenOctorokEntity* this))
+void FrozenOctorok_Action1(FrozenOctorokEntity* this) {
+ u32 tmp1;
+ u32 tmp2;
+
+ switch (super->type) {
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ SortEntityBelow(super->parent, super);
+ if (super->parent->subAction == 6) {
+ if ((s8)super->subtimer < 0) {
+ super->subtimer = -this->heap->unk_0;
+ } else {
+ super->subtimer = this->heap->unk_0;
+ }
+ sub_0809CBE4(this);
+ }
+ tmp1 = 0x10000 / (((FrozenOctorokEntity*)super->parent)->unk_76);
+ tmp1 = ((tmp1 << 0xd) >> 8);
+ tmp1 -= 0x2000;
+ if (this->heap->mouthObject->base.health == 1) {
+ tmp1 = 0x2200 + tmp1;
+ } else {
+ tmp1 = (tmp1 >> 1) + 0x2200;
+ }
+ tmp2 = (u8) - (((FrozenOctorokEntity*)super->parent)->unk_7b + gUnk_08123E18[super->type - 1]);
+ sub_0809CB70(this, tmp2, tmp1);
+ this->unk_7b =
+ ((FrozenOctorokEntity*)super->parent)->unk_7b + gUnk_08123E1C[super->type - 1] + this->unk_79;
+ SetAffineInfo(super, this->unk_76, this->unk_74, *(u16*)&this->unk_7a);
+ break;
+ case 5:
+ SortEntityBelow(super->parent, super);
+ if ((super->parent->subAction != 4) && (super->health != 1)) {
+ if (0x1c < this->unk_79) {
+ this->unk_79--;
+ }
+ if (this->unk_76 > 0x100) {
+ this->unk_76--;
+ } else {
+ this->unk_76 = 0x100;
+ }
+ }
+ tmp1 = (0x10000 / ((FrozenOctorokEntity*)super->parent)->unk_74);
+ tmp1 = ((this->unk_79 << 8) * tmp1 >> 8);
+ tmp2 = (u8) - (((FrozenOctorokEntity*)super->parent)->unk_7b + 0x80);
+ sub_0809CB70(this, tmp2, tmp1);
+ this->unk_7b = ((FrozenOctorokEntity*)super->parent)->unk_7b;
+ SetAffineInfo(super, this->unk_76, this->unk_74, *(u16*)&this->unk_7a);
+ return;
+ case 0:
+ if (CheckFlags(OUGONTEKI_G)) {
+ RequestPriorityDuration(super, 0x1e);
+ }
+ FrozenOctorok_Action1SubActions[super->subAction](this);
+ if (super->subtimer != 0) {
+ if ((gRoomTransition.frameCount & 7) == 0) {
+ CreateSparkle(super->child);
+ }
+ if (this->unk_7e != 0) {
+ super->child->zVelocity = super->child->zVelocity - (s16)this->unk_7e;
+ super->child->z.WORD += super->child->zVelocity;
+ if (((super->child)->zVelocity == 0x3000) || ((super->child)->zVelocity == -0x3000)) {
+ this->unk_7e = -this->unk_7e;
+ }
+ }
+ }
+ SetAffineInfo(super, this->unk_76, this->unk_74, *(u16*)&this->unk_7a);
+ break;
+ case 6:
+ CopyPosition(super->parent, super);
+ SetAffineInfo(super, this->unk_76, this->unk_74, *(u16*)&this->unk_7a);
+ break;
+ case 7:
+ if (gRoomControls.camera_target != super) {
+ DeleteThisEntity();
+ }
+ break;
+ }
+}
void FrozenOctorok_Action1SubAction0(FrozenOctorokEntity* this) {
Entity* child;