summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2019-08-04 18:15:02 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2019-08-04 18:15:02 -0400
commit2dee42dbafd7083a3b45cf51062977c54f632a10 (patch)
tree06fe68e9ed0cbee0cb7a994ab43afe4d3f42a8ec
parentcd876292d126c339bfc31c717d5bec6fe1b63f80 (diff)
through sub_81CA474
-rw-r--r--asm/pokenav_unk_2.s127
-rw-r--r--src/pokenav_unk_2.c120
2 files changed, 63 insertions, 184 deletions
diff --git a/asm/pokenav_unk_2.s b/asm/pokenav_unk_2.s
index 9ed033295..d74a485a8 100644
--- a/asm/pokenav_unk_2.s
+++ b/asm/pokenav_unk_2.s
@@ -5,133 +5,6 @@
@ File centered around AllocSubstruct(2)
- thumb_func_start sub_81CA3B4
-sub_81CA3B4: @ 81CA3B4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r4, r0, 0
- movs r0, 0x2
- bl GetSubstructPtr
- adds r7, r0, 0
- movs r5, 0
- mov r8, r5
-_081CA3C8:
- ldr r2, [r4]
- ldrb r1, [r2, 0x1]
- movs r3, 0xD
- negs r3, r3
- adds r0, r3, 0
- ands r1, r0
- movs r0, 0x4
- orrs r1, r0
- strb r1, [r2, 0x1]
- ldr r2, [r4]
- ldrb r0, [r2, 0x1]
- movs r1, 0x3
- orrs r0, r1
- strb r0, [r2, 0x1]
- ldr r1, [r4]
- ldr r0, =sub_81CA4AC
- str r0, [r1, 0x1C]
- movs r6, 0x8
- strh r6, [r1, 0x2E]
- ldr r0, [r4]
- mov r1, r8
- strh r1, [r0, 0x30]
- ldr r0, [r4]
- strh r5, [r0, 0x3C]
- ldr r0, [r4]
- bl InitSpriteAffineAnim
- ldm r4!, {r0}
- movs r1, 0
- bl StartSpriteAffineAnim
- adds r5, 0x1
- cmp r5, 0x3
- ble _081CA3C8
- movs r0, 0x52
- movs r1, 0x10
- bl SetGpuReg
- ldr r0, =sub_81CA580
- movs r1, 0x3
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r6, [r1, 0x8]
- ldrb r0, [r7, 0xC]
- adds r0, 0x1
- strb r0, [r7, 0xC]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81CA3B4
-
- thumb_func_start sub_81CA448
-sub_81CA448: @ 81CA448
- push {r4-r6,lr}
- adds r5, r0, 0
- movs r0, 0x1
- ands r1, r0
- lsls r4, r1, 2
- movs r6, 0x5
- negs r6, r6
- movs r3, 0x3
-_081CA458:
- ldm r5!, {r0}
- adds r0, 0x3E
- ldrb r2, [r0]
- adds r1, r6, 0
- ands r1, r2
- orrs r1, r4
- strb r1, [r0]
- subs r3, 0x1
- cmp r3, 0
- bge _081CA458
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_81CA448
-
- thumb_func_start sub_81CA474
-sub_81CA474: @ 81CA474
- push {lr}
- adds r2, r0, 0
- ldrh r0, [r2, 0x2E]
- subs r0, 0x1
- strh r0, [r2, 0x2E]
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x1
- negs r1, r1
- cmp r0, r1
- beq _081CA49A
- ldrh r0, [r2, 0x30]
- ldrh r1, [r2, 0x32]
- adds r0, r1
- strh r0, [r2, 0x32]
- lsls r0, 16
- asrs r0, 20
- strh r0, [r2, 0x20]
- b _081CA4A2
-_081CA49A:
- ldrh r0, [r2, 0x3C]
- strh r0, [r2, 0x20]
- ldr r0, =SpriteCallbackDummy
- str r0, [r2, 0x1C]
-_081CA4A2:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81CA474
-
thumb_func_start sub_81CA4AC
sub_81CA4AC: @ 81CA4AC
push {r4,r5,lr}
diff --git a/src/pokenav_unk_2.c b/src/pokenav_unk_2.c
index ae15eabfb..b428e20c6 100644
--- a/src/pokenav_unk_2.c
+++ b/src/pokenav_unk_2.c
@@ -2,6 +2,7 @@
#include "alloc.h"
#include "decompress.h"
#include "bg.h"
+#include "gpu_regs.h"
#include "menu.h"
#include "window.h"
#include "pokenav.h"
@@ -52,10 +53,12 @@ void sub_81CA20C(void);
void sub_81CA278(void);
void sub_81CA35C(struct Sprite ** sprites, s32 a1, s32 a2, s32 a3);
void sub_81CA3B4(struct Sprite ** sprites);
-void sub_81CA448(struct Sprite ** sprites, s32 a1);
-void sub_81CA474(struct Sprite * sprite);
void sub_81CA2DC(void);
bool32 sub_81CA324(void);
+void sub_81CA448(struct Sprite ** sprites, bool32 a1);
+void sub_81CA474(struct Sprite * sprite);
+void sub_81CA4AC(struct Sprite * sprite);
+void sub_81CA580(u8 taskId);
void sub_81CA640(void);
void sub_81CA698(void);
void sub_81CA6E0(void);
@@ -852,10 +855,10 @@ void sub_81CA20C(void)
else
r2 = 0x8c;
sub_81CA35C(unk->field_02c[i], 0x100, r2, 0xC);
- sub_81CA448(unk->field_02c[i], 0);
+ sub_81CA448(unk->field_02c[i], FALSE);
}
else
- sub_81CA448(unk->field_02c[i], 1);
+ sub_81CA448(unk->field_02c[i], TRUE);
}
}
@@ -918,66 +921,69 @@ bool32 sub_81CA324(void)
return FALSE;
}
-#ifdef NONMATCHING
void sub_81CA35C(struct Sprite ** sprites, s32 a1, s32 a2, s32 a3)
{
s32 i;
for (i = 0; i < 4; i++)
{
- sprites[i]->pos1.x = a1;
- sprites[i]->data[0] = a3;
- sprites[i]->data[1] = 16 * (a2 - a1) / a3;
- sprites[i]->data[2] = 16 * a1;
- sprites[i]->data[7] = a2;
- sprites[i]->callback = sub_81CA474;
+ (*sprites)->pos1.x = a1;
+ (*sprites)->data[0] = a3;
+ (*sprites)->data[1] = 16 * (a2 - a1) / a3;
+ (*sprites)->data[2] = 16 * a1;
+ (*sprites)->data[7] = a2;
+ (*sprites)->callback = sub_81CA474;
+ sprites++;
}
}
-#else
-NAKED
-void sub_81CA35C(struct Sprite ** sprites, s32 a1, s32 a2, s32 a3)
+
+void sub_81CA3B4(struct Sprite ** sprites)
+{
+ s32 i;
+ struct Pokenav2Struct * unk = GetSubstructPtr(2);
+ u8 taskId;
+
+ for (i = 0; i < 4; i++)
+ {
+ (*sprites)->oam.objMode = ST_OAM_OBJ_BLEND;
+ (*sprites)->oam.affineMode = ST_OAM_AFFINE_DOUBLE;
+ (*sprites)->callback = sub_81CA4AC;
+ (*sprites)->data[0] = 8;
+ (*sprites)->data[1] = 0;
+ (*sprites)->data[7] = i;
+ InitSpriteAffineAnim(sprites[0]);
+ StartSpriteAffineAnim(sprites[0], 0);
+ sprites++;
+ }
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0x10, 0x00));
+ taskId = CreateTask(sub_81CA580, 3);
+ gTasks[taskId].data[0] = 8;
+ unk->field_00c++;
+}
+
+void sub_81CA448(struct Sprite ** sprites, bool32 a1)
{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tmov r7, r9\n"
- "\tmov r6, r8\n"
- "\tpush {r6,r7}\n"
- "\tadds r4, r0, 0\n"
- "\tadds r5, r1, 0\n"
- "\tmov r9, r2\n"
- "\tadds r6, r3, 0\n"
- "\tldr r0, =sub_81CA474\n"
- "\tmov r8, r0\n"
- "\tsubs r0, r2, r5\n"
- "\tlsls r0, 4\n"
- "\tadds r1, r6, 0\n"
- "\tbl __divsi3\n"
- "\tadds r3, r0, 0\n"
- "\tmovs r1, 0x3\n"
- "\tlsls r2, r5, 4\n"
- "_081CA380:\n"
- "\tldr r0, [r4]\n"
- "\tstrh r5, [r0, 0x20]\n"
- "\tldr r0, [r4]\n"
- "\tstrh r6, [r0, 0x2E]\n"
- "\tldr r0, [r4]\n"
- "\tstrh r3, [r0, 0x30]\n"
- "\tldr r0, [r4]\n"
- "\tstrh r2, [r0, 0x32]\n"
- "\tldr r0, [r4]\n"
- "\tmov r7, r9\n"
- "\tstrh r7, [r0, 0x3C]\n"
- "\tldm r4!, {r0}\n"
- "\tmov r7, r8\n"
- "\tstr r7, [r0, 0x1C]\n"
- "\tsubs r1, 0x1\n"
- "\tcmp r1, 0\n"
- "\tbge _081CA380\n"
- "\tpop {r3,r4}\n"
- "\tmov r8, r3\n"
- "\tmov r9, r4\n"
- "\tpop {r4-r7}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.pool");
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ (*sprites)->invisible = a1;
+ sprites++;
+ }
+}
+
+void sub_81CA474(struct Sprite * sprite)
+{
+ sprite->data[0]--;
+ if (sprite->data[0] != -1)
+ {
+ sprite->data[2] += sprite->data[1];
+ sprite->pos1.x = sprite->data[2] >> 4;
+ }
+ else
+ {
+ sprite->pos1.x = sprite->data[7];
+ sprite->callback = SpriteCallbackDummy;
+ }
}
-#endif //NONMATCHING