summaryrefslogtreecommitdiff
path: root/src/pokenav_before.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pokenav_before.c')
-rw-r--r--src/pokenav_before.c611
1 files changed, 611 insertions, 0 deletions
diff --git a/src/pokenav_before.c b/src/pokenav_before.c
new file mode 100644
index 000000000..d0efd2bbd
--- /dev/null
+++ b/src/pokenav_before.c
@@ -0,0 +1,611 @@
+#include "global.h"
+#include "main.h"
+#include "pokenav.h"
+#include "battle.h"
+#include "data2.h"
+#include "de_rom_8040FE0.h"
+#include "string_util.h"
+#include "rom4.h"
+#include "palette.h"
+#include "task.h"
+#include "unknown_task.h"
+#include "sound.h"
+#include "region_map.h"
+#include "songs.h"
+#include "flags.h"
+
+struct UnknownPokenav0 {
+ /* 0x0000 */ u8 fill0000[0x0300];
+ /* 0x0300 */ void (*var300)(void);
+ /* 0x0304 */ u16 var304;
+ /* 0x0306 */ u8 fill0306;
+ /* 0x0308 */ u32 var308;
+ /* 0x030C */ u8 fill030C[0x6a9f];
+ /* 0x6dab */ u8 var6dab;
+ /* 0x6dac */ u8 var6dac;
+ /* 0x6dad */ u8 var6dad;
+ /* 0x6dae */ u8 var6dae;
+ /* 0x6daf */ u8 fill6daf[0x3];
+ /* 0x6db2 */ u8 var6db2;
+ /* 0x6db3 */ u8 fill6db3[0x29];
+ /* 0x6ddc */ u8 var6ddc;
+ /* 0x6ddd */ u8 fill6ddd[0x198b];
+ /* 0x8768 */ u32 var8768;
+ /* 0x876C */ u8 fill876B[0x00bc];
+ /* 0x8828 */ u8 var8828;
+ /* 0x8829 */ u8 fill8829[0x07c0];
+ /* 0x8FE8 */ u8 var8fe8;
+ /* 0x8FE9 */ u8 fill8FE9[0x035B];
+ /* 0x9344 */ u8 var9344;
+ /* 0x9345 */ u8 fill9345[0x3b8b];
+ /* 0xced0 */ u32 varCED0;
+};
+
+struct UnknownPokenav8fff {
+ /* 0x8fff */ u8 var8fff[5];
+ /* 0x9004 */ u8 fill9004[0x6e90];
+ /* 0x6e95 */ u8 var6e95;
+};
+
+
+extern u8 ewram[];
+#define ewram0 (*(struct UnknownPokenav0*)(ewram + 0))
+#define ewram8fff (*(struct UnknownPokenav8fff*)(ewram + 0x8fff))
+extern u8 unk_2000000[];
+
+extern void sub_80F1A90();
+extern bool8 sub_80F1AC4();
+extern void sub_80F36F0();
+extern bool8 sub_80F3724();
+extern void sub_80EBC10();
+extern void sub_80EBDBC(void (*func)(void));
+extern void sub_80EBBE8();
+extern bool8 sub_80F26BC(void);
+extern void sub_80EBDD8();
+extern void sub_80EBD90();
+extern void sub_80EBD18();
+extern void sub_80F1A74();
+extern void sub_80F1FF0();
+extern void sub_80FB260();
+extern void sub_80EFE7C();
+extern void sub_80F5BF0();
+extern void sub_80F6F64();
+extern void _call_via_r0(void (*func)(void));
+extern void sub_80F19FC();
+
+void sub_80EBA5C() {
+ switch (gMain.state) {
+ default:
+ gMain.state = 0;
+ case 0:
+ ewram0.var6dac = is_c1_link_related_active();
+ if (!ewram0.var6dac) {
+ ewram0.var6dab = 0;
+ gMain.state++;
+ SetMainCallback2(&sub_80EBBE8);
+ break;
+ }
+ break;
+ case 1:
+ SetVBlankCallback(NULL);
+ break;
+ case 2:
+ ResetPaletteFade();
+ break;
+ case 3:
+ ResetSpriteData();
+ break;
+ case 4:
+ FreeAllSpritePalettes();
+ break;
+ case 5:
+ ResetTasks();
+ break;
+ case 6:
+ remove_some_task();
+ break;
+ case 7:
+ sub_80F1A90();
+ gMain.state++;
+ case 8:
+ if (sub_80F1AC4()) return;
+ break;
+ case 9:
+ sub_80F2688();
+ gMain.state++;
+
+ case 0xA:
+ if (sub_80F26BC()) return;
+ break;
+ case 0xB:
+ sub_80F36F0();
+ gMain.state++;
+ case 0xC:
+ if (sub_80F3724()) return;
+ break;
+ case 0xD:
+ sub_80EBC10();
+ sub_80EBDBC(&sub_80EBDD8);
+ break;
+ case 0xE:
+ ewram0.var6dab = 1;
+ PlaySE(SE_PN_ON);
+ SetMainCallback2(&sub_80EBD90);
+ SetVBlankCallback(&sub_80EBD18);
+ sub_80F1A74();
+ break;
+ }
+ gMain.state++;
+}
+
+void sub_80EBBE8() {
+ u8 var1;
+ if (!ewram0.var6dab) {
+ var1 = ewram0.var6dab;
+ do {
+ sub_80EBA5C();
+ var1 = ewram0.var6dab;
+ } while (!var1);
+ }
+}
+
+// Falla el acceso a 0x8fff
+#if 0
+
+u16 gKeyRepeatStartDelay;
+void sub_80EBCA8();
+
+//void sub_80EBC10() {
+// u16 i;
+// u16 *unk2;
+// gKeyRepeatStartDelay = 0x14;
+// unk_2000000[0x8828] = CalculatePlayerPartyCount();
+// unk_2000000[0x6ddc] = unk_2000000[0x9344] = 0;
+// *(u32 *)&unk_2000000[0x8768] = 0;
+// *(u32 *)&unk_2000000[0xced0] = 0;
+// for (i = 0; i <= 4; ++i) {
+// unk_2000000[0x8fff + i] = 0;
+// unk2 = (u16 *)unk_2000000;
+// unk2[i*2 + 0x4820] = 0x9B;
+// unk2[i*2 + 0x4821] = 0x5B;
+// }
+// unk_2000000[0x8fff + 0x6e95] = 0;
+// sub_80EBCA8();
+//}
+void sub_80EBC10() {
+ u16 i;
+ u16 *unk2;
+ gKeyRepeatStartDelay = 0x14;
+ ewram0.var8828 = CalculatePlayerPartyCount();
+ ewram0.var6ddc = 0;
+ ewram0.var9344 = 0;
+ ewram0.var8768 = 0;
+ ewram0.varCED0 = 0;
+ for (i = 0; i <= 4; ++i) {
+ ewram8fff.var8fff[i] = 0;
+ unk2 = (u16 *)ewram;
+ unk2[i*2 + 0x4820] = 0x9B;
+ unk2[i*2 + 0x4821] = 0x5B;
+ }
+ ewram8fff.var6e95 = 0;
+ sub_80EBCA8();
+}
+
+#else
+
+__attribute__((naked))
+void sub_80EBC10() {
+ asm_unified("push {r4-r7,lr}\n\
+ ldr r1, _080EBC7C @ =gKeyRepeatStartDelay\n\
+ movs r0, 0x14\n\
+ strh r0, [r1]\n\
+ bl CalculatePlayerPartyCount\n\
+ ldr r2, _080EBC80 @ =0x02000000\n\
+ ldr r1, _080EBC84 @ =0x00008828\n\
+ adds r3, r2, r1\n\
+ movs r1, 0\n\
+ strb r0, [r3]\n\
+ ldr r3, _080EBC88 @ =0x00006ddc\n\
+ adds r0, r2, r3\n\
+ strb r1, [r0]\n\
+ ldr r3, _080EBC8C @ =0x00009344\n\
+ adds r0, r2, r3\n\
+ strb r1, [r0]\n\
+ ldr r3, _080EBC90 @ =0x00008768\n\
+ adds r0, r2, r3\n\
+ str r1, [r0]\n\
+ ldr r3, _080EBC94 @ =0x0000ced0\n\
+ adds r0, r2, r3\n\
+ str r1, [r0]\n\
+ movs r3, 0\n\
+ ldr r0, _080EBC98 @ =0x00008fff\n\
+ adds r7, r2, r0\n\
+ mov r12, r2\n\
+ movs r6, 0\n\
+ ldr r5, _080EBC9C @ =0x00009040\n\
+ movs r4, 0x9B\n\
+_080EBC4C:\n\
+ adds r0, r3, r7\n\
+ strb r6, [r0]\n\
+ lsls r1, r3, 2\n\
+ adds r1, r2\n\
+ adds r0, r1, r5\n\
+ strh r4, [r0]\n\
+ ldr r0, _080EBCA0 @ =0x00009042\n\
+ adds r1, r0\n\
+ movs r0, 0x5B\n\
+ strh r0, [r1]\n\
+ adds r0, r3, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r3, r0, 16\n\
+ cmp r3, 0x4\n\
+ bls _080EBC4C\n\
+ ldr r1, _080EBCA4 @ =0x00006e95\n\
+ add r1, r12\n\
+ movs r0, 0\n\
+ strb r0, [r1]\n\
+ bl sub_80EBCA8\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_080EBC7C: .4byte gKeyRepeatStartDelay\n\
+_080EBC80: .4byte 0x02000000\n\
+_080EBC84: .4byte 0x00008828\n\
+_080EBC88: .4byte 0x00006ddc\n\
+_080EBC8C: .4byte 0x00009344\n\
+_080EBC90: .4byte 0x00008768\n\
+_080EBC94: .4byte 0x0000ced0\n\
+_080EBC98: .4byte 0x00008fff\n\
+_080EBC9C: .4byte 0x00009040\n\
+_080EBCA0: .4byte 0x00009042\n\
+_080EBCA4: .4byte 0x00006e95\n");
+}
+#endif
+
+void sub_80EBCA8() {
+ unk_2000000[0x6db2] = 1;
+ unk_2000000[0x6db3] = 2;
+ unk_2000000[0x6db4] = 3;
+ if (FlagGet(SYS_RIBBON_GET)) {
+ unk_2000000[0x6db5] = 4;
+ }
+ else {
+ unk_2000000[0x6db5] = 0;
+ }
+ unk_2000000[0x6db6] = 5;
+}
+
+void sub_80EBD18() {
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+ sub_80F1FF0();
+}
+
+void sub_80EBD30() {
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+ UpdateRegionMapVideoRegs();
+ sub_80EFE7C();
+}
+
+void sub_80EBD4C() {
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+ sub_80F5BF0();
+ sub_8089668();
+}
+
+void sub_80EBD68() {
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+ sub_80F6F64();
+}
+
+void sub_80EBD80() {
+ LoadOam();
+ ProcessSpriteCopyRequests();
+}
+
+void sub_80EBD90() {
+ _call_via_r0(ewram0.var300);
+ AnimateSprites();
+ BuildOamBuffer();
+ RunTasks();
+ UpdatePaletteFade();
+ sub_80F19FC();
+}
+
+void sub_80EBDBC(void (*func)(void)) {
+ ewram0.var300 = func;
+ ewram0.var304 = 0;
+}
+
+void sub_80F3FF0();
+bool8 sub_80F4024();
+void sub_80F2598();
+void sub_80EEE20();
+bool8 sub_80EEE54();
+void sub_80EEE08();
+void sub_80EF248();
+bool8 sub_80EF284();
+void sub_80F1B8C();
+bool8 sub_80F1BC8(u32 unk);
+void sub_80EED2C();
+void sub_80F1DF0();
+bool8 sub_80F1E50();
+void sub_80EF428();
+void sub_80EC268();
+
+void sub_80EBDD8() {
+ switch (ewram0.var304) {
+ case 0:
+ SetVBlankCallback(NULL);
+ REG_DISPCNT = 0;
+ ewram0.var6dad = ewram0.var6ddc;
+ ewram0.var6dae = 5;
+ ewram0.var304++;
+ break;
+ case 1:
+ sub_80F3FF0();
+ ewram0.var304++;
+ case 2:
+ if (sub_80F4024()) return;
+ ewram0.var304++;
+ break;
+ case 3:
+ sub_80F2598();
+ ewram0.var304++;
+ break;
+ case 4:
+ sub_80EEE20();
+ ewram0.var304++;
+ case 5:
+ if (sub_80EEE54()) return;
+ sub_80EEE08();
+ ewram0.var304++;
+ return;
+ case 6:
+ sub_80EF248(0);
+ ewram0.var304++;
+ case 7:
+ if (sub_80EF284(0)) return;
+ ewram0.var304++;
+ break;
+ case 8:
+ sub_80F1B8C(0);
+ ewram0.var304++;
+ case 9:
+ if (sub_80F1BC8(0)) return;
+ ewram0.var304++;
+ break;
+ case 10:
+ SetVBlankCallback(&sub_80EBD18);
+ ewram0.var304++;
+ break;
+ case 11:
+ BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
+ ewram0.var304++;
+ return;
+ case 12:
+ sub_80EED2C(0);
+ ewram0.var304++;
+ return;
+ case 13:
+ if (gPaletteFade.active) return;
+ ewram0.var304++;
+ return;
+ case 14:
+ sub_80F2C80(0);
+ ewram0.var304++;
+ case 15:
+ if (sub_80F2CBC(0)) return;
+ ewram0.var304++;
+ break;
+ case 16:
+ sub_80F1DF0();
+ ewram0.var304++;
+ return;
+ case 17:
+ if (!sub_80F1E50()) {
+ sub_80EF428(0, 0);
+ sub_80EBDBC(&sub_80EC268);
+ }
+ return;
+
+ }
+
+}
+
+bool8 sub_80EEF78();
+void sub_80EED1C();
+
+void sub_80EC00C() {
+ switch (ewram0.var304) {
+ case 0:
+ if (!sub_80EEF78()) {
+ SetVBlankCallback(&sub_80EBD80);
+ sub_80EED1C();
+ ewram0.var6dad = ewram0.var6ddc;
+ ewram0.var6dae = 5;
+ sub_80EEE08();
+ ewram0.var304++;
+ }
+ break;
+ case 1:
+ sub_80EF248(0);
+ ewram0.var304++;
+ case 2:
+ if (sub_80EF284(0)) return;
+ ewram0.var304++;
+ break;
+ case 3:
+ sub_80F1B8C(0);
+ ewram0.var304++;
+ case 4:
+ if (sub_80F1BC8(0)) return;
+ ewram0.var304++;
+ break;
+ case 5:
+ if (sub_8055870()) return;
+ ewram0.var304++;
+ break;
+ case 6:
+ BeginNormalPaletteFade(ewram0.var308, -1, 0x10, 0, 0);
+ SetVBlankCallback(&sub_80EBD18);
+ ewram0.var304++;
+ break;
+ case 7:
+ sub_80EED2C(0);
+ ewram0.var304++;
+ break;
+ case 8:
+ if (gPaletteFade.active) return;
+ ewram0.var304++;
+ return;
+ case 9:
+ sub_80F2598();
+ ewram0.var304++;
+ break;
+ case 10:
+ sub_80F2C80(0);
+ ewram0.var304++;
+ case 11:
+ if (sub_80F2CBC(0)) return;
+ ewram0.var304++;
+ return;
+ case 12:
+ sub_80F1DF0();
+ ewram0.var304++;
+ return;
+ case 13:
+ if (sub_80F1E50()) return;
+ sub_80EF428(0, ewram0.var6dad);
+ sub_80EBDBC(&sub_80EC268);
+ }
+}
+
+void sub_80F2D04(u32);
+void sub_80EE9C0(u32, u8, u32);
+bool8 sub_80EEA0C();
+
+void sub_80EC210() {
+ switch (ewram0.var304) {
+ case 0:
+ sub_80F2D04(1);
+ sub_80EE9C0(0, ewram0.var6ddc, 0);
+ ewram0.var304++;
+ break;
+ case 1:
+ if (sub_80EEA0C()) return;
+ sub_80EBDBC(&sub_80EC268);
+ }
+}
+
+#if 0
+bool8 sub_80EEC10();
+bool8 sub_80F6250();
+void sub_80EED9C();
+void sub_80F6208();
+void sub_80EDB88();
+void sub_80EC4A0();
+void sub_80EC81C();
+void sub_80F208C();
+void sub_80EE96C();
+
+void sub_80EC268() {
+ if (ewram0.var304 != 3) {
+ // bls -> bgt
+ if (ewram0.var304 > 3) {
+ if (ewram0.var304 != 6) {
+ if (ewram0.var304 > 6) {
+ if (ewram0.var304 != 0xFF) return;
+ if (sub_80EEC10() == 0) {
+ if (gMain.newKeys == (A_BUTTON | B_BUTTON)) return;
+ sub_80EF428(0, ewram0.var6dad);
+ return;
+ }
+ PlaySE(0x5);
+ sub_80EF428(0, ewram0.var6dad);
+ sub_80EED9C();
+ return;
+
+ }
+ if (ewram0.var304 != 4) return;
+ if (sub_8055870() != 0) return;
+ if (ewram0.var8fe8 == 0) {
+ PlaySE(0x20);
+ sub_80EF428(0, 5);
+ ewram0.var304 = 0xFF;
+ return;
+ }
+ PlaySE(0x5);
+ sub_80EBDBC(&sub_80EDB88);
+ return;
+ }
+ if (ewram0.var304 != 4) return;
+ if (sub_8055870()) return;
+ if (!ewram0.var8fe8) {
+ PlaySE(0x20);
+ sub_80EF428(0, 5);
+ ewram0.var304 = 0xFF;
+ return;
+ }
+ PlaySE(5);
+ sub_80EBDBC(&sub_80EDB88);
+ return;
+ }
+ if (ewram0.var304 != 1) {
+ if (ewram0.var304 < 1) {
+ if (ewram0.var304 == 0) {
+ if (sub_80EEC10() == 0) {
+ if (gMain.newKeys != A_BUTTON) {
+
+ }
+ ewram0.var6ddc = ewram0.var6dad;
+ // TODO arreglar esto
+ switch (ewram0.var6db2) {
+ case 1:
+ PlaySE(5);
+ sub_80EBDBC(&sub_80EC4A0);
+ return;
+ case 2:
+ PlaySE(5);
+ sub_80EBDBC(&sub_80EC81C);
+ return;
+ case 3:
+ ewram0.var304 = 6;
+ return;
+ case 4:
+ ewram0.var304 = 2;
+ return;
+ case 5:
+ ewram0.var304 = 1;
+ return;
+ }
+ }
+ PlaySE(0x5);
+ sub_80EF428(0, ewram0.var6dad);
+ sub_80EED9C();
+ return;
+ }
+ }
+ sub_80F6208();
+ ewram0.var304++;
+ if (sub_80F6250() != 0) return;
+ ewram0.var304++;
+ return;
+ }
+ sub_80F208C();
+ sub_80EBDBC(&sub_80EE96C);
+ return;
+ }
+ if (sub_80F6250() != 0) return;
+ ewram0.var304++;
+ return;
+}
+#endif