mirror of https://github.com/zeldaret/tmc.git
Match sub_080AE324
This commit is contained in:
parent
76634df376
commit
9a293559eb
|
|
@ -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
|
|
||||||
19
src/vram.c
19
src/vram.c
|
|
@ -16,7 +16,7 @@ void SetGFXSlotStatus(GfxSlot*, u32);
|
||||||
u32 FindNextOccupiedGFXSlot(u32);
|
u32 FindNextOccupiedGFXSlot(u32);
|
||||||
u32 FindFirstFreeGFXSlot(void);
|
u32 FindFirstFreeGFXSlot(void);
|
||||||
void sub_080AE218(u32, u32);
|
void sub_080AE218(u32, u32);
|
||||||
void sub_080AE324(u32, u32);
|
void MoveGFXSlots(u32, u32);
|
||||||
|
|
||||||
void ResetPalettes(void) {
|
void ResetPalettes(void) {
|
||||||
GfxSlot* slots;
|
GfxSlot* slots;
|
||||||
|
|
@ -296,7 +296,7 @@ void CleanUpGFXSlots(void) {
|
||||||
firstFreeIndex = FindFirstFreeGFXSlot();
|
firstFreeIndex = FindFirstFreeGFXSlot();
|
||||||
if (firstFreeIndex <= occupiedIndex) {
|
if (firstFreeIndex <= occupiedIndex) {
|
||||||
sub_080AE218(occupiedIndex, firstFreeIndex);
|
sub_080AE218(occupiedIndex, firstFreeIndex);
|
||||||
sub_080AE324(occupiedIndex, firstFreeIndex);
|
MoveGFXSlots(occupiedIndex, firstFreeIndex);
|
||||||
occupiedIndex = firstFreeIndex;
|
occupiedIndex = firstFreeIndex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -306,8 +306,19 @@ void CleanUpGFXSlots(void) {
|
||||||
// Swap gfx
|
// Swap gfx
|
||||||
ASM_FUNC("asm/non_matching/vram/sub_080AE218.inc", void sub_080AE218(u32 a, u32 b))
|
ASM_FUNC("asm/non_matching/vram/sub_080AE218.inc", void sub_080AE218(u32 a, u32 b))
|
||||||
|
|
||||||
// Swap palettes
|
void MoveGFXSlots(u32 srcIndex, u32 targetIndex) {
|
||||||
ASM_FUNC("asm/non_matching/vram/sub_080AE324.inc", void sub_080AE324(u32 a, u32 b))
|
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) {
|
u32 FindNextOccupiedGFXSlot(u32 index) {
|
||||||
for (; index < MAX_GFX_SLOTS - 1; index++) {
|
for (; index < MAX_GFX_SLOTS - 1; index++) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue