diff --git a/asm/non_matching/vram/sub_080AE218.inc b/asm/non_matching/vram/sub_080AE218.inc deleted file mode 100644 index 04329b4964..0000000000 --- a/asm/non_matching/vram/sub_080AE218.inc +++ /dev/null @@ -1,138 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - mov sl, r0 - mov r8, r1 - lsls r0, r1, #4 - movs r1, #0xa0 - lsls r1, r1, #1 - adds r0, r0, r1 - mov ip, r0 - mov r2, sl - lsls r0, r2, #4 - adds r3, r0, r1 - ldr r1, _080AE30C @ =gGFXSlots - lsls r0, r2, #1 - add r0, sl - lsls r0, r0, #2 - adds r0, r0, r1 - ldrb r0, [r0, #5] - lsls r0, r0, #4 - adds r7, r3, r0 - movs r4, #0 - ldr r6, _080AE310 @ =gUnk_020000C0 - mov sb, r6 - ldr r0, _080AE314 @ =gPlayerEntity - adds r2, r0, #0 - adds r2, #0x26 - adds r5, r0, #0 -_080AE254: - ldr r0, [r5, #4] - cmp r0, #0 - beq _080AE276 - ldrb r0, [r2] - cmp sl, r0 - bne _080AE264 - mov r1, r8 - strb r1, [r2] -_080AE264: - ldrh r0, [r2, #0x3a] - cmp r3, r0 - bhi _080AE276 - cmp r7, r0 - bls _080AE276 - subs r0, r0, r3 - mov r6, ip - adds r1, r0, r6 - strh r1, [r2, #0x3a] -_080AE276: - adds r2, #0x88 - adds r5, #0x88 - adds r4, #1 - cmp r4, #0x4f - bls _080AE254 - movs r0, #0 -_080AE282: - movs r4, #0 - adds r1, r0, #1 - mov r8, r1 - lsls r5, r0, #6 -_080AE28A: - lsls r0, r4, #4 - add r0, sb - adds r2, r5, r0 - ldrb r1, [r2] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _080AE2B4 - movs r0, #2 - ands r0, r1 - cmp r0, #0 - bne _080AE2B4 - ldrh r1, [r2, #0xa] - cmp r3, r1 - bhi _080AE2B4 - cmp r7, r1 - bls _080AE2B4 - subs r0, r1, r3 - mov r6, ip - adds r1, r0, r6 - strh r1, [r2, #0xa] -_080AE2B4: - adds r4, #1 - cmp r4, #3 - bls _080AE28A - mov r0, r8 - cmp r0, #0x2f - bls _080AE282 - movs r4, #0 - ldr r0, _080AE318 @ =0xFFFFFC00 - mov sl, r0 - ldr r5, _080AE31C @ =gOAMControls - adds r5, #0x24 - ldr r1, _080AE320 @ =0x000003FF - mov sb, r1 - movs r2, #1 - mov r8, r2 -_080AE2D2: - ldrh r2, [r5] - lsls r0, r2, #0x16 - lsrs r1, r0, #0x16 - cmp r3, r1 - bhi _080AE2F8 - cmp r7, r1 - bls _080AE2F8 - subs r0, r1, r3 - mov r6, ip - adds r1, r0, r6 - mov r0, sb - ands r1, r0 - mov r0, sl - ands r0, r2 - orrs r0, r1 - strh r0, [r5] - mov r2, r8 - ldr r1, _080AE31C @ =gOAMControls - strb r2, [r1] -_080AE2F8: - adds r5, #8 - adds r4, #1 - cmp r4, #0x7f - bls _080AE2D2 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080AE30C: .4byte gGFXSlots -_080AE310: .4byte gUnk_020000C0 -_080AE314: .4byte gPlayerEntity -_080AE318: .4byte 0xFFFFFC00 -_080AE31C: .4byte gOAMControls -_080AE320: .4byte 0x000003FF - .syntax divided diff --git a/src/vram.c b/src/vram.c index 1e8b04da68..ef9f4fbaa5 100644 --- a/src/vram.c +++ b/src/vram.c @@ -2,6 +2,7 @@ #include "common.h" #include "structures.h" #include "fileselect.h" +#include "new_player.h" extern u32 gFixedTypeGfxData[]; @@ -352,7 +353,54 @@ void CleanUpGFXSlots(void) { } // Swap gfx -ASM_FUNC("asm/non_matching/vram/sub_080AE218.inc", void sub_080AE218(u32 a, u32 b)) +void sub_080AE218(u32 param1, u32 param2) { + struct_gUnk_020000C0_1* psVar6; + u32 r0, r1, r3, r7, r12; + u32 index1, index2; + + r12 = (param2 << 4) + 0x140; + r3 = (param1 << 4) + 0x140; + r7 = r3 + ((u32)gGFXSlots.slots[param1].slotCount << 4); + + for (index1 = 0; index1 < 0x50; index1++) { + Entity* ent = &(&gPlayerEntity)[index1]; + if (ent->next != NULL) { + if (param1 == ent->spriteAnimation[0]) { + ent->spriteAnimation[0] = param2; + } + r0 = ent->spriteVramOffset; + if ((r3 <= r0) && (r7 > r0)) { + r0 = (r0 - r3); + r1 = r0 + r12; + ent->spriteVramOffset = r1; + } + } + } + + for (index2 = 0; index2 < ARRAY_COUNT(gUnk_020000C0); index2++) { + for (index1 = 0; index1 < 4; index1++) { + psVar6 = gUnk_020000C0[index2].unk_00 + index1; + if ((((*(u8*)&psVar6->unk_00) & 1) != 0) && (((*(u8*)&psVar6->unk_00) & 2) == 0)) { + r1 = psVar6->unk_08.HALF_U.HI; + if ((r3 <= r1) && (r7 > r1)) { + r0 = (r1 - r3); + r1 = r0 + r12; + psVar6->unk_08.HALF_U.HI = r1; + } + } + } + } + + for (index1 = 0; index1 < 0x80; index1++) { + r1 = gOAMControls.oam[index1].tileNum; + if ((r3 <= r1) && (r7 > r1)) { + r0 = (r1 - r3); + r1 = r0 + r12; + gOAMControls.oam[index1].tileNum = r1; + gOAMControls.field_0x0 = 1; + } + } +} void MoveGFXSlots(u32 srcIndex, u32 targetIndex) { s32 index;