summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKEKW555 <152369890+KEKW555@users.noreply.github.com>2023-12-10 06:24:37 +0530
committerGitHub <noreply@github.com>2023-12-09 16:54:37 -0800
commitdbdb121e88448d2d1a63c79c85e1c779785cffe5 (patch)
tree0488cce730ee2d16dcdc96ce23645e45b2e2aa93
parent5cb7b79d6ada242a8108a284a0b58b756f1101b1 (diff)
Match last vram.c function. (#645)
* Nuke sub_080AE218.inc * Match last vram.c function * Minor coding blip
-rw-r--r--asm/non_matching/vram/sub_080AE218.inc138
-rw-r--r--src/vram.c50
2 files changed, 49 insertions, 139 deletions
diff --git a/asm/non_matching/vram/sub_080AE218.inc b/asm/non_matching/vram/sub_080AE218.inc
deleted file mode 100644
index 04329b49..00000000
--- 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 1e8b04da..ef9f4fba 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;