mirror of https://github.com/zeldaret/tmc.git
Match last vram.c function. (#645)
* Nuke sub_080AE218.inc * Match last vram.c function * Minor coding blip
This commit is contained in:
parent
5cb7b79d6a
commit
dbdb121e88
|
@ -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
|
50
src/vram.c
50
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;
|
||||
|
|
Loading…
Reference in New Issue