diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-05-02 16:19:25 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-05-02 16:19:25 -0400 |
commit | 518865d8d9d6d35ca40478570c51c33ca1477d6d (patch) | |
tree | 319485ea1fc78b0e364e601c518be99b769145a9 | |
parent | 9b40cdaeb98c85baaf2ac34004b1a1ab91a3e061 (diff) |
sub_81C9A10
-rw-r--r-- | asm/pokenav_unk_2.s | 251 | ||||
-rw-r--r-- | include/graphics.h | 5 | ||||
-rw-r--r-- | src/pokenav_unk_2.c | 128 |
3 files changed, 131 insertions, 253 deletions
diff --git a/asm/pokenav_unk_2.s b/asm/pokenav_unk_2.s index 1f1d1c2ad..109cdfe8f 100644 --- a/asm/pokenav_unk_2.s +++ b/asm/pokenav_unk_2.s @@ -5,257 +5,6 @@ @ File centered around AllocSubstruct(2) - thumb_func_start sub_81C9A10 -sub_81C9A10: @ 81C9A10 - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - movs r0, 0x2 - bl GetSubstructPtr - adds r5, r0, 0 - cmp r4, 0x9 - bls _081C9A24 - b _081C9C60 -_081C9A24: - lsls r0, r4, 2 - ldr r1, =_081C9A34 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_081C9A34: - .4byte _081C9A5C - .4byte _081C9AEC - .4byte _081C9B30 - .4byte _081C9B88 - .4byte _081C9B9E - .4byte _081C9BA4 - .4byte _081C9BB6 - .4byte _081C9BC0 - .4byte _081C9C0E - .4byte _081C9C4C -_081C9A5C: - ldr r0, =gUnknown_08620194 - movs r1, 0x3 - bl InitBgTemplates - ldr r1, =gPokenavMessageBox_Gfx - movs r0, 0 - str r0, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - adds r1, r5, 0 - adds r1, 0x8C - movs r0, 0x1 - bl SetBgTilemapBuffer - ldr r1, =gPokenavMessageBox_Tilemap - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBuffer - movs r0, 0x1 - bl CopyBgTilemapBufferToVram - ldr r0, =gPokenavMessageBox_Pal - movs r1, 0x10 - movs r2, 0x20 - bl CopyPaletteIntoBufferUnfaded - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgY -_081C9AD6: - movs r0, 0 - b _081C9C62 - .pool -_081C9AEC: - bl free_temp_tile_data_buffers_if_possible - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _081C9AFA - b _081C9C5C -_081C9AFA: - ldr r1, =gUnknown_0861FD6C - str r0, [sp] - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - ldr r1, =gUnknown_0861FFF4 - movs r0, 0x1 - str r0, [sp] - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - ldr r0, =gUnknown_0861FD4C - movs r1, 0x20 - movs r2, 0x20 - bl CopyPaletteIntoBufferUnfaded - b _081C9AD6 - .pool -_081C9B30: - bl free_temp_tile_data_buffers_if_possible - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _081C9B3E - b _081C9C5C -_081C9B3E: - ldr r1, =gUnknown_0861FC98 - str r0, [sp] - movs r0, 0x3 - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - ldr r1, =gUnknown_0861FCAC - movs r0, 0x1 - str r0, [sp] - movs r0, 0x3 - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - ldr r0, =gUnknown_0861FC78 - movs r1, 0x30 - movs r2, 0x20 - bl CopyPaletteIntoBufferUnfaded - bl sub_81C9894 - cmp r0, 0x3 - beq _081C9B76 - bl sub_81C9894 - cmp r0, 0x4 - bne _081C9AD6 -_081C9B76: - bl sub_81CA850 - b _081C9AD6 - .pool -_081C9B88: - bl free_temp_tile_data_buffers_if_possible - lsls r0, 24 - cmp r0, 0 - bne _081C9C5C - bl sub_81CA6E0 - bl sub_81CA7D4 -_081C9B9A: - movs r0, 0x1 - b _081C9C62 -_081C9B9E: - bl sub_81C9FC4 - b _081C9B9A -_081C9BA4: - bl sub_81CA714 - bl sub_81CA02C - bl sub_81CA640 - bl sub_81CA0C8 - b _081C9AD6 -_081C9BB6: - bl sub_81CA7C4 - cmp r0, 0 - bne _081C9C5C - b _081C9B9A -_081C9BC0: - movs r0, 0x1 - bl ShowBg - movs r0, 0x2 - bl ShowBg - movs r0, 0x3 - bl ShowBg - ldrb r0, [r5, 0xD] - cmp r0, 0 - beq _081C9BE0 - movs r0, 0x1 - bl sub_81C7AC0 - b _081C9BEC -_081C9BE0: - movs r0, 0x6E - bl PlaySE - movs r0, 0x3 - bl sub_81C7AC0 -_081C9BEC: - bl sub_81C9894 - cmp r0, 0x3 - beq _081C9BFE - cmp r0, 0x4 - bne _081C9C06 - movs r0, 0x7 - bl LoadLeftHeaderGfxForIndex -_081C9BFE: - movs r0, 0x1 - bl LoadLeftHeaderGfxForIndex - b _081C9AD6 -_081C9C06: - movs r0, 0 - bl LoadLeftHeaderGfxForIndex - b _081C9AD6 -_081C9C0E: - bl IsPaletteFadeActive - cmp r0, 0 - bne _081C9C5C - bl sub_81C9894 - cmp r0, 0x3 - beq _081C9C2C - cmp r0, 0x4 - bne _081C9C38 - movs r0, 0x7 - movs r1, 0 - movs r2, 0 - bl sub_81C7FA0 -_081C9C2C: - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl sub_81C7FA0 - b _081C9C42 -_081C9C38: - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl sub_81C7FA0 -_081C9C42: - bl sub_81CA20C - bl titlescreen_0 - b _081C9B9A -_081C9C4C: - bl sub_81CA324 - cmp r0, 0 - bne _081C9C5C - bl sub_81C8010 - cmp r0, 0 - beq _081C9C60 -_081C9C5C: - movs r0, 0x2 - b _081C9C62 -_081C9C60: - movs r0, 0x4 -_081C9C62: - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_81C9A10 - thumb_func_start sub_81C9C6C sub_81C9C6C: @ 81C9C6C push {lr} diff --git a/include/graphics.h b/include/graphics.h index 4e558b508..9b7bc1e0e 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4941,4 +4941,9 @@ extern const u16 gPokenavConditionCancel_Pal[]; extern const u32 gUnknown_08DE34B8[]; extern const u16 gUnknown_08DE3398[]; +// Pokenav +extern const u32 gPokenavMessageBox_Gfx[]; +extern const u32 gPokenavMessageBox_Tilemap[]; +extern const u16 gPokenavMessageBox_Pal[]; + #endif //GUARD_GRAPHICS_H diff --git a/src/pokenav_unk_2.c b/src/pokenav_unk_2.c index f58d5977b..a799631c7 100644 --- a/src/pokenav_unk_2.c +++ b/src/pokenav_unk_2.c @@ -1,8 +1,12 @@ #include "global.h" #include "alloc.h" #include "bg.h" +#include "menu.h" #include "window.h" #include "pokenav.h" +#include "graphics.h" +#include "sound.h" +#include "constants/songs.h" // Match Call @@ -16,7 +20,8 @@ struct Pokenav2Struct u8 field_00b; u8 field_00c; u8 field_00d; - u8 filler_00e[0x87E]; + u8 filler_00e[0x7E]; + u8 field_08c[0x800]; }; struct Pokenav2Struct * sub_81C9958(void); @@ -30,8 +35,20 @@ u32 sub_81C9E58(int state); u32 sub_81C9EC8(int state); u32 sub_81C9EF8(int state); u32 sub_81C9F28(int state); -void sub_81CA7F4(void); +void sub_81C9FC4(void); void sub_81C9FEC(void); +void sub_81CA02C(void); +void sub_81CA0C8(void); +void sub_81CA20C(void); +bool32 sub_81CA324(void); +void sub_81CA640(void); +void sub_81CA6E0(void); +void sub_81CA714(void); +bool32 sub_81CA7C4(void); +void sub_81CA7D4(void); +void sub_81CA7F4(void); +void sub_81CA850(void); +void titlescreen_0(void); void sub_81CA994(void); const u16 gUnknown_0861FC78[] = INCBIN_U16("graphics/pokenav/bg.gbapal"); @@ -167,3 +184,110 @@ bool32 sub_81C99FC(void) return IsLoopedTaskActive(unk->loopedTaskId); } + +u32 sub_81C9A10(int state) +{ + struct Pokenav2Struct * unk = GetSubstructPtr(2); + + switch (state) + { + case 0: + InitBgTemplates(gUnknown_08620194, ARRAY_COUNT(gUnknown_08620194)); + decompress_and_copy_tile_data_to_vram(1, gPokenavMessageBox_Gfx, 0, 0, 0); + SetBgTilemapBuffer(1, unk->field_08c); + CopyToBgTilemapBuffer(1, gPokenavMessageBox_Tilemap, 0, 0); + CopyBgTilemapBufferToVram(1); + CopyPaletteIntoBufferUnfaded(gPokenavMessageBox_Pal, 0x10, 0x20); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + return 0; + case 1: + if (free_temp_tile_data_buffers_if_possible()) + return 2; + decompress_and_copy_tile_data_to_vram(2, gUnknown_0861FD6C, 0, 0, 0); + decompress_and_copy_tile_data_to_vram(2, gUnknown_0861FFF4, 0, 0, 1); + CopyPaletteIntoBufferUnfaded(gUnknown_0861FD4C, 0x20, 0x20); + return 0; + case 2: + if (free_temp_tile_data_buffers_if_possible()) + return 2; + decompress_and_copy_tile_data_to_vram(3, gUnknown_0861FC98, 0, 0, 0); + decompress_and_copy_tile_data_to_vram(3, gUnknown_0861FCAC, 0, 0, 1); + CopyPaletteIntoBufferUnfaded(gUnknown_0861FC78, 0x30, 0x20); + if (sub_81C9894() == 3 || sub_81C9894() == 4) + sub_81CA850(); + return 0; + case 3: + if (free_temp_tile_data_buffers_if_possible()) + return 2; + sub_81CA6E0(); + sub_81CA7D4(); + return 1; + case 4: + sub_81C9FC4(); + return 1; + case 5: + sub_81CA714(); + sub_81CA02C(); + sub_81CA640(); + sub_81CA0C8(); + return 0; + case 6: + if (sub_81CA7C4()) + return 2; + return 1; + case 7: + ShowBg(1); + ShowBg(2); + ShowBg(3); + if (unk->field_00d) + sub_81C7AC0(1); + else + { + PlaySE(SE_PN_ON); + sub_81C7AC0(3); + } + switch (sub_81C9894()) + { + case 4: + LoadLeftHeaderGfxForIndex(7); + // fallthrough + case 3: + LoadLeftHeaderGfxForIndex(1); + break; + default: + LoadLeftHeaderGfxForIndex(0); + break; + } + return 0; + case 8: + if (IsPaletteFadeActive()) + return 2; + switch (sub_81C9894()) + { + case 4: + sub_81C7FA0(7, FALSE, FALSE); + // fallthrough + case 3: + sub_81C7FA0(1, FALSE, FALSE); + break; + default: + sub_81C7FA0(0, FALSE, FALSE); + break; + } + sub_81CA20C(); + titlescreen_0(); + return 1; + case 9: + if (sub_81CA324()) + return 2; + if (sub_81C8010()) + return 2; + break; + } + return 4; +} |