summaryrefslogtreecommitdiff
path: root/src/script_menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/script_menu.c')
-rw-r--r--src/script_menu.c133
1 files changed, 132 insertions, 1 deletions
diff --git a/src/script_menu.c b/src/script_menu.c
index d351c3fa4..1010435cc 100644
--- a/src/script_menu.c
+++ b/src/script_menu.c
@@ -4,6 +4,8 @@
#include "palette.h"
#include "script.h"
#include "sound.h"
+#include "flag.h"
+#include "sprite.h"
struct MultichoiceListStruct
{
@@ -15,12 +17,24 @@ extern const struct MultichoiceListStruct gMultichoiceLists[];
extern u16 gScriptResult;
+extern void FreeResourcesAndDestroySprite(struct Sprite *sprite);
+extern u8 CreateMonSprite_PicBox(u16, s16, s16, u8);
+extern u8 sub_80B59AC(void);
+
+extern u8 gPCText_PlayersPC[];
+extern u8 gPCText_SomeonesPC[];
+extern u8 gPCText_HallOfFame[];
+extern u8 gPCText_LogOff[];
+extern u8 gPCText_LanettesPC[];
+extern u8 gPCText_WhichPCShouldBeAccessed[];
+
void DrawMultichoiceMenu(u8, u8, u8, struct MenuAction *list, u8, u8);
void sub_80B53B4(u8, u8, u8, struct MenuAction *list, u8);
void sub_80B52B4(u8);
void sub_80B5230(u8, u8, u8, u8, u8, u8);
void task_yes_no_maybe(u8);
void sub_80B5684(u8);
+void CreatePCMenu(void);
bool8 sub_80B5054(u8 left, u8 top, u8 var3, u8 var4)
{
@@ -244,7 +258,7 @@ bool8 sub_80B5578(u8 left, u8 top, u8 multichoiceId, u8 a4, u8 columnCount)
u8 taskId;
u8 width;
- gScriptResult = 255;
+ gScriptResult = 0xFF;
sub_807274C(left, top, gMultichoiceLists[multichoiceId].count, 0, gMultichoiceLists[multichoiceId].list, columnCount, 0);
@@ -298,3 +312,120 @@ void sub_80B5684(u8 taskId)
EnableBothScriptContexts();
}
}
+
+bool8 TryCreatePCMenu(void)
+{
+ if(FuncIsActiveTask(sub_80B52B4) == 1)
+ return FALSE;
+ else
+ {
+ gScriptResult = 0xFF;
+ CreatePCMenu();
+ return TRUE;
+ }
+}
+
+void CreatePCMenu(void)
+{
+ u16 playersPCWidth = GetStringWidthInTilesForScriptMenu(gPCText_PlayersPC);
+ u8 width;
+ u8 numChoices;
+
+ if(playersPCWidth > GetStringWidthInTilesForScriptMenu(gPCText_SomeonesPC))
+ width = playersPCWidth;
+ else
+ width = 8;
+
+ if(FlagGet(0x804)) // player has cleared game?
+ {
+ numChoices = 4;
+ MenuDrawTextWindow(0, 0, width + 2, 9);
+ MenuPrint(gPCText_HallOfFame, 1, 5);
+ MenuPrint(gPCText_LogOff, 1, 7);
+ }
+ else
+ {
+ numChoices = 3;
+ MenuDrawTextWindow(0, 0, width + 2, 7);
+ MenuPrint(gPCText_LogOff, 1, 5);
+ }
+
+ if(FlagGet(0x84B)) // player met lanette?
+ MenuPrint(gPCText_LanettesPC, 1, 1);
+ else
+ MenuPrint(gPCText_SomeonesPC, 1, 1);
+
+ MenuPrint(gPCText_PlayersPC, 1, 3);
+ InitMenu(0, 1, 1, numChoices, 0, width + 1);
+ sub_80B5230(0, 0, width + 2, 2 * numChoices + 1, 0, numChoices);
+}
+
+void sub_80B5838(void)
+{
+ MenuDisplayMessageBox();
+ MenuPrint(gPCText_WhichPCShouldBeAccessed, 2, 15);
+}
+
+void task_picbox(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch(task->data[0])
+ {
+ case 0:
+ task->data[0]++;
+ break;
+ case 1:
+ break;
+ case 2:
+ FreeResourcesAndDestroySprite(&gSprites[task->data[2]]);
+ task->data[0]++;
+ break;
+ case 3:
+ MenuZeroFillWindowRect(task->data[3], task->data[4], task->data[3] + 9, task->data[4] + 10);
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+bool8 sub_80B58C4(u16 var1, u8 var2, u8 var3)
+{
+ u8 taskId;
+ u8 var;
+
+ if(FindTaskIdByFunc(task_picbox) != 0xFF)
+ return FALSE;
+ else
+ {
+ MenuDrawTextWindow(var2, var3, var2 + 9, var3 + 10);
+ taskId = CreateTask(task_picbox, 0x50);
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = var1;
+ var = CreateMonSprite_PicBox(var1, var2 * 8 + 40, var3 * 8 + 40, 0);
+ gTasks[taskId].data[2] = var;
+ gTasks[taskId].data[3] = var2;
+ gTasks[taskId].data[4] = var3;
+ gSprites[var].callback = SpriteCallbackDummy;
+ gSprites[var].oam.priority = 0;
+ return TRUE;
+ }
+}
+
+void *picbox_close(void)
+{
+ u8 taskId = FindTaskIdByFunc(task_picbox);
+
+ if(taskId == 0xFF)
+ return NULL;
+
+ gTasks[taskId].data[0]++;
+ return (void *)sub_80B59AC;
+}
+
+bool8 sub_80B59AC(void)
+{
+ if(FindTaskIdByFunc(task_picbox) == 0xFF)
+ return TRUE;
+ else
+ return FALSE;
+}