diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/ds_menus.c | 2 | ||||
-rw-r--r-- | src/main_menu.c | 252 | ||||
-rw-r--r-- | src/wonder_mail.c | 50 | ||||
-rw-r--r-- | src/wonder_mail_2.c | 116 |
4 files changed, 323 insertions, 97 deletions
diff --git a/src/ds_menus.c b/src/ds_menus.c index 4e53311..42c4d13 100644 --- a/src/ds_menus.c +++ b/src/ds_menus.c @@ -12,7 +12,7 @@ u32 UpdateDualSlotMenu(void) return 0; } -void CleanDualSlotMenu() +void CleanDualSlotMenu(void) { } diff --git a/src/main_menu.c b/src/main_menu.c index 37cd217..557f277 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -1,5 +1,7 @@ #include "global.h" #include "debug_menu.h" +#include "ds_menus.h" +#include "load_screen.h" #include "main_menu.h" #include "adventure_log.h" #include "input.h" @@ -22,31 +24,56 @@ // 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 UnkTextStruct2 unk144[4]; + /* 0x1A4 */ u32 currMenuChoice; +}; + +EWRAM_DATA struct MainMenu *gMainMenu; +EWRAM_DATA struct unkStruct_203B34C *gUnknown_203B34C; +EWRAM_DATA u32 gUnknown_203B350; +EWRAM_DATA u32 gUnknown_203B354; // unused everywhere else except here.. + + extern void sub_8094C14(void); extern void sub_8099690(u32); extern void sub_8036FDC(s32); -extern void CreateWirelessCommsMenu(void); extern void CreateFriendRescueMenu(void); -extern void CreateDualSlotMenu(void); extern void CreateWonderMailMenu(void); -extern void CreateLoadScreen(u32); extern void CreateRescuePasswordMenu(u32); extern void CreateSaveMenu(u32); extern u32 UpdateMainMenu(void); -extern s32 UpdateLoadScreenMenu(void); extern s32 UpdateFriendRescueMenu(void); extern s32 UpdateWonderMailMenu(void); -extern s32 UpdateDualSlotMenu(void); -extern s32 UpdateWirelessCommsMenu(void); extern s32 UpdateRescuePasswordMenu(void); extern s32 sub_80383D4(void); extern s32 UpdateSaveMenu(void); -extern void CleanLoadScreen(void); extern void sub_80370D4(void); extern void CleanFriendRescueMenu(void); extern void CleanWonderMailMenu(void); -extern void CleanDualSlotMenu(void); -extern void CleanWirelessCommsMenu(void); extern void CleanRescuePasswordMenu(void); extern void sub_80383A8(void); extern void CleanSaveMenu(void); @@ -55,6 +82,8 @@ extern void sub_8013114(u32 *, s32 *); extern u8 sub_803D0D8(); extern s32 sub_8011C34(); extern s32 sub_8095324(u32); +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); void CleanMainMenu(void); void DrawMainMenu(void); @@ -64,43 +93,38 @@ bool8 SetMainMenuText(); void SetMainMenuItems(); void sub_8035DA0(void); -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 UnkTextStruct2 unk144[4]; - /* 0x1A4 */ u32 currMenuChoice; -}; - -EWRAM_DATA struct MainMenu *gMainMenu; -EWRAM_DATA struct unkStruct_203B34C *gUnknown_203B34C; -EWRAM_DATA u32 gUnknown_203B350; -EWRAM_DATA u32 gUnknown_203B354; // unused everywhere else except here.. - - -extern const char NewGame_80E5A20[]; -extern const char AdventureLog_80E5A10[]; -extern const char WonderMail_80E5A54[]; -extern const char Continue_80E5AF0[]; -extern const char DeleteSaveData_80E5ADC[]; -extern const char FriendRescue_80E5ACC[]; -extern const char TradeItems_80E5AC0[]; -extern const char ReviveTeam_80E5C0C[]; -extern const char SendItems_80E5C90[]; -extern const char ReceiveItems_80E5C80[]; -extern const char AwaitingRescue_80E5B7C[]; +static const char NewGame_80E5A20[]; +static const char AdventureLog_80E5A10[]; +static const char WonderMail_80E5A54[]; +static const char Continue_80E5AF0[]; +static const char DeleteSaveData_80E5ADC[]; +static const char FriendRescue_80E5ACC[]; +static const char TradeItems_80E5AC0[]; +static const char ReviveTeam_80E5C0C[]; +static const char SendItems_80E5C90[]; +static const char ReceiveItems_80E5C80[]; +static const char AwaitingRescue_80E5B7C[]; +static const u8 sUnknown_80E5CE4[]; +static const u8 sUnknown_80E5CE8[]; +static const u8 sUnknown_80E5D24[]; +static const u8 sUnknown_80E5D60[]; +static const u8 sUnknown_80E5D88[]; +static const u8 sUnknown_80E5DB8[]; +static const u8 sUnknown_80E5DCC[]; +static const u8 sUnknown_80E5E08[]; +static const u8 sUnknown_80E5E34[]; +static const u8 sUnknown_80E5EA0[]; +static const u8 sUnknown_80E5E74[]; +static const u8 sUnknown_80E5EF8[]; +static const u8 sUnknown_80E5ED4[]; +static const u8 sUnknown_80E5F58[]; +static const u8 sUnknown_80E5F34[]; +static const u8 sUnknown_80E5FB0[]; +static const u8 sUnknown_80E5F98[]; +static const u8 sUnknown_80E5FE4[]; +static const u8 sUnknown_80E6008[]; +static const u8 sUnknown_80E6048[]; +static const u8 sUnknown_80E6070[]; const struct UnkTextStruct2 gUnknown_80E59A8 = { 0x00, 0x00, 0x00, 0x00, @@ -186,11 +210,10 @@ const struct MenuItem gUnknown_80E5A90[] = {NULL, 0xffdd}, }; -const char TradeItems_80E5AC0[] = "Trade Items"; -const char FriendRescue_80E5ACC[] = "Friend Rescue"; -const char DeleteSaveData_80E5ADC[] = "Delete Save Data"; -const char Continue_80E5AF0[] = "Continue"; - +static const char TradeItems_80E5AC0[] = "Trade Items"; +static const char FriendRescue_80E5ACC[] = "Friend Rescue"; +static const char DeleteSaveData_80E5ADC[] = "Delete Save Data"; +static const char Continue_80E5AF0[] = "Continue"; const struct MenuItem gUnknown_80E5AFC[] = { @@ -281,8 +304,8 @@ const struct MenuItem gUnknown_80E5C68[] = {NULL, 0xffdd}, }; -const char ReceiveItems_80E5C80[] = "Receive Items"; -const char SendItems_80E5C90[] = "Send Items"; +static const char ReceiveItems_80E5C80[] = "Receive Items"; +static const char SendItems_80E5C90[] = "Send Items"; const struct MenuItem gUnknown_80E5C9C[] = { @@ -291,32 +314,117 @@ const struct MenuItem gUnknown_80E5C9C[] = {NULL, 0xffdd}, }; -extern const struct UnkTextStruct2 gUnknown_80E5CB4; -extern const struct MenuItem gUnknown_80E5CCC[]; -extern const struct MenuItem gUnknown_80E5D0C[]; -extern const struct MenuItem gUnknown_80E5D48[]; -extern const struct MenuItem gUnknown_80E5DA0[]; -extern const struct MenuItem gUnknown_80E5DF0[]; -extern const struct MenuItem gUnknown_80E5E5C[]; -extern const struct MenuItem gUnknown_80E5EBC[]; -extern const struct MenuItem gUnknown_80E5F1C[]; -extern const struct MenuItem gUnknown_80E5F80[]; -extern const struct MenuItem gUnknown_80E5FCC[]; -extern const struct MenuItem gUnknown_80E6030[]; +const struct UnkTextStruct2 gUnknown_80E5CB4 = { + 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x0F, 0x00, + 0x1A, 0x03, + 0x03, 0x00, + NULL +}; +const struct MenuItem gUnknown_80E5CCC[] = +{ + {sUnknown_80E5CE8, 0xffde}, + {sUnknown_80E5CE4, 0xffde}, + {NULL, 0xffdd}, +}; +static const u8 sUnknown_80E5CE4[] = " "; +static const u8 sUnknown_80E5CE8[] = "Start an entirely new adventure."; -struct unkStruct_Menu +const struct MenuItem gUnknown_80E5D0C[] = { - // size 0x50; - u8 fil0[0x4C]; - u8 unk4C; - u8 fill4D[0x50 - 0x4D]; + {sUnknown_80E5D24, 0xffde}, + {sUnknown_80E5CE4, 0xffde}, + {NULL, 0xffdd}, }; -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); +static const u8 sUnknown_80E5D24[] = "Check your career as an adventurer."; + +const struct MenuItem gUnknown_80E5D48[] = +{ + {sUnknown_80E5D88, 0xffde}, + {sUnknown_80E5D60, 0xffde}, + {NULL, 0xffdd}, +}; + +static const u8 sUnknown_80E5D60[] = _("It won{APOSTROPHE}t be in the release version."); +static const u8 sUnknown_80E5D88[] = "This is the Debug Mode."; + +const struct MenuItem gUnknown_80E5DA0[] = +{ + {sUnknown_80E5DCC, 0xffde}, + {sUnknown_80E5DB8, 0xffde}, + {NULL, 0xffdd}, +}; + +static const u8 sUnknown_80E5DB8[] = "you last saved. "; +static const u8 sUnknown_80E5DCC[] = "Resume your adventure from where"; + +const struct MenuItem gUnknown_80E5DF0[] = { + {sUnknown_80E5E34, 0xFFDE}, + {sUnknown_80E5E08, 0xFFDE}, + {0, 0xFFDD} +}; + +static const u8 sUnknown_80E5E08[] = _("#C2Beware#R! This will delete it forever!"); +static const u8 sUnknown_80E5E34[] = "This will delete your saved game data."; + +const struct MenuItem gUnknown_80E5E5C[] = { + {sUnknown_80E5EA0, 0xFFDE}, + {sUnknown_80E5E74, 0xFFDE}, + {0, 0xFFDD} +}; + +ALIGNED(4) static const u8 sUnknown_80E5E74[] = _("passwords{COMMA} friends may rescue each other."); +static const u8 sUnknown_80E5EA0[] = "Using a Game Link cable or"; + +const struct MenuItem gUnknown_80E5EBC[] = { + {sUnknown_80E5EF8, 0xFFDE}, + {sUnknown_80E5ED4, 0xFFDE}, + {0, 0xFFDD} +}; + +static const u8 sUnknown_80E5ED4[] = "trade stored items with a friend."; +ALIGNED(4) static const u8 sUnknown_80E5EF8[] = _("Using a Game Link cable{COMMA} you can"); + +const struct MenuItem gUnknown_80E5F1C[] = { + {sUnknown_80E5F58, 0xFFDE}, + {sUnknown_80E5F34, 0xFFDE}, + {0, 0xFFDD} +}; + +static const u8 sUnknown_80E5F34[] = "You can give up waiting for rescue."; +static const u8 sUnknown_80E5F58[] = "You are awaiting rescue by a friend."; + +const struct MenuItem gUnknown_80E5F80[] = { + {sUnknown_80E5FB0, 0xFFDE}, + {sUnknown_80E5F98, 0xFFDE}, + {0, 0xFFDD} +}; + +static const u8 sUnknown_80E5F98[] = "receive Wonder Mail."; +ALIGNED(4) static const u8 sUnknown_80E5FB0[] = _("Using passwords{COMMA} you can"); + +const struct MenuItem gUnknown_80E5FCC[] = { + {sUnknown_80E6008, 0xFFDE}, + {sUnknown_80E5FE4, 0xFFDE}, + {NULL, 0xFFDD} +}; + +static const u8 sUnknown_80E5FE4[] = "receive teams from your friends."; +ALIGNED(4) static const u8 sUnknown_80E6008[] = _("Using the Dual Slot function{COMMA} you can"); + +const struct MenuItem gUnknown_80E6030[] = { + {sUnknown_80E6070, 0xFFDE}, + {sUnknown_80E6048, 0xFFDE}, + {NULL, 0xFFDD} +}; +static const u8 sUnknown_80E6048[] = "go on an adventure to unknown worlds."; +ALIGNED(4) static const u8 sUnknown_80E6070[] = _("Using wireless communication{COMMA} you can"); +static const u8 sMainMenu_fill0[] = "pksdir0"; void InitMainMenu(void) { diff --git a/src/wonder_mail.c b/src/wonder_mail.c index fd5e1df..b4c0a5d 100644 --- a/src/wonder_mail.c +++ b/src/wonder_mail.c @@ -23,6 +23,46 @@ extern void sub_80310B4(); extern u32 sub_8095350(); extern u8 sub_80A2824(u8); +extern const u8 DontSendPokemon_80DDB80[]; +extern const u8 SendPokemon_80DDB98[]; +extern const u8 gWonderMailCancel[]; +extern const u8 Password_80DDB44[]; +extern const u8 GameLinkCable_80DDB50[]; +extern const u8 Confirm_80DDB1C[]; +extern const u8 Info_80DDB14[]; + +const struct MenuItem gUnknown_80DDAFC[] = +{ + {Confirm_80DDB1C, 0xB}, + {Info_80DDB14, 0xC}, + {NULL, 0xA}, +}; + +ALIGNED(4) const u8 Info_80DDB14[] = "Info"; +ALIGNED(4) const u8 Confirm_80DDB1C[] = "Confirm"; + +const struct MenuItem gUnknown_80DDB24[] = +{ + {GameLinkCable_80DDB50, 0xD}, + {Password_80DDB44, 0xF}, + {gWonderMailCancel, 0xA}, + {NULL, 0xA}, +}; + +ALIGNED(4) const u8 Password_80DDB44[] = "Password"; +ALIGNED(4) const u8 GameLinkCable_80DDB50[] = "Game Link cable"; + +const struct MenuItem gUnknown_80DDB60[] = +{ + {SendPokemon_80DDB98, 0x11}, + {DontSendPokemon_80DDB80, 0x12}, + {gWonderMailCancel, 0xA}, + {NULL, 0xA}, +}; + +ALIGNED(4) const u8 DontSendPokemon_80DDB80[] = _("Don{APOSTROPHE}t Send Pokémon"); +ALIGNED(4) const u8 SendPokemon_80DDB98[] = _("Send Pokémon"); + #include "data/wonder_mail_1.h" extern u8 sub_809539C(u32, u32); @@ -51,7 +91,7 @@ extern void sub_803092C(void); extern u32 sub_80154F0(); extern u32 sub_8039068(u32, u8 *r1, u8 *r0); -extern void sub_8014248(const char *r0, u32, u32, struct MenuItem *r4, u32, u32, u32, void *r5, u32); +extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u32, u32, u32, void *r5, u32); extern void sub_8095274(u32); extern void sub_80155F0(); extern void sub_80951BC(u8 *r0); @@ -83,16 +123,14 @@ extern void sub_8031E10(void); extern void sub_803084C(void); extern void sub_8030DE4(); extern u8 gUnknown_80DDAE4[]; +extern u8 gUnknown_80DDACC[]; extern struct MenuItem gUnknown_80DDAA0[]; extern struct MenuItem gUnknown_80DDA80[]; -extern struct MenuItem gUnknown_80DDAFC[]; -extern struct MenuItem gUnknown_80DDB60[]; extern struct MenuItem gUnknown_80DDA64[]; -extern struct MenuItem gUnknown_80DDB24[]; extern struct MenuItem gUnknown_80DD9EC[]; -extern u8 gUnknown_80DDACC[]; extern struct MenuItem gUnknown_80DD970[]; + extern void nullsub_23(u32); extern s32 sub_8037D64(u32, void *, void *); extern s32 sub_80381F4(u32, void *, void *); @@ -108,7 +146,7 @@ extern u32 sub_8023CE8(void); extern u32 sub_8030894(void); extern void sub_8030F58(u32); extern void sub_8023DA4(void); -extern void SetMenuItems(void *, struct UnkTextStruct2 *, u32, u8 *, struct MenuItem *, u32, u32, u32); +extern void SetMenuItems(void *, struct UnkTextStruct2 *, u32, u8 *, const struct MenuItem *, u32, u32, u32); extern void sub_8029B34(void); extern void sub_8029AD8(void); extern void sub_8029AF4(void); diff --git a/src/wonder_mail_2.c b/src/wonder_mail_2.c index 3ce4aa2..816dba2 100644 --- a/src/wonder_mail_2.c +++ b/src/wonder_mail_2.c @@ -119,14 +119,6 @@ extern void sub_802BB28(void); extern void sub_8013E54(void); extern s32 sub_8012A64(u32 *, u32); -extern struct UnkTextStruct2 gUnknown_80DFBEC; - -extern struct UnkTextStruct2 gUnknown_80DFBD0; - -extern struct UnkTextStruct2 gUnknown_80DFC34; - -extern struct UnkTextStruct2 gUnknown_80DFC18; - extern struct unkStruct_203B2C8 *gUnknown_203B2C8; extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u32, u32, u32, struct OpenedFile **r5, u32); @@ -135,8 +127,6 @@ extern void sub_80920D8(u8 *buffer); extern void sub_8097790(void); extern char gUnknown_202E5D8[0x50]; extern char gAvailablePokemonNames[0x50]; -extern u8 gUnknown_80DFC4C[]; -extern u8 gUnknown_80DFC50[]; extern u32 sub_802F298(void); extern void sub_802F2C0(void); extern u8 sub_8099394(u8 *); @@ -158,15 +148,11 @@ extern u8 sub_80023E4(u32); extern void nullsub_131(void); extern void sub_802ABF8(void); -extern u8 gUnknown_80DFC04[]; -extern u8 gUnknown_80DFBE8[]; -extern struct UnkTextStruct2 gUnknown_80DFC74; -extern struct UnkTextStruct2 gUnknown_80DFC5C; extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_802BC7C(void); extern void sub_80073E0(u32); -extern void xxx_call_draw_string(s32 x, u32 y, u8 *, u32 , u32); +extern void xxx_call_draw_string(s32 x, u32 y, const u8 *, u32 , u32); extern void sub_8012BC4(u32 x, u32 y, u32, u32, u32, u32); extern void xxx_format_and_draw(u32, u32, const u8 *, u32, u32); extern void sub_803B6B0(u32, u32, u32, u32); @@ -182,9 +168,8 @@ extern void sub_8012D34(struct UnkTextStruct2 *, u32); extern s32 CountEmptyMailSlots(void); extern void sub_8013848(u32 *, s32, u32, u32); -ALIGNED(4) const char gUnknown_80DF9F0[] = "????"; +ALIGNED(4) const char gRescueTeamNamePlaceholder[] = "????"; -// NOTE: had to be pre-proc'd to match ALIGNED(4) const char gUnknown_80DF9F8[] = _( " Oh{COMMA} hello!\n" "Your rescue mission went well{COMMA} didn{APOSTROPHE}t it?\n" @@ -209,7 +194,102 @@ ALIGNED(4) const char gUnknown_80DFB14[] = _( ALIGNED(4) const char wonder_mail_2_fill[] = "pksdir0"; +const struct UnkTextStruct2 gUnknown_80DFBD0 = +{ + 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + NULL +}; + +const u8 gUnknown_80DFBE8[] = { 0x01, 0x00, 0x0C, 0x00 }; + +const struct UnkTextStruct2 gUnknown_80DFBEC = +{ + 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x02, 0x00, + 0x18, 0x0E, + 0x0E, 0x00, + gUnknown_80DFBE8 +}; + +ALIGNED(4) const u8 gUnknown_80DFC04[] = "News List"; +ALIGNED(4) static const char wonder_mail_2_fill1[] = "pksdir0"; + +const struct UnkTextStruct2 gUnknown_80DFC18 = +{ + 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + NULL +}; + +const u8 gUnkData_80DFC30[] = { 0x01, 0x00, 0x16, 0x00 }; + +const struct UnkTextStruct2 gUnknown_80DFC34 = +{ + 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x02, 0x00, + 0x1A, 0x10, + 0x10, 0x00, + gUnkData_80DFC30 +}; + +ALIGNED(4) const u8 gUnknown_80DFC4C[] = "She"; +ALIGNED(4) const u8 gUnknown_80DFC50[] = "He"; +ALIGNED(4) static const char wonder_mail_2_fill2[] = "pksdir0"; + +const struct UnkTextStruct2 gUnknown_80DFC5C = +{ + 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + NULL +}; + +const struct UnkTextStruct2 gUnknown_80DFC74 = +{ + 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x02, 0x00, + 0x18, 0x0E, + 0x0E, 0x00, + NULL +}; + +ALIGNED(4) const u8 gMailboxText[] = "Mailbox"; +ALIGNED(4) static const char wonder_mail_2_fill3[] = "pksdir0"; + +const struct UnkTextStruct2 gUnknown_80DFC9C = +{ + 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + NULL +}; + +const struct UnkTextStruct2 gUnknown_80DFCB4 = +{ + 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x02, 0x00, + 0x18, 0x0E, + 0x0E, 0x00, + NULL +}; +ALIGNED(4) const u8 gBulletinBoardText[] = "Bulletin Board"; +ALIGNED(4) static const char wonder_mail_2_fill4[] = "pksdir0"; u32 sub_802B2D4(void) { @@ -291,7 +371,7 @@ void sub_802B3E0(void) } else { // Copy "????" to buffer - strcpy(teamNameBuffer,gUnknown_80DF9F0); + strcpy(teamNameBuffer,gRescueTeamNamePlaceholder); } // Print and expand placeholders? ExpandPlaceholdersBuffer(gUnknown_203B2C8->teamName,gUnknown_80DF9F8,teamNameBuffer); |