Match sub_080AE324

This commit is contained in:
Tal Hayon 2022-08-04 15:09:40 +03:00
parent 76634df376
commit 9a293559eb
2 changed files with 15 additions and 54 deletions

View File

@ -1,50 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
adds r3, r1, #0
ldr r2, _080AE380 @ =gGFXSlots
lsls r1, r0, #1
adds r1, r1, r0
lsls r1, r1, #2
adds r5, r1, r2
ldrb r4, [r5, #5]
subs r4, #1
movs r0, #1
rsbs r0, r0, #0
cmp r4, r0
beq _080AE372
lsls r0, r3, #1
adds r0, r0, r3
lsls r0, r0, #2
adds r0, r0, r2
mov r8, r0
adds r0, r1, #4
adds r6, r0, r2
_080AE350:
mov r0, r8
adds r0, #4
adds r1, r5, #4
ldm r1!, {r2, r3, r7}
stm r0!, {r2, r3, r7}
adds r0, r6, #0
movs r1, #0xc
bl MemClear
adds r6, #0xc
adds r5, #0xc
movs r0, #0xc
add r8, r0
subs r4, #1
subs r0, #0xd
cmp r4, r0
bne _080AE350
_080AE372:
ldr r1, _080AE380 @ =gGFXSlots
movs r0, #1
strb r0, [r1, #3]
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7, pc}
.align 2, 0
_080AE380: .4byte gGFXSlots
.syntax divided

View File

@ -16,7 +16,7 @@ void SetGFXSlotStatus(GfxSlot*, u32);
u32 FindNextOccupiedGFXSlot(u32);
u32 FindFirstFreeGFXSlot(void);
void sub_080AE218(u32, u32);
void sub_080AE324(u32, u32);
void MoveGFXSlots(u32, u32);
void ResetPalettes(void) {
GfxSlot* slots;
@ -296,7 +296,7 @@ void CleanUpGFXSlots(void) {
firstFreeIndex = FindFirstFreeGFXSlot();
if (firstFreeIndex <= occupiedIndex) {
sub_080AE218(occupiedIndex, firstFreeIndex);
sub_080AE324(occupiedIndex, firstFreeIndex);
MoveGFXSlots(occupiedIndex, firstFreeIndex);
occupiedIndex = firstFreeIndex;
}
}
@ -306,8 +306,19 @@ void CleanUpGFXSlots(void) {
// Swap gfx
ASM_FUNC("asm/non_matching/vram/sub_080AE218.inc", void sub_080AE218(u32 a, u32 b))
// Swap palettes
ASM_FUNC("asm/non_matching/vram/sub_080AE324.inc", void sub_080AE324(u32 a, u32 b))
void MoveGFXSlots(u32 srcIndex, u32 targetIndex) {
s32 index;
u32 count;
count = gGFXSlots.slots[srcIndex].slotCount;
for (count = count - 1; count != -1; count--) {
gGFXSlots.slots[targetIndex] = gGFXSlots.slots[srcIndex];
MemClear(&gGFXSlots.slots[srcIndex], sizeof(GfxSlot));
srcIndex++;
targetIndex++;
}
gGFXSlots.unk_3 = 1;
}
u32 FindNextOccupiedGFXSlot(u32 index) {
for (; index < MAX_GFX_SLOTS - 1; index++) {