diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/script_menu.c | 133 |
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; +} |