diff --git a/asm/code_08003FC4.s b/asm/code_08003FC4.s index 0fa902ed..025f50bd 100644 --- a/asm/code_08003FC4.s +++ b/asm/code_08003FC4.s @@ -414,18 +414,22 @@ _0800425C: pop {r4} bx lr - thumb_func_start InitializeAnimation + thumb_func_start InitializeAnimation @ r0 = Entity*, r1 = Frame* InitializeAnimation: @ 0x08004260 - movs r2, #0x58 + movs r2, #0x58 @ anim idx strb r1, [r0, r2] - ldrh r3, [r0, #0x12] - lsls r3, r3, #4 - ldr r2, _0800439C @ =gUnk_080029B4 - ldr r2, [r2, r3] - lsls r1, r1, #2 - ldr r1, [r2, r1] + + ldrh r3, [r0, #0x12] @ Sprite idx + lsls r3, r3, #4 @ *= 16 + + ldr r2, _0800439C @ =gSpritePtrs + + ldr r2, [r2, r3] @ Load AnimData + lsls r1, r1, #2 @ *= 4 + + ldr r1, [r2, r1] @ AnimData->??? str r1, [r0, #0x5c] - b _0800432A + b FrameZero thumb_func_start GetNextFrame GetNextFrame: @ 0x08004274 @@ -434,31 +438,43 @@ GetNextFrame: @ 0x08004274 non_word_aligned_thumb_func_start UpdateAnimationVariableFrames UpdateAnimationVariableFrames: @ 0x08004276 movs r3, #0x59 - ldrb r2, [r0, r3] + ldrb r2, [r0, r3] @ Decrease frame timer subs r2, r2, r1 - beq _0800432A - ble _08004284 + + beq FrameZero @ Frame timer is 0 + ble FrameNeg @ Frame timer is below 0 + strb r2, [r0, r3] + bx lr -_08004284: - ldr r1, [r0, #0x5c] + +FrameNeg: + ldr r1, [r0, #0x5c] @ Load frame data + _08004286: ldrb r3, [r1, #1] adds r2, r2, r3 - bgt _0800429C + + bgt _0800429C @ Frame idx greater (?) + ldrb r3, [r1, #3] adds r1, #4 - lsrs r3, r3, #8 + lsrs r3, r3, #8 @ Branch if != 0xFF + blo _08004286 + ldrb r3, [r1] lsls r3, r3, #2 subs r1, r1, r3 b _08004286 + _0800429C: str r1, [r0, #0x5c] + push {r2, lr} - bl _0800432A + bl FrameZero pop {r2, r3} + movs r1, #0x59 strb r2, [r0, r1] bx r3 @@ -479,27 +495,34 @@ UpdateAnimationSingleFrame: @ 0x080042B8 sub_080042BA: @ 0x080042BA push {lr} bl UpdateAnimationVariableFrames + _080042C0: pop {r1} mov lr, r1 + ldrb r1, [r0, #0x1e] ldrb r3, [r0, #0x1f] strb r1, [r0, #0x1f] + cmp r1, r3 beq _08004328 + ldrh r2, [r0, #0x12] thumb_func_start sub_080042D0 sub_080042D0: @ 0x080042D0 cmp r1, #0xff beq _08004328 + lsls r2, r2, #4 lsls r3, r1, #2 - ldr r1, _080043A0 @ =gUnk_080029B4 + ldr r1, _080043A0 @ =gSpritePtrs adds r1, r1, r2 ldr r2, [r1, #4] + cmp r2, #0 beq _08004328 + ldr r1, [r1, #8] adds r2, r2, r3 ldrb r3, [r2] @@ -538,31 +561,41 @@ _08004326: pop {r4, r5} _08004328: bx lr -_0800432A: - ldrb r3, [r0, #0x1e] - strb r3, [r0, #0x1f] + +FrameZero: @ r0 = Entity* + ldrb r3, [r0, #0x1e] @ Get frame idx + strb r3, [r0, #0x1f] @ Set it to last frame idx + ldr r1, [r0, #0x5c] - ldrb r3, [r1] + ldrb r3, [r1] @ Store new frame idx strb r3, [r0, #0x1e] + ldrb r3, [r1, #1] movs r2, #0x59 strb r3, [r0, r2] + ldrb r3, [r1, #2] movs r2, #0x5b strb r3, [r0, r2] + ldrb r3, [r1, #3] movs r2, #0x5a strb r3, [r0, r2] + adds r1, #4 lsrs r3, r3, #8 + blo _08004352 + ldrb r3, [r1] lsls r3, r3, #2 subs r1, r1, r3 + _08004352: str r1, [r0, #0x5c] bx lr .align 2, 0 + _08004358: .4byte gUnk_081326EC _0800435C: .4byte gUnk_02024048 _08004360: .4byte gUnk_02021F20 @@ -580,8 +613,8 @@ _0800438C: .4byte 0x0000EE00 _08004390: .4byte 0x00001FFF _08004394: .4byte gUnk_08000228 _08004398: .4byte 0x00004000 -_0800439C: .4byte gUnk_080029B4 -_080043A0: .4byte gUnk_080029B4 +_0800439C: .4byte gSpritePtrs +_080043A0: .4byte gSpritePtrs _080043A4: .4byte gUnk_02024494 thumb_func_start sub_080043A8 @@ -589,8 +622,8 @@ sub_080043A8: @ 0x080043A8 movs r1, #0xb b _080043B6 - thumb_func_start sub_080043AC -sub_080043AC: @ 0x080043AC + thumb_func_start CreateChestSpawner +CreateChestSpawner: @ 0x080043AC movs r1, #0xc b _080043B6 @@ -599,31 +632,42 @@ sub_080043B0: @ 0x080043AC movs r1, #0x52 b _080043B6 - thumb_func_start sub_080043B4 -sub_080043B4: @ 0x080043B4 + thumb_func_start CreateItemOnGround +CreateItemOnGround: @ 0x080043B4 movs r1, #0 + _080043B6: push {r4, lr} adds r4, r0, #0 movs r0, #0xf movs r2, #0 bl CreateObject + cmp r0, #0 - beq _080043E0 + beq _080043E0 @ Branch if entity could not be created + movs r1, #0x48 - ldr r1, [r4, r1] + ldr r1, [r4, r1] @ Unused? + ldrh r3, [r4, #0x2e] strh r3, [r0, #0x2e] + ldrh r3, [r4, #0x32] strh r3, [r0, #0x32] + ldrh r3, [r4, #0x36] strh r3, [r0, #0x36] + ldrb r3, [r4, #8] - cmp r3, #3 + + cmp r3, #3 @ Is the spawner an enemy? bne _080043E0 + movs r1, #1 - strb r1, [r0, #0xb] + strb r1, [r0, #0xb] @ Set base parameter + _080043E0: adds r0, r4, #0 bl DeleteEntity + pop {r4, pc} diff --git a/asm/code_080041E8.s b/asm/code_080041E8.s deleted file mode 100644 index c0d7605e..00000000 --- a/asm/code_080041E8.s +++ /dev/null @@ -1,295 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_080041E8 -sub_080041E8: @ 0x080041E8 - subs r0, r0, r2 - subs r1, r1, r3 - - thumb_func_start sub_080041EC -sub_080041EC: @ 0x080041EC - adds r2, r0, #0 - muls r0, r2, r0 - adds r3, r1, #0 - muls r1, r3, r1 - push {lr} - adds r0, r0, r1 - lsls r0, r0, #8 - bl Sqrt - pop {r3} - bx r3 - - non_word_aligned_thumb_func_start sub_08004202 -sub_08004202: @ 0x08004202 - push {r1, lr} - ldrb r1, [r0, #0x14] - bl sub_08004212 - pop {r0} - str r1, [r0] - adds r0, r2, #0 - pop {pc} - - non_word_aligned_thumb_func_start sub_08004212 -sub_08004212: @ 0x08004212 - push {r4} - adds r4, r1, #0 - movs r3, #3 - tst r4, r3 - beq _08004226 - movs r3, #2 - lsrs r4, r4, #3 - blo _08004224 - rsbs r3, r3, #0 -_08004224: - adds r2, r2, r3 -_08004226: - adds r4, r1, #0 - movs r3, #3 - ands r4, r3 - cmp r4, #2 - beq _0800423C - movs r3, #0x80 - adds r1, #1 - lsrs r1, r1, #3 - bhs _0800423A - rsbs r3, r3, #0 -_0800423A: - adds r2, r2, r3 -_0800423C: - ldr r3, _08004390 @ =0x00001FFF - ands r2, r3 - movs r4, #0x38 - ldrb r4, [r0, r4] - lsls r4, r4, #3 - ldr r3, _08004394 @ =gUnk_08000228 - adds r3, r3, r4 - ldr r4, [r3] - ldrh r1, [r4, r2] - ldr r4, _08004398 @ =0x00004000 - tst r1, r4 - bne _0800425C - lsls r1, r1, #0x11 - lsrs r1, r1, #0x10 - ldr r4, [r3, #4] - ldrh r1, [r4, r1] -_0800425C: - pop {r4} - bx lr - - thumb_func_start InitializeAnimation -InitializeAnimation: @ 0x08004260 - movs r2, #0x58 - strb r1, [r0, r2] - ldrh r3, [r0, #0x12] - lsls r3, r3, #4 - ldr r2, _0800439C @ =gUnk_080029B4 - ldr r2, [r2, r3] - lsls r1, r1, #2 - ldr r1, [r2, r1] - str r1, [r0, #0x5c] - b _0800432A - - thumb_func_start GetNextFrame -GetNextFrame: @ 0x08004274 - movs r1, #1 - - non_word_aligned_thumb_func_start UpdateAnimationVariableFrames -UpdateAnimationVariableFrames: @ 0x08004276 - movs r3, #0x59 - ldrb r2, [r0, r3] - subs r2, r2, r1 - beq _0800432A - ble _08004284 - strb r2, [r0, r3] - bx lr -_08004284: - ldr r1, [r0, #0x5c] -_08004286: - ldrb r3, [r1, #1] - adds r2, r2, r3 - bgt _0800429C - ldrb r3, [r1, #3] - adds r1, #4 - lsrs r3, r3, #8 - blo _08004286 - ldrb r3, [r1] - lsls r3, r3, #2 - subs r1, r1, r3 - b _08004286 -_0800429C: - str r1, [r0, #0x5c] - push {r2, lr} - bl _0800432A - pop {r2, r3} - movs r1, #0x59 - strb r2, [r0, r1] - bx r3 - - thumb_func_start InitAnimationForceUpdate -InitAnimationForceUpdate: @ 0x080042AC - push {lr} - bl InitializeAnimation - movs r2, #0xff - strb r2, [r0, #0x1f] - b _080042C0 - - thumb_func_start UpdateAnimationSingleFrame -UpdateAnimationSingleFrame: @ 0x080042B8 - movs r1, #1 - - non_word_aligned_thumb_func_start sub_080042BA -sub_080042BA: @ 0x080042BA - push {lr} - bl UpdateAnimationVariableFrames -_080042C0: - pop {r1} - mov lr, r1 - ldrb r1, [r0, #0x1e] - ldrb r3, [r0, #0x1f] - strb r1, [r0, #0x1f] - cmp r1, r3 - beq _08004328 - ldrh r2, [r0, #0x12] - - thumb_func_start sub_080042D0 -sub_080042D0: @ 0x080042D0 - cmp r1, #0xff - beq _08004328 - lsls r2, r2, #4 - lsls r3, r1, #2 - ldr r1, _080043A0 @ =gUnk_080029B4 - adds r1, r1, r2 - ldr r2, [r1, #4] - cmp r2, #0 - beq _08004328 - ldr r1, [r1, #8] - adds r2, r2, r3 - ldrb r3, [r2] - cmp r3, #0 - beq _08004328 - push {r4, r5} - movs r3, #0x26 - ldrb r3, [r0, r3] - movs r4, #0xc - muls r3, r4, r3 - ldr r4, _080043A4 @ =gUnk_02024494 - adds r4, r4, r3 - ldrb r3, [r4] - movs r5, #0xf - ands r3, r5 - cmp r3, #5 - blo _08004326 - ldrb r5, [r4, #6] - ldrb r3, [r2] - strb r3, [r4, #6] - subs r5, r5, r3 - ldrh r3, [r2, #2] - lsls r3, r3, #5 - adds r1, r1, r3 - ldr r2, [r4, #8] - str r1, [r4, #8] - subs r2, r2, r1 - orrs r5, r2 - beq _08004326 - movs r2, #0xf0 - ldrb r1, [r4] - bics r1, r2 - adds r1, #0x30 - strb r1, [r4] -_08004326: - pop {r4, r5} -_08004328: - bx lr -_0800432A: - ldrb r3, [r0, #0x1e] - strb r3, [r0, #0x1f] - ldr r1, [r0, #0x5c] - ldrb r3, [r1] - strb r3, [r0, #0x1e] - ldrb r3, [r1, #1] - movs r2, #0x59 - strb r3, [r0, r2] - ldrb r3, [r1, #2] - movs r2, #0x5b - strb r3, [r0, r2] - ldrb r3, [r1, #3] - movs r2, #0x5a - strb r3, [r0, r2] - adds r1, #4 - lsrs r3, r3, #8 - blo _08004352 - ldrb r3, [r1] - lsls r3, r3, #2 - subs r1, r1, r3 -_08004352: - str r1, [r0, #0x5c] - bx lr - .align 2, 0 -_08004358: .4byte gUnk_081326EC -_0800435C: .4byte gUnk_02024048 -_08004360: .4byte gUnk_02021F20 -_08004364: .4byte gUnk_02024048 -_08004368: .4byte gRoomControls -_0800436C: .4byte 0x0000016E -_08004370: .4byte 0x0000011E -_08004374: .4byte gUnk_03000BF6 -_08004378: .4byte gUnk_03000BF8 -_0800437C: .4byte 0x000003F0 -_08004380: .4byte gUnk_08000248 -_08004384: .4byte 0x000FFFFF -_08004388: .4byte 0x00080000 -_0800438C: .4byte 0x0000EE00 -_08004390: .4byte 0x00001FFF -_08004394: .4byte gUnk_08000228 -_08004398: .4byte 0x00004000 -_0800439C: .4byte gUnk_080029B4 -_080043A0: .4byte gUnk_080029B4 -_080043A4: .4byte gUnk_02024494 - - thumb_func_start sub_080043A8 -sub_080043A8: @ 0x080043A8 - movs r1, #0xb - b _080043B6 - - thumb_func_start sub_080043AC -sub_080043AC: @ 0x080043AC - movs r1, #0xc - b _080043B6 - - thumb_func_start sub_080043B0 -sub_080043B0: @ 0x080043AC - movs r1, #0x52 - b _080043B6 - - thumb_func_start sub_080043B4 -sub_080043B4: @ 0x080043B4 - movs r1, #0 -_080043B6: - push {r4, lr} - adds r4, r0, #0 - movs r0, #0xf - movs r2, #0 - bl CreateObject - cmp r0, #0 - beq _080043E0 - movs r1, #0x48 - ldr r1, [r4, r1] - ldrh r3, [r4, #0x2e] - strh r3, [r0, #0x2e] - ldrh r3, [r4, #0x32] - strh r3, [r0, #0x32] - ldrh r3, [r4, #0x36] - strh r3, [r0, #0x36] - ldrb r3, [r4, #8] - cmp r3, #3 - bne _080043E0 - movs r1, #1 - strb r1, [r0, #0xb] -_080043E0: - adds r0, r4, #0 - bl DeleteEntity - pop {r4, pc} diff --git a/asm/code_0805EC04.s b/asm/code_0805EC04.s index 56ae8e50..86ab0bed 100644 --- a/asm/code_0805EC04.s +++ b/asm/code_0805EC04.s @@ -4,56 +4,6 @@ .syntax unified .text - - thumb_func_start sub_0805EC04 -sub_0805EC04: @ 0x0805EC04 - push {r4, r5, r6, r7, lr} - adds r3, r0, #0 - movs r2, #1 - ldr r0, _0805EC4C @ =gUnk_03000000 - movs r5, #1 - movs r6, #0x3f - rsbs r6, r6, #0 - movs r7, #4 - rsbs r7, r7, #0 - adds r4, r0, #0 - adds r4, #8 -_0805EC1A: - ldr r0, _0805EC50 @ =0x00000426 - adds r1, r4, r0 - ldrb r0, [r1] - cmp r0, #0 - bne _0805EC54 - strb r5, [r1] - movs r0, #0x1f - ands r2, r0 - lsls r2, r2, #1 - ldrb r1, [r3, #0x1b] - adds r0, r6, #0 - ands r0, r1 - orrs r0, r2 - strb r0, [r3, #0x1b] - ldrb r2, [r3, #0x19] - lsls r1, r2, #0x1e - lsrs r1, r1, #0x1e - orrs r1, r5 - adds r0, r7, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, #0x19] - movs r0, #1 - b _0805EC5E - .align 2, 0 -_0805EC4C: .4byte gUnk_03000000 -_0805EC50: .4byte 0x00000426 -_0805EC54: - adds r4, #8 - adds r2, #1 - cmp r2, #0x1f - bls _0805EC1A - movs r0, #0 -_0805EC5E: - pop {r4, r5, r6, r7, pc} thumb_func_start sub_0805EC60 sub_0805EC60: @ 0x0805EC60 @@ -1877,7 +1827,7 @@ sub_0805FA04: @ 0x0805FA04 push {r4, r5, lr} movs r0, #1 bl sub_0801DA90 - ldr r0, _0805FA78 @ =gUnk_02034CB0 + ldr r0, _0805FA78 @ =gBG0Buffer movs r1, #0x80 lsls r1, r1, #4 bl _DmaZero @@ -1922,7 +1872,7 @@ sub_0805FA04: @ 0x0805FA04 bl sub_08050008 pop {r4, r5, pc} .align 2, 0 -_0805FA78: .4byte gUnk_02034CB0 +_0805FA78: .4byte gBG0Buffer _0805FA7C: .4byte gUnk_02001A40 _0805FA80: .4byte gScreen _0805FA84: .4byte 0x00001E0F diff --git a/linker.ld b/linker.ld index 0a1b0159..70dca2da 100644 --- a/linker.ld +++ b/linker.ld @@ -79,7 +79,7 @@ SECTIONS { . = 0x00021EE0; gUnk_02021EE0 = .; . = 0x00021F00; gUnk_02021F00 = .; . = 0x00021F20; gUnk_02021F20 = .; - . = 0x00021F30; gUnk_02021F30 = .; + . = 0x00021F30; gBG1Buffer = .; . = 0x00021F70; gUnk_02021F70 = .; . = 0x00022030; gUnk_02022030 = .; . = 0x00022130; gUnk_02022130 = .; @@ -126,7 +126,7 @@ SECTIONS { . = 0x000344A0; gUnk_020344A0 = .; . = 0x000344B0; gUnk_020344B0 = .; . = 0x000344F0; gUnk_020344F0 = .; - . = 0x00034CB0; gUnk_02034CB0 = .; + . = 0x00034CB0; gBG0Buffer = .; . = 0x00034CB2; gUnk_02034CB2 = .; . = 0x00034CF0; gUnk_02034CF0 = .; . = 0x00034D30; gUnk_02034D30 = .; @@ -534,6 +534,7 @@ SECTIONS { asm/code_0805E3B0.o(.text); asm/getEmptyEntity.o(.text); src/entity.o(.text); + src/code_0805EC04.o(.text); asm/code_0805EC04.o(.text); /* npcs */ src/npc/gentari.o(.text); diff --git a/src/code_0805EC04.c b/src/code_0805EC04.c new file mode 100644 index 00000000..c722c57f --- /dev/null +++ b/src/code_0805EC04.c @@ -0,0 +1,18 @@ +#include "entity.h" + +extern u8 gUnk_03000000; + +bool32 sub_0805EC04(Entity* this) { + u32 i = 1; + u8* l = &gUnk_03000000; + u32 j = 1; + for (; i < 0x20; i++) { + if (l[(i * 8) + 0x426] == 0) { + l[(i * 8) + 0x426] = j; + this->spriteSet.b1 = i; + this->spriteSet.b0 |= j; + return TRUE; + } + } + return FALSE; +}