From 2d286c0b34506a3c52b92bd3655ccce666cb580a Mon Sep 17 00:00:00 2001 From: theo3 Date: Thu, 23 Jul 2020 22:48:16 -0700 Subject: [PATCH] rupeeLike.c OK --- asm/armos.s | 2 +- asm/code_080011C4.s | 4 +- asm/code_08003FC4.s | 6 +- asm/code_080041E8.s | 6 +- asm/code_0806FA6C.s | 8 +- asm/code_08070698.s | 2 +- asm/code_080A5574.s | 4 +- asm/gyorgFemaleEye.s | 4 +- asm/helmasaur.s | 4 +- asm/likeLike.s | 4 +- asm/object29.s | 2 +- asm/object6A.s | 2 +- asm/objectC1.s | 2 +- asm/octorokGolden.s | 4 +- asm/peahat.s | 8 +- asm/rope.s | 2 +- asm/ropeGolden.s | 4 +- asm/rupeeLike.s | 754 -------------------------------------- asm/spinyBeetle.s | 2 +- asm/tektite.s | 2 +- asm/tektiteGolden.s | 206 +---------- include/entity.h | 12 +- include/functions.h | 15 + include/link.h | 2 +- linker.ld | 3 +- src/enemy/bombPeahat.c | 2 +- src/enemy/octorok.c | 4 +- src/enemy/rupeeLike.c | 281 ++++++++++++++ src/enemy/tektiteGolden.c | 108 ++++++ src/item11.c | 2 +- src/npc/forestMinish.c | 8 +- src/npc/goron.c | 4 +- src/npc/smith.c | 4 +- src/npc/syrup.c | 2 +- src/npc/zelda.c | 12 +- src/object/object1C.c | 2 +- src/object/well.c | 6 +- 37 files changed, 477 insertions(+), 1022 deletions(-) delete mode 100644 asm/rupeeLike.s create mode 100644 src/enemy/rupeeLike.c create mode 100644 src/enemy/tektiteGolden.c diff --git a/asm/armos.s b/asm/armos.s index 31a0c733..f8c539ab 100644 --- a/asm/armos.s +++ b/asm/armos.s @@ -237,7 +237,7 @@ sub_08030338: @ 0x08030338 _0803034C: adds r0, r4, #0 movs r1, #3 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames adds r0, r4, #0 adds r0, #0x84 ldr r0, [r0] diff --git a/asm/code_080011C4.s b/asm/code_080011C4.s index 3e1c1675..6296d255 100644 --- a/asm/code_080011C4.s +++ b/asm/code_080011C4.s @@ -68,7 +68,7 @@ _08001230: beq _0800123E strb r1, [r0, #0xe] movs r1, #4 - ldr r3, _0800135C @ =InitializeAnimationAnimation + ldr r3, _0800135C @ =UpdateAnimationVariableFrames bx r3 _0800123E: ldr r3, _08001360 @ =sub_080043B4 @@ -238,7 +238,7 @@ _08001352: bx lr .align 2, 0 _08001358: .4byte gEnemyFunctions -_0800135C: .4byte InitializeAnimationAnimation +_0800135C: .4byte UpdateAnimationVariableFrames _08001360: .4byte sub_080043B4 _08001364: .4byte 0x00001800 _08001368: .4byte gUnk_080012C8 diff --git a/asm/code_08003FC4.s b/asm/code_08003FC4.s index c14abb66..0fa902ed 100644 --- a/asm/code_08003FC4.s +++ b/asm/code_08003FC4.s @@ -431,8 +431,8 @@ InitializeAnimation: @ 0x08004260 GetNextFrame: @ 0x08004274 movs r1, #1 - non_word_aligned_thumb_func_start InitializeAnimationAnimation -InitializeAnimationAnimation: @ 0x08004276 + non_word_aligned_thumb_func_start UpdateAnimationVariableFrames +UpdateAnimationVariableFrames: @ 0x08004276 movs r3, #0x59 ldrb r2, [r0, r3] subs r2, r2, r1 @@ -478,7 +478,7 @@ UpdateAnimationSingleFrame: @ 0x080042B8 non_word_aligned_thumb_func_start sub_080042BA sub_080042BA: @ 0x080042BA push {lr} - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames _080042C0: pop {r1} mov lr, r1 diff --git a/asm/code_080041E8.s b/asm/code_080041E8.s index 1377f76e..2ebb96fb 100644 --- a/asm/code_080041E8.s +++ b/asm/code_080041E8.s @@ -97,8 +97,8 @@ InitializeAnimation: @ 0x08004260 GetNextFrame: @ 0x08004274 movs r1, #1 - non_word_aligned_thumb_func_start InitializeAnimationAnimation -InitializeAnimationAnimation: @ 0x08004276 + non_word_aligned_thumb_func_start UpdateAnimationVariableFrames +UpdateAnimationVariableFrames: @ 0x08004276 movs r3, #0x59 ldrb r2, [r0, r3] subs r2, r2, r1 @@ -144,7 +144,7 @@ UpdateAnimationSingleFrame: @ 0x080042B8 non_word_aligned_thumb_func_start sub_080042BA sub_080042BA: @ 0x080042BA push {lr} - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames _080042C0: pop {r1} mov lr, r1 diff --git a/asm/code_0806FA6C.s b/asm/code_0806FA6C.s index 893ae0f3..7764e708 100644 --- a/asm/code_0806FA6C.s +++ b/asm/code_0806FA6C.s @@ -671,7 +671,7 @@ SetSpriteSubEntryOffsetData1: @ 0x0806FF88 adds r4, r4, r2 ldrh r0, [r5, #2] ldrb r1, [r5, #1] - bl sub_080700C8 + bl GetSpriteSubEntryOffsetDataPointer ldrb r1, [r5, #6] ldrb r2, [r0] adds r1, r1, r2 @@ -715,7 +715,7 @@ SetSpriteSubEntryOffsetData2: @ 0x0806FFD8 adds r4, r4, r2 ldrh r0, [r5, #2] ldrb r1, [r5, #1] - bl sub_080700C8 + bl GetSpriteSubEntryOffsetDataPointer ldrb r1, [r5, #6] ldrb r2, [r0, #2] adds r1, r1, r2 @@ -826,8 +826,8 @@ _080700C4: _080700C6: pop {pc} - thumb_func_start sub_080700C8 -sub_080700C8: @ 0x080700C8 + thumb_func_start GetSpriteSubEntryOffsetDataPointer +GetSpriteSubEntryOffsetDataPointer: @ 0x080700C8 lsls r0, r0, #1 ldr r2, _080700E4 @ =gUnk_089FB780 adds r0, r0, r2 diff --git a/asm/code_08070698.s b/asm/code_08070698.s index 0d0a082f..2e64ca42 100644 --- a/asm/code_08070698.s +++ b/asm/code_08070698.s @@ -1131,7 +1131,7 @@ sub_08070F50: @ 0x08070F50 bl PositionEntityOnTop ldrh r0, [r4, #0x12] ldrb r1, [r4, #0x1e] - bl sub_080700C8 + bl GetSpriteSubEntryOffsetDataPointer ldrb r1, [r0] adds r2, r5, #0 adds r2, #0x62 diff --git a/asm/code_080A5574.s b/asm/code_080A5574.s index ac9fe0fd..1655baf1 100644 --- a/asm/code_080A5574.s +++ b/asm/code_080A5574.s @@ -9785,7 +9785,7 @@ _080AA052: _080AA05E: ldrh r0, [r5, #0x12] ldrb r1, [r5, #0x1e] - bl sub_080700C8 + bl GetSpriteSubEntryOffsetDataPointer adds r3, r0, #0 ldrb r1, [r5, #0x14] movs r0, #4 @@ -9989,7 +9989,7 @@ _080AA1EC: bne _080AA26C ldrh r0, [r4, #0x12] ldrb r1, [r4, #0x1e] - bl sub_080700C8 + bl GetSpriteSubEntryOffsetDataPointer adds r3, r0, #0 ldrb r1, [r4, #0x14] movs r0, #4 diff --git a/asm/gyorgFemaleEye.s b/asm/gyorgFemaleEye.s index 8d9e294c..174b71e2 100644 --- a/asm/gyorgFemaleEye.s +++ b/asm/gyorgFemaleEye.s @@ -391,7 +391,7 @@ _08048C6C: bl InitializeAnimation adds r0, r4, #0 movs r1, #7 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames adds r1, r6, #0 ldrb r4, [r4, #0xa] lsls r1, r4 @@ -419,7 +419,7 @@ _08048CBC: movs r1, #0x1c ands r1, r0 adds r0, r4, #0 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames _08048CE4: adds r0, r4, #0 bl GetNextFrame diff --git a/asm/helmasaur.s b/asm/helmasaur.s index 661bb6de..007bf3fd 100644 --- a/asm/helmasaur.s +++ b/asm/helmasaur.s @@ -238,7 +238,7 @@ sub_0802BD10: @ 0x0802BD10 ands r1, r2 strb r1, [r0, #0x10] movs r1, #2 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames pop {pc} .align 2, 0 @@ -380,7 +380,7 @@ sub_0802BE18: @ 0x0802BE18 push {r4, lr} adds r4, r0, #0 movs r1, #2 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames ldrb r0, [r4, #0xe] subs r0, #1 strb r0, [r4, #0xe] diff --git a/asm/likeLike.s b/asm/likeLike.s index ffa0dba8..cd07a3ec 100644 --- a/asm/likeLike.s +++ b/asm/likeLike.s @@ -412,7 +412,7 @@ sub_0802805C: @ 0x0802805C push {r4, r5, lr} adds r5, r0, #0 movs r1, #2 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames bl sub_0807953C cmp r0, #0 beq _0802807E @@ -454,7 +454,7 @@ _0802809C: bl PositionRelative ldrh r0, [r5, #0x12] ldrb r1, [r5, #0x1e] - bl sub_080700C8 + bl GetSpriteSubEntryOffsetDataPointer ldrb r1, [r0] adds r2, r4, #0 adds r2, #0x62 diff --git a/asm/object29.s b/asm/object29.s index e77d8f33..8c442a10 100644 --- a/asm/object29.s +++ b/asm/object29.s @@ -23,7 +23,7 @@ Object29: @ 0x08089848 ands r1, r0 adds r1, #1 adds r0, r4, #0 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames pop {r4, pc} .align 2, 0 _08089870: .4byte gUnk_08120D90 diff --git a/asm/object6A.s b/asm/object6A.s index 057c0c45..7d20335b 100644 --- a/asm/object6A.s +++ b/asm/object6A.s @@ -2269,7 +2269,7 @@ _08095BAC: strb r0, [r5, #0x18] ldrh r0, [r2, #0x12] ldrb r1, [r2, #0x1e] - bl sub_080700C8 + bl GetSpriteSubEntryOffsetDataPointer ldrb r1, [r0] adds r2, r5, #0 adds r2, #0x62 diff --git a/asm/objectC1.s b/asm/objectC1.s index 0f96d975..0a6016cb 100644 --- a/asm/objectC1.s +++ b/asm/objectC1.s @@ -256,7 +256,7 @@ _080A273C: bl PositionEntityOnTop ldrh r0, [r4, #0x12] ldrb r1, [r4, #0x1e] - bl sub_080700C8 + bl GetSpriteSubEntryOffsetDataPointer ldrb r1, [r0] adds r2, r5, #0 adds r2, #0x62 diff --git a/asm/octorokGolden.s b/asm/octorokGolden.s index 3c805d39..751b16af 100644 --- a/asm/octorokGolden.s +++ b/asm/octorokGolden.s @@ -133,7 +133,7 @@ _08037D1C: _08037D26: adds r0, r4, #0 movs r1, #2 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames adds r0, r4, #0 bl sub_080AEF88 cmp r0, #0 @@ -158,7 +158,7 @@ sub_08037D54: @ 0x08037D54 push {r4, lr} adds r4, r0, #0 movs r1, #2 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames adds r2, r4, #0 adds r2, #0x5a ldrb r1, [r2] diff --git a/asm/peahat.s b/asm/peahat.s index 8e1cce5b..cb26fd33 100644 --- a/asm/peahat.s +++ b/asm/peahat.s @@ -403,7 +403,7 @@ sub_08020220: @ 0x08020220 movs r1, #4 subs r1, r1, r0 adds r0, r5, #0 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames b _08020292 _0802024C: movs r0, #3 @@ -437,7 +437,7 @@ _08020284: _0802028A: adds r0, r5, #0 movs r1, #4 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames _08020292: pop {r4, r5, pc} @@ -495,7 +495,7 @@ _080202F8: _080202FE: adds r0, r4, #0 movs r1, #4 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames pop {r4, pc} thumb_func_start sub_08020308 @@ -533,7 +533,7 @@ _08020340: bl sub_080AEFE0 adds r0, r4, #0 movs r1, #4 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames _0802034E: pop {r4, pc} diff --git a/asm/rope.s b/asm/rope.s index f50525be..49a1a076 100644 --- a/asm/rope.s +++ b/asm/rope.s @@ -324,7 +324,7 @@ sub_080315BC: @ 0x080315BC strb r0, [r4, #0xe] adds r0, r4, #0 movs r1, #2 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames b _080315FC _080315D4: adds r0, r4, #0 diff --git a/asm/ropeGolden.s b/asm/ropeGolden.s index 7b6e7b10..f61b871f 100644 --- a/asm/ropeGolden.s +++ b/asm/ropeGolden.s @@ -150,7 +150,7 @@ _080382B8: .4byte gLinkEntity _080382BC: adds r0, r4, #0 movs r1, #2 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames adds r0, r4, #0 bl sub_080AEF88 cmp r0, #0 @@ -192,7 +192,7 @@ sub_08038304: @ 0x08038304 push {r4, r5, r6, lr} adds r4, r0, #0 movs r1, #2 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames adds r0, r4, #0 bl sub_080AEF88 cmp r0, #0 diff --git a/asm/rupeeLike.s b/asm/rupeeLike.s deleted file mode 100644 index 72b5a3c8..00000000 --- a/asm/rupeeLike.s +++ /dev/null @@ -1,754 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start RupeeLike -RupeeLike: @ 0x080292A0 - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xb] - cmp r0, #0 - bne _080292F8 - adds r0, r5, #0 - bl sub_080043E8 - lsls r0, r0, #0x18 - lsrs r4, r0, #0x18 - cmp r4, #0 - beq _080292CE - ldrb r0, [r5, #0xc] - cmp r0, #4 - bne _080292C4 - adds r0, r5, #0 - bl sub_080296D8 -_080292C4: - adds r0, r5, #0 - adds r1, r4, #0 - bl sub_08001290 - b _080292FE -_080292CE: - ldr r4, _080292F4 @ =gUnk_080CCC00 - adds r0, r5, #0 - bl GetNextFunction - lsls r0, r0, #2 - adds r0, r0, r4 - ldr r1, [r0] - adds r0, r5, #0 - bl _call_via_r1 - movs r3, #0x10 - rsbs r3, r3, #0 - adds r0, r5, #0 - movs r1, #0 - movs r2, #1 - bl SetChildOffset - b _080292FE - .align 2, 0 -_080292F4: .4byte gUnk_080CCC00 -_080292F8: - adds r0, r5, #0 - bl sub_080293DC -_080292FE: - pop {r4, r5, pc} - - thumb_func_start sub_08029300 -sub_08029300: @ 0x08029300 - push {lr} - ldr r2, _08029314 @ =gUnk_080CCC18 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08029314: .4byte gUnk_080CCC18 - - thumb_func_start sub_08029318 -sub_08029318: @ 0x08029318 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x3f - ldrb r0, [r0] - cmp r0, #0x8e - bne _0802932C - adds r0, r4, #0 - bl sub_08029770 - b _080293A6 -_0802932C: - ldrb r0, [r4, #0xc] - cmp r0, #4 - bne _08029338 - adds r0, r4, #0 - bl sub_080296D8 -_08029338: - ldr r0, [r4, #0x4c] - ldrb r0, [r0, #8] - cmp r0, #1 - bne _08029394 - ldrb r0, [r4, #0xc] - cmp r0, #2 - bne _08029356 - adds r0, r4, #0 - movs r1, #0 - bl InitializeAnimation - ldr r0, [r4, #0x54] - movs r1, #4 - bl InitializeAnimation -_08029356: - movs r1, #0 - movs r0, #4 - strb r0, [r4, #0xc] - movs r0, #0x3c - strb r0, [r4, #0xe] - strb r1, [r4, #0xf] - adds r1, r4, #0 - adds r1, #0x83 - movs r0, #0x41 - strb r0, [r1] - adds r2, r4, #0 - adds r2, #0x3b - ldrb r1, [r2] - movs r0, #0xfc - ands r0, r1 - strb r0, [r2] - ldr r0, _08029390 @ =gLinkEntity - adds r0, #0x29 - ldrb r0, [r0] - lsls r0, r0, #0x1a - lsrs r0, r0, #0x1d - adds r1, r4, #0 - adds r1, #0x80 - strb r0, [r1] - movs r0, #0x82 - lsls r0, r0, #1 - bl sub_08004488 - b _080293A6 - .align 2, 0 -_08029390: .4byte gLinkEntity -_08029394: - adds r0, r4, #0 - adds r0, #0x43 - ldrb r0, [r0] - cmp r0, #0 - beq _080293A6 - adds r0, r4, #0 - movs r1, #0x1c - bl sub_0804A9FC -_080293A6: - ldr r1, _080293B0 @ =gUnk_080CCC00 - adds r0, r4, #0 - bl sub_0804AA30 - pop {r4, pc} - .align 2, 0 -_080293B0: .4byte gUnk_080CCC00 - - thumb_func_start sub_080293B4 -sub_080293B4: @ 0x080293B4 - push {lr} - ldr r3, _080293D4 @ =gUnk_080CCC34 - adds r1, r0, #0 - adds r1, #0x84 - ldrb r2, [r1] - lsls r1, r2, #1 - adds r1, r1, r2 - ldrb r2, [r0, #0xa] - adds r1, r1, r2 - adds r1, r1, r3 - ldrb r2, [r1] - movs r1, #0xff - bl CreateDeathFx - pop {pc} - .align 2, 0 -_080293D4: .4byte gUnk_080CCC34 - - thumb_func_start nullsub_141 -nullsub_141: @ 0x080293D8 - bx lr - .align 2, 0 - - thumb_func_start sub_080293DC -sub_080293DC: @ 0x080293DC - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x50] - adds r1, r4, #0 - bl CopyPositionAndSpriteOffset - ldrh r0, [r4, #0x32] - adds r0, #1 - strh r0, [r4, #0x32] - ldrh r0, [r4, #0x36] - subs r0, #1 - strh r0, [r4, #0x36] - ldr r1, _08029408 @ =gUnk_080CCC3C - ldrb r0, [r4, #0xc] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - pop {r4, pc} - .align 2, 0 -_08029408: .4byte gUnk_080CCC3C - - thumb_func_start sub_0802940C -sub_0802940C: @ 0x0802940C - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0xa] - movs r0, #0x17 - bl CreateEnemy - adds r5, r0, #0 - cmp r5, #0 - beq _0802944A - adds r0, r4, #0 - bl sub_0804A720 - str r4, [r5, #0x50] - movs r1, #0 - movs r0, #1 - strb r0, [r5, #0xb] - str r5, [r4, #0x54] - adds r0, r4, #0 - adds r0, #0x81 - strb r1, [r0] - adds r0, #3 - strb r1, [r0] - ldrb r0, [r4, #0x1a] - lsls r0, r0, #0x1c - lsrs r0, r0, #0x1c - adds r1, r4, #0 - adds r1, #0x82 - strb r0, [r1] - adds r0, r4, #0 - bl sub_080297F0 -_0802944A: - pop {r4, r5, pc} - - thumb_func_start sub_0802944C -sub_0802944C: @ 0x0802944C - push {r4, lr} - adds r4, r0, #0 - bl sub_080296C8 - adds r0, r4, #0 - adds r0, #0x81 - ldrb r0, [r0] - cmp r0, #0 - beq _08029470 - adds r0, r4, #0 - movs r1, #1 - bl sub_08049FDC - cmp r0, #0 - beq _08029470 - adds r0, r4, #0 - bl sub_08029770 -_08029470: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08029474 -sub_08029474: @ 0x08029474 - push {r4, lr} - adds r4, r0, #0 - bl sub_080296C8 - adds r3, r4, #0 - adds r3, #0x5a - ldrb r2, [r3] - movs r0, #0x80 - ands r0, r2 - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - beq _080294C0 - movs r0, #3 - strb r0, [r4, #0xc] - movs r0, #8 - strb r0, [r4, #0xe] - ldr r1, _080294BC @ =gLinkEntity - adds r0, r4, #0 - bl GetFacingDirection - strb r0, [r4, #0x15] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x1c - strb r0, [r4, #0x14] - ldrb r1, [r4, #0x14] - adds r0, r4, #0 - bl InitializeAnimation - ldr r0, [r4, #0x54] - ldrb r1, [r4, #0x14] - adds r1, #4 - bl InitializeAnimation - b _080294D2 - .align 2, 0 -_080294BC: .4byte gLinkEntity -_080294C0: - lsls r0, r2, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #1 - bne _080294D2 - strb r1, [r3] - ldrb r0, [r4, #0x10] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] -_080294D2: - pop {r4, pc} - - thumb_func_start sub_080294D4 -sub_080294D4: @ 0x080294D4 - push {r4, lr} - adds r4, r0, #0 - movs r1, #1 - bl sub_08049FDC - cmp r0, #0 - beq _0802951C - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08029508 - movs r0, #8 - strb r0, [r4, #0xe] - ldr r1, _08029518 @ =gLinkEntity - adds r0, r4, #0 - bl GetFacingDirection - adds r1, r0, #0 - adds r0, r4, #0 - bl sub_08004596 - adds r0, r4, #0 - bl sub_0802969C -_08029508: - adds r0, r4, #0 - bl sub_080AEF88 - adds r0, r4, #0 - bl sub_080296C8 - b _08029538 - .align 2, 0 -_08029518: .4byte gLinkEntity -_0802951C: - movs r0, #6 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - adds r0, r4, #0 - movs r1, #3 - bl InitializeAnimation - ldr r0, [r4, #0x54] - movs r1, #7 - bl InitializeAnimation -_08029538: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0802953C -sub_0802953C: @ 0x0802953C - push {r4, r5, lr} - adds r5, r0, #0 - bl sub_080296C8 - adds r0, r5, #0 - bl sub_080296C8 - bl sub_0807953C - cmp r0, #0 - beq _08029558 - ldrb r0, [r5, #0xf] - adds r0, #1 - strb r0, [r5, #0xf] -_08029558: - ldrb r0, [r5, #0xe] - cmp r0, #0 - beq _08029562 - subs r0, #1 - strb r0, [r5, #0xe] -_08029562: - ldrb r0, [r5, #0xf] - cmp r0, #0x2d - bhi _08029572 - ldr r0, _08029580 @ =gUnk_02002A40 - adds r0, #0xc0 - ldrh r0, [r0] - cmp r0, #0 - bne _08029584 -_08029572: - ldrb r0, [r5, #0xe] - cmp r0, #0 - bne _08029584 - adds r0, r5, #0 - bl sub_080296D8 - b _080295FE - .align 2, 0 -_08029580: .4byte gUnk_02002A40 -_08029584: - bl sub_08077B2C - ldr r2, _08029600 @ =gLinkState - ldrb r1, [r2, #0x1a] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r2, #0x1a] - ldr r4, _08029604 @ =gLinkEntity - movs r3, #0x80 - lsls r3, r3, #9 - adds r0, r5, #0 - adds r1, r4, #0 - movs r2, #0 - bl PositionRelative - ldrh r0, [r5, #0x12] - ldrb r1, [r5, #0x1e] - bl sub_080700C8 - ldrb r1, [r0] - adds r2, r4, #0 - adds r2, #0x62 - strb r1, [r2] - ldrb r0, [r0, #1] - subs r0, #1 - adds r1, r4, #0 - adds r1, #0x63 - strb r0, [r1] - adds r4, #0x29 - ldrb r1, [r4] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4] - adds r1, r5, #0 - adds r1, #0x83 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080295FE - movs r0, #0x41 - strb r0, [r1] - ldr r0, _08029608 @ =gUnk_02002A40 - adds r0, #0xc0 - ldrh r0, [r0] - cmp r0, #0 - beq _080295FE - ldr r1, _0802960C @ =gUnk_080CCC44 - ldrb r0, [r5, #0xa] - adds r0, r0, r1 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - bl ModRupees - adds r1, r5, #0 - adds r1, #0x84 - movs r0, #1 - strb r0, [r1] -_080295FE: - pop {r4, r5, pc} - .align 2, 0 -_08029600: .4byte gLinkState -_08029604: .4byte gLinkEntity -_08029608: .4byte gUnk_02002A40 -_0802960C: .4byte gUnk_080CCC44 - - thumb_func_start sub_08029610 -sub_08029610: @ 0x08029610 - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xf] - subs r0, #1 - strb r0, [r1, #0xf] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08029628 - movs r0, #3 - strb r0, [r1, #0xc] - movs r0, #1 - strb r0, [r1, #0xe] -_08029628: - adds r0, r1, #0 - bl sub_080296C8 - pop {pc} - - thumb_func_start sub_08029630 -sub_08029630: @ 0x08029630 - push {r4, lr} - adds r4, r0, #0 - bl sub_080296C8 - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0802965E - adds r1, r4, #0 - adds r1, #0x81 - movs r0, #1 - strb r0, [r1] - ldr r2, [r4, #0x54] - ldrb r1, [r2, #0x18] - subs r0, #5 - ands r0, r1 - strb r0, [r2, #0x18] - adds r0, r4, #0 - bl sub_080297F0 -_0802965E: - pop {r4, pc} - - thumb_func_start sub_08029660 -sub_08029660: @ 0x08029660 - movs r1, #1 - strb r1, [r0, #0xc] - movs r1, #0xd1 - strh r1, [r0, #0x12] - ldr r2, _08029684 @ =gUnk_080CCC47 - ldrb r1, [r0, #0xa] - adds r1, r1, r2 - ldrb r2, [r1] - movs r1, #0xf - ands r2, r1 - ldrb r3, [r0, #0x1a] - movs r1, #0x10 - rsbs r1, r1, #0 - ands r1, r3 - orrs r1, r2 - strb r1, [r0, #0x1a] - bx lr - .align 2, 0 -_08029684: .4byte gUnk_080CCC47 - - thumb_func_start sub_08029688 -sub_08029688: @ 0x08029688 - push {lr} - adds r1, r0, #0 - ldr r0, [r1, #0x50] - ldr r0, [r0, #4] - cmp r0, #0 - bne _0802969A - adds r0, r1, #0 - bl DeleteEntity -_0802969A: - pop {pc} - - thumb_func_start sub_0802969C -sub_0802969C: @ 0x0802969C - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r1, [r5, #0x15] - movs r0, #0xf - ands r0, r1 - cmp r0, #0 - beq _080296C4 - lsrs r4, r1, #4 - ldrb r0, [r5, #0x14] - cmp r4, r0 - beq _080296C4 - strb r4, [r5, #0x14] - adds r0, r5, #0 - adds r1, r4, #0 - bl InitializeAnimation - ldr r0, [r5, #0x54] - adds r1, r4, #4 - bl InitializeAnimation -_080296C4: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_080296C8 -sub_080296C8: @ 0x080296C8 - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - ldr r0, [r4, #0x54] - bl GetNextFrame - pop {r4, pc} - - thumb_func_start sub_080296D8 -sub_080296D8: @ 0x080296D8 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r2, _08029764 @ =gLinkState - movs r0, #0x41 - strb r0, [r2, #2] - ldr r0, [r2, #0x30] - movs r1, #0x11 - rsbs r1, r1, #0 - ands r0, r1 - str r0, [r2, #0x30] - ldr r0, _08029768 @ =gLinkEntity - mov ip, r0 - ldrb r0, [r0, #0x10] - movs r1, #0x80 - orrs r0, r1 - mov r1, ip - strb r0, [r1, #0x10] - movs r0, #0xc0 - lsls r0, r0, #9 - str r0, [r1, #0x20] - adds r1, #0x3d - movs r0, #0xa6 - strb r0, [r1] - movs r3, #0 - ldr r0, _0802976C @ =0x0000FFFE - mov r1, ip - strh r0, [r1, #0x36] - ldrb r0, [r1, #0x14] - lsls r0, r0, #2 - strb r0, [r1, #0x15] - adds r0, r4, #0 - adds r0, #0x80 - ldrb r0, [r0] - mov r5, ip - adds r5, #0x29 - movs r1, #7 - ands r1, r0 - lsls r1, r1, #3 - ldrb r2, [r5] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5] - mov r0, ip - adds r0, #0x63 - strb r3, [r0] - movs r0, #0xa0 - lsls r0, r0, #1 - mov r1, ip - strh r0, [r1, #0x24] - movs r0, #5 - strb r0, [r4, #0xc] - movs r0, #0x3c - strb r0, [r4, #0xf] - adds r2, r4, #0 - adds r2, #0x3b - ldrb r1, [r2] - movs r0, #3 - orrs r0, r1 - strb r0, [r2] - adds r1, r4, #0 - adds r1, #0x3d - movs r0, #0 - ldrsb r0, [r1, r0] - cmp r0, #0 - bne _08029762 - movs r0, #0xf4 - strb r0, [r1] -_08029762: - pop {r4, r5, pc} - .align 2, 0 -_08029764: .4byte gLinkState -_08029768: .4byte gLinkEntity -_0802976C: .4byte 0x0000FFFE - - thumb_func_start sub_08029770 -sub_08029770: @ 0x08029770 - push {r4, lr} - adds r4, r0, #0 - movs r1, #0x73 - bl LoadFixedGFX - cmp r0, #0 - beq _080297E8 - movs r0, #2 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - movs r0, #0xd1 - strh r0, [r4, #0x12] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #0x18 - orrs r0, r1 - strb r0, [r2] - adds r0, r4, #0 - adds r0, #0x82 - ldrb r1, [r0] - movs r0, #0xf - ands r1, r0 - ldrb r2, [r4, #0x1a] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x1a] - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x8d - strb r0, [r1] - ldr r0, _080297EC @ =gUnk_080FD260 - str r0, [r4, #0x48] - adds r0, r4, #0 - movs r1, #2 - bl InitializeAnimation - ldr r2, [r4, #0x54] - ldrb r1, [r2, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r2, #0x18] - ldr r0, [r4, #0x54] - movs r1, #6 - bl InitializeAnimation - adds r0, r4, #0 - bl sub_080A29BC -_080297E8: - pop {r4, pc} - .align 2, 0 -_080297EC: .4byte gUnk_080FD260 - - thumb_func_start sub_080297F0 -sub_080297F0: @ 0x080297F0 - push {r4, lr} - adds r4, r0, #0 - movs r2, #1 - movs r0, #1 - strb r0, [r4, #0xc] - movs r0, #0x78 - strb r0, [r4, #0xe] - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - orrs r0, r2 - strb r0, [r4, #0x18] - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x8e - strb r0, [r1] - adds r0, r4, #0 - bl sub_080AE068 - ldr r0, _08029850 @ =0x00000143 - strh r0, [r4, #0x12] - ldr r1, _08029854 @ =gUnk_080CCC47 - ldrb r0, [r4, #0xa] - adds r0, r0, r1 - ldrb r1, [r0] - movs r0, #0xf - ands r1, r0 - ldrb r2, [r4, #0x1a] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x1a] - adds r1, r4, #0 - adds r1, #0x60 - movs r0, #9 - strh r0, [r1] - adds r0, r4, #0 - movs r1, #0x54 - bl InitializeAnimation - pop {r4, pc} - .align 2, 0 -_08029850: .4byte 0x00000143 -_08029854: .4byte gUnk_080CCC47 diff --git a/asm/spinyBeetle.s b/asm/spinyBeetle.s index 84bb7429..00fc6513 100644 --- a/asm/spinyBeetle.s +++ b/asm/spinyBeetle.s @@ -662,7 +662,7 @@ sub_08033C94: @ 0x08033C94 push {r4, lr} adds r4, r0, #0 movs r1, #3 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames adds r1, r4, #0 adds r1, #0x79 ldrb r0, [r1] diff --git a/asm/tektite.s b/asm/tektite.s index 5f862824..f0b0aed9 100644 --- a/asm/tektite.s +++ b/asm/tektite.s @@ -211,7 +211,7 @@ sub_0802F284: @ 0x0802F284 bls _0802F298 adds r0, r4, #0 movs r1, #2 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames b _0802F29E _0802F298: adds r0, r4, #0 diff --git a/asm/tektiteGolden.s b/asm/tektiteGolden.s index 8abda317..d51c9728 100644 --- a/asm/tektiteGolden.s +++ b/asm/tektiteGolden.s @@ -6,214 +6,12 @@ .text - - thumb_func_start TektiteGolden -TektiteGolden: @ 0x08037EC8 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _08037EE4 @ =gUnk_080CF4A0 - bl EnemyFunctionHandler - movs r3, #0x10 - rsbs r3, r3, #0 - adds r0, r4, #0 - movs r1, #0 - movs r2, #1 - bl SetChildOffset - pop {r4, pc} - .align 2, 0 -_08037EE4: .4byte gUnk_080CF4A0 - - thumb_func_start sub_08037EE8 -sub_08037EE8: @ 0x08037EE8 - push {lr} - ldr r2, _08037EFC @ =gUnk_080CF4B8 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08037EFC: .4byte gUnk_080CF4B8 - - thumb_func_start sub_08037F00 -sub_08037F00: @ 0x08037F00 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x43 - ldrb r0, [r0] - cmp r0, #0 - beq _08037F14 - adds r0, r4, #0 - movs r1, #0x1c - bl sub_0804A9FC -_08037F14: - ldr r1, _08037F54 @ =gUnk_080CF4A0 - adds r0, r4, #0 - bl sub_0804AA30 - adds r0, r4, #0 - adds r0, #0x41 - ldrb r0, [r0] - cmp r0, #0x94 - bne _08037F50 - movs r1, #0 - movs r0, #1 - strb r0, [r4, #0xc] - strb r1, [r4, #0xd] - movs r0, #0x14 - strb r0, [r4, #0xe] - strb r1, [r4, #0xf] - adds r0, r4, #0 - adds r0, #0x80 - strb r1, [r0] - movs r1, #0x36 - ldrsh r0, [r4, r1] - cmp r0, #0 - beq _08037F46 - ldr r0, [r4, #0x20] - asrs r0, r0, #2 -_08037F46: - str r0, [r4, #0x20] - adds r0, r4, #0 - movs r1, #0 - bl InitializeAnimation -_08037F50: - pop {r4, pc} - .align 2, 0 -_08037F54: .4byte gUnk_080CF4A0 - - thumb_func_start sub_08037F58 -sub_08037F58: @ 0x08037F58 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x3a - ldrb r1, [r0] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - bne _08037F6E - ldrb r0, [r4, #0xb] - bl SetGlobalFlag -_08037F6E: - ldrb r0, [r4, #0xa] - movs r2, #0x58 - cmp r0, #0 - beq _08037F78 - movs r2, #0x59 -_08037F78: - adds r0, r4, #0 - movs r1, #0xff - bl CreateDeathFx - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08037F84 -sub_08037F84: @ 0x08037F84 - push {r4, lr} - adds r4, r0, #0 - bl sub_08001242 - movs r1, #0x36 - ldrsh r0, [r4, r1] - cmp r0, #0 - beq _08037F9E - movs r1, #0xc0 - lsls r1, r1, #6 - adds r0, r4, #0 - bl sub_08003FC4 -_08037F9E: - pop {r4, pc} - - thumb_func_start sub_08037FA0 -sub_08037FA0: @ 0x08037FA0 - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xb] - bl CheckGlobalFlag - cmp r0, #0 - beq _08037FB2 - bl DeleteThisEntity -_08037FB2: - adds r0, r5, #0 - bl sub_0804A720 - movs r4, #0 - movs r0, #1 - strb r0, [r5, #0xc] - strb r4, [r5, #0xd] - bl Random - movs r1, #0x1f - ands r0, r1 - adds r0, #0x20 - strb r0, [r5, #0xe] - strb r4, [r5, #0xf] - adds r0, r5, #0 - adds r0, #0x80 - strb r4, [r0] - adds r0, r5, #0 - movs r1, #0 - bl InitializeAnimation - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08037FE0 -sub_08037FE0: @ 0x08037FE0 - push {r4, lr} - adds r4, r0, #0 - movs r1, #2 - bl InitializeAnimationAnimation - ldrb r0, [r4, #0xe] - adds r2, r0, #0 - cmp r2, #0 - beq _08037FF8 - subs r0, #1 - strb r0, [r4, #0xe] - b _08038046 -_08037FF8: - ldrb r0, [r4, #0xf] - cmp r0, #0 - beq _0803802C - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08038046 - movs r0, #2 - strb r0, [r4, #0xc] - movs r0, #6 - strb r0, [r4, #0xe] - strb r2, [r4, #0xf] - movs r0, #0xe0 - lsls r0, r0, #0xa - str r0, [r4, #0x20] - adds r0, r4, #0 - bl sub_08038168 - adds r0, r4, #0 - movs r1, #2 - bl InitializeAnimation - b _08038046 -_0803802C: - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08038046 - movs r0, #0x40 - strb r0, [r4, #0xf] - adds r0, r4, #0 - movs r1, #1 - bl InitializeAnimation -_08038046: - pop {r4, pc} - thumb_func_start sub_08038048 sub_08038048: @ 0x08038048 push {r4, r5, r6, lr} adds r4, r0, #0 movs r1, #2 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames adds r0, r4, #0 bl sub_080AEF88 movs r0, #0x36 @@ -315,7 +113,7 @@ sub_08038110: @ 0x08038110 push {r4, lr} adds r4, r0, #0 movs r1, #2 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames adds r0, r4, #0 adds r0, #0x5a ldrb r1, [r0] diff --git a/include/entity.h b/include/entity.h index ef1f6303..b3121fd3 100644 --- a/include/entity.h +++ b/include/entity.h @@ -59,7 +59,13 @@ typedef struct Entity { /* */ u8 b2 : 2; //0x10 /* */ u8 b3 : 2; //0x40 /* */ } PACKED spriteRendering; - /*0x1a*/ u8 palette; + /*0x1a*/ union { + /* */ u8 raw; + /* */ struct { + /* */ u8 b0 : 4; + /* */ u8 b4 : 4; + /* */ } PACKED b; + /* */} PACKED palette; /*0x1b*/ struct { /* */ u8 b0 : 4; /* */ u8 flipX : 2; //0x10 @@ -132,8 +138,8 @@ typedef struct Entity { /*0x78*/ union SplitHWord field_0x78; /*0x7a*/ u16 field_0x7a; /*0x7c*/ union SplitWord field_0x7c; - /*0x80*/ u16 field_0x80; - /*0x82*/ u16 field_0x82; + /*0x80*/ union SplitHWord field_0x80; + /*0x82*/ union SplitHWord field_0x82; /*0x84*/ union SplitHWord cutsceneBeh; /*0x86*/ u16 field_0x86; } Entity; diff --git a/include/functions.h b/include/functions.h index 1c316dea..352cc973 100644 --- a/include/functions.h +++ b/include/functions.h @@ -34,6 +34,11 @@ extern void EraseAllEntities(void); extern void SetTile(u32, u32, u32); extern void SetDirtTile(u32); extern void LoadRoomTileEntities(); //tba +extern Entity* CreateDeathFx(Entity*, u32, u32); +extern void UpdateAnimationVariableFrames(Entity*, u32); +extern void CopyPositionAndSpriteOffset(Entity*, Entity*); +extern u8* GetSpriteSubEntryOffsetDataPointer(u32, u32); +extern u32 LoadFixedGFX(Entity*, u32); // Unidentified extern void sub_0806ED78(Entity*); @@ -183,4 +188,14 @@ extern void sub_080A4398(void); extern void sub_0801E738(u32); extern void sub_080A70AC(void*); extern void sub_080A7114(u32); +extern void sub_08001242(void); +extern void sub_08003FC4(Entity*, u32); +extern u8 sub_080043E8(Entity*); +extern void sub_08001290(Entity*, u32); +extern void sub_08004488(u32); +extern void sub_08004596(Entity*, u32); +extern u32 sub_0807953C(void); +extern void sub_08077B2C(void); +extern void sub_080A29BC(Entity*); +extern void sub_080AE068(Entity*); #endif diff --git a/include/link.h b/include/link.h index 45acee75..ca6508a1 100644 --- a/include/link.h +++ b/include/link.h @@ -94,7 +94,7 @@ extern Entity gLinkEntity; extern u32 GetInventoryValue(u32); extern s32 ModHealth(s32); - +extern void ModRupees(s32); #endif // clang-format on \ No newline at end of file diff --git a/linker.ld b/linker.ld index 09c9c7a4..7714d9f2 100644 --- a/linker.ld +++ b/linker.ld @@ -345,7 +345,7 @@ SECTIONS { asm/likeLike.o(.text); asm/spearMoblin.o(.text); asm/businessScrub.o(.text); - asm/rupeeLike.o(.text); + src/enemy/rupeeLike.o(.text); asm/madderpillar.o(.text); asm/waterDrop.o(.text); asm/wallMaster.o(.text); @@ -385,6 +385,7 @@ SECTIONS { asm/flyingPot.o(.text); asm/gibdo.o(.text); asm/octorokGolden.o(.text); + src/enemy/tektiteGolden.o(.text); asm/tektiteGolden.o(.text); asm/ropeGolden.o(.text); asm/cloudPiranha.o(.text); diff --git a/src/enemy/bombPeahat.c b/src/enemy/bombPeahat.c index 3921737a..da782b85 100644 --- a/src/enemy/bombPeahat.c +++ b/src/enemy/bombPeahat.c @@ -44,7 +44,7 @@ void sub_0802A84C(Entity* this) { } void sub_0802A8AC(Entity *this) { - *((u8 *)&this->field_0x80 + 1) = 0; + this->field_0x80.HALF.HI = 0; if (this->entityType.form < 2) { InitializeAnimation(this, 0); } diff --git a/src/enemy/octorok.c b/src/enemy/octorok.c index ff699ec0..57fc25e3 100644 --- a/src/enemy/octorok.c +++ b/src/enemy/octorok.c @@ -11,7 +11,7 @@ extern void sub_0801ECFC(); extern u32 sub_0806F520(); extern void sub_0806F4E8(); extern void sub_0806F3E4(); -extern void InitializeAnimationAnimation(); +extern void UpdateAnimationVariableFrames(); extern void sub_0804A720(); extern u32 Random(); extern void sub_0801ED14(); @@ -75,7 +75,7 @@ void sub_0801EB7C(Entity* ent) { void sub_0801EB84(Entity* ent) { ent->flags = ent->flags & 127; - InitializeAnimationAnimation(ent, 2); + UpdateAnimationVariableFrames(ent, 2); } void nullsub_3() { diff --git a/src/enemy/rupeeLike.c b/src/enemy/rupeeLike.c new file mode 100644 index 00000000..5b6bd3e5 --- /dev/null +++ b/src/enemy/rupeeLike.c @@ -0,0 +1,281 @@ +#include "global.h" +#include "entity.h" +#include "enemy.h" +#include "functions.h" +#include "structures.h" +#include "link.h" + +extern void sub_080293DC(Entity*); +extern void sub_080296D8(Entity*); +extern void sub_08029770(Entity*); +extern void sub_080297F0(Entity*); +extern void sub_080296C8(Entity*); +extern void sub_0802969C(Entity*); + +extern void (*const gUnk_080CCC00[])(Entity*); +extern void (*const gUnk_080CCC18[])(Entity*); +extern void (*const gUnk_080CCC3C[])(Entity*); + +extern u8 gUnk_080CCC34[]; +extern u8 gUnk_080CCC47[]; +extern BoundingBox gUnk_080FD260; + +void RupeeLike(Entity* this) { + u32 uVar1; + + if (this->entityType.parameter == 0) { + uVar1 = sub_080043E8(this); + if (uVar1 != 0) { + if (this->action == 4) { + sub_080296D8(this); + } + sub_08001290(this, uVar1); + } else { + gUnk_080CCC00[GetNextFunction(this)](this); + SetChildOffset(this, 0, 1, -0x10); + } + } else { + sub_080293DC(this); + } +} + +void sub_08029300(Entity* this) { + gUnk_080CCC18[this->action](this); +} + +void sub_08029318(Entity* this) { + if (this->damageType == 0x8e) { + sub_08029770(this); + } else { + if (this->action == 4) { + sub_080296D8(this); + } + if (*(u8*)(*(u32*)&this->field_0x4c + 8) == 1) { + if (this->action == 2) { + InitializeAnimation(this, 0); + InitializeAnimation(this->attachedEntity, 4); + } + this->action = 4; + this->actionDelay = 0x3c; + this->field_0xf = 0; + this->field_0x82.HALF.HI = 0x41; + this->flags2 &= 0xfc; + this->field_0x80.HALF.LO = gLinkEntity.spritePriority.b1; + sub_08004488(0x104); + } else { + if (this->field_0x43 != 0) { + sub_0804A9FC(this, 0x1c); + } + } + } + sub_0804AA30(this, gUnk_080CCC00); +} + +void sub_080293B4(Entity* this) { + CreateDeathFx(this, 0xff, gUnk_080CCC34[this->cutsceneBeh.HALF.LO * 3 + this->entityType.form]); +} + +void nullsub_141() { +} + +void sub_080293DC(Entity* this) { + CopyPositionAndSpriteOffset(this->parent, this); + this->y.HALF.HI++; + this->height.HALF.HI--; + gUnk_080CCC3C[this->action](this); +} + +void sub_0802940C(Entity* this) { + Entity* ent; + + ent = CreateEnemy(0x17, this->entityType.form); + if (ent != NULL) { + sub_0804A720(this); + ent->parent = this; + ent->entityType.parameter = 1; + this->attachedEntity = ent; + this->field_0x80.HALF.HI = 0; + this->cutsceneBeh.HALF.LO = 0; + this->field_0x82.HALF.LO = this->palette.b.b0; + sub_080297F0(this); + } +} + +void sub_0802944C(Entity* this) { + sub_080296C8(this); + if ((this->field_0x80.HALF.HI != 0) && sub_08049FDC(this, 1)) { + sub_08029770(this); + } +} + +void sub_08029474(Entity* this) { + u32 bVar1; + + sub_080296C8(this); + if (this->frames.b.f3) { + this->action = 3; + this->actionDelay = 8; + bVar1 = GetFacingDirection(this, &gLinkEntity); + this->direction = bVar1; + this->animationState = (bVar1 << 0x18) >> 0x1c; + InitializeAnimation(this, this->animationState); + InitializeAnimation(this->attachedEntity, this->animationState + 4); + } else { + if (this->frames.all == 1) { + this->frames.all = 0; + this->flags |= 0x80; + } + } +} + +void sub_080294D4(Entity* this) { + if (sub_08049FDC(this, 1) != 0) { + if (--this->actionDelay == 0) { + this->actionDelay = 8; + sub_08004596(this, GetFacingDirection(this, &gLinkEntity)); + sub_0802969C(this); + } + sub_080AEF88(this); + sub_080296C8(this); + } else { + this->action = 6; + this->flags &= 0x7f; + InitializeAnimation(this, 3); + InitializeAnimation(this->attachedEntity, 7); + } +} + +extern s8 gUnk_080CCC44[]; + +void sub_0802953C(Entity* this) { + u8* pbVar3; + + sub_080296C8(this); + sub_080296C8(this); + if (sub_0807953C() != 0) { + this->field_0xf++; + } + if (this->actionDelay != 0) { + this->actionDelay--; + } + if (((this->field_0xf > 0x2d) || (gUnk_02002A40.stats.rupees == 0)) && (this->actionDelay == 0)) { + sub_080296D8(this); + } else { + sub_08077B2C(); + gLinkState.field_0x1a[0] |= 0x80; + PositionRelative(this, &gLinkEntity, 0, 0x10000); + pbVar3 = GetSpriteSubEntryOffsetDataPointer((u16)this->spriteIndex, this->frameIndex); + gLinkEntity.spriteOffsetX = pbVar3[0]; + gLinkEntity.spriteOffsetY = pbVar3[1] - 1; + gLinkEntity.spritePriority.b1 = 0; + if (--this->field_0x82.HALF.HI == 0) { + this->field_0x82.HALF.HI = 0x41; + if (gUnk_02002A40.stats.rupees != 0) { + ModRupees(gUnk_080CCC44[this->entityType.form]); + this->cutsceneBeh.HALF.LO = 1; + } + } + } +} + +void sub_08029610(Entity* this) { + if (--this->field_0xf == 0) { + this->action = 3; + this->actionDelay = 1; + } + sub_080296C8(this); +} + +void sub_08029630(Entity* this) { + sub_080296C8(this); + if ((this->frames.b.f3) != 0) { + this->field_0x80.HALF.HI = 1; + this->attachedEntity->spriteSettings.b.draw = FALSE; + sub_080297F0(this); + } +} + +void sub_08029660(Entity* this) { + u32 temp; + this->action = 1; + this->spriteIndex = 0xd1; + temp = gUnk_080CCC47[this->entityType.form]; + this->palette.b.b0 = temp; +} + +void sub_08029688(Entity* this) { + if (this->parent->field_0x4 == NULL) { + DeleteEntity(this); + } +} + +void sub_0802969C(Entity* this) { + u32 bVar1; + + if ((this->direction & 0xf) != 0) { + + bVar1 = this->direction >> 4; + if (bVar1 != this->animationState) { + this->animationState = bVar1; + InitializeAnimation(this, bVar1); + InitializeAnimation(this->attachedEntity, bVar1 + 4); + } + } +} + +void sub_080296C8(Entity* this) { + GetNextFrame(this); + GetNextFrame(this->attachedEntity); +} + +void sub_080296D8(Entity* this) { + gLinkState.jumpStatus = 0x41; + gLinkState.flags.all &= 0xffffffef; + gLinkEntity.flags |= 0x80; + gLinkEntity.field_0x20 = 0x18000; + gLinkEntity.hurtBlinkTime = 0xa6; + gLinkEntity.height.HALF.HI = -2; + gLinkEntity.direction = gLinkEntity.animationState << 2; + gLinkEntity.spritePriority.b1 = this->field_0x80.HALF.LO; + gLinkEntity.spriteOffsetY = 0; + gLinkEntity.nonPlanarMovement = 0x140; + this->action = 5; + this->field_0xf = 0x3c; + this->flags2 |= 3; + if ((s8)this->hurtBlinkTime == 0) { + this->hurtBlinkTime = 0xf4; + } +} + +void sub_08029770(Entity* this) { + u32 temp; + if (LoadFixedGFX(this, 0x73) != 0) { + this->action = 2; + this->flags = this->flags & 0x7f; + this->spriteIndex = 0xd1; + this->spritePriority.b1 = 3; + temp = this->field_0x82.HALF.LO; + this->palette.b.b0 = temp; + this->damageType = 0x8d; + this->boundingBox = &gUnk_080FD260; + InitializeAnimation(this, 2); + this->attachedEntity->spriteSettings.b.draw = TRUE; + InitializeAnimation(this->attachedEntity, 6); + sub_080A29BC(this); + } +} + +void sub_080297F0(Entity* this) { + u32 temp; + this->action = 1; + this->actionDelay = 0x78; + this->flags = this->flags | 0x80; + this->spriteSettings.b.draw = TRUE; + this->damageType = 0x8e; + sub_080AE068(this); + this->spriteIndex = 0x143; + temp = gUnk_080CCC47[this->entityType.form]; + this->palette.b.b0 = temp; + this->spriteVramOffset = 9; + InitializeAnimation(this, 0x54); +} \ No newline at end of file diff --git a/src/enemy/tektiteGolden.c b/src/enemy/tektiteGolden.c new file mode 100644 index 00000000..90483b71 --- /dev/null +++ b/src/enemy/tektiteGolden.c @@ -0,0 +1,108 @@ +#include "global.h" +#include "entity.h" +#include "enemy.h" +#include "functions.h" +#include "flags.h" + +extern void sub_08038168(Entity*); + +extern void (*const gUnk_080CF4A0)(Entity*); +extern void (*const gUnk_080CF4B8[])(Entity*); + +void TektiteGolden(Entity *this) +{ + EnemyFunctionHandler(this, &gUnk_080CF4A0); + SetChildOffset(this, 0, 1, -0x10); +} + +void sub_08037EE8(Entity* this) +{ + gUnk_080CF4B8[this->action](this); +} + +void sub_08037F00(Entity *this) +{ + u32 uVar1; + + if (this->field_0x43 != 0) { + sub_0804A9FC(this,0x1c); + } + sub_0804AA30(this, &gUnk_080CF4A0); + if (this->bitfield == 0x94) { + this->action = 1; + this->previousActionFlag = 0; + this->actionDelay = 0x14; + this->field_0xf = 0; + this->field_0x80.HALF.LO = 0; + uVar1 = this->height.HALF.HI; + if (uVar1 != 0) { + this->field_0x20 >>= 2; + } + else { + this->field_0x20 = uVar1; + } + + InitializeAnimation(this,0); + } +} + +void sub_08037F58(Entity *this) +{ + u32 uVar1; + + if ((this->field_0x3a & 2) == 0) { + SetGlobalFlag(this->entityType.parameter); + } + if ((this->entityType).form != 0) { + uVar1 = 0x59; + } + else { + uVar1 = 0x58; + } + CreateDeathFx(this, 0xff, uVar1); +} + +void sub_08037F84(Entity *this) +{ + sub_08001242(); + if (this->height.HALF.HI != 0) { + sub_08003FC4(this, 0x3000); + } +} + +void sub_08037FA0(Entity *this) +{ + + if (CheckGlobalFlag(this->entityType.parameter)) { + DeleteThisEntity(); + } + sub_0804A720(this); + this->action = 1; + this->previousActionFlag = 0; + this->actionDelay = (Random() & 0x1f) + 0x20; + this->field_0xf = 0; + this->field_0x80.HALF.LO = 0; + InitializeAnimation(this,0); +} + +void sub_08037Fe0(Entity *this) +{ + UpdateAnimationVariableFrames(this, 2); + if (this->actionDelay != 0) { + this->actionDelay--; + } + else if (this->field_0xf != 0) { + if ((this->frames.b.f3) != 0) { + this->action = 2; + this->actionDelay = 6; + this->field_0xf = 0; + this->field_0x20 = 0x38000; + sub_08038168(this); + InitializeAnimation(this, 2); + } + } + else if ((this->frames.b.f3) != 0) { + this->field_0xf = 0x40; + InitializeAnimation(this, 1); + } +} \ No newline at end of file diff --git a/src/item11.c b/src/item11.c index b464bdd9..e6ab76de 100644 --- a/src/item11.c +++ b/src/item11.c @@ -57,7 +57,7 @@ void sub_08018CBC(Entity *this) this->action = 2; this->spriteSettings.b.draw = 1; this->spriteIndex = 0xa6; - this->palette = 0x33; + this->palette.raw = 0x33; this->spriteVramOffset = 0; (this->entityType).form = gLinkState.field_0x1d[0] - 1; this->actionDelay = gUnk_080B3DE0[(this->entityType).form * 2]; diff --git a/src/npc/forestMinish.c b/src/npc/forestMinish.c index e83a40d1..8fb7da7b 100644 --- a/src/npc/forestMinish.c +++ b/src/npc/forestMinish.c @@ -90,9 +90,9 @@ void sub_080600F0(Entity* this) { u32 uVar1; u32 uVar2; - uVar2 = this->field_0x80; - if (this->field_0x80 < 8) { - if ((this->field_0x82 & 1) != 0) { + uVar2 = this->field_0x80.HWORD; + if (this->field_0x80.HWORD < 8) { + if ((this->field_0x82.HWORD & 1) != 0) { uVar2 = (uVar2 & 0xfc) + (this->field_0xf >> 1); } else { uVar2 = (uVar2 & 0xfc) + (this->animationState >> 1); @@ -102,7 +102,7 @@ void sub_080600F0(Entity* this) { if (uVar2 != this->animIndex) { InitAnimationForceUpdate(this, uVar2); } - if ((this->field_0x82 & 4) != 0) { + if ((this->field_0x82.HWORD & 4) != 0) { uVar1 = 2; } else { uVar1 = 1; diff --git a/src/npc/goron.c b/src/npc/goron.c index b65e97ea..0fa725e4 100644 --- a/src/npc/goron.c +++ b/src/npc/goron.c @@ -63,7 +63,7 @@ void sub_08069428(Entity* this, s32 offsetX, bool32 createFx65); void sub_080693D0(Entity* this) { sub_0807DD94(this, 0); if (this->animIndex == 8) { - u32 var0 = this->field_0x82 & 0xF; + u32 var0 = this->field_0x82.HWORD & 0xF; bool32 createFx65 = ((-var0) | var0) >> 0x1F; // = !var0 if (this->frames.all == 1) { @@ -121,7 +121,7 @@ void sub_080694EC(Entity* this) { anim = 2; if (!CheckKinstoneFused(47)) anim = 8; InitAnimationForceUpdate(this, anim); - this->field_0x80 = anim; + this->field_0x80.HWORD = anim; } void Goron_Fusion(Entity* this) { diff --git a/src/npc/smith.c b/src/npc/smith.c index 061d3c40..744bd8e2 100644 --- a/src/npc/smith.c +++ b/src/npc/smith.c @@ -157,8 +157,8 @@ void sub_080661BC(Entity *this) if (this->animIndex == 0xc) { UpdateAnimationSingleFrame(this); if ((this->frames.b.f3) != 0) { - this->field_0x80 = GetAnimationState(this) + 8; - InitAnimationForceUpdate(this, this->field_0x80); + this->field_0x80.HWORD = GetAnimationState(this) + 8; + InitAnimationForceUpdate(this, this->field_0x80.HWORD); } } else { diff --git a/src/npc/syrup.c b/src/npc/syrup.c index 341c60c8..da3f69e8 100644 --- a/src/npc/syrup.c +++ b/src/npc/syrup.c @@ -41,7 +41,7 @@ void sub_0806A1F8(Entity *this) void sub_0806A234(Entity *this) { sub_0807DD94(this, 0); - if ((this->field_0x82 & 4) != 0) { + if ((this->field_0x82.HWORD & 4) != 0) { if ((gUnk_030010A0 & 7) == 0) { sub_0806A26C(this); } diff --git a/src/npc/zelda.c b/src/npc/zelda.c index b70e3b9a..087e8fe8 100644 --- a/src/npc/zelda.c +++ b/src/npc/zelda.c @@ -109,27 +109,27 @@ void sub_08066DE4(Entity* ent) { void sub_08066E08(Entity* ent) { InitAnimationForceUpdate(ent, 0x50); - ent->field_0x80 = ent->animIndex; + ent->field_0x80.HWORD = ent->animIndex; } void sub_08066E20(Entity* ent) { InitAnimationForceUpdate(ent, 0x44); - ent->field_0x80 = ent->animIndex; + ent->field_0x80.HWORD = ent->animIndex; } void sub_08066E38(Entity* ent) { InitAnimationForceUpdate(ent, 0x48); - ent->field_0x80 = ent->animIndex; + ent->field_0x80.HWORD = ent->animIndex; } void sub_08066E50(Entity* ent) { InitAnimationForceUpdate(ent, 0x4C); - ent->field_0x80 = ent->animIndex; + ent->field_0x80.HWORD = ent->animIndex; } void sub_08066E68(Entity* ent) { InitAnimationForceUpdate(ent, 0x54); - ent->field_0x80 = ent->animIndex; + ent->field_0x80.HWORD = ent->animIndex; } void sub_08066E80(Entity* ent, u8* param_2) { @@ -172,7 +172,7 @@ void sub_08066E80(Entity* ent, u8* param_2) { return; } } - ent->field_0x80 = ent->animIndex; + ent->field_0x80.HWORD = ent->animIndex; gUnk_02033280[6] = 0; } diff --git a/src/object/object1C.c b/src/object/object1C.c index 16c20816..725f4223 100644 --- a/src/object/object1C.c +++ b/src/object/object1C.c @@ -11,7 +11,7 @@ void Object1C(Entity *this) if (this->action == 0) { this->action = 1; } - iVar1 = CheckRectOnScreen(this->field_0x80, this->field_0x82, 0x10, 0x10); + iVar1 = CheckRectOnScreen(this->field_0x80.HWORD, this->field_0x82.HWORD, 0x10, 0x10); if (iVar1 == 0) { this->parent->field_0x20 &= ~(1 << this->entityType.parameter); DeleteThisEntity(); diff --git a/src/object/well.c b/src/object/well.c index 9efcd750..07c1237b 100644 --- a/src/object/well.c +++ b/src/object/well.c @@ -19,14 +19,14 @@ void sub_080A0EB0(Entity* ent) { ent->action = 1; tilePos = COORD_TO_TILE(ent); - ent->field_0x80 = tilePos; - SetTile(16509, ent->field_0x80, 1); + ent->field_0x80.HWORD = tilePos; + SetTile(16509, ent->field_0x80.HWORD, 1); } void sub_080A0EF0(Entity* ent) { s32 tileIndex; - tileIndex = GetTileType(ent->field_0x80, 1); + tileIndex = GetTileType(ent->field_0x80.HWORD, 1); if (tileIndex != 0x407D) { sub_08078B48(); gLinkEntity.x.WORD = ent->x.WORD;