From c0ad5c6e3e230ff7046612e6298a1137d1e99c6a Mon Sep 17 00:00:00 2001 From: Henny022p Date: Sun, 2 May 2021 01:20:41 +0200 Subject: [PATCH] mazaal macro --- asm/mazaalMacro.s | 673 --------------------------------- data/const/enemy/mazaalMacro.s | 37 -- linker.ld | 5 +- src/enemy/mazaalHead.c | 42 +- src/enemy/mazaalMacro.c | 286 +++++++++++++- 5 files changed, 308 insertions(+), 735 deletions(-) delete mode 100644 asm/mazaalMacro.s delete mode 100644 data/const/enemy/mazaalMacro.s diff --git a/asm/mazaalMacro.s b/asm/mazaalMacro.s deleted file mode 100644 index 1f0cef9a..00000000 --- a/asm/mazaalMacro.s +++ /dev/null @@ -1,673 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start MazaalMacro -MazaalMacro: @ 0x08034C60 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r4, _08034C78 @ =gUnk_080CEE90 - bl GetNextFunction - lsls r0, r0, #2 - adds r0, r0, r4 - ldr r1, [r0] - adds r0, r5, #0 - bl _call_via_r1 - pop {r4, r5, pc} - .align 2, 0 -_08034C78: .4byte gUnk_080CEE90 - - thumb_func_start sub_08034C7C -sub_08034C7C: @ 0x08034C7C - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xa] - cmp r0, #2 - beq _08034C9C - ldr r0, _08034C98 @ =gUnk_080CEEA4 - ldrb r1, [r2, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r2, #0 - bl _call_via_r1 - b _08034CA2 - .align 2, 0 -_08034C98: .4byte gUnk_080CEEA4 -_08034C9C: - adds r0, r2, #0 - bl sub_08034E18 -_08034CA2: - pop {pc} - - thumb_func_start sub_08034CA4 -sub_08034CA4: @ 0x08034CA4 - push {r4, lr} - adds r4, r0, #0 - bl sub_08034FA0 - ldr r1, _08034CB8 @ =gUnk_080CEE90 - adds r0, r4, #0 - bl sub_0804AA30 - pop {r4, pc} - .align 2, 0 -_08034CB8: .4byte gUnk_080CEE90 - - thumb_func_start sub_08034CBC -sub_08034CBC: @ 0x08034CBC - push {lr} - bl sub_0804A7D4 - pop {pc} - - thumb_func_start sub_08034CC4 -sub_08034CC4: @ 0x08034CC4 - push {r4, r5, r6, lr} - adds r5, r0, #0 - bl sub_08035084 - cmp r0, #0 - beq _08034D42 - ldrb r0, [r5, #0xa] - adds r0, #1 - movs r1, #0 - strb r0, [r5, #0xc] - strb r1, [r5, #0xf] - adds r2, r5, #0 - adds r2, #0x6d - ldrb r1, [r2] - movs r0, #1 - orrs r0, r1 - strb r0, [r2] - adds r1, r5, #0 - adds r1, #0x78 - movs r0, #0x96 - lsls r0, r0, #3 - strh r0, [r1] - adds r0, r5, #0 - bl sub_08034F70 - ldrb r1, [r5, #0xa] - adds r0, r5, #0 - bl InitializeAnimation - ldr r0, _08034D44 @ =0x00004022 - movs r2, #0x2e - ldrsh r1, [r5, r2] - ldr r3, _08034D48 @ =gRoomControls - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r4, #0x3f - ands r1, r4 - movs r6, #0x32 - ldrsh r2, [r5, r6] - ldrh r3, [r3, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - adds r2, r5, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl SetTile - movs r0, #0x37 - movs r1, #2 - bl CreateEnemy - adds r1, r0, #0 - cmp r1, #0 - beq _08034D42 - str r1, [r5, #0x54] - str r5, [r1, #0x50] - adds r0, r5, #0 - bl CopyPosition -_08034D42: - pop {r4, r5, r6, pc} - .align 2, 0 -_08034D44: .4byte 0x00004022 -_08034D48: .4byte gRoomControls - - thumb_func_start sub_08034D4C -sub_08034D4C: @ 0x08034D4C - push {r4, r5, r6, lr} - adds r5, r0, #0 - bl GetNextFrame - adds r6, r5, #0 - adds r6, #0x78 - ldrh r0, [r6] - subs r0, #1 - strh r0, [r6] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08034DC4 - ldrb r0, [r5, #0xf] - cmp r0, #7 - bhi _08034DBC - movs r0, #0x4b - movs r1, #0 - bl CreateEnemy - adds r4, r0, #0 - cmp r4, #0 - beq _08034DBC - bl Random - movs r1, #5 - bl __modsi3 - adds r0, #0xc - strb r0, [r4, #0x15] - ldr r1, _08034DB8 @ =gRoomControls - ldrh r0, [r1, #0x1e] - lsrs r0, r0, #1 - ldrh r2, [r1, #6] - adds r0, r0, r2 - strh r0, [r4, #0x2e] - ldrh r0, [r1, #8] - adds r0, #8 - strh r0, [r4, #0x32] - adds r1, r4, #0 - adds r1, #0x38 - movs r0, #3 - strb r0, [r1] - str r5, [r4, #0x50] - adds r0, r4, #0 - bl UpdateSpriteForCollisionLayer - movs r0, #0x96 - lsls r0, r0, #2 - strh r0, [r6] - ldrb r0, [r5, #0xf] - adds r0, #1 - strb r0, [r5, #0xf] - b _08034DC4 - .align 2, 0 -_08034DB8: .4byte gRoomControls -_08034DBC: - adds r1, r5, #0 - adds r1, #0x78 - movs r0, #0x78 - strh r0, [r1] -_08034DC4: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_08034DC8 -sub_08034DC8: @ 0x08034DC8 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r0, _08034E10 @ =gScreenTransition - adds r0, #0x39 - ldrb r0, [r0] - cmp r0, #0 - bne _08034E0E - adds r0, r4, #0 - movs r1, #0x51 - movs r2, #0 - bl CreateFx - movs r1, #0x2e - ldrsh r0, [r4, r1] - ldr r2, _08034E14 @ =gRoomControls - ldrh r1, [r2, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - movs r3, #0x3f - ands r0, r3 - movs r5, #0x32 - ldrsh r1, [r4, r5] - ldrh r2, [r2, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r3 - lsls r1, r1, #6 - orrs r0, r1 - adds r1, r4, #0 - adds r1, #0x38 - ldrb r1, [r1] - bl sub_0807BA8C - bl DeleteThisEntity -_08034E0E: - pop {r4, r5, pc} - .align 2, 0 -_08034E10: .4byte gScreenTransition -_08034E14: .4byte gRoomControls - - thumb_func_start sub_08034E18 -sub_08034E18: @ 0x08034E18 - push {lr} - ldr r2, _08034E2C @ =gUnk_080CEEB0 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08034E2C: .4byte gUnk_080CEEB0 - - thumb_func_start sub_08034E30 -sub_08034E30: @ 0x08034E30 - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xa] - adds r0, #1 - strb r0, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x38 - movs r0, #2 - strb r0, [r1] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r0, [r2] - movs r1, #7 - orrs r0, r1 - movs r1, #0x39 - rsbs r1, r1, #0 - ands r0, r1 - strb r0, [r2] - adds r0, r4, #0 - bl UpdateSpriteForCollisionLayer - adds r0, r4, #0 - movs r1, #2 - bl InitializeAnimation - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08034E68 -sub_08034E68: @ 0x08034E68 - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x50] - ldr r0, [r0, #4] - cmp r0, #0 - bne _08034EBC - ldrb r1, [r4, #0x18] - lsls r0, r1, #0x1e - cmp r0, #0 - beq _08034E8A - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - bl sub_08035120 -_08034E8A: - ldr r0, _08034EB0 @ =gScreenTransition - adds r0, #0x39 - ldrb r0, [r0] - cmp r0, #0 - bne _08034EB8 - bl sub_08079F8C - cmp r0, #0 - beq _08034EBC - movs r0, #3 - strb r0, [r4, #0xc] - ldr r1, _08034EB4 @ =script_08012E20 - adds r0, r4, #0 - bl StartCutscene - adds r1, r4, #0 - adds r1, #0x84 - str r0, [r1] - b _08034EBC - .align 2, 0 -_08034EB0: .4byte gScreenTransition -_08034EB4: .4byte script_08012E20 -_08034EB8: - bl DeleteThisEntity -_08034EBC: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08034EC0 -sub_08034EC0: @ 0x08034EC0 - push {lr} - adds r1, r0, #0 - ldr r0, [r1, #0x50] - ldr r0, [r0, #4] - cmp r0, #0 - bne _08034ED6 - adds r0, r1, #0 - bl sub_08035120 - bl DeleteThisEntity -_08034ED6: - pop {pc} - - thumb_func_start sub_08034ED8 -sub_08034ED8: @ 0x08034ED8 - push {lr} - movs r1, #0 - bl ExecuteScriptForEntity - pop {pc} - .align 2, 0 - - thumb_func_start sub_08034EE4 -sub_08034EE4: @ 0x08034EE4 - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xe] - adds r0, #1 - strb r0, [r5, #0xe] - movs r1, #0xff - ands r0, r1 - movs r1, #0xf - ands r0, r1 - cmp r0, #0 - bne _08034F46 - bl Random - adds r4, r0, #0 - ldr r0, _08034F50 @ =gUnk_080CEEC8 - movs r1, #3 - ands r1, r4 - adds r1, r1, r0 - ldrb r1, [r1] - adds r0, r5, #0 - movs r2, #0 - bl CreateFx - adds r3, r0, #0 - cmp r3, #0 - beq _08034F46 - lsrs r1, r4, #2 - movs r0, #0x77 - ands r1, r0 - lsls r1, r1, #1 - adds r1, #1 - ldr r2, _08034F54 @ =gRoomControls - ldrh r0, [r2, #0xa] - adds r0, r0, r1 - strh r0, [r3, #0x2e] - lsrs r1, r4, #9 - movs r0, #0x7e - ands r1, r0 - adds r1, #1 - ldrh r0, [r2, #0xc] - adds r0, r0, r1 - strh r0, [r3, #0x32] - adds r1, r3, #0 - adds r1, #0x38 - movs r0, #2 - strb r0, [r1] - adds r0, r3, #0 - bl UpdateSpriteForCollisionLayer -_08034F46: - adds r0, r5, #0 - movs r1, #0 - bl ExecuteScriptForEntity - pop {r4, r5, pc} - .align 2, 0 -_08034F50: .4byte gUnk_080CEEC8 -_08034F54: .4byte gRoomControls - - thumb_func_start sub_08034F58 -sub_08034F58: @ 0x08034F58 - push {r4, lr} - adds r4, r0, #0 - ldr r0, _08034F6C @ =gUnk_0813ABA8 - bl DoExitTransition - adds r0, r4, #0 - bl DeleteEntity - pop {r4, pc} - .align 2, 0 -_08034F6C: .4byte gUnk_0813ABA8 - - thumb_func_start sub_08034F70 -sub_08034F70: @ 0x08034F70 - push {lr} - adds r2, r0, #0 - ldr r0, _08034F8C @ =gScreenTransition - adds r0, #0x39 - ldrb r0, [r0] - adds r1, r2, #0 - adds r1, #0x45 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x3c - bls _08034F90 - movs r0, #0 - b _08034F9A - .align 2, 0 -_08034F8C: .4byte gScreenTransition -_08034F90: - cmp r0, #0x1e - bls _08034F98 - movs r0, #1 - b _08034F9A -_08034F98: - movs r0, #2 -_08034F9A: - strb r0, [r2, #0xb] - pop {pc} - .align 2, 0 - - thumb_func_start sub_08034FA0 -sub_08034FA0: @ 0x08034FA0 - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r0, #0x3d - ldrb r1, [r0] - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - ble _08034FC0 - ldr r0, [r4, #0x54] - adds r0, #0x3d - strb r1, [r0] - movs r0, #0xc - movs r1, #1 - bl sub_08080964 -_08034FC0: - ldrb r0, [r4, #0xb] - cmp r0, #0 - beq _08035008 - cmp r0, #1 - beq _08035020 - adds r0, r4, #0 - adds r0, #0x45 - ldrb r1, [r0] - adds r5, r0, #0 - cmp r1, #0 - bne _08035040 - movs r1, #0x2e - ldrsh r0, [r4, r1] - ldr r2, _08035004 @ =gRoomControls - ldrh r1, [r2, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - movs r3, #0x3f - ands r0, r3 - movs r6, #0x32 - ldrsh r1, [r4, r6] - ldrh r2, [r2, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r3 - lsls r1, r1, #6 - orrs r0, r1 - adds r1, r4, #0 - adds r1, #0x38 - ldrb r1, [r1] - bl sub_0807BA8C - b _08035040 - .align 2, 0 -_08035004: .4byte gRoomControls -_08035008: - adds r0, r4, #0 - adds r0, #0x45 - ldrb r1, [r0] - adds r5, r0, #0 - cmp r1, #0x3b - bhi _08035040 - ldr r0, _0803501C @ =gScreenTransition - adds r0, #0x39 - movs r1, #0x3c - b _08035032 - .align 2, 0 -_0803501C: .4byte gScreenTransition -_08035020: - adds r0, r4, #0 - adds r0, #0x45 - ldrb r1, [r0] - adds r5, r0, #0 - cmp r1, #0x1d - bhi _08035040 - ldr r0, _0803503C @ =gScreenTransition - adds r0, #0x39 - movs r1, #0x1e -_08035032: - strb r1, [r0] - adds r0, r4, #0 - bl sub_08035050 - b _08035048 - .align 2, 0 -_0803503C: .4byte gScreenTransition -_08035040: - ldr r0, _0803504C @ =gScreenTransition - ldrb r1, [r5] - adds r0, #0x39 - strb r1, [r0] -_08035048: - pop {r4, r5, r6, pc} - .align 2, 0 -_0803504C: .4byte gScreenTransition - - thumb_func_start sub_08035050 -sub_08035050: @ 0x08035050 - push {r4, lr} - ldrb r2, [r0, #0x10] - movs r1, #0x7f - ands r1, r2 - movs r4, #0 - strb r1, [r0, #0x10] - adds r0, #0x45 - strb r4, [r0] - movs r0, #0x4b - movs r1, #0 - bl CreateEnemy - adds r2, r0, #0 - cmp r2, #0 - beq _08035082 - movs r0, #1 - strb r0, [r2, #0xb] - adds r1, r2, #0 - adds r1, #0x38 - movs r0, #3 - strb r0, [r1] - str r4, [r2, #0x50] - adds r0, r2, #0 - bl UpdateSpriteForCollisionLayer -_08035082: - pop {r4, pc} - - thumb_func_start sub_08035084 -sub_08035084: @ 0x08035084 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - mov r8, r0 - ldrb r0, [r0, #0xa] - cmp r0, #0 - bne _08035118 - ldr r0, _080350A0 @ =gEntCount - ldrb r0, [r0] - cmp r0, #0x42 - bls _080350A4 - movs r0, #0 - b _0803511A - .align 2, 0 -_080350A0: .4byte gEntCount -_080350A4: - ldr r4, _080350D8 @ =gUnk_030010D8 -_080350A6: - bl Random - movs r1, #6 - bl __modsi3 - adds r6, r0, #0 - ldrb r0, [r4] - lsrs r0, r0, #4 - cmp r6, r0 - beq _080350A6 - ldr r2, _080350DC @ =gScreenTransition - adds r2, #0x38 - ldrb r1, [r2] - movs r0, #0xf - ands r0, r1 - lsls r1, r6, #4 - orrs r0, r1 - strb r0, [r2] - movs r5, #0 - ldr r4, _080350E0 @ =gUnk_080CEECC - ldr r7, _080350E4 @ =gRoomControls -_080350D0: - cmp r5, r6 - bne _080350E8 - mov r2, r8 - b _080350F2 - .align 2, 0 -_080350D8: .4byte gUnk_030010D8 -_080350DC: .4byte gScreenTransition -_080350E0: .4byte gUnk_080CEECC -_080350E4: .4byte gRoomControls -_080350E8: - movs r0, #0x37 - movs r1, #1 - bl CreateEnemy - adds r2, r0, #0 -_080350F2: - ldrh r0, [r7, #6] - ldrb r1, [r4] - adds r0, r0, r1 - strh r0, [r2, #0x2e] - ldrh r0, [r7, #8] - ldrb r1, [r4, #1] - adds r0, r0, r1 - strh r0, [r2, #0x32] - adds r1, r2, #0 - adds r1, #0x38 - movs r0, #1 - strb r0, [r1] - adds r0, r2, #0 - bl UpdateSpriteForCollisionLayer - adds r5, #1 - adds r4, #2 - cmp r5, #5 - bls _080350D0 -_08035118: - movs r0, #1 -_0803511A: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_08035120 -sub_08035120: @ 0x08035120 - push {r4, r5, r6, lr} - movs r2, #0x2e - ldrsh r1, [r0, r2] - ldr r3, _0803515C @ =gRoomControls - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r4, r1, #4 - movs r2, #0x3f - ands r4, r2 - movs r1, #0x32 - ldrsh r0, [r0, r1] - ldrh r1, [r3, #8] - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r2 - lsls r0, r0, #6 - orrs r4, r0 - movs r6, #0 - ldr r5, _08035160 @ =gUnk_080CEED8 -_08035146: - movs r2, #0 - ldrsh r0, [r5, r2] - adds r0, r4, r0 - bl sub_0807B600 - adds r5, #2 - adds r6, #1 - cmp r6, #0x17 - bls _08035146 - pop {r4, r5, r6, pc} - .align 2, 0 -_0803515C: .4byte gRoomControls -_08035160: .4byte gUnk_080CEED8 diff --git a/data/const/enemy/mazaalMacro.s b/data/const/enemy/mazaalMacro.s deleted file mode 100644 index 3c64ef30..00000000 --- a/data/const/enemy/mazaalMacro.s +++ /dev/null @@ -1,37 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_080CEE90:: @ 080CEE90 - .4byte sub_08034C7C - .4byte sub_08034CA4 - .4byte sub_08001324 - .4byte sub_08034CBC - .4byte sub_08001242 - -gUnk_080CEEA4:: @ 080CEEA4 - .4byte sub_08034CC4 - .4byte sub_08034D4C - .4byte sub_08034DC8 - -gUnk_080CEEB0:: @ 080CEEB0 - .4byte sub_08034E30 - .4byte sub_08034E68 - .4byte sub_08034EC0 - .4byte sub_08034ED8 - .4byte sub_08034EE4 - .4byte sub_08034F58 - -gUnk_080CEEC8:: @ 080CEEC8 - .incbin "baserom.gba", 0x0CEEC8, 0x0000004 - -gUnk_080CEECC:: @ 080CEECC - .incbin "baserom.gba", 0x0CEECC, 0x000000C - -gUnk_080CEED8:: @ 080CEED8 - .incbin "baserom.gba", 0x0CEED8, 0x0000004 - -gUnk_080CEEDC:: @ 080CEEDC - .incbin "baserom.gba", 0x0CEEDC, 0x000002C diff --git a/linker.ld b/linker.ld index f9982386..2fe8453c 100644 --- a/linker.ld +++ b/linker.ld @@ -185,7 +185,6 @@ SECTIONS { . = 0x00001020; gUnk_03001020 = .; . = 0x000010A0; gScreenTransition = .; . = 0x000010AC; gUnk_030010AC = .; - . = 0x000010D8; gUnk_030010D8 = .; . = 0x000010EC; gUnk_030010EC = .; . = 0x0000110C; gUnk_0300110C = .; . = 0x00001150; gRand = .; @@ -397,7 +396,7 @@ SECTIONS { src/enemy/wisp.o(.text); asm/spinyBeetle.o(.text); src/enemy/mazaalHead.o(.text); - asm/mazaalMacro.o(.text); + src/enemy/mazaalMacro.o(.text); src/enemy/mazaalHand.o(.text); asm/octorokBoss.o(.text); asm/flyingPot.o(.text); @@ -1095,7 +1094,7 @@ SECTIONS { data/animations/enemy/spinyBeetle.o(.rodata); src/enemy/mazaalHead.o(.rodata); data/animations/enemy/mazaalHead.o(.rodata); - data/const/enemy/mazaalMacro.o(.rodata); + src/enemy/mazaalMacro.o(.rodata); data/animations/enemy/mazaalMacro.o(.rodata); src/enemy/mazaalHand.o(.rodata); data/animations/enemy/mazaalHand.o(.rodata); diff --git a/src/enemy/mazaalHead.c b/src/enemy/mazaalHead.c index 7d0beb7c..2499f6f2 100644 --- a/src/enemy/mazaalHead.c +++ b/src/enemy/mazaalHead.c @@ -11,27 +11,27 @@ extern void DoExitTransition(ScreenTransitionData*); extern u8 gEntCount; -extern void sub_0803499C(Entity*); -extern void sub_08034420(Entity*); -extern void sub_08034830(Entity*); -extern u32 sub_080349D8(Entity*); -extern void sub_0803442C(Entity*, u32); -extern void sub_0803443C(Entity*); -extern void sub_080347B4(Entity*); -extern void sub_0803473C(Entity*); -extern u32 sub_08034A10(Entity*); -extern void sub_080347FC(Entity*); -extern void sub_080344BC(Entity*); -extern void sub_08034498(Entity*); -extern void sub_08034474(Entity*); -extern void sub_080345A0(Entity*); -extern void sub_080345B8(Entity*); -extern void sub_08034638(Entity*); -extern void sub_08034618(Entity*); -extern void sub_08034658(Entity*); -extern void sub_0803467C(Entity*); -extern u32 sub_080348A4(Entity*, Entity*, u32); -extern void sub_08034C00(Entity*); +void sub_0803499C(Entity*); +void sub_08034420(Entity*); +void sub_08034830(Entity*); +u32 sub_080349D8(Entity*); +void sub_0803442C(Entity*, u32); +void sub_0803443C(Entity*); +void sub_080347B4(Entity*); +void sub_0803473C(Entity*); +u32 sub_08034A10(Entity*); +void sub_080347FC(Entity*); +void sub_080344BC(Entity*); +void sub_08034498(Entity*); +void sub_08034474(Entity*); +void sub_080345A0(Entity*); +void sub_080345B8(Entity*); +void sub_08034638(Entity*); +void sub_08034618(Entity*); +void sub_08034658(Entity*); +void sub_0803467C(Entity*); +u32 sub_080348A4(Entity*, Entity*, u32); +void sub_08034C00(Entity*); void sub_08033EF0(Entity* this); void sub_08033F08(Entity* this); diff --git a/src/enemy/mazaalMacro.c b/src/enemy/mazaalMacro.c index d4008854..56561d71 100644 --- a/src/enemy/mazaalMacro.c +++ b/src/enemy/mazaalMacro.c @@ -1 +1,285 @@ -#include "global.h" \ No newline at end of file +#include "global.h" +#include "entity.h" +#include "enemy.h" +#include "random.h" +#include "script.h" +#include "structures.h" +#include "functions.h" + +extern void DoExitTransition(ScreenTransitionData*); +extern void sub_0807B600(u32); + +extern const u16 script_08012E20[]; +extern const u8 gEntCount; + +void sub_08034E18(Entity*); +void sub_08034FA0(Entity*); +u32 sub_08035084(Entity*); +void sub_08034F70(Entity*); +void sub_08035120(Entity*); +void sub_08035050(Entity*); + +void sub_08034C7C(Entity* this); +void sub_08034CA4(Entity* this); +void sub_08034CBC(Entity* this); +void sub_08034CC4(Entity* this); +void sub_08034D4C(Entity* this); +void sub_08034DC8(Entity* this); +void sub_08034E30(Entity* this); +void sub_08034E68(Entity* this); +void sub_08034EC0(Entity* this); +void sub_08034ED8(Entity* this); +void sub_08034EE4(Entity* this); +void sub_08034F58(Entity* this); + +void (*const gUnk_080CEE90[])(Entity*) = { + sub_08034C7C, sub_08034CA4, sub_08001324, sub_08034CBC, sub_08001242, +}; +void (*const gUnk_080CEEA4[])(Entity*) = { + sub_08034CC4, + sub_08034D4C, + sub_08034DC8, +}; +void (*const gUnk_080CEEB0[])(Entity*) = { + sub_08034E30, sub_08034E68, sub_08034EC0, sub_08034ED8, sub_08034EE4, sub_08034F58, +}; + +const u8 gUnk_080CEEC8[] = { 0x46, 0x46, 0x47, 0x48 }; +const u8 gUnk_080CEECC[] = { 0x58, 0x68, 0x88, 0x68, 0xb8, 0x68, 0x58, 0xa8, 0x88, 0xa8, 0xb8, 0xa8 }; +const s16 gUnk_080CEED8[] = { -0x82, -0x81, -0x80, -0x7f, -0x7e, -0x42, -0x41, -0x40, -0x3f, -0x3e, -2, -1, + 1, 2, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x7e, 0x7f, 0x80, 0x81, 0x82 }; + +extern const ScreenTransitionData gUnk_0813ABA8; + +void MazaalMacro(Entity* this) { + gUnk_080CEE90[GetNextFunction(this)](this); +} + +void sub_08034C7C(Entity* this) { + if (this->type != 2) { + gUnk_080CEEA4[this->action](this); + } else { + sub_08034E18(this); + } +} + +void sub_08034CA4(Entity* this) { + sub_08034FA0(this); + sub_0804AA30(this, gUnk_080CEE90); +} + +void sub_08034CBC(Entity* this) { + sub_0804A7D4(this); +} + +void sub_08034CC4(Entity* this) { + Entity* entity; + + if (sub_08035084(this) != 0) { + this->action = this->type + 1; + this->field_0xf = 0; + this->field_0x6c.HALF.HI |= 1; + this->field_0x78.HWORD = 0x4b0; + sub_08034F70(this); + InitializeAnimation(this, this->type); + SetTile(0x4022, + ((this->x.HALF.HI - gRoomControls.roomOriginX) >> 4 & 0x3f) | + (((this->y.HALF.HI - gRoomControls.roomOriginY) >> 4 & 0x3f) << 6), + this->collisionLayer); + entity = CreateEnemy(0x37, 2); + if (entity != NULL) { + this->attachedEntity = entity; + entity->parent = this; + CopyPosition(this, entity); + } + } +} + +void sub_08034D4C(Entity* this) { + Entity* entity; + + GetNextFrame(this); + if (--this->field_0x78.HWORD == 0) { + if ((this->field_0xf < 8) && (entity = CreateEnemy(0x4b, 0), entity != (Entity*)0x0)) { + entity->direction = (s32)Random() % 5 + 0xc; + entity->x.HALF.HI = (gRoomControls.width >> 1) + gRoomControls.roomOriginX; + entity->y.HALF.HI = gRoomControls.roomOriginY + 8; + entity->collisionLayer = 3; + entity->parent = this; + UpdateSpriteForCollisionLayer(entity); + this->field_0x78.HWORD = 600; + this->field_0xf = this->field_0xf + 1; + } else { + this->field_0x78.HWORD = 0x78; + } + } +} + +void sub_08034DC8(Entity* this) { + if (gScreenTransition.field_0x39 == 0) { + CreateFx(this, 0x51, 0); + sub_0807BA8C(((this->x.HALF.HI - gRoomControls.roomOriginX) >> 4 & 0x3fU) | + (((this->y.HALF.HI - gRoomControls.roomOriginY) >> 4 & 0x3fU) << 6), + this->collisionLayer); + DeleteThisEntity(); + } +} + +void sub_08034E18(Entity* this) { + gUnk_080CEEB0[this->action](this); +} + +void sub_08034E30(Entity* this) { + this->action = this->parent->type + 1; + this->collisionLayer = 2; + this->spritePriority.b0 = 7; + this->spritePriority.b1 = 0; + UpdateSpriteForCollisionLayer(this); + InitializeAnimation(this, 2); +} + +void sub_08034E68(Entity* this) { + ScriptExecutionContext* pSVar2; + + if (this->parent->next == NULL) { + if (this->spriteSettings.b.draw != 0) { + this->spriteSettings.b.draw = 0; + sub_08035120(this); + } + if (gScreenTransition.field_0x39 == 0) { + if (sub_08079F8C() != 0) { + this->action = 3; + pSVar2 = StartCutscene(this, (u16*)script_08012E20); + *(ScriptExecutionContext**)&this->cutsceneBeh = pSVar2; + } + } else { + DeleteThisEntity(); + } + } +} + +void sub_08034EC0(Entity* this) { + if (this->parent->next == NULL) { + sub_08035120(this); + DeleteThisEntity(); + } +} + +void sub_08034ED8(Entity* this) { + ExecuteScriptForEntity(this, NULL); +} + +void sub_08034EE4(Entity* this) { + u32 randomValue; + Entity* entity; + + if ((++this->actionDelay & 0xf) == 0) { + randomValue = Random(); + entity = CreateFx(this, gUnk_080CEEC8[randomValue & 3], 0); + if (entity != NULL) { + entity->x.HALF.HI = (((randomValue >> 2) & 0x77) << 1) + 1 + gRoomControls.roomScrollX; + entity->y.HALF.HI = ((randomValue >> 9) & 0x7e) + 1 + gRoomControls.roomScrollY; + entity->collisionLayer = 2; + UpdateSpriteForCollisionLayer(entity); + } + } + ExecuteScriptForEntity(this, NULL); +} + +void sub_08034F58(Entity* this) { + DoExitTransition((ScreenTransitionData*)&gUnk_0813ABA8); + DeleteEntity(this); +} + +void sub_08034F70(Entity* this) { + this->currentHealth = gScreenTransition.field_0x39; + if (gScreenTransition.field_0x39 >= 0x3d) { + this->type2 = 0; + } else if (gScreenTransition.field_0x39 >= 0x1f) { + this->type2 = 1; + } else { + this->type2 = 2; + } +} + +void sub_08034FA0(Entity* this) { + if (0 < this->iframes) { + this->attachedEntity->iframes = this->iframes; + sub_08080964(0xc, 1); + } + switch (this->type2) { + case 0: + if (this->currentHealth < 0x3c) { + gScreenTransition.field_0x39 = 0x3c; + sub_08035050(this); + return; + } + break; + case 1: + if (this->currentHealth < 0x1e) { + gScreenTransition.field_0x39 = 0x1e; + sub_08035050(this); + return; + } + break; + default: + if (this->currentHealth == 0) { + sub_0807BA8C(COORD_TO_TILE(this), this->collisionLayer); + } + break; + } + gScreenTransition.field_0x39 = this->currentHealth; +} + +void sub_08035050(Entity* this) { + Entity* entity; + + this->flags = this->flags & 0x7f; + this->currentHealth = 0; + entity = CreateEnemy(0x4b, 0); + if (entity != NULL) { + entity->type2 = 1; + entity->collisionLayer = 3; + entity->parent = NULL; + UpdateSpriteForCollisionLayer(entity); + } +} + +u32 sub_08035084(Entity* this) { + u32 vulnPillar; + Entity* entity; + u32 i; + const u8* coords; + + if (this->type == 0) { + if (0x42 < gEntCount) { + return 0; + } + do { + vulnPillar = (s32)Random() % 6; + } while (vulnPillar == gScreenTransition.field_0x38 >> 4); + gScreenTransition.field_0x38 = (gScreenTransition.field_0x38 & 0xf) | (vulnPillar << 4); + for (i = 0, coords = gUnk_080CEECC; i < 6; i++, coords += 2) { + if (i == vulnPillar) { + entity = this; + } else { + entity = CreateEnemy(0x37, 1); + } + entity->x.HALF.HI = gRoomControls.roomOriginX + *coords; + entity->y.HALF.HI = gRoomControls.roomOriginY + *(coords + 1); + entity->collisionLayer = 1; + UpdateSpriteForCollisionLayer(entity); + }; + } + return 1; +} + +void sub_08035120(Entity* this) { + s32 tile; + u32 i; + + tile = COORD_TO_TILE(this); + for (i = 0; i < 0x18; i++) { + sub_0807B600(tile + gUnk_080CEED8[i]); + } +}