diff --git a/asm/non_matching/vaati/sub_0806B7BC.inc b/asm/non_matching/vaati/sub_0806B7BC.inc deleted file mode 100644 index 78f9e721..00000000 --- a/asm/non_matching/vaati/sub_0806B7BC.inc +++ /dev/null @@ -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 diff --git a/asm/vaatiRebornEnemy.s b/asm/vaatiRebornEnemy.s index 51485753..c7df101b 100644 --- a/asm/vaatiRebornEnemy.s +++ b/asm/vaatiRebornEnemy.s @@ -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} diff --git a/data/const/enemy/vaatiRebornEnemy.s b/data/const/enemy/vaatiRebornEnemy.s index 6192e31f..c1c266fd 100644 --- a/data/const/enemy/vaatiRebornEnemy.s +++ b/data/const/enemy/vaatiRebornEnemy.s @@ -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 diff --git a/linker.ld b/linker.ld index b817528c..00b46639 100644 --- a/linker.ld +++ b/linker.ld @@ -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); diff --git a/src/npc/vaatiReborn.c b/src/npc/vaatiReborn.c index bf8defee..826e24fd 100644 --- a/src/npc/vaatiReborn.c +++ b/src/npc/vaatiReborn.c @@ -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;