summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/unused_8124F94.s285
-rwxr-xr-xld_script.txt2
-rw-r--r--src/unused_8124F94.c126
3 files changed, 127 insertions, 286 deletions
diff --git a/asm/unused_8124F94.s b/asm/unused_8124F94.s
deleted file mode 100644
index 335cf4453..000000000
--- a/asm/unused_8124F94.s
+++ /dev/null
@@ -1,285 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start unref_sub_8124F94
-unref_sub_8124F94: @ 8124F94
- sub sp, 0x4
- movs r3, 0
- strb r3, [r0, 0x1]
- strb r3, [r0]
- strh r3, [r0, 0x2]
- movs r1, 0xC0
- lsls r1, 19
- str r1, [r0, 0x4]
- mov r1, sp
- strh r3, [r1]
- ldr r2, _08124FCC @ =0x040000d4
- str r1, [r2]
- adds r1, r0, 0
- adds r1, 0x8
- str r1, [r2, 0x4]
- ldr r1, _08124FD0 @ =0x81000040
- str r1, [r2, 0x8]
- ldr r1, [r2, 0x8]
- mov r1, sp
- strh r3, [r1]
- str r1, [r2]
- adds r0, 0x88
- str r0, [r2, 0x4]
- ldr r0, _08124FD4 @ =0x810000c0
- str r0, [r2, 0x8]
- ldr r0, [r2, 0x8]
- add sp, 0x4
- bx lr
- .align 2, 0
-_08124FCC: .4byte 0x040000d4
-_08124FD0: .4byte 0x81000040
-_08124FD4: .4byte 0x810000c0
- thumb_func_end unref_sub_8124F94
-
- thumb_func_start unref_sub_8124FD8
-unref_sub_8124FD8: @ 8124FD8
- push {r4-r7,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldr r7, _08124FE4 @ =0x040000d4
- b _0812508A
- .align 2, 0
-_08124FE4: .4byte 0x040000d4
-_08124FE8:
- ldrb r0, [r4, 0x1]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r0, r4, 0
- adds r0, 0x88
- adds r0, r1
- str r3, [r0]
- ldrb r1, [r4, 0x1]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r4, r0
- ldrb r1, [r5, 0x6]
- adds r0, 0x8E
- strb r1, [r0]
- ldrb r1, [r4, 0x1]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r4, r0
- ldrb r1, [r5, 0x4]
- adds r0, 0x8C
- strb r1, [r0]
- ldrb r1, [r4, 0x1]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r4, r0
- ldrb r1, [r5, 0x5]
- adds r0, 0x8D
- strb r1, [r0]
- ldrb r1, [r5, 0x4]
- ldrb r0, [r5, 0x5]
- adds r6, r1, 0
- muls r6, r0
- ldrh r2, [r4, 0x2]
- adds r1, r2, r6
- movs r0, 0x80
- lsls r0, 3
- cmp r1, r0
- ble _08125040
- movs r0, 0x2
- b _0812509C
-_08125040:
- ldrh r0, [r5, 0x8]
- cmp r0, 0
- bne _08125060
- str r3, [r7]
- ldrh r1, [r4, 0x2]
- lsls r1, 6
- ldr r0, [r4, 0x4]
- adds r0, r1
- str r0, [r7, 0x4]
- lsls r0, r6, 4
- movs r1, 0x80
- lsls r1, 24
- orrs r0, r1
- str r0, [r7, 0x8]
- ldr r0, [r7, 0x8]
- b _0812506C
-_08125060:
- lsls r0, r2, 6
- ldr r1, [r4, 0x4]
- adds r1, r0
- adds r0, r3, 0
- bl sub_800D238
-_0812506C:
- ldrb r1, [r4, 0x1]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r4, r0
- ldrh r1, [r4, 0x2]
- adds r0, 0x90
- strh r1, [r0]
- ldrh r0, [r4, 0x2]
- adds r0, r6, r0
- strh r0, [r4, 0x2]
- ldrb r0, [r4, 0x1]
- adds r0, 0x1
- strb r0, [r4, 0x1]
- adds r5, 0xC
-_0812508A:
- ldrb r0, [r4, 0x1]
- cmp r0, 0x1F
- bhi _0812509A
- ldr r3, [r5]
- cmp r3, 0
- bne _08124FE8
- movs r0, 0
- b _0812509C
-_0812509A:
- movs r0, 0x1
-_0812509C:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end unref_sub_8124FD8
-
- thumb_func_start unref_sub_81250A4
-unref_sub_81250A4: @ 81250A4
- push {r4,r5,lr}
- sub sp, 0x20
- adds r4, r0, 0
- adds r5, r1, 0
- b _081250FC
-_081250AE:
- ldrb r1, [r4]
- lsls r1, 3
- adds r0, r4, 0
- adds r0, 0x8
- adds r0, r1
- str r2, [r0]
- ldrb r0, [r4]
- lsls r0, 3
- adds r0, r4, r0
- ldrb r1, [r5, 0x4]
- strb r1, [r0, 0xC]
- ldrb r0, [r5, 0x5]
- cmp r0, 0
- bne _081250D8
- ldrb r1, [r4]
- lsls r1, 4
- adds r0, r2, 0
- movs r2, 0x20
- bl LoadPalette
- b _081250EC
-_081250D8:
- adds r0, r2, 0
- mov r1, sp
- bl sub_800D238
- ldrb r1, [r4]
- lsls r1, 4
- mov r0, sp
- movs r2, 0x20
- bl LoadPalette
-_081250EC:
- ldrb r0, [r4]
- lsls r1, r0, 3
- adds r1, r4, r1
- strb r0, [r1, 0xD]
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- adds r5, 0x8
-_081250FC:
- ldrb r0, [r4]
- cmp r0, 0xF
- bhi _0812510C
- ldr r2, [r5]
- cmp r2, 0
- bne _081250AE
- movs r0, 0
- b _0812510E
-_0812510C:
- movs r0, 0x1
-_0812510E:
- add sp, 0x20
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end unref_sub_81250A4
-
- thumb_func_start unref_sub_8125118
-unref_sub_8125118: @ 8125118
- push {r4-r7,lr}
- ldr r4, _0812514C @ =0xfffffe00
- add sp, r4
- adds r5, r0, 0
- adds r6, r1, 0
- movs r2, 0x80
- lsls r2, 2
- mov r0, sp
- movs r1, 0
- bl memset
- ldrb r7, [r6, 0x5]
- ldr r0, [r6]
- mov r1, sp
- bl sub_800D238
- ldrb r4, [r5]
- cmp r4, r7
- bcs _08125186
-_0812513E:
- ldrb r0, [r5]
- adds r0, r4
- cmp r0, 0xF
- ble _08125150
- movs r0, 0x1
- b _08125188
- .align 2, 0
-_0812514C: .4byte 0xfffffe00
-_08125150:
- lsls r2, r4, 3
- adds r0, r5, 0
- adds r0, 0x8
- adds r0, r2
- ldr r1, [r6]
- str r1, [r0]
- adds r2, r5, r2
- ldrb r0, [r6, 0x4]
- adds r0, r4, r0
- strb r0, [r2, 0xC]
- ldrb r0, [r5]
- strb r0, [r2, 0xD]
- lsls r0, r4, 5
- add r0, sp
- ldrb r1, [r5]
- lsls r1, 4
- movs r2, 0x20
- bl LoadPalette
- ldrb r0, [r5]
- adds r0, 0x1
- strb r0, [r5]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, r7
- bcc _0812513E
-_08125186:
- movs r0, 0
-_08125188:
- movs r3, 0x80
- lsls r3, 2
- add sp, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end unref_sub_8125118
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/ld_script.txt b/ld_script.txt
index efd2c1d35..503629849 100755
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -239,7 +239,7 @@ SECTIONS {
asm/cable_car.o(.text);
asm/roulette_util.o(.text);
asm/cable_car_util.o(.text);
- asm/unused_8124F94.o(.text);
+ src/unused_8124F94.o(.text);
src/save.o(.text);
src/mystery_event_script.o(.text);
asm/mystery_event_script.o(.text);
diff --git a/src/unused_8124F94.c b/src/unused_8124F94.c
new file mode 100644
index 000000000..93b569058
--- /dev/null
+++ b/src/unused_8124F94.c
@@ -0,0 +1,126 @@
+#include "global.h"
+#include "decompress.h"
+#include "palette.h"
+
+struct UnknownStruct2
+{
+ void *src;
+ u8 unk4;
+ u8 unk5;
+ u8 unk6;
+ u16 unk8;
+};
+
+struct UnknownStruct3
+{
+ u16 *paletteSrc;
+ u8 unk4;
+ u8 paletteCount;
+};
+
+struct UnknownStruct1
+{
+ u8 paletteNum;
+ u8 unk1;
+ u16 unk2;
+ u8 *dest;
+ struct UnknownStruct3 unk8[16];
+ struct UnknownStruct2 unk88[32];
+};
+
+void unref_sub_8124F94(struct UnknownStruct1 *a)
+{
+ a->unk1 = 0;
+ a->paletteNum = 0;
+ a->unk2 = 0;
+ a->dest = (void *)VRAM;
+ DmaFill16(3, 0, a->unk8, sizeof(a->unk8));
+ DmaFill16(3, 0, a->unk88, sizeof(a->unk88));
+}
+
+u8 unref_sub_8124FD8(struct UnknownStruct1 *a, const struct UnknownStruct2 *b)
+{
+ while (1)
+ {
+ s32 r6;
+ s32 temp;
+
+ // Couldn't get it to match any other way
+ if (a->unk1 < 32 && b->src == NULL)
+ return 0;
+ if (a->unk1 >= 32)
+ break;
+
+ a->unk88[a->unk1].src = b->src;
+ a->unk88[a->unk1].unk6 = b->unk6;
+ a->unk88[a->unk1].unk4 = b->unk4;
+ a->unk88[a->unk1].unk5 = b->unk5;
+ r6 = b->unk4 * b->unk5;
+ if (a->unk2 + r6 > 0x400)
+ return 2;
+ if (b->unk8 == 0)
+ {
+ DmaCopy16(3, b->src, a->dest + a->unk2 * 64, r6 * 32);
+ }
+ else
+ {
+ sub_800D238(b->src, a->dest + a->unk2 * 64);
+ }
+ a->unk88[a->unk1].unk8 = a->unk2;
+ temp = r6 + a->unk2;
+ a->unk2 = temp;
+ a->unk1++;
+ b++;
+ }
+ return 1;
+}
+
+u8 unref_sub_81250A4(struct UnknownStruct1 *a, struct UnknownStruct3 *b)
+{
+ while (1)
+ {
+ // Couldn't get it to match any other way
+ if (a->paletteNum < 16 && b->paletteSrc == NULL)
+ return 0;
+ if (a->paletteNum >= 16)
+ break;
+
+ a->unk8[a->paletteNum].paletteSrc = b->paletteSrc;
+ a->unk8[a->paletteNum].unk4 = b->unk4;
+ if (b->paletteCount == 0)
+ {
+ LoadPalette(b->paletteSrc, a->paletteNum * 16, 32);
+ }
+ else
+ {
+ u16 palette[16];
+
+ sub_800D238(b->paletteSrc, palette);
+ LoadPalette(palette, a->paletteNum * 16, 32);
+ }
+ a->unk8[a->paletteNum].paletteCount = a->paletteNum;
+ a->paletteNum = a->paletteNum + 1;
+ b++;
+ }
+ return 1;
+}
+
+u8 unref_sub_8125118(struct UnknownStruct1 *a, struct UnknownStruct3 *b)
+{
+ u16 palettes[16][16] = {0};
+ u8 r7 = b->paletteCount;
+ u8 i;
+
+ sub_800D238(b->paletteSrc, palettes);
+ for (i = a->paletteNum; i < r7; i++)
+ {
+ if (a->paletteNum + i >= 16)
+ return 1;
+ a->unk8[i].paletteSrc = b->paletteSrc;
+ a->unk8[i].unk4 = b->unk4 + i;
+ a->unk8[i].paletteCount = a->paletteNum;
+ LoadPalette(palettes[i], a->paletteNum * 16, sizeof(palettes[i]));
+ a->paletteNum++;
+ }
+ return 0;
+}