first part of vaati reborn enemy

This commit is contained in:
Henny022p 2021-06-19 13:20:51 +02:00
parent a1a8e0d1fc
commit fa2779a383
5 changed files with 101 additions and 670 deletions

View File

@ -1,216 +0,0 @@
.syntax unified
push {r4, r5, lr}
adds r5, r0, #0
movs r0, #3
bl CheckRoomFlag
cmp r0, #0
bne _0806B7CC
b _0806B968
_0806B7CC:
ldrb r0, [r5, #0xa]
cmp r0, #1
beq _0806B84C
cmp r0, #1
bgt _0806B7DC
cmp r0, #0
beq _0806B7E6
b _0806B93C
_0806B7DC:
cmp r0, #2
beq _0806B86C
cmp r0, #3
beq _0806B874
b _0806B93C
_0806B7E6:
ldrh r0, [r5, #0x32]
adds r0, #1
strh r0, [r5, #0x32]
ldrb r0, [r5, #0xe]
subs r0, #1
strb r0, [r5, #0xe]
movs r1, #0xff
lsls r0, r0, #0x18
cmp r0, #0
bne _0806B82C
movs r0, #0x3b
movs r1, #3
movs r2, #0
bl CreateNPC
adds r4, r0, #0
cmp r4, #0
bne _0806B80C
b _0806B968
_0806B80C:
adds r0, r5, #0
adds r1, r4, #0
bl CopyPosition
ldr r0, _0806B828 @ =0x00001634
bl TextboxNoOverlapFollow
ldrb r0, [r5, #0xd]
adds r0, #1
strb r0, [r5, #0xd]
bl DeleteThisEntity
b _0806B968
.align 2, 0
_0806B828: .4byte 0x00001634
_0806B82C:
ldrb r0, [r5, #0xf]
subs r0, #1
strb r0, [r5, #0xf]
ands r0, r1
cmp r0, #0
beq _0806B83A
b _0806B95A
_0806B83A:
movs r0, #0x20
strb r0, [r5, #0xf]
ldr r0, _0806B848 @ =0x000001A9
bl SoundReq
b _0806B95A
.align 2, 0
_0806B848: .4byte 0x000001A9
_0806B84C:
adds r0, r5, #0
bl sub_0806B9BC
adds r4, r0, #0
cmp r4, #0
bne _0806B85C
bl DeleteThisEntity
_0806B85C:
movs r3, #0x84
lsls r3, r3, #0xe
adds r0, r4, #0
adds r1, r5, #0
movs r2, #0
bl PositionRelative
b _0806B95A
_0806B86C:
adds r0, r5, #0
bl sub_0806B96C
b _0806B95A
_0806B874:
ldrb r0, [r5, #0xd]
cmp r0, #1
beq _0806B8A2
cmp r0, #1
bgt _0806B884
cmp r0, #0
beq _0806B88E
b _0806B91E
_0806B884:
cmp r0, #2
beq _0806B8C4
cmp r0, #3
beq _0806B906
b _0806B91E
_0806B88E:
ldrb r0, [r5, #0xe]
subs r0, #1
strb r0, [r5, #0xe]
lsls r0, r0, #0x18
cmp r0, #0
bne _0806B91E
ldrb r0, [r5, #0xd]
adds r0, #1
strb r0, [r5, #0xd]
b _0806B91E
_0806B8A2:
adds r0, r5, #0
adds r0, #0x5a
ldrb r1, [r0]
movs r0, #0x80
ands r0, r1
cmp r0, #0
beq _0806B91E
movs r0, #2
strb r0, [r5, #0xd]
ldr r1, _0806B8C0 @ =0x0000013F
adds r0, r5, #0
bl sub_0801D2B4
b _0806B8FA
.align 2, 0
_0806B8C0: .4byte 0x0000013F
_0806B8C4:
adds r2, r5, #0
adds r2, #0x5a
ldrb r1, [r2]
movs r0, #0x10
ands r0, r1
cmp r0, #0
beq _0806B91E
movs r0, #0xef
ands r0, r1
strb r0, [r2]
ldrb r0, [r5, #0xe]
adds r0, #1
strb r0, [r5, #0xe]
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r0, #1
beq _0806B91E
cmp r0, #0xa
bne _0806B91E
ldrb r0, [r5, #0xd]
adds r0, #1
strb r0, [r5, #0xd]
movs r0, #0xf4
bl EnqueueSFX
movs r0, #0
strb r0, [r5, #0xe]
_0806B8FA:
ldrb r1, [r5, #0xd]
subs r1, #1
adds r0, r5, #0
bl InitAnimationForceUpdate
b _0806B91E
_0806B906:
adds r0, r5, #0
adds r0, #0x5a
ldrb r1, [r0]
movs r0, #0x80
ands r0, r1
cmp r0, #0
beq _0806B91E
movs r0, #0
bl SetRoomFlag
bl DeleteThisEntity
_0806B91E:
ldrb r0, [r5, #0xf]
subs r0, #1
strb r0, [r5, #0xf]
lsls r0, r0, #0x18
cmp r0, #0
bne _0806B95A
movs r0, #0x20
strb r0, [r5, #0xf]
ldr r0, _0806B938 @ =0x000001A9
bl SoundReq
b _0806B95A
.align 2, 0
_0806B938: .4byte 0x000001A9
_0806B93C:
adds r0, r5, #0
bl sub_0806B9BC
adds r4, r0, #0
cmp r4, #0
bne _0806B94E
bl DeleteThisEntity
b _0806B968
_0806B94E:
ldrb r0, [r4, #0xd]
cmp r0, #0
beq _0806B968
ldrb r0, [r5, #0xa]
cmp r0, #4
beq _0806B962
_0806B95A:
adds r0, r5, #0
bl UpdateAnimationSingleFrame
b _0806B968
_0806B962:
adds r0, r5, #0
bl GetNextFrame
_0806B968:
pop {r4, r5, pc}
.align 2, 0
.syntax divided

View File

@ -7,437 +7,6 @@
.text
thumb_func_start VaatiRebornEnemy
VaatiRebornEnemy: @ 0x0803D0C8
push {r4, lr}
adds r4, r0, #0
ldrb r0, [r4, #0xa]
cmp r0, #1
beq _0803D0F4
cmp r0, #1
bgt _0803D0DC
cmp r0, #0
beq _0803D0E6
b _0803D12C
_0803D0DC:
cmp r0, #2
beq _0803D104
cmp r0, #3
beq _0803D11C
b _0803D12C
_0803D0E6:
adds r0, r4, #0
bl sub_0803DFBC
ldr r0, _0803D0F0 @ =gUnk_080D0470
b _0803D106
.align 2, 0
_0803D0F0: .4byte gUnk_080D0470
_0803D0F4:
adds r0, r4, #0
bl sub_0803DC58
ldr r0, _0803D100 @ =gUnk_080D0490
b _0803D106
.align 2, 0
_0803D100: .4byte gUnk_080D0490
_0803D104:
ldr r0, _0803D118 @ =gUnk_080D0498
_0803D106:
ldrb r1, [r4, #0xc]
lsls r1, r1, #2
adds r1, r1, r0
ldr r1, [r1]
adds r0, r4, #0
bl _call_via_r1
b _0803D12C
.align 2, 0
_0803D118: .4byte gUnk_080D0498
_0803D11C:
ldr r0, _0803D130 @ =gUnk_080D04A0
ldrb r1, [r4, #0xc]
lsls r1, r1, #2
adds r1, r1, r0
ldr r1, [r1]
adds r0, r4, #0
bl _call_via_r1
_0803D12C:
pop {r4, pc}
.align 2, 0
_0803D130: .4byte gUnk_080D04A0
thumb_func_start sub_0803D134
sub_0803D134: @ 0x0803D134
push {r4, r5, r6, lr}
adds r5, r0, #0
movs r0, #0x7b
bl CheckLocalFlag
cmp r0, #0
beq _0803D146
bl DeleteThisEntity
_0803D146:
adds r0, r5, #0
bl sub_0804A720
movs r0, #0
bl CheckRoomFlag
cmp r0, #0
bne _0803D158
b _0803D25A
_0803D158:
ldr r0, _0803D25C @ =gEntCount
ldrb r0, [r0]
cmp r0, #0x41
bhi _0803D25A
movs r0, #0
bl ClearRoomFlag
movs r2, #0
movs r0, #3
strb r0, [r5, #0xc]
adds r1, r5, #0
adds r1, #0x74
movs r0, #0xff
strb r0, [r1]
strb r2, [r5, #0xe]
adds r0, r5, #0
adds r0, #0x76
strb r2, [r0]
ldrb r1, [r5, #0x18]
movs r0, #4
rsbs r0, r0, #0
ands r0, r1
movs r1, #1
orrs r0, r1
strb r0, [r5, #0x18]
movs r0, #1
rsbs r0, r0, #0
strb r0, [r5, #0x15]
adds r3, r5, #0
adds r3, #0x29
ldrb r1, [r3]
subs r0, #7
ands r0, r1
movs r1, #4
orrs r0, r1
strb r0, [r3]
str r2, [r5, #0x34]
adds r1, r5, #0
adds r1, #0x80
movs r0, #2
strb r0, [r1]
adds r0, r5, #0
adds r0, #0x86
strb r2, [r0]
adds r1, #5
movs r0, #0x30
strb r0, [r1]
subs r1, #1
subs r0, #0x31
strb r0, [r1]
adds r0, r5, #0
adds r0, #0x87
strb r2, [r0]
subs r0, #5
strb r2, [r0]
adds r0, #1
strb r2, [r0]
ldr r0, [r5, #0x2c]
str r0, [r5, #0x78]
ldr r0, [r5, #0x30]
str r0, [r5, #0x7c]
movs r0, #0x4a
movs r1, #1
bl CreateEnemy
adds r4, r0, #0
str r5, [r4, #0x50]
str r4, [r5, #0x54]
movs r6, #0
_0803D1E2:
movs r0, #0x54
movs r1, #0
bl CreateEnemy
adds r4, r0, #0
str r5, [r4, #0x50]
adds r0, #0x79
strb r6, [r0]
adds r6, #1
cmp r6, #5
ble _0803D1E2
movs r6, #0
_0803D1FA:
movs r0, #0x4a
movs r1, #3
bl CreateEnemy
adds r4, r0, #0
str r5, [r4, #0x50]
strb r6, [r4, #0xe]
adds r6, #1
cmp r6, #3
ble _0803D1FA
movs r6, #0
_0803D210:
movs r0, #0x54
movs r1, #1
bl CreateEnemy
adds r4, r0, #0
str r5, [r4, #0x50]
movs r0, #1
adds r2, r6, #0
ands r2, r0
lsls r2, r2, #6
ldrb r0, [r4, #0x18]
movs r3, #0x41
rsbs r3, r3, #0
adds r1, r3, #0
ands r0, r1
orrs r0, r2
strb r0, [r4, #0x18]
lsls r1, r6, #1
ldr r0, _0803D260 @ =gUnk_080D04A8
adds r1, r1, r0
movs r2, #0
ldrsb r2, [r1, r2]
lsls r2, r2, #0x10
movs r3, #1
ldrsb r3, [r1, r3]
lsls r3, r3, #0x10
adds r0, r5, #0
adds r1, r4, #0
bl PositionRelative
adds r6, #1
cmp r6, #1
ble _0803D210
adds r0, r5, #0
movs r1, #0
bl InitAnimationForceUpdate
_0803D25A:
pop {r4, r5, r6, pc}
.align 2, 0
_0803D25C: .4byte gEntCount
_0803D260: .4byte gUnk_080D04A8
thumb_func_start sub_0803D264
sub_0803D264: @ 0x0803D264
push {r4, r5, r6, r7, lr}
adds r4, r0, #0
ldrb r0, [r4, #0xe]
cmp r0, #0
beq _0803D318
subs r0, #1
strb r0, [r4, #0xe]
movs r7, #0xff
lsls r0, r0, #0x18
lsrs r6, r0, #0x18
cmp r6, #0
beq _0803D27E
b _0803D400
_0803D27E:
adds r5, r4, #0
adds r5, #0x74
ldrb r1, [r5]
movs r0, #0x70
ands r0, r1
cmp r0, #0
bne _0803D2E4
ldr r0, [r4, #0x54]
ldrb r0, [r0, #0xe]
cmp r0, #0
bne _0803D2DE
adds r0, r4, #0
bl sub_0803DD78
adds r0, r4, #0
adds r0, #0x75
ldrb r0, [r0]
cmp r0, #0
beq _0803D2B0
movs r0, #2
strb r0, [r4, #0xc]
strb r6, [r5]
movs r0, #0x10
strb r0, [r4, #0xe]
b _0803D2D6
_0803D2B0:
adds r0, r4, #0
adds r0, #0x86
ldrb r0, [r0]
cmp r0, #0
bne _0803D2C4
adds r0, r4, #0
adds r0, #0x80
ldrb r0, [r0]
cmp r0, #0
beq _0803D2D6
_0803D2C4:
bl Random
movs r1, #0x80
ands r1, r0
lsrs r1, r1, #3
movs r0, #8
orrs r1, r0
strb r1, [r4, #0x15]
b _0803D400
_0803D2D6:
ldrb r0, [r4, #0x15]
orrs r0, r7
strb r0, [r4, #0x15]
b _0803D400
_0803D2DE:
movs r0, #2
strb r0, [r4, #0xe]
b _0803D400
_0803D2E4:
movs r0, #3
strb r0, [r4, #0xc]
ldrb r1, [r5]
movs r0, #0x80
ands r0, r1
adds r1, r4, #0
adds r1, #0x75
strb r0, [r1]
strb r6, [r5]
movs r0, #0xc0
strb r0, [r4, #0xe]
ldrb r0, [r4, #0x15]
orrs r0, r7
strb r0, [r4, #0x15]
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
movs r1, #0
bl InitAnimationForceUpdate
b _0803D400
_0803D318:
adds r1, r4, #0
adds r1, #0x77
ldrb r0, [r1]
subs r0, #1
strb r0, [r1]
movs r6, #0xff
lsls r0, r0, #0x18
lsrs r5, r0, #0x18
cmp r5, #0
bne _0803D3BA
adds r0, r4, #0
bl sub_0803DEE0
cmp r0, #1
beq _0803D366
cmp r0, #1
blo _0803D344
cmp r0, #2
beq _0803D384
cmp r0, #3
beq _0803D374
b _0803D3BA
_0803D344:
movs r0, #4
strb r0, [r4, #0xc]
movs r0, #0xa0
strb r0, [r4, #0xe]
ldrb r0, [r4, #0x15]
orrs r0, r6
strb r0, [r4, #0x15]
adds r1, r4, #0
adds r1, #0x84
ldrb r0, [r1]
orrs r0, r6
strb r0, [r1]
adds r0, r4, #0
movs r1, #1
bl InitAnimationForceUpdate
b _0803D3BA
_0803D366:
movs r0, #6
strb r0, [r4, #0xc]
adds r0, r4, #0
adds r0, #0x74
strb r5, [r0]
strb r5, [r4, #0xe]
b _0803D3B4
_0803D374:
movs r0, #5
strb r0, [r4, #0xc]
adds r0, r4, #0
adds r0, #0x74
strb r5, [r0]
movs r0, #0x20
strb r0, [r4, #0xf]
b _0803D3B4
_0803D384:
adds r0, r4, #0
adds r0, #0x74
strb r5, [r0]
movs r0, #0x20
strb r0, [r4, #0xe]
adds r0, r4, #0
adds r0, #0x86
ldrb r0, [r0]
cmp r0, #0
bne _0803D3A2
adds r0, r4, #0
adds r0, #0x80
ldrb r0, [r0]
cmp r0, #0
beq _0803D3B4
_0803D3A2:
bl Random
movs r1, #0x80
ands r1, r0
lsrs r1, r1, #3
movs r0, #8
orrs r1, r0
strb r1, [r4, #0x15]
b _0803D3BA
_0803D3B4:
ldrb r0, [r4, #0x15]
orrs r0, r6
strb r0, [r4, #0x15]
_0803D3BA:
ldr r0, [r4, #0x54]
ldrb r0, [r0, #0xe]
cmp r0, #0
bne _0803D400
adds r2, r4, #0
adds r2, #0x85
ldrb r0, [r2]
adds r1, r0, #1
strb r1, [r2]
movs r0, #3
ands r0, r1
cmp r0, #0
bne _0803D3FA
movs r0, #0x30
ands r0, r1
cmp r0, #0x10
beq _0803D3F4
cmp r0, #0x10
bgt _0803D3E6
cmp r0, #0
beq _0803D3EE
b _0803D3FA
_0803D3E6:
cmp r0, #0x20
beq _0803D3F4
cmp r0, #0x30
bne _0803D3FA
_0803D3EE:
ldrh r0, [r4, #0x32]
adds r0, #1
b _0803D3F8
_0803D3F4:
ldrh r0, [r4, #0x32]
subs r0, #1
_0803D3F8:
strh r0, [r4, #0x32]
_0803D3FA:
adds r0, r4, #0
bl sub_080AEFB4
_0803D400:
adds r0, r4, #0
bl UpdateAnimationSingleFrame
pop {r4, r5, r6, r7, pc}
thumb_func_start sub_0803D408
sub_0803D408: @ 0x0803D408
push {r4, r5, lr}

View File

@ -4,28 +4,6 @@
.section .rodata
.align 2
gUnk_080D0470:: @ 080D0470
.4byte sub_0803D134
.4byte sub_0803D264
.4byte sub_0803D408
.4byte sub_0803D560
.4byte sub_0803D658
.4byte sub_0803D700
.4byte sub_0803D830
.4byte sub_0803D8FC
gUnk_080D0490:: @ 080D0490
.4byte sub_0803D974
.4byte sub_0803D9BC
gUnk_080D0498:: @ 080D0498
.4byte sub_0803DAA8
.4byte sub_0803DAE4
gUnk_080D04A0:: @ 080D04A0
.4byte sub_0803DB88
.4byte sub_0803DBB8
gUnk_080D04A8:: @ 080D04A8
.incbin "baserom.gba", 0x0D04A8, 0x0000004

View File

@ -416,6 +416,7 @@ SECTIONS {
src/enemy/lakitu.o(.text);
src/enemy/lakituCloud.o(.text);
asm/enemy49.o(.text);
src/enemy/vaatiRebornEnemy.o(.text);
asm/vaatiRebornEnemy.o(.text);
src/enemy/vaatiProjectile.o(.text);
asm/ballChainSoldier.o(.text);
@ -1120,6 +1121,7 @@ SECTIONS {
data/animations/enemy/lakitu.o(.rodata);
src/enemy/lakituCloud.o(.rodata);
data/const/enemy/enemy49.o(.rodata);
src/enemy/vaatiRebornEnemy.o(.rodata);
data/const/enemy/vaatiRebornEnemy.o(.rodata);
data/animations/enemy/vaatiRebornEnemy.o(.rodata);
src/enemy/vaatiProjectile.o(.rodata);

View File

@ -88,7 +88,105 @@ void sub_0806B67C(Entity* this) {
}
}
ASM_FUNC("asm/non_matching/vaati/sub_0806B7BC.inc", void sub_0806B7BC(Entity* this))
void sub_0806B7BC(Entity* this) {
Entity* entity;
if (CheckRoomFlag(3) == 0) {
return;
}
switch (this->type) {
case 0:
this->y.HALF.HI++;
if (--this->actionDelay == 0) {
entity = CreateNPC(VAATI_REBORN, 3, 0);
if (entity == NULL) {
break;
}
CopyPosition(this, entity);
TextboxNoOverlapFollow(0x1634);
this->subAction = this->subAction + 1;
DeleteThisEntity();
return;
}
if (this->field_0xf-- == 1) {
this->field_0xf = 0x20;
SoundReq(SFX_1A9);
}
UpdateAnimationSingleFrame(this);
break;
case 1:
entity = sub_0806B9BC(this);
if (entity == NULL) {
DeleteThisEntity();
}
PositionRelative(entity, this, 0, 0x210000);
UpdateAnimationSingleFrame(this);
break;
case 2:
sub_0806B96C(this);
UpdateAnimationSingleFrame(this);
break;
case 3:
switch (this->subAction) {
case 0:
if (--this->actionDelay == 0) {
this->subAction += 1;
}
break;
case 1:
if (this->frames.b.f3 != 0) {
this->subAction = 2;
sub_0801D2B4(this, 0x13f);
InitAnimationForceUpdate(this, this->subAction - 1);
}
break;
case 2:
if ((this->frames.all & 0x10) != 0) {
this->frames.all &= 0xef;
switch (++this->actionDelay) {
case 1:
break;
case 10:
this->subAction++;
EnqueueSFX(SFX_SUMMON);
this->actionDelay = 0;
InitAnimationForceUpdate(this, this->subAction - 1);
break;
}
}
break;
case 3:
if (this->frames.b.f3 != 0) {
SetRoomFlag(0);
DeleteThisEntity();
}
break;
}
if (--this->field_0xf == 0) {
this->field_0xf = 0x20;
SoundReq(SFX_1A9);
}
UpdateAnimationSingleFrame(this);
break;
default:
entity = sub_0806B9BC(this);
if (entity == NULL) {
DeleteThisEntity();
break;
}
if (entity->subAction == 0) {
break;
}
if (this->type != 4) {
UpdateAnimationSingleFrame(this);
} else {
GetNextFrame(this);
}
break;
}
}
void sub_0806B96C(Entity* this) {
Entity* entity;