From 1c92acbef7b707ec07fc10d3967ad9891005f227 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 13 Feb 2023 16:59:10 -0800 Subject: [PATCH] move some more menu items over and figure out sub_8035CF4 --- data/data_80E59A8.s | 355 ---------------------------------------- data/data_80E6F20.s | 233 ++++++++++++++++++++++++++ include/friend_rescue.h | 9 +- include/input.h | 16 +- include/menu.h | 21 +++ ld_script.txt | 2 + src/friend_rescue_1.c | 39 ++--- src/main_menu.c | 136 ++++++--------- src/save_menu.c | 129 +++++++++++++-- 9 files changed, 449 insertions(+), 491 deletions(-) create mode 100644 data/data_80E6F20.s diff --git a/data/data_80E59A8.s b/data/data_80E59A8.s index 01f63de40..0858fac51 100644 --- a/data/data_80E59A8.s +++ b/data/data_80E59A8.s @@ -520,358 +520,3 @@ gUnknown_80E6EAC: @ 80E6EAC .asciz "pksdir0" - .global gUnknown_80E6F20 -gUnknown_80E6F20: @ 80E6F20 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80E6F38 -gUnknown_80E6F38: @ 80E6F38 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x05, 0x00, 0x08, 0x00 - .byte 0x15, 0x00, 0x05, 0x00 - .byte 0x05, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80E6F50 -gUnknown_80E6F50: @ 80E6F50 - .4byte sUnknown_80E6FAC, 0x4 - .4byte sUnknown_80E6F90, 0x4 - .4byte sUnknown_80E6F70, 0x4 - .4byte 0, 0x2 - -sUnknown_80E6F70: - .string "#+Don~27t turn off the power.\0" - .align 2, 0 - -sUnknown_80E6F90: - .string "#+Saving your adventure!\0" - .align 2, 0 - -sUnknown_80E6FAC: - .string "#+#C2Beware!#R \0" - .align 2, 0 - - .global gUnknown_80E6FBC -gUnknown_80E6FBC: @ 80E6FBC - .4byte sUnknown_80E7008, 0x4 - .4byte sUnknown_80E6FF0, 0x4 - .4byte sUnknown_80E6FDC, 0x4 - .4byte 0, 0x2 - -sUnknown_80E6FDC: - .string "#+has been saved.\0" - .align 2, 0 - -sUnknown_80E6FF0: - .string "#+Your adventure so far\0" - .align 2, 0 - -sUnknown_80E7008: - .string "#+#CGSuccess!#R \0" - .align 2, 0 - - .global gUnknown_80E701C -gUnknown_80E701C: @ 80E701C - .4byte sUnknown_80E7078, 0x4 - .4byte sUnknown_80E7050, 0x4 - .4byte sUnknown_80E703C, 0x4 - .4byte 0, 0x2 - -sUnknown_80E703C: - .string "#+Please try again.\0" - .align 2, 0 - -sUnknown_80E7050: - .string "#+Your adventure could not be saved.\0" - .align 2, 0 - -sUnknown_80E7078: - .string "#+#C2Save failed!#R \0" - .align 2, 0 - - .global gUnknown_80E7090 -gUnknown_80E7090: @ 80E7090 - .4byte sUnknown_80E6FAC, 0x4 - .4byte DeletingAdventure_80E70B0, 0x4 - .4byte sUnknown_80E6F70, 0x4 - .4byte 0, 0x2 - -DeletingAdventure_80E70B0: - .string "{CENTER_ALIGN}Deleting your adventure!\0" - .align 2, 0 - - .global gUnknown_80E70CC -gUnknown_80E70CC: @ 80E70CC - .4byte sUnknown_80E7008, 0x4 - .4byte AdventureDeleted_80E70F0, 0x4 - .4byte Data_80E70EC, 0x4 - .4byte 0, 0x2 - -Data_80E70EC: - .string " \0" - .align 2, 0 - -AdventureDeleted_80E70F0: - .string "{CENTER_ALIGN}Your adventure has been deleted.\0" - .align 2, 0 - - .global gUnknown_80E7114 -gUnknown_80E7114: @ 80E7114 - .4byte sUnknown_80E715C, 0x4 - .4byte sUnknown_80E7134, 0x4 - .4byte sUnknown_80E703C, 0x4 - .4byte 0, 0x2 - -sUnknown_80E7134: - .string "#+Your adventure could not be deleted.\0" - .align 2, 0 - -sUnknown_80E715C: - .string "#+#C2Deletion failed!#R \0" - .align 2, 0 - - .global gUnknown_80E7178 -gUnknown_80E7178: @ 80E7178 - .string "#+The data could not be written.\n" - .string "#+Please turn off the power and remove\n" - .string "#+and reinsert the DS Card.\0" - .align 2, 0 - - .string "pksdir0\0" - - .global gUnknown_80E71E4 -gUnknown_80E71E4: @ 80E71E4 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80E71FC -gUnknown_80E71FC: @ 80E71FC - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x09, 0x00 - .byte 0x17, 0x00, 0x05, 0x00 - .byte 0x05, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80E7214 -gUnknown_80E7214: @ 80E7214 - .4byte Error_80E7268, 0xC - .4byte IncorrectPassword_80E7250, 0xC - .4byte CheckAgain_80E7234, 0xC - .4byte 0, 0xA - -CheckAgain_80E7234: - .string "{CENTER_ALIGN}Please check it again.\0" - .align 2, 0 - -IncorrectPassword_80E7250: - .string "{CENTER_ALIGN}Incorrect password!\0" - .align 2, 0 - -Error_80E7268: - .string "{CENTER_ALIGN}{COLOR_1 RED}Error!{END_COLOR_TEXT_1} \0" - .align 2, 0 - - .global gUnknown_80E7278 -gUnknown_80E7278: @ 80E7278 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x09, 0x00 - .byte 0x17, 0x00, 0x05, 0x00 - .byte 0x05, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80E7290 -gUnknown_80E7290: @ 80E7290 - .4byte Success_80E72D8, 0xC - .4byte PasswordAccept_80E72B4, 0xC - .4byte DATA_80E72B0, 0xC - .4byte 0, 0xA - -DATA_80E72B0: - .string " \0" - .align 2, 0 - -PasswordAccept_80E72B4: - .string "{CENTER_ALIGN}The password has been accepted.\0" - .align 2, 0 - -Success_80E72D8: - .string "{CENTER_ALIGN}{COLOR_1 LIGHT_BLUE_2}Success!{END_COLOR_TEXT_1} \0" - .align 2, 0 - - .global gUnknown_80E72EC -gUnknown_80E72EC: @ 80E72EC - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x09, 0x00 - .byte 0x17, 0x00, 0x05, 0x00 - .byte 0x05, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80E7304 -gUnknown_80E7304: @ 80E7304 - .4byte Error_80E7268, 0xC - .4byte NotSOSMail_80E7324, 0xC - .4byte CheckAgain_80E7234, 0xC - .4byte 0, 0xA - -NotSOSMail_80E7324: - .string "{CENTER_ALIGN}This is not an {COLOR_1 LIGHT_BLUE_2}SOS Mail{END_COLOR_TEXT_1}.\0" - .align 2, 0 - - .global gUnknown_80E7344 -gUnknown_80E7344: @ 80E7344 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x09, 0x00 - .byte 0x17, 0x00, 0x05, 0x00 - .byte 0x05, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80E735C -gUnknown_80E735C: @ 80E735C - .4byte Error_80E7268, 0xC - .4byte ReceiveSOSMail_80E737C, 0xC - .4byte CheckAgain_80E7234, 0xC - .4byte 0, 0xA - -ReceiveSOSMail_80E737C: - .string "{CENTER_ALIGN}This {COLOR_1 LIGHT_BLUE_2}SOS Mail{END_COLOR_TEXT_1} has been received already.\0" - .align 2, 0 - - .global gUnknown_80E73AC -gUnknown_80E73AC: @ 80E73AC - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x09, 0x00 - .byte 0x17, 0x00, 0x05, 0x00 - .byte 0x05, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80E73C4 -gUnknown_80E73C4: @ 80E73C4 - .4byte Error_80E7268, 0xC - .4byte sUnknown_80E73E4, 0xC - .4byte CheckAgain_80E7234, 0xC - .4byte 0, 0xA - -sUnknown_80E73E4: - .string "#+This is not an #CGA-OK Mail#R.\0" - .align 2, 0 - - .global gUnknown_80E7408 -gUnknown_80E7408: @ 80E7408 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x09, 0x00 - .byte 0x17, 0x00, 0x05, 0x00 - .byte 0x05, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80E7420 -gUnknown_80E7420: @ 80E7420 - .4byte Error_80E7268, 0xC - .4byte sUnknown_80E7440, 0xC - .4byte CheckAgain_80E7234, 0xC - .4byte 0, 0xA - -sUnknown_80E7440: - .string "#+This #CGA-OK Mail#R cannot be used.\0" - .align 2, 0 - - .global gUnknown_80E7468 -gUnknown_80E7468: @ 80E7468 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x09, 0x00 - .byte 0x17, 0x00, 0x05, 0x00 - .byte 0x05, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80E7480 -gUnknown_80E7480: @ 80E7480 - .4byte Error_80E7268, 0xC - .4byte sUnknown_80E74A0, 0xC - .4byte CheckAgain_80E7234, 0xC - .4byte 0, 0xA - -sUnknown_80E74A0: - .string "#+This is not a #CGThank-You Mail#R.\0" - .align 2, 0 - - .global gUnknown_80E74C8 -gUnknown_80E74C8: @ 80E74C8 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x09, 0x00 - .byte 0x17, 0x00, 0x05, 0x00 - .byte 0x05, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80E74E0 -gUnknown_80E74E0: @ 80E74E0 - .4byte Error_80E7268, 0xC - .4byte sUnknown_80E7500, 0xC - .4byte CheckAgain_80E7234, 0xC - .4byte 0, 0xA - -sUnknown_80E7500: - .string "#+This #CGThank-You Mail#R cannot be used.\0" - .align 2, 0 - - .global gUnknown_80E752C -gUnknown_80E752C: @ 80E752C - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x09, 0x00 - .byte 0x17, 0x00, 0x05, 0x00 - .byte 0x05, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80E7544 -gUnknown_80E7544: @ 80E7544 - .4byte Error_80E7268, 0xC - .4byte sUnknown_80E7564, 0xC - .4byte CheckAgain_80E7234, 0xC - .4byte 0, 0xA - -sUnknown_80E7564: - .string "#+This is not a #CGWonder Mail#R.\0" - .align 2, 0 - - .global gUnknown_80E7588 -gUnknown_80E7588: @ 80E7588 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x09, 0x00 - .byte 0x17, 0x00, 0x05, 0x00 - .byte 0x05, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80E75A0 -gUnknown_80E75A0: @ 80E75A0 - .4byte Error_80E7268, 0xC - .4byte sUnknown_80E75CC, 0xC - .4byte sUnknown_80E75C0, 0xC - .4byte 0, 0xA - -sUnknown_80E75C0: - .string "#+new mail.\0" - .align 2, 0 - -sUnknown_80E75CC: - .string "#+There is no space for receiving\0" - .align 2, 0 - - .string "pksdir0\0" diff --git a/data/data_80E6F20.s b/data/data_80E6F20.s new file mode 100644 index 000000000..3b966715b --- /dev/null +++ b/data/data_80E6F20.s @@ -0,0 +1,233 @@ + .section .rodata + + .global gUnknown_80E71E4 +gUnknown_80E71E4: @ 80E71E4 + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + + .global gUnknown_80E71FC +gUnknown_80E71FC: @ 80E71FC + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x09, 0x00 + .byte 0x17, 0x00, 0x05, 0x00 + .byte 0x05, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + + .global gUnknown_80E7214 +gUnknown_80E7214: @ 80E7214 + .4byte Error_80E7268, 0xC + .4byte IncorrectPassword_80E7250, 0xC + .4byte CheckAgain_80E7234, 0xC + .4byte 0, 0xA + +CheckAgain_80E7234: + .string "{CENTER_ALIGN}Please check it again.\0" + .align 2, 0 + +IncorrectPassword_80E7250: + .string "{CENTER_ALIGN}Incorrect password!\0" + .align 2, 0 + +Error_80E7268: + .string "{CENTER_ALIGN}{COLOR_1 RED}Error!{END_COLOR_TEXT_1} \0" + .align 2, 0 + + .global gUnknown_80E7278 +gUnknown_80E7278: @ 80E7278 + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x09, 0x00 + .byte 0x17, 0x00, 0x05, 0x00 + .byte 0x05, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + + .global gUnknown_80E7290 +gUnknown_80E7290: @ 80E7290 + .4byte Success_80E72D8, 0xC + .4byte PasswordAccept_80E72B4, 0xC + .4byte DATA_80E72B0, 0xC + .4byte 0, 0xA + +DATA_80E72B0: + .string " \0" + .align 2, 0 + +PasswordAccept_80E72B4: + .string "{CENTER_ALIGN}The password has been accepted.\0" + .align 2, 0 + +Success_80E72D8: + .string "{CENTER_ALIGN}{COLOR_1 LIGHT_BLUE_2}Success!{END_COLOR_TEXT_1} \0" + .align 2, 0 + + .global gUnknown_80E72EC +gUnknown_80E72EC: @ 80E72EC + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x09, 0x00 + .byte 0x17, 0x00, 0x05, 0x00 + .byte 0x05, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + + .global gUnknown_80E7304 +gUnknown_80E7304: @ 80E7304 + .4byte Error_80E7268, 0xC + .4byte NotSOSMail_80E7324, 0xC + .4byte CheckAgain_80E7234, 0xC + .4byte 0, 0xA + +NotSOSMail_80E7324: + .string "{CENTER_ALIGN}This is not an {COLOR_1 LIGHT_BLUE_2}SOS Mail{END_COLOR_TEXT_1}.\0" + .align 2, 0 + + .global gUnknown_80E7344 +gUnknown_80E7344: @ 80E7344 + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x09, 0x00 + .byte 0x17, 0x00, 0x05, 0x00 + .byte 0x05, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + + .global gUnknown_80E735C +gUnknown_80E735C: @ 80E735C + .4byte Error_80E7268, 0xC + .4byte ReceiveSOSMail_80E737C, 0xC + .4byte CheckAgain_80E7234, 0xC + .4byte 0, 0xA + +ReceiveSOSMail_80E737C: + .string "{CENTER_ALIGN}This {COLOR_1 LIGHT_BLUE_2}SOS Mail{END_COLOR_TEXT_1} has been received already.\0" + .align 2, 0 + + .global gUnknown_80E73AC +gUnknown_80E73AC: @ 80E73AC + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x09, 0x00 + .byte 0x17, 0x00, 0x05, 0x00 + .byte 0x05, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + + .global gUnknown_80E73C4 +gUnknown_80E73C4: @ 80E73C4 + .4byte Error_80E7268, 0xC + .4byte sUnknown_80E73E4, 0xC + .4byte CheckAgain_80E7234, 0xC + .4byte 0, 0xA + +sUnknown_80E73E4: + .string "#+This is not an #CGA-OK Mail#R.\0" + .align 2, 0 + + .global gUnknown_80E7408 +gUnknown_80E7408: @ 80E7408 + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x09, 0x00 + .byte 0x17, 0x00, 0x05, 0x00 + .byte 0x05, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + + .global gUnknown_80E7420 +gUnknown_80E7420: @ 80E7420 + .4byte Error_80E7268, 0xC + .4byte sUnknown_80E7440, 0xC + .4byte CheckAgain_80E7234, 0xC + .4byte 0, 0xA + +sUnknown_80E7440: + .string "#+This #CGA-OK Mail#R cannot be used.\0" + .align 2, 0 + + .global gUnknown_80E7468 +gUnknown_80E7468: @ 80E7468 + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x09, 0x00 + .byte 0x17, 0x00, 0x05, 0x00 + .byte 0x05, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + + .global gUnknown_80E7480 +gUnknown_80E7480: @ 80E7480 + .4byte Error_80E7268, 0xC + .4byte sUnknown_80E74A0, 0xC + .4byte CheckAgain_80E7234, 0xC + .4byte 0, 0xA + +sUnknown_80E74A0: + .string "#+This is not a #CGThank-You Mail#R.\0" + .align 2, 0 + + .global gUnknown_80E74C8 +gUnknown_80E74C8: @ 80E74C8 + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x09, 0x00 + .byte 0x17, 0x00, 0x05, 0x00 + .byte 0x05, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + + .global gUnknown_80E74E0 +gUnknown_80E74E0: @ 80E74E0 + .4byte Error_80E7268, 0xC + .4byte sUnknown_80E7500, 0xC + .4byte CheckAgain_80E7234, 0xC + .4byte 0, 0xA + +sUnknown_80E7500: + .string "#+This #CGThank-You Mail#R cannot be used.\0" + .align 2, 0 + + .global gUnknown_80E752C +gUnknown_80E752C: @ 80E752C + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x09, 0x00 + .byte 0x17, 0x00, 0x05, 0x00 + .byte 0x05, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + + .global gUnknown_80E7544 +gUnknown_80E7544: @ 80E7544 + .4byte Error_80E7268, 0xC + .4byte sUnknown_80E7564, 0xC + .4byte CheckAgain_80E7234, 0xC + .4byte 0, 0xA + +sUnknown_80E7564: + .string "#+This is not a #CGWonder Mail#R.\0" + .align 2, 0 + + .global gUnknown_80E7588 +gUnknown_80E7588: @ 80E7588 + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x09, 0x00 + .byte 0x17, 0x00, 0x05, 0x00 + .byte 0x05, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + + .global gUnknown_80E75A0 +gUnknown_80E75A0: @ 80E75A0 + .4byte Error_80E7268, 0xC + .4byte sUnknown_80E75CC, 0xC + .4byte sUnknown_80E75C0, 0xC + .4byte 0, 0xA + +sUnknown_80E75C0: + .string "#+new mail.\0" + .align 2, 0 + +sUnknown_80E75CC: + .string "#+There is no space for receiving\0" + .align 2, 0 + + .string "pksdir0\0" + diff --git a/include/friend_rescue.h b/include/friend_rescue.h index 19a5ef128..2fbc33e9f 100644 --- a/include/friend_rescue.h +++ b/include/friend_rescue.h @@ -5,6 +5,7 @@ #include "item.h" #include "pokemon.h" #include "wonder_mail.h" +#include "menu.h" struct WonderMailStruct_203B33C { @@ -21,13 +22,7 @@ struct WonderMailStruct_203B33C struct unkStruct_203B480 unk1B8; struct unkStruct_203B480 unk1E8; u8 unk218; - u8 padding7[3]; - u32 unk21C; - u8 padding[0x7C]; - u32 unk29C; - u8 padding6[0x6C]; - u32 unk30C; - u8 padding8[0x4C]; + struct MenuStruct unk21C[4]; struct UnkTextStruct2 unk35C[4]; struct UnkTextStruct2 unk3BC[4]; struct Item unk41C; diff --git a/include/input.h b/include/input.h index 451ea8473..083c4ccc5 100644 --- a/include/input.h +++ b/include/input.h @@ -55,14 +55,14 @@ struct UnkInputStruct /* 0x2 */ u8 unk2; /* 0x3 */ u8 unk3; /* 0x4 */ u8 unk4; - /* 0x5 */ u32 unk5; - /* 0x9 */ u32 unk9; - /* 0xD */ u32 unkD; - /* 0x11 */ u32 unk11; - /* 0x15 */ u32 unk15; - /* 0x19 */ u32 unk19; - /* 0x1D */ u32 unk1D; - /* 0x21 */ u32 unk21; + /* 0x8 */ u32 unk8; + /* 0xC */ u32 unkC; + /* 0x10 */ u32 unk10; + /* 0x14 */ u32 unk14; + /* 0x18 */ u32 unk18; + /* 0x1C */ u32 unk1C; + /* 0x20 */ u32 unk20; + /* 0x24 */ u32 unk24; /* 0x28 */ u8 unk28; /* 0x29 */ u8 a_button; /* 0x2A */ u8 b_button; diff --git a/include/menu.h b/include/menu.h index 26049acf0..7b4a152c7 100644 --- a/include/menu.h +++ b/include/menu.h @@ -7,4 +7,25 @@ struct MenuItem s32 menuAction; // action?? }; +struct MenuStruct +{ + // size: 0x50 + u32 unk0; + /* 0x4 */ struct MenuItem *menuItems; + u32 unk8; + u16 *unkC; + s32 fill10; + /* 0x14 */ u32 unk14; + u8 fill18[0x2C - 0x18]; + /* 0x2C */ s16 menuIndex; + s16 unk2E; + u8 fill30[0x38 - 0x30]; + u16 unk38; + u8 fill3A[0x48 - 0x3A]; + s32 menuAction; + u8 unk4C; + u8 unk4D; +}; + + #endif // GUARD_MENU_H diff --git a/ld_script.txt b/ld_script.txt index bdcc01150..298c0018f 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -445,6 +445,8 @@ SECTIONS { src/main_menu.o(.rodata); src/trade_items_menu.o(.rodata); data/data_80E59A8.o(.rodata); + src/save_menu.o(.rodata); + data/data_80E6F20.o(.rodata); src/load_screen.o(.rodata); src/wonder_mail_main_menu.o(.rodata); src/debug_menu.o(.rodata); diff --git a/src/friend_rescue_1.c b/src/friend_rescue_1.c index 549e9d7ad..fa8ee75ea 100644 --- a/src/friend_rescue_1.c +++ b/src/friend_rescue_1.c @@ -45,10 +45,9 @@ extern u32 sub_80154F0(); extern void sub_80155F0(); extern void sub_80141B4(u8 *r0, u32, u32 *r1, u32); extern void sub_8014248(const char *r0, u32, u32, struct MenuItem *r4, u32, u32, u32, u32 *r5, u32); -extern void SetMenuItems(void *menu, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *entries, u32, u32, u32); -extern u8 sub_8012FD8(u32 *); -extern void sub_8013114(u32 *, s32 *); +extern u8 sub_8012FD8(struct MenuStruct *); +extern void sub_8013114(struct MenuStruct *, s32 *); extern u32 sub_801CA08(u32); extern void sub_801CBB8(void); extern void sub_801CB5C(u32); @@ -56,7 +55,7 @@ extern void sub_8035CC0(struct UnkTextStruct2 *, u32); extern void sub_801B3C0(struct Item *); extern u32 sub_801B410(void); extern void sub_801B450(void); -extern void sub_8035CF4(u32 *, u32, u32); +extern void sub_8035CF4(struct MenuStruct *, u32, u32); extern u8 sub_801CB24(void); extern u32 sub_8030DA0(void); extern void sub_8030DE4(void); @@ -232,7 +231,6 @@ extern void sub_8023868(u32, u32, u32, u32); extern u32 sub_801D008(void); extern void sub_8023DA4(void); extern void sub_8023C60(void); -extern void sub_8035CF4(u32 *, u32, u32); extern s32 sub_8037B28(u32); extern void sub_803092C(void); extern void sub_801CCD8(void); @@ -240,7 +238,6 @@ extern void sub_80151C0(u32, u8 *); extern void sub_801C8C4(u32, u32, s32 * , u32); extern void xxx_call_start_bg_music(void); extern u32 GetDungeonTeamRankPts(struct DungeonLocation *, u32); -extern void SetMenuItems(void *menu, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *entries, u32, u32, u32); extern void sub_802F204(struct unkStruct_802F204 *, u32); extern void nullsub_23(u32); extern s32 sub_8037D64(u32, void *, void *); @@ -828,8 +825,8 @@ void sub_8034074(void) menuAction = -1; sub_8030768(0); - if(!sub_8012FD8(&gUnknown_203B33C->unk30C)) - sub_8013114(&gUnknown_203B33C->unk30C, &menuAction); + if(!sub_8012FD8(&gUnknown_203B33C->unk21C[3])) + sub_8013114(&gUnknown_203B33C->unk21C[3], &menuAction); switch(menuAction) { case 9: @@ -865,7 +862,7 @@ void sub_8034130(void) sub_803092C(); if(gUnknown_203B33C->fallbackState == 0x7E) { - sub_8035CF4(&gUnknown_203B33C->unk21C, 3, 1); + sub_8035CF4(gUnknown_203B33C->unk21C, 3, 1); SetFriendRescueMenuState(0x1E); } else @@ -911,8 +908,8 @@ void sub_8034254(void) menuAction = -1; sub_8023A94(0); - if(!sub_8012FD8(&gUnknown_203B33C->unk30C)) - sub_8013114(&gUnknown_203B33C->unk30C, &menuAction); + if(!sub_8012FD8(&gUnknown_203B33C->unk21C[3])) + sub_8013114(&gUnknown_203B33C->unk21C[3], &menuAction); switch(menuAction) { case 9: @@ -951,7 +948,7 @@ void sub_8034310(void) sub_8023B7C(1); if(gUnknown_203B33C->fallbackState == 0x7E) { - sub_8035CF4(&gUnknown_203B33C->unk21C, 3, 1); + sub_8035CF4(gUnknown_203B33C->unk21C, 3, 1); SetFriendRescueMenuState(0x27); } else @@ -1106,8 +1103,8 @@ void sub_8034590(void) menuAction = -1; sub_8030768(0); - if(!sub_8012FD8(&gUnknown_203B33C->unk30C)) - sub_8013114(&gUnknown_203B33C->unk30C, &menuAction); + if(!sub_8012FD8(&gUnknown_203B33C->unk21C[3])) + sub_8013114(&gUnknown_203B33C->unk21C[3], &menuAction); switch(menuAction) { case 9: @@ -1143,7 +1140,7 @@ void sub_803464C(void) sub_803092C(); if(gUnknown_203B33C->fallbackState == 0x7E) { - sub_8035CF4(&gUnknown_203B33C->unk21C, 3, 1); + sub_8035CF4(gUnknown_203B33C->unk21C, 3, 1); SetFriendRescueMenuState(0x33); } else @@ -1431,8 +1428,8 @@ void sub_8034A70(void) menuAction = -1; sub_8030768(0); - if(!sub_8012FD8(&gUnknown_203B33C->unk30C)) - sub_8013114(&gUnknown_203B33C->unk30C, &menuAction); + if(!sub_8012FD8(&gUnknown_203B33C->unk21C[3])) + sub_8013114(&gUnknown_203B33C->unk21C[3], &menuAction); switch(menuAction) { case 9: @@ -1468,7 +1465,7 @@ void sub_8034B2C(void) sub_803092C(); if(gUnknown_203B33C->fallbackState == 0x7E) { - sub_8035CF4(&gUnknown_203B33C->unk21C, 3, 1); + sub_8035CF4(gUnknown_203B33C->unk21C, 3, 1); SetFriendRescueMenuState(0x5D); } else @@ -1518,7 +1515,7 @@ void sub_8034C38(void) sub_801CB5C(1); if(gUnknown_203B33C->fallbackState == 0x7E) { - sub_8035CF4(&gUnknown_203B33C->unk21C, 3, 1); + sub_8035CF4(gUnknown_203B33C->unk21C, 3, 1); SetFriendRescueMenuState(0x60); } else @@ -1536,8 +1533,8 @@ void sub_8034C98(void) menuAction = -1; sub_801CA08(0); - if(!sub_8012FD8(&gUnknown_203B33C->unk30C)) - sub_8013114(&gUnknown_203B33C->unk30C, &menuAction); + if(!sub_8012FD8(&gUnknown_203B33C->unk21C[3])) + sub_8013114(&gUnknown_203B33C->unk21C[3], &menuAction); switch(menuAction) { case 9: diff --git a/src/main_menu.c b/src/main_menu.c index 8ca92435b..aed2ec406 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -30,30 +30,12 @@ // Deletes the Save -struct unkStruct_Menu -{ - // size 0x50; - u8 fil0[0x4C]; - u8 unk4C; - u8 fill4D[0x50 - 0x4D]; -}; - struct unkStruct_203B34C { // size: 0x1A8 u32 unk0; - u32 unk4; - struct MenuItem *unk8; // Array of menu choices?? - u8 fillC[0x30 - 0xC]; - s16 menuIndex; - u8 fill32[0x54 - 0x32]; - - u32 unk54; - u8 fill58[0xA4 - 0x58]; - - u32 unkA4; - u32 unkA8; - u8 fillAC[0x144 - 0xAC]; + struct MenuStruct unk4[3]; + u8 fillF4[0x144 - 0xF4]; struct UnkTextStruct2 unk144[4]; /* 0x1A4 */ u32 currMenuChoice; }; @@ -76,11 +58,12 @@ extern void sub_80370D4(void); extern void CleanWonderMailMenu(void); extern void sub_80383A8(void); extern void CleanSaveMenu(void); -extern u8 sub_8012FD8(u32 *); -extern void sub_8013114(u32 *, s32 *); +extern u8 sub_8012FD8(struct MenuStruct *); +extern void sub_8013114(struct MenuStruct *, s32 *); extern u8 sub_803D0D8(); -extern void sub_8012D60(struct unkStruct_Menu *, const struct MenuItem *, u32, u32, u32, u32); -extern void sub_8012E04(struct unkStruct_Menu *, const struct MenuItem *, u32, u32, u32, u32); +extern void sub_8012D60(struct MenuStruct *, const struct MenuItem *, u32, u32, u32, u32); +extern void sub_8012E04(struct MenuStruct *, const struct MenuItem *, u32, u32, u32, u32); +void sub_8012EBC(struct MenuStruct *); void CleanMainMenu(void); void DrawMainMenu(void); @@ -645,18 +628,18 @@ void sub_8035C1C(void) } void -SetMenuItems(struct unkStruct_Menu *param_1, struct UnkTextStruct2 *unkData, int param_3, const struct UnkTextStruct2 *param_4, const struct MenuItem *param_5, char param_6 ,u32 param_7, u32 unused_8) +SetMenuItems(struct MenuStruct *param_1, struct UnkTextStruct2 *unkData, int index, const struct UnkTextStruct2 *param_4, const struct MenuItem *param_5, char param_6 ,u32 param_7, u32 unused_8) { - unkData[param_3] = *param_4; + unkData[index] = *param_4; ResetUnusedInputStruct(); sub_800641C(unkData,1,1); - if (param_6 != '\0') { - sub_8012D60(¶m_1[param_3],param_5,0,0,param_7,param_3); + if (param_6 != 0) { + sub_8012D60(¶m_1[index],param_5,0,0,param_7,index); } else { - sub_8012E04(¶m_1[param_3],param_5,0,0,0,param_3); + sub_8012E04(¶m_1[index],param_5,0,0,0,index); } - param_1[param_3].unk4C = 1; + param_1[index].unk4C = 1; } void sub_8035CC0(struct UnkTextStruct2 *dataArray, u32 index) @@ -667,27 +650,12 @@ void sub_8035CC0(struct UnkTextStruct2 *dataArray, u32 index) sub_800641C(dataArray, 1, 1); } -NAKED -void sub_8035CF4(void * Menu, u32 index, u8 r2) -{ - asm_unified("\tpush {lr}\n" - "\tadds r3, r0, 0\n" - "\tlsls r0, r1, 2\n" - "\tadds r0, r1\n" - "\tlsls r0, 4\n" - "\tadds r0, r3\n" - "\tadds r1, r0, 0\n" - "\tadds r1, 0x4C\n" - "\tstrb r2, [r1]\n" - "\tadds r2, r0, 0\n" - "\tadds r2, 0x4D\n" - "\tmovs r1, 0x1\n" - "\tstrb r1, [r2]\n" - "\tsubs r1, 0x2\n" - "\tstr r1, [r0, 0x48]\n" - "\tbl sub_8012EBC\n" - "\tpop {r0}\n" - "\tbx r0"); +void sub_8035CF4(struct MenuStruct * Menu, u32 index, u8 r2) + { + Menu[index].unk4C = r2; + Menu[index].unk4D = 1; + Menu[index].menuAction = -1; + sub_8012EBC(&Menu[index]); } void sub_8035D1C(void) @@ -814,10 +782,10 @@ void DrawMainMenu(void) if(SetMainMenuText()) { - sub_8035CF4(&gUnknown_203B34C->unk4,2,0); + sub_8035CF4(gUnknown_203B34C->unk4,2,0); } - sub_8035CF4(&gUnknown_203B34C->unk4,0,1); + sub_8035CF4(gUnknown_203B34C->unk4,0,1); gUnknown_203B34C->unk0 = 1; } @@ -838,14 +806,14 @@ u32 UpdateMainMenu(void) switch(gUnknown_203B34C->unk0) { case 1: - sub_8012FD8(&gUnknown_203B34C->unkA4); - if(!sub_8012FD8(&gUnknown_203B34C->unk4)) - sub_8013114(&gUnknown_203B34C->unk4, &nextMenu); + sub_8012FD8(&gUnknown_203B34C->unk4[2]); + if(!sub_8012FD8(gUnknown_203B34C->unk4)) + sub_8013114(gUnknown_203B34C->unk4, &nextMenu); if(SetMainMenuText()) { - sub_8035CF4(&gUnknown_203B34C->unk4, 0, 1); - sub_8035CF4(&gUnknown_203B34C->unk4, 2, 0); + sub_8035CF4(gUnknown_203B34C->unk4, 0, 1); + sub_8035CF4(gUnknown_203B34C->unk4, 2, 0); } switch(nextMenu) { @@ -856,8 +824,8 @@ u32 UpdateMainMenu(void) gUnknown_203B34C->unk0 = 1; nextMenu = MENU_NO_SCREEN_CHANGE; ResetUnusedInputStruct(); - sub_8035CF4(&gUnknown_203B34C->unk4, 0, 1); - sub_8035CF4(&gUnknown_203B34C->unk4, 2, 0); + sub_8035CF4(gUnknown_203B34C->unk4, 0, 1); + sub_8035CF4(gUnknown_203B34C->unk4, 2, 0); break; case MENU_TRADE_ITEMS: sub_8035DA0(); @@ -880,8 +848,8 @@ u32 UpdateMainMenu(void) } break; case 0xC: - if(!sub_8012FD8(&gUnknown_203B34C->unk54)) - sub_8013114(&gUnknown_203B34C->unk54, &nextMenu); + if(!sub_8012FD8(&gUnknown_203B34C->unk4[1])) + sub_8013114(&gUnknown_203B34C->unk4[1], &nextMenu); switch(nextMenu) { case 0xffdd: @@ -917,8 +885,8 @@ bool8 SetMainMenuText(void) struct MenuItem *preload; // Have to load the pointer before the index - preload = gUnknown_203B34C->unk8; - menuChoice = preload[gUnknown_203B34C->menuIndex].menuAction; // chosen menu action? + preload = gUnknown_203B34C->unk4[0].menuItems; + menuChoice = preload[gUnknown_203B34C->unk4[0].menuIndex].menuAction; // chosen menu action? if (gUnknown_203B34C->currMenuChoice == menuChoice) { return FALSE; } @@ -929,50 +897,50 @@ bool8 SetMainMenuText(void) switch(menuChoice) { case MENU_WIRELESS_COMMS: // Using wireless communications, you can go on an adventure to unknown worlds. - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E6030,0,0,0); + SetMenuItems((struct MenuStruct *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E6030,0,0,0); break; case MENU_WONDER_MAIL: // Using passwords, you can receive Wonder Mail - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5F80,0,0,0); + SetMenuItems((struct MenuStruct *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5F80,0,0,0); break; case MENU_AWAITING_RESCUE: // You are awaiting resuce by a friend // You can give up waiting for rescue - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5F1C,0,0,0); + SetMenuItems((struct MenuStruct *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5F1C,0,0,0); break; case MENU_NEW_GAME: // Start an entirely new adventure - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5CCC,0,0,0); + SetMenuItems((struct MenuStruct *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5CCC,0,0,0); break; case MENU_CONTINUE: // Resume your adventure from where you last saved - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5DA0,0,0,0); + SetMenuItems((struct MenuStruct *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5DA0,0,0,0); break; case MENU_DELETE_SAVE_PROMPT: // This will delete your saved game data. // Beware! This will delete it forever - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5DF0,0,0,0); + SetMenuItems((struct MenuStruct *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5DF0,0,0,0); break; case MENU_ADVENTURE_LOG: // Check your career as an adventurer - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5D0C,0,0,0); + SetMenuItems((struct MenuStruct *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5D0C,0,0,0); break; case MENU_FRIEND_RESCUE: // Using a Game Link cable or passwords, friends may rescue each other - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5E5C,0,0,0); + SetMenuItems((struct MenuStruct *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5E5C,0,0,0); break; case MENU_TRADE_ITEMS: // Using a Game Link cable you can trade stored items with a friend - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5EBC,0,0,0); + SetMenuItems((struct MenuStruct *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5EBC,0,0,0); break; case MENU_DUAL_SLOT: // Using Dual Slot function, you can receive teams from your friends - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5FCC,0,0,0); + SetMenuItems((struct MenuStruct *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5FCC,0,0,0); break; case MENU_DEBUG: // This is the Debug Mode. // It won't be in the release version - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5D48,0,0,0); + SetMenuItems((struct MenuStruct *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5D48,0,0,0); break; default: break; @@ -986,9 +954,9 @@ void sub_803623C(void) SetMainMenuItems(); gUnknown_203B34C->currMenuChoice = -1; if (SetMainMenuText()) { - sub_8035CF4(&gUnknown_203B34C->unk4,2,0); + sub_8035CF4(gUnknown_203B34C->unk4,2,0); } - sub_8035CF4(&gUnknown_203B34C->unk4,0,1); + sub_8035CF4(gUnknown_203B34C->unk4,0,1); } void SetMainMenuItems(void) @@ -1003,7 +971,7 @@ void SetMainMenuItems(void) // Friend Rescue // Trade Items // Wonder Mail - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A78,gUnknown_80E5C18,1,gUnknown_203B350,1); + SetMenuItems((struct MenuStruct *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A78,gUnknown_80E5C18,1,gUnknown_203B350,1); } else { // Revive Team @@ -1011,7 +979,7 @@ void SetMainMenuItems(void) // Adventure Log // Friend Rescue // Trade Items - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5BC4,gUnknown_80E5BDC,1,gUnknown_203B350,1); + SetMenuItems((struct MenuStruct *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5BC4,gUnknown_80E5BDC,1,gUnknown_203B350,1); } } else { @@ -1022,7 +990,7 @@ void SetMainMenuItems(void) // Friend Rescue // Trade Items // Wonder Mail - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A78,gUnknown_80E5AFC,1,gUnknown_203B350,1); + SetMenuItems((struct MenuStruct *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A78,gUnknown_80E5AFC,1,gUnknown_203B350,1); } else { // Continue @@ -1030,7 +998,7 @@ void SetMainMenuItems(void) // Adventure Log // Friend Rescue // Trade Items - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A60,gUnknown_80E5A90,1,gUnknown_203B350,1); + SetMenuItems((struct MenuStruct *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A60,gUnknown_80E5A90,1,gUnknown_203B350,1); } } } @@ -1042,7 +1010,7 @@ void SetMainMenuItems(void) // Friend Rescue // Trade Items // Wonder Mail - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A78,gUnknown_80E5B8C,1,gUnknown_203B350,1); + SetMenuItems((struct MenuStruct *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A78,gUnknown_80E5B8C,1,gUnknown_203B350,1); } else { // Awaiting Rescue @@ -1050,7 +1018,7 @@ void SetMainMenuItems(void) // Adventure Log // Friend Rescue // Trade Items - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5B34,gUnknown_80E5B4C,1,gUnknown_203B350,1); + SetMenuItems((struct MenuStruct *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5B34,gUnknown_80E5B4C,1,gUnknown_203B350,1); } } } @@ -1058,7 +1026,7 @@ void SetMainMenuItems(void) { // New Game // Adventure Log - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E59E0,gUnknown_80E59F8,1,gUnknown_203B350,1); + SetMenuItems((struct MenuStruct *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E59E0,gUnknown_80E59F8,1,gUnknown_203B350,1); } } diff --git a/src/save_menu.c b/src/save_menu.c index 1e5e3b79e..4bf22a7b2 100644 --- a/src/save_menu.c +++ b/src/save_menu.c @@ -1,3 +1,4 @@ +#include "gba/defines.h" #include "global.h" #include "input.h" #include "menu.h" @@ -27,19 +28,115 @@ struct unkStruct_203B360 }; extern struct unkStruct_203B360 *gUnknown_203B364; -extern struct UnkTextStruct2 gUnknown_80E6F20; -extern struct UnkTextStruct2 gUnknown_80E6F38; -extern struct MenuItem gUnknown_80E7090[]; -extern struct MenuItem gUnknown_80E6F50[]; -extern struct MenuItem gUnknown_80E70CC; -extern struct MenuItem gUnknown_80E6FBC; -extern struct MenuItem gUnknown_80E7114; -extern struct MenuItem gUnknown_80E701C; -extern u8 gUnknown_80E7178[]; + +const struct UnkTextStruct2 gUnknown_80E6F20 = +{ + 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + NULL +}; + +const struct UnkTextStruct2 gUnknown_80E6F38 = +{ + 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x08, 0x00, + 0x15, 0x05, + 0x05, 0x00, + NULL +}; + +const u8 sUnknown_80E6F70[]; +const u8 sUnknown_80E6F90[]; +const u8 sUnknown_80E6FAC[]; + +const struct MenuItem gSavingAdventureMenuItems[] = { + {sUnknown_80E6FAC, 4}, + {sUnknown_80E6F90, 4}, + {sUnknown_80E6F70, 4}, + {NULL, 2} +}; +ALIGNED(4) const u8 sUnknown_80E6F70[] = _("{CENTER_ALIGN}Don{APOSTROPHE}t turn off the power."); +ALIGNED(4) const u8 sUnknown_80E6F90[] = _("{CENTER_ALIGN}Saving your adventure!"); +ALIGNED(4) const u8 sUnknown_80E6FAC[] = _("{CENTER_ALIGN}{COLOR_1 RED}Beware!{END_COLOR_TEXT_1} "); + +extern const u8 sUnknown_80E6FDC[]; +extern const u8 sUnknown_80E7008[]; +extern const u8 sUnknown_80E6FF0[]; + +const struct MenuItem gAdventureSavedMenuItems[] = { + {sUnknown_80E7008, 4}, + {sUnknown_80E6FF0, 4}, + {sUnknown_80E6FDC, 4}, + {NULL, 2} +}; +ALIGNED(4) const u8 sUnknown_80E6FDC[] = _("{CENTER_ALIGN}has been saved."); +ALIGNED(4) const u8 sUnknown_80E6FF0[] = _("{CENTER_ALIGN}Your adventure so far"); +ALIGNED(4) const u8 sUnknown_80E7008[] = _("{CENTER_ALIGN}{COLOR_1 LIGHT_BLUE_2}Success!{END_COLOR_TEXT_1} "); + +extern const u8 sUnknown_80E7078[]; +extern const u8 sUnknown_80E7050[]; +extern const u8 sUnknown_80E703C[]; + +const struct MenuItem gAdventureCouldNotBeSavedMenuItems[] = { + {sUnknown_80E7078, 4}, + {sUnknown_80E7050, 4}, + {sUnknown_80E703C, 4}, + {NULL, 2} +}; +ALIGNED(4) const u8 sUnknown_80E703C[] = _("{CENTER_ALIGN}Please try again."); +ALIGNED(4) const u8 sUnknown_80E7050[] = _("{CENTER_ALIGN}Your adventure could not be saved."); +ALIGNED(4) const u8 sUnknown_80E7078[] = _("{CENTER_ALIGN}{COLOR_1 RED}Save failed!{END_COLOR_TEXT_1} "); + + +extern const u8 DeletingAdventure_80E70B0[]; + +const struct MenuItem gDeletingYourAdventureMenuItems[] = { + {sUnknown_80E6FAC, 4}, + {DeletingAdventure_80E70B0, 4}, + {sUnknown_80E6F70, 4}, + {NULL, 2} +}; +ALIGNED(4) const u8 DeletingAdventure_80E70B0[] = _("{CENTER_ALIGN}Deleting your adventure!"); + +extern const u8 Data_80E70EC[]; +extern const u8 AdventureDeleted_80E70F0[]; + +const struct MenuItem gDeletedSaveMenuItems[] = { + {sUnknown_80E7008, 4}, + {AdventureDeleted_80E70F0, 4}, + {Data_80E70EC, 4}, + {NULL, 2}, +}; + +ALIGNED(4) const u8 Data_80E70EC[] = _(" "); +ALIGNED(4) const u8 AdventureDeleted_80E70F0[] = _("{CENTER_ALIGN}Your adventure has been deleted."); + +extern const u8 sUnknown_80E7134[]; +extern const u8 sUnknown_80E715C[]; + +const struct MenuItem gAdventureCouldNotBeDeletedMenuItems[] = { + {sUnknown_80E715C, 4}, + {sUnknown_80E7134, 4}, + {sUnknown_80E703C, 4}, + {NULL, 2}, +}; +ALIGNED(4) const u8 sUnknown_80E7134[] = _("{CENTER_ALIGN}Your adventure could not be deleted."); +ALIGNED(4) const u8 sUnknown_80E715C[] = _("{CENTER_ALIGN}{COLOR_1 RED}Deletion failed!{END_COLOR_TEXT_1} "); + +ALIGNED(4) const u8 gUnknown_80E7178[] = _("{CENTER_ALIGN}The data could not be written.\n" + "{CENTER_ALIGN}Please turn off the power and remove\n" + "{CENTER_ALIGN}and reinsert the DS Card."); + +ALIGNED(4) static const u8 save_menu_fill0[] = "pksdir0"; + extern void ResetSprites(u32); extern void sub_8038440(); extern void sub_8035CF4(u32 *, u32, u32); -extern void SetMenuItems(void *, struct UnkTextStruct2 *, u32, struct UnkTextStruct2 *, struct MenuItem *, u32, u32, u32); +extern void SetMenuItems(void *, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *, u32, u32, u32); extern u8 sub_80130A8(u32 *); extern void sub_8013114(u32 *, u32 *); extern void sub_80384D0(); @@ -68,12 +165,12 @@ void CreateSaveMenu(s32 currMenu) if (currMenu == MENU_DELETE_SAVE) { // Beware, Deleting your Adventure - SetMenuItems(&gUnknown_203B364->unk8,gUnknown_203B364->unk148,0,&gUnknown_80E6F38,gUnknown_80E7090, + SetMenuItems(&gUnknown_203B364->unk8,gUnknown_203B364->unk148,0,&gUnknown_80E6F38,gDeletingYourAdventureMenuItems, 0,6,0); } else { // Saving your Adventure - SetMenuItems(&gUnknown_203B364->unk8,gUnknown_203B364->unk148,0,&gUnknown_80E6F38,gUnknown_80E6F50, + SetMenuItems(&gUnknown_203B364->unk8,gUnknown_203B364->unk148,0,&gUnknown_80E6F38,gSavingAdventureMenuItems, 0,6,0); } sub_8035CF4(&gUnknown_203B364->unk8,0,1); @@ -121,11 +218,11 @@ s32 UpdateSaveMenu(void) sub_8035CC0(gUnknown_203B364->unk148,0); if (gUnknown_203B364->currMenu == MENU_DELETE_SAVE) { SetMenuItems(&gUnknown_203B364->unk8,gUnknown_203B364->unk148,0,&gUnknown_80E6F38, - &gUnknown_80E70CC,0,6,0); + gDeletedSaveMenuItems,0,6,0); } else { SetMenuItems(&gUnknown_203B364->unk8,gUnknown_203B364->unk148,0,&gUnknown_80E6F38, - &gUnknown_80E6FBC,0,6,0); + gAdventureSavedMenuItems,0,6,0); } if (gUnknown_203B364->currMenu == 0x2d) { gUnknown_203B364->unk4 = 1; @@ -142,11 +239,11 @@ s32 UpdateSaveMenu(void) sub_8035CC0(gUnknown_203B364->unk148,0); if (gUnknown_203B364->currMenu == MENU_DELETE_SAVE) { SetMenuItems(&gUnknown_203B364->unk8,gUnknown_203B364->unk148,0,&gUnknown_80E6F38, - &gUnknown_80E7114,0,6,0); + gAdventureCouldNotBeDeletedMenuItems,0,6,0); } else { SetMenuItems(&gUnknown_203B364->unk8,gUnknown_203B364->unk148,0,&gUnknown_80E6F38, - &gUnknown_80E701C,0,6,0); + gAdventureCouldNotBeSavedMenuItems,0,6,0); } sub_8035CF4(&gUnknown_203B364->unk8,0,1); gUnknown_203B364->unk4 = 1;