diff options
author | yenatch <yenatch@gmail.com> | 2017-06-25 00:38:27 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-25 00:38:27 -0400 |
commit | 799e7b49c6335ef10c7d1552fad78aac53f0dc09 (patch) | |
tree | ef7911f15d68e9b63fbb26313060105578642a4e | |
parent | 8dd12ad0e3faeee0e88b62bf486a764717b171fe (diff) | |
parent | 9cf949411eb6f1b2cc042a7c64b2a7f124da9c12 (diff) |
Merge pull request #342 from camthesaxman/decompile_unused_8124F94
decompile unused_8124F94
-rw-r--r-- | asm/unused_8124F94.s | 285 | ||||
-rwxr-xr-x | ld_script.txt | 2 | ||||
-rw-r--r-- | src/unused_8124F94.c | 126 |
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; +} |