summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHenny022p <info@henny022.de>2021-06-19 21:46:33 +0200
committerHenny022p <info@henny022.de>2021-06-19 21:46:33 +0200
commit998fabb9b23219fcbb9a205728aef37bac732907 (patch)
tree7d7a84c91b3d6a3a4a8aaaea2e323874c49adbe9
parentb0ed5b08efe4b2fac454b23f9424a68bab33f236 (diff)
decomp sub_0803D408
-rw-r--r--asm/vaatiRebornEnemy.s174
-rw-r--r--src/enemy/vaatiRebornEnemy.c59
2 files changed, 58 insertions, 175 deletions
diff --git a/asm/vaatiRebornEnemy.s b/asm/vaatiRebornEnemy.s
index c7df101b..d2092068 100644
--- a/asm/vaatiRebornEnemy.s
+++ b/asm/vaatiRebornEnemy.s
@@ -7,180 +7,6 @@
.text
- thumb_func_start sub_0803D408
-sub_0803D408: @ 0x0803D408
- push {r4, r5, lr}
- adds r4, r0, #0
- adds r2, r4, #0
- adds r2, #0x74
- ldrb r0, [r2]
- cmp r0, #1
- beq _0803D458
- cmp r0, #1
- bgt _0803D420
- cmp r0, #0
- beq _0803D42A
- b _0803D558
-_0803D420:
- cmp r0, #2
- beq _0803D478
- cmp r0, #3
- beq _0803D4FC
- b _0803D558
-_0803D42A:
- ldrb r0, [r4, #0xe]
- subs r0, #1
- strb r0, [r4, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- beq _0803D438
- b _0803D558
-_0803D438:
- ldrb r0, [r2]
- adds r0, #1
- strb r0, [r2]
- movs r0, #0x20
- strb r0, [r4, #0xe]
- adds r0, r4, #0
- movs r1, #3
- bl InitAnimationForceUpdate
- ldr r0, _0803D454 @ =0x0000019B
- bl SoundReq
- b _0803D558
- .align 2, 0
-_0803D454: .4byte 0x0000019B
-_0803D458:
- adds r0, r4, #0
- adds r0, #0x5a
- ldrb r1, [r0]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- beq _0803D558
- movs r0, #2
- strb r0, [r2]
- ldrb r1, [r4, #0x18]
- subs r0, #6
- ands r0, r1
- strb r0, [r4, #0x18]
- movs r0, #0x10
- strb r0, [r4, #0xe]
- b _0803D558
-_0803D478:
- ldrb r0, [r4, #0xe]
- subs r0, #1
- strb r0, [r4, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _0803D558
- ldrb r0, [r2]
- adds r0, #1
- strb r0, [r2]
- adds r0, r4, #0
- bl sub_0803E028
- cmp r0, #0
- bne _0803D4D0
- bl Random
- adds r5, r4, #0
- adds r5, #0x81
- ldrb r1, [r5]
- adds r1, #1
- movs r2, #3
- ands r0, r2
- adds r1, r1, r0
- strb r1, [r5]
- ldrb r0, [r5]
- movs r1, #5
- bl __modsi3
- strb r0, [r5]
- ldrb r1, [r5]
- lsls r1, r1, #2
- ldr r0, _0803D4F4 @ =gUnk_080D04AC
- adds r1, r1, r0
- ldr r2, _0803D4F8 @ =gRoomControls
- ldrh r0, [r1]
- ldrh r3, [r2, #6]
- adds r0, r0, r3
- adds r0, #0x10
- strh r0, [r4, #0x2e]
- ldrh r0, [r1, #2]
- ldrh r2, [r2, #8]
- adds r0, r0, r2
- adds r0, #0x10
- strh r0, [r4, #0x32]
-_0803D4D0:
- ldrb r1, [r4, #0x18]
- movs r0, #4
- rsbs r0, r0, #0
- ands r0, r1
- movs r1, #1
- orrs r0, r1
- strb r0, [r4, #0x18]
- movs r0, #0x20
- strb r0, [r4, #0xe]
- adds r0, r4, #0
- movs r1, #4
- bl InitAnimationForceUpdate
- movs r0, #0xf5
- bl SoundReq
- b _0803D558
- .align 2, 0
-_0803D4F4: .4byte gUnk_080D04AC
-_0803D4F8: .4byte gRoomControls
-_0803D4FC:
- adds r0, r4, #0
- adds r0, #0x5a
- ldrb r1, [r0]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- beq _0803D558
- ldrb r1, [r4, #0x18]
- movs r0, #4
- rsbs r0, r0, #0
- ands r0, r1
- movs r1, #1
- orrs r0, r1
- strb r0, [r4, #0x18]
- adds r0, r4, #0
- adds r0, #0x81
- ldrb r0, [r0]
- cmp r0, #4
- bls _0803D52E
- ldr r1, _0803D544 @ =gPlayerEntity
- ldrh r0, [r1, #0x2e]
- strh r0, [r4, #0x2e]
- ldrh r0, [r1, #0x32]
- subs r0, #0x18
- strh r0, [r4, #0x32]
-_0803D52E:
- adds r1, r4, #0
- adds r1, #0x77
- ldrb r0, [r1]
- subs r0, #1
- strb r0, [r1]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _0803D548
- movs r0, #1
- strb r0, [r4, #0xc]
- b _0803D54E
- .align 2, 0
-_0803D544: .4byte gPlayerEntity
-_0803D548:
- movs r0, #0
- strb r0, [r2]
- movs r0, #0x10
-_0803D54E:
- strb r0, [r4, #0xe]
- adds r0, r4, #0
- movs r1, #0
- bl InitAnimationForceUpdate
-_0803D558:
- adds r0, r4, #0
- bl UpdateAnimationSingleFrame
- pop {r4, r5, pc}
-
thumb_func_start sub_0803D560
sub_0803D560: @ 0x0803D560
push {r4, lr}
diff --git a/src/enemy/vaatiRebornEnemy.c b/src/enemy/vaatiRebornEnemy.c
index 272fbb00..7ab2d240 100644
--- a/src/enemy/vaatiRebornEnemy.c
+++ b/src/enemy/vaatiRebornEnemy.c
@@ -6,6 +6,7 @@
#include "audio.h"
#include "functions.h"
+extern u32 __modsi3(u32, u32);
extern void sub_080AEFB4(Entity*);
extern u8 gEntCount;
@@ -51,7 +52,7 @@ void (*const gUnk_080D04A0[])(Entity*) = {
};
extern const xy gUnk_080D04A8[];
-extern const u16 gUnk_080D04AC[];
+extern const Coords gUnk_080D04AC[];
void VaatiRebornEnemy(Entity* this) {
switch (this->type) {
@@ -206,3 +207,59 @@ void sub_0803D264(Entity* this) {
}
UpdateAnimationSingleFrame(this);
}
+
+void sub_0803D408(Entity* this) {
+ const Coords* ptr;
+
+ switch (this->field_0x74.HALF.LO) {
+ case 0:
+ if (--this->actionDelay == 0) {
+ this->field_0x74.HALF.LO++;
+ this->actionDelay = 0x20;
+ InitAnimationForceUpdate(this, 3);
+ SoundReq(SFX_19B);
+ }
+ break;
+ case 1:
+ if ((this->frames.all & 0x80) != 0) {
+ this->field_0x74.HALF.LO = 2;
+ this->spriteSettings.b.draw = 0;
+ this->actionDelay = 0x10;
+ }
+ break;
+ case 2:
+ if (--this->actionDelay == 0) {
+ this->field_0x74.HALF.LO++;
+ if (sub_0803E028(this) == 0) {
+ this->field_0x80.HALF.HI += 1 + (Random() & 3);
+ this->field_0x80.HALF.HI = __modsi3(this->field_0x80.HALF.HI, 5);
+ ptr = &gUnk_080D04AC[this->field_0x80.HALF.HI];
+ this->x.HALF.HI = gRoomControls.roomOriginX + ptr->HALF.x + 0x10;
+ this->y.HALF.HI = gRoomControls.roomOriginY + ptr->HALF.y + 0x10;
+ }
+ this->spriteSettings.b.draw = 1;
+ this->actionDelay = 0x20;
+ InitAnimationForceUpdate(this, 4);
+ SoundReq(SFX_F5);
+ }
+ break;
+ case 3:
+ if ((this->frames.all & 0x80) != 0) {
+ this->spriteSettings.b.draw = 1;
+ if (4 < this->field_0x80.HALF.HI) {
+ this->x.HALF.HI = gPlayerEntity.x.HALF.HI;
+ this->y.HALF.HI = gPlayerEntity.y.HALF.HI - 0x18;
+ }
+ if (--this->field_0x76.HALF.HI == 0) {
+ this->action = 1;
+ this->actionDelay = 1;
+ } else {
+ this->field_0x74.HALF.LO = 0;
+ this->actionDelay = 0x10;
+ }
+ InitAnimationForceUpdate(this, 0);
+ }
+ break;
+ }
+ UpdateAnimationSingleFrame(this);
+}