From edbf03101a64b05e9d20cdf53ec2ca4888a2effa Mon Sep 17 00:00:00 2001 From: theo3 Date: Mon, 23 Nov 2020 22:18:34 -0800 Subject: done --- src/code_0805EC04.c | 101 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 95 insertions(+), 6 deletions(-) (limited to 'src/code_0805EC04.c') diff --git a/src/code_0805EC04.c b/src/code_0805EC04.c index c722c57f..3033de51 100644 --- a/src/code_0805EC04.c +++ b/src/code_0805EC04.c @@ -1,18 +1,107 @@ #include "entity.h" +#include "player.h" -extern u8 gUnk_03000000; +typedef struct { + u16 unk0; + u16 unk2; + u16 unk4; + u8 unk6; + u8 unk7; +} VStruct; + +typedef struct { + u8 filler[0x420]; + VStruct unk[0x100]; +} UStruct; + +extern UStruct gUnk_03000000; bool32 sub_0805EC04(Entity* this) { u32 i = 1; - u8* l = &gUnk_03000000; + UStruct* temp = &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; + if (temp->unk[i].unk6 == 0) { + temp->unk[i].unk6 = j; + this->spriteOrientation.b1 = i; + this->spriteRendering.b0 |= j; return TRUE; } } return FALSE; } + +void sub_0805EC60(Entity* this) { + u8 temp; + UStruct* temp2; + + if (this->spriteRendering.b0 != 0) { + this->spriteRendering.b0 = 0; + temp = this->spriteOrientation.b1; + this->spriteOrientation.b1 = 0; + temp2 = &gUnk_03000000; + temp2->unk[temp].unk6 = 0; + } +} + +NAKED +bool32 sub_0805EC9C(Entity* ent, u32 param_2, u32 param_3, u32 param_4) { + asm_unified("\ + push {r4, r5, r6, r7, lr} \n\ + adds r4, r0, #0 \n\ + adds r5, r1, #0 \n\ + adds r6, r2, #0 \n\ + adds r7, r3, #0 \n\ + ldrb r0, [r4, #0x1b] \n\ + lsls r0, r0, #0x1a \n\ + lsrs r0, r0, #0x1b \n\ + cmp r0, #0 \n\ + bne _0805ECBE \n\ + adds r0, r4, #0 \n\ + bl sub_0805EC04 \n\ + cmp r0, #0 \n\ + bne _0805ECBE \n\ + movs r0, #0 \n\ + b _0805ECE0 \n\ +_0805ECBE: \n\ + ldr r1, _0805ECE4 @ =gUnk_03000000 \n\ + ldr r0, _0805ECE8 @ =0x00000427 \n\ + adds r2, r1, r0 \n\ + movs r0, #1 \n\ + strb r0, [r2] \n\ + ldrb r0, [r4, #0x1b] \n\ + lsls r0, r0, #0x1a \n\ + lsrs r0, r0, #0x1b \n\ + lsls r0, r0, #3 \n\ + movs r2, #0x84 \n\ + lsls r2, r2, #3 \n\ + adds r1, r1, r2 \n\ + adds r0, r0, r1 \n\ + strh r5, [r0] \n\ + strh r6, [r0, #2] \n\ + strh r7, [r0, #4] \n\ + movs r0, #1 \n\ +_0805ECE0: \n\ + pop {r4, r5, r6, r7, pc} \n\ + .align 2, 0 \n\ +_0805ECE4: .4byte gUnk_03000000 \n\ +_0805ECE8: .4byte 0x00000427 \n\ + "); +} + +void sub_0805ECEC(int param_1, u32 param_2, u32 param_3, u32 param_4) { + u16* temp; + + gUnk_03000000.unk[0].unk7 = 1; + + temp = &gUnk_03000000.unk[param_1].unk0; + temp[0] = param_2; + temp[1] = param_3; + temp[2] = param_4; +} + +void sub_0805ED14(u32 param_1) { + gPlayerState.field_0x9c[0] = param_1; + gPlayerState.field_0x98 = 0; + gPlayerState.field_0x9a = 0; +} \ No newline at end of file -- cgit v1.2.3