summaryrefslogtreecommitdiff
path: root/src/battle_pyramid.c
diff options
context:
space:
mode:
authorDizzyEggg <jajkodizzy@wp.pl>2018-08-25 20:02:09 +0200
committerDizzyEggg <jajkodizzy@wp.pl>2018-08-25 20:02:09 +0200
commit447e65860ce1235272004fe4714bd4fb1b4ca676 (patch)
tree68df75610e029d135bd4b7415cd616910ec31604 /src/battle_pyramid.c
parentedcf04b665a9fa13d086dd486c4fe7b1649a7bbf (diff)
parent60dff848aace7226f903eb6759273c4b52ea1813 (diff)
Merge branch 'master' into decompile_battle_frontier_1
Diffstat (limited to 'src/battle_pyramid.c')
-rw-r--r--src/battle_pyramid.c248
1 files changed, 248 insertions, 0 deletions
diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c
new file mode 100644
index 000000000..f9cc48a9a
--- /dev/null
+++ b/src/battle_pyramid.c
@@ -0,0 +1,248 @@
+#include "global.h"
+#include "main.h"
+#include "battle_controllers.h"
+#include "bg.h"
+#include "field_effect.h"
+#include "field_weather.h"
+#include "gpu_regs.h"
+#include "malloc.h"
+#include "menu.h"
+#include "menu_helpers.h"
+#include "overworld.h"
+#include "palette.h"
+#include "party_menu.h"
+#include "scanline_effect.h"
+#include "script.h"
+#include "task.h"
+#include "constants/rgb.h"
+
+EWRAM_DATA struct
+{
+ u32 unk0;
+ u8 filler4[0x804 - 0x4];
+ u8 unk804[11];
+ u8 unk80F[5];
+ u8 unk814;
+ u8 filler815;
+ s8 unk816;
+ u8 filler817[0x984 - 0x817];
+ u16 unk984;
+ u8 filler986[0x98C - 0x986];
+} *gUnknown_0203CF2C = NULL;
+EWRAM_DATA struct
+{
+ void (*callback)(void);
+ u8 unk4;
+ u16 unk6;
+ u16 unk8;
+} gUnknown_0203CF30 = {0};
+
+extern const struct BgTemplate gUnknown_0861F2B4[3];
+
+void sub_81C4F98(u8 a0, void (*callback)(void));
+void sub_81C4F44(u8 taskId);
+void sub_81C504C(void);
+bool8 sub_81C5078(void);
+void sub_81C51DC(void);
+bool8 sub_81C5238(void);
+void sub_81C5314(void);
+void sub_81C5674(void);
+void sub_81C56F8(void);
+void sub_81C5924(void);
+void sub_81C59BC(void);
+void sub_81C5A20(void);
+void sub_81C6BD8(void);
+void sub_81C6EF4(void);
+void sub_81C700C(void);
+
+void sub_81C4EEC(void)
+{
+ gUnknown_0203CF30.unk6 = 0;
+ gUnknown_0203CF30.unk8 = 0;
+}
+
+void sub_81C4EFC(void)
+{
+ sub_81C4F98(0, CB2_ReturnToFieldWithOpenMenu);
+}
+
+void sub_81C4F10(void)
+{
+ sub_81C4F98(1, SetCB2ToReshowScreenAfterMenu2);
+}
+
+void sub_81C4F24(void)
+{
+ ScriptContext2_Enable();
+ FadeScreen(1, 0);
+ CreateTask(sub_81C4F44, 10);
+}
+
+void sub_81C4F44(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ overworld_free_bg_tilemaps();
+ gFieldCallback2 = hm_add_c3_without_phase_2;
+ sub_81C4F98(3, CB2_ReturnToField);
+ DestroyTask(taskId);
+ }
+}
+
+void sub_81C4F84(void)
+{
+ sub_81C4F98(4, gUnknown_0203CF30.callback);
+}
+
+void sub_81C4F98(u8 a0, void (*callback)(void))
+{
+ gUnknown_0203CF2C = AllocZeroed(sizeof(*gUnknown_0203CF2C));
+
+ if (a0 != 4)
+ {
+ gUnknown_0203CF30.unk4 = a0;
+ }
+
+ if (callback != NULL)
+ {
+ gUnknown_0203CF30.callback = callback;
+ }
+
+ gUnknown_0203CF2C->unk0 = 0;
+ gUnknown_0203CF2C->unk814 = -1;
+ gUnknown_0203CF2C->unk816 = -1;
+
+ memset(gUnknown_0203CF2C->unk804, 0xFF, sizeof(gUnknown_0203CF2C->unk804));
+ memset(gUnknown_0203CF2C->unk80F, 0xFF, sizeof(gUnknown_0203CF2C->unk80F));
+
+ SetMainCallback2(sub_81C504C);
+}
+
+void sub_81C501C(void)
+{
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ do_scheduled_bg_tilemap_copies_to_vram();
+ UpdatePaletteFade();
+}
+
+void sub_81C5038(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+void sub_81C504C(void)
+{
+ while (sub_81221EC() != TRUE && sub_81C5078() != TRUE && sub_81221AC() != TRUE);
+}
+
+bool8 sub_81C5078(void)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ SetVBlankHBlankCallbacksToNull();
+ clear_scheduled_bg_copies_to_vram();
+ gMain.state++;
+ break;
+ case 1:
+ ScanlineEffect_Stop();
+ gMain.state++;
+ break;
+ case 2:
+ FreeAllSpritePalettes();
+ gMain.state++;
+ break;
+ case 3:
+ ResetPaletteFade();
+ gPaletteFade.bufferTransferDisabled = TRUE;
+ gMain.state++;
+ break;
+ case 4:
+ ResetSpriteData();
+ gMain.state++;
+ break;
+ case 5:
+ if (!sub_81221AC())
+ {
+ ResetTasks();
+ }
+ gMain.state++;
+ break;
+ case 6:
+ sub_81C51DC();
+ gUnknown_0203CF2C->unk984 = 0;
+ gMain.state++;
+ break;
+ case 7:
+ if (sub_81C5238())
+ {
+ gMain.state++;
+ }
+ break;
+ case 8:
+ sub_81C6BD8();
+ gMain.state++;
+ break;
+ case 9:
+ sub_81C5924();
+ sub_81C59BC();
+ sub_81C5A20();
+ gMain.state++;
+ break;
+ case 10:
+ sub_81C5314();
+ gMain.state++;
+ break;
+ case 11:
+ sub_81C56F8();
+ gMain.state++;
+ break;
+ case 12:
+ sub_81C6EF4();
+ gMain.state++;
+ break;
+ case 13:
+ sub_81C5674();
+ gMain.state++;
+ break;
+ case 14:
+ sub_81C700C();
+ gMain.state++;
+ break;
+ case 15:
+ BlendPalettes(0xFFFFFFFF, 0x10, 0);
+ gMain.state++;
+ break;
+ case 16:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
+ gPaletteFade.bufferTransferDisabled = FALSE;
+ gMain.state++;
+ break;
+ default:
+ SetVBlankCallback(sub_81C5038);
+ SetMainCallback2(sub_81C501C);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void sub_81C51DC(void)
+{
+ ResetVramOamAndBgCntRegs();
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, gUnknown_0861F2B4, ARRAY_COUNT(gUnknown_0861F2B4));
+ SetBgTilemapBuffer(2, gUnknown_0203CF2C->filler4);
+ ResetAllBgsCoordinates();
+ schedule_bg_copy_tilemap_to_vram(2);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_OBJ_ON);
+ ShowBg(0);
+ ShowBg(1);
+ ShowBg(2);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+}