Finish union_room_chat_display

This commit is contained in:
PikalaxALT
2020-01-25 13:35:34 -05:00
parent f249df41e3
commit c0b05784d6
13 changed files with 654 additions and 1729 deletions
File diff suppressed because it is too large Load Diff
+3 -3
View File
@@ -16374,13 +16374,13 @@ gFameCheckerBg3Tilemap:: @ 8EA0700
gFameCheckerBg2Tilemap:: @ 8EA0F00
.incbin "data/graphics/fame_checker_tilemap2.bin"
gUnknown_8EA1700:: @ 8EA1700
gLinkMiscMenu_Pal:: @ 8EA1700
.incbin "graphics/interface/union_room_chat.gbapal"
gUnknown_8EA1720:: @ 8EA1720
gLinkMiscMenu_Gfx:: @ 8EA1720
.incbin "graphics/interface/union_room_chat.4bpp.lz"
gUnknown_8EA1958:: @ 8EA1958
gLinkMiscMenu_Tilemap:: @ 8EA1958
.incbin "graphics/interface/union_room_chat.bin.lz"
gUnknown_8EA1A50:: @ 8EA1A50
+17 -17
View File
@@ -3093,34 +3093,34 @@ gUnknown_841B32E:: @ 841B32E
.string "{DYNAMIC 0x00} learned\n"
.string "{DYNAMIC 0x01}!$"
gUnknown_841B33D:: @ 0x841B33D
gText_Upper:: @ 0x841B33D
.string "UPPER$"
gUnknown_841B343:: @ 0x841B343
gText_Lower:: @ 0x841B343
.string "lower$"
gUnknown_841B349:: @ 0x841B349
gText_Others:: @ 0x841B349
.string "OTHERS$"
gUnknown_841B350:: @ 0x841B350
gText_Symbols:: @ 0x841B350
.string "SYMBOLS$"
gUnknown_841B358:: @ 0x841B358
gText_Register2:: @ 0x841B358
.string "REGISTER$"
gUnknown_841B361:: @ 0x841B361
gText_Exit:: @ 0x841B361
.string "EXIT$"
gUnknown_841B366:: @ 0x841B366
gText_QuitChatting:: @ 0x841B366
.string "Quit chatting?$"
gUnknown_841B375:: @ 0x841B375
gText_RegisterTextWhere:: @ 0x841B375
.string "Register text where?$"
gUnknown_841B38A:: @ 0x841B38A
gText_RegisterTextHere:: @ 0x841B38A
.string "Register text here?$"
gUnknown_841B39E:: @ 0x841B39E
gText_InputText:: @ 0x841B39E
.string "Input text.$"
gText_F700JoinedChat:: @ 841B3AA
@@ -3135,29 +3135,29 @@ gUnknown_841B3D0:: @ 0x841B3D0
gUnknown_841B3DA:: @ 0x841B3DA
.string "{DYNAMIC 0x00}{DYNAMIC 0x01} $"
gUnknown_841B3E9:: @ 0x841B3E9
gText_ExitingTheChat:: @ 0x841B3E9
.string "Exiting the chat$"
gUnknown_841B3FB:: @ 0x841B3FB
gText_LeaderHasLeftEndingChat:: @ 0x841B3FB
.string "The LEADER, {DYNAMIC 0x00}, has\n"
.string "left, ending the chat.$"
gUnknown_841B426:: @ 0x841B426
gText_RegisteredTextChanged_OKtoSave:: @ 0x841B426
.string "The registered text has been changed.\n"
.string "Is it okay to save the game?$"
gUnknown_841B469:: @ 0x841B469
gText_RegisteredTextChanged_AlreadySavedFile:: @ 0x841B469
.string "There is already a saved file.\n"
.string "Is it okay to overwrite it?$"
gUnknown_841B4A4:: @ 0x841B4A4
gText_RegisteredTextChanged_SavingDontTurnOff:: @ 0x841B4A4
.string "SAVING\n"
.string "DON'T TURN OFF THE POWER.$"
gUnknown_841B4C6:: @ 0x841B4C6
gText_RegisteredTextChanged_SavedTheGame:: @ 0x841B4C6
.string "{DYNAMIC 0x00} saved the game.$"
gUnknown_841B4D9:: @ 0x841B4D9
gText_IfLeaderLeavesChatWillEnd:: @ 0x841B4D9
.string "If the LEADER leaves, the chat\n"
.string "will end. Is that okay?$"
-46
View File
@@ -6,52 +6,6 @@
.section .rodata
.align 2
gUnknown_845AB64:: @ 845AB64
.4byte gUnknown_841B366
.byte 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00
.align 2
.4byte gUnknown_841B375
.byte 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00
.align 2
.4byte gUnknown_841B38A
.byte 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00
.align 2
.4byte gUnknown_841B39E
.byte 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00
.align 2
.4byte gUnknown_841B3E9
.byte 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00
.align 2
.4byte gUnknown_841B3FB
.byte 0x02, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00
.align 2
.4byte gUnknown_841B426
.byte 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x01
.align 2
.4byte gUnknown_841B469
.byte 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x01
.align 2
.4byte gUnknown_841B4A4
.byte 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x01
.align 2
.4byte gUnknown_841B4C6
.byte 0x02, 0x00, 0x00, 0x01, 0x02, 0x01, 0x01
.align 2
.4byte gUnknown_841B4D9
.byte 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x01
.align 2
gUnknown_845ABE8:: @ 845ABE8
.string "$"
.align 2
gUnknown_845ABEC:: @ 845ABEC
.4byte gUnknown_841B33D, 0
.4byte gUnknown_841B343, 0
.4byte gUnknown_841B350, 0
.4byte gUnknown_841B358, 0
.4byte gUnknown_841B361, 0
gUnknown_845AC14:: @ 845AC14
.incbin "graphics/union_room_chat/unk_845AC14.gbapal"
+8
View File
@@ -4864,4 +4864,12 @@ extern const u32 gUnknown_8E83444[];
extern const u32 gBagBgPalette[];
extern const u32 gBagBgPalette_FemaleOverride[];
// union_room_chat_display
extern const u16 gUnknown_8EAA9F0[];
extern const u32 gUnknown_8EAAA10[];
extern const u32 gUnknown_8EAAA6C[];
extern const u16 gLinkMiscMenu_Pal[];
extern const u32 gLinkMiscMenu_Gfx[];
extern const u32 gLinkMiscMenu_Tilemap[];
#endif //GUARD_GRAPHICS_H
+28 -7
View File
@@ -40,7 +40,6 @@ extern const u8 gText_Second[];
extern const u8 gText_Third[];
extern const u8 gText_NoDecorations[];
extern const u8 gText_NoDecorationsInUse[];
extern const u8 gText_Exit[];
extern const u8 gText_Cancel[];
extern const u8 gText_Color161Shadow161[];
extern const u8 gText_GoBackPrevMenu[];
@@ -288,7 +287,6 @@ extern const u8 gText_ThreePkmnAreNeeded[];
extern const u8 gText_TwoPokemonAreNeeded[];
extern const u8 gText_PokemonCantBeSame[];
extern const u8 gText_NoIdenticalHoldItems[];
extern const u8 gString_Dummy[];
extern const u8 gText_DoWhatWithPokemon[];
extern const u8 gText_RestoreWhichMove[];
extern const u8 gText_BoostPp[];
@@ -327,13 +325,9 @@ extern const u8 gText_SendOut[];
extern const u8 gText_Enter[];
extern const u8 gText_NoEntry[];
extern const u8 gText_Store[];
extern const u8 gText_Register[];
extern const u8 gText_Trade4[];
extern const u8 gText_NotPkmnOtherTrainerWants[];
extern const u8 gText_ThatIsntAnEgg[];
extern const u8 gText_PkmnCantBeTradedNow[];
extern const u8 gText_OtherTrainersPkmnCantBeTraded[];
extern const u8 gText_EggCantBeTradedNow[];
extern const u8 gText_OtherTrainerCantAcceptPkmn[];
extern const u8 gText_CantTradeWithTrainer[];
extern const u8 gUnknown_84176CF[];
@@ -346,7 +340,6 @@ extern const u8 gText_PkmnCantParticipate[];
extern const u8 gText_CancelParticipation[];
extern const u8 gUnknown_8417494[];
extern const u8 gMenuText_Confirm[];
extern const u8 gText_Lv[];
extern const u8 gText_MaleSymbol[];
extern const u8 gText_FemaleSymbol[];
extern const u8 gText_Slash[];
@@ -984,6 +977,16 @@ extern const u8 gUnknown_8415F6C[];
extern const u8 gUnknown_8415FFF[];
extern const u8 gUnknown_8416002[];
// daycare
extern const u8 gText_Lv[];
extern const u8 gDaycareText_GetAlongVeryWell[];
extern const u8 gDaycareText_GetAlong[];
extern const u8 gDaycareText_DontLikeOther[];
extern const u8 gDaycareText_PlayOther[];
extern const u8 gExpandedPlaceholder_Empty[];
extern const u8 gText_HatchedFromEgg[];
extern const u8 gText_NickHatchPrompt[];
// trainer card
extern const u8 gText_WaitingTrainerFinishReading[];
extern const u8 gText_TrainerCardName[];
@@ -1075,4 +1078,22 @@ extern const u8 gText_YaySmileEmoji[];
extern const u8 gText_ThankYou[];
extern const u8 gText_ByeBye[];
// union_room_chat_display
extern const u8 gText_QuitChatting[];
extern const u8 gText_RegisterTextWhere[];
extern const u8 gText_RegisterTextHere[];
extern const u8 gText_InputText[];
extern const u8 gText_ExitingTheChat[];
extern const u8 gText_LeaderHasLeftEndingChat[];
extern const u8 gText_RegisteredTextChanged_OKtoSave[];
extern const u8 gText_RegisteredTextChanged_AlreadySavedFile[];
extern const u8 gText_RegisteredTextChanged_SavingDontTurnOff[];
extern const u8 gText_RegisteredTextChanged_SavedTheGame[];
extern const u8 gText_IfLeaderLeavesChatWillEnd[];
extern const u8 gText_Upper[];
extern const u8 gText_Lower[];
extern const u8 gText_Symbols[];
extern const u8 gText_Register2[];
extern const u8 gText_Exit[];
#endif //GUARD_STRINGS_H
+1
View File
@@ -26,6 +26,7 @@ void TextWindow_SetUserSelectedFrame(u8 windowId, u16 tileStart, u8 palette);
void LoadUserWindowBorderGfx(u8 windowId, u16 tileStart, u8 palette);
void sub_814FDA0(u8 windowId, u16 tileStart, u8 palette);
void DrawTextBorderOuter(u8 windowId, u16 tileStart, u8 palette);
void DrawTextBorderInner(u8 windowId, u16 tileNum, u8 palNum);
void TextWindow_LoadTilesStdFrame1(u8 windowId, u16 destOffset);
void sub_814FE6C(u8 windowId, u16 destOffset, u8 palIdx);
void sub_814FEEC(u8 windowId, u16 destOffset, u8 palIdx);
+4
View File
@@ -8,6 +8,10 @@
extern struct MailStruct gLinkPartnerMail[6];
extern u8 gSelectedTradeMonPositions[2];
extern const u8 gText_MaleSymbol4[];
extern const u8 gText_FemaleSymbol4[];
extern const u8 gText_GenderlessSymbol[];
extern const u16 gUnknown_826601C[];
void CB2_ReturnFromLinkTrade(void);
s32 sub_804FB34(void);
+14
View File
@@ -1,13 +1,27 @@
#ifndef GUARD_UNION_ROOM_CHAT_H
#define GUARD_UNION_ROOM_CHAT_H
enum
{
UNION_ROOM_KB_PAGE_UPPER,
UNION_ROOM_KB_PAGE_LOWER,
UNION_ROOM_KB_PAGE_EMOJI,
UNION_ROOM_KB_PAGE_COUNT
};
extern const u8 *const gUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT][UNION_ROOM_KB_ROW_COUNT];
void sub_8128420(void);
u8 *sub_81294B0(int arg0);
u8 *sub_8129714(void);
void sub_8129730(u32 *a0, u32 *a1);
u8 *sub_8129758(void);
u16 sub_8129788(void);
u8 *sub_81297C4(void);
u16 sub_81297D0(void);
int sub_81297DC(void);
u8 *sub_8129814(void);
void copy_strings_to_sav1(void);
u8 GetCurrentKeyboardPage(void);
#endif // GUARD_UNION_ROOM_CHAT_H
+2 -26
View File
@@ -1,44 +1,34 @@
#include "global.h"
#include "pokemon.h"
#include "gflib.h"
#include "battle.h"
#include "daycare.h"
#include "string_util.h"
#include "constants/species.h"
#include "constants/items.h"
#include "mail_data.h"
#include "pokemon_storage_system.h"
#include "event_data.h"
#include "random.h"
#include "main.h"
#include "constants/moves.h"
#include "text.h"
#include "menu.h"
#include "new_menu_helpers.h"
#include "script.h"
#include "strings.h"
#include "task.h"
#include "window.h"
#include "party_menu.h"
#include "list_menu.h"
#include "overworld.h"
#include "pokedex.h"
#include "decompress.h"
#include "palette.h"
#include "sound.h"
#include "constants/songs.h"
#include "text_window.h"
#include "trig.h"
#include "malloc.h"
#include "gpu_regs.h"
#include "bg.h"
#include "m4a.h"
#include "graphics.h"
#include "scanline_effect.h"
#include "naming_screen.h"
#include "help_system.h"
#include "field_fadetransition.h"
#include "trade.h"
#include "constants/daycare.h"
#include "constants/pokemon.h"
#include "constants/region_map.h"
// Combination of RSE's Day-Care (re-used on Four Island), FRLG's Day-Care, and egg_hatch.c
@@ -60,20 +50,6 @@ struct EggHatchData
u8 textColor[3];
};
extern const u8 gText_MaleSymbol4[];
extern const u8 gText_FemaleSymbol4[];
extern const u8 gText_GenderlessSymbol[];
extern const u8 gText_Lv[];
extern const u8 gDaycareText_GetAlongVeryWell[];
extern const u8 gDaycareText_GetAlong[];
extern const u8 gDaycareText_DontLikeOther[];
extern const u8 gDaycareText_PlayOther[];
extern const u8 gExpandedPlaceholder_Empty[];
extern const u32 gUnknown_826601C[]; // tilemap gameboy circle
extern const u8 gText_HatchedFromEgg[];
extern const u8 gText_NickHatchPrompt[];
// this file's functions
static void ClearDaycareMonMail(struct DayCareMail *mail);
static void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare *daycare);
+1 -24
View File
@@ -1,41 +1,22 @@
#include "global.h"
#include "palette.h"
#include "gflib.h"
#include "task.h"
#include "decompress.h"
#include "gpu_regs.h"
#include "malloc.h"
#include "bg.h"
#include "text.h"
#include "window.h"
#include "librfu.h"
#include "text_window.h"
#include "evolution_scene.h"
#include "pokemon_icon.h"
#include "pokedex.h"
#include "mail_data.h"
#include "graphics.h"
#include "link.h"
#include "random.h"
#include "save.h"
#include "load_save.h"
#include "quest_log.h"
#include "field_fadetransition.h"
#include "mevent.h"
#include "help_system.h"
#include "link_rfu.h"
#include "cable_club.h"
#include "data.h"
#include "sound.h"
#include "string_util.h"
#include "strings.h"
#include "menu.h"
#include "overworld.h"
#include "battle_anim.h"
#include "pokeball.h"
#include "party_menu.h"
#include "util.h"
#include "daycare.h"
#include "script.h"
#include "event_data.h"
#include "battle_interface.h"
#include "pokemon_summary_screen.h"
@@ -43,11 +24,7 @@
#include "new_menu_helpers.h"
#include "trade.h"
#include "trade_scene.h"
#include "constants/species.h"
#include "constants/items.h"
#include "constants/easy_chat.h"
#include "constants/songs.h"
#include "constants/region_map.h"
#include "constants/moves.h"
struct TradeMenuResources
+4 -11
View File
@@ -13,18 +13,11 @@
#include "scanline_effect.h"
#include "strings.h"
#include "task.h"
#include "union_room_chat.h"
#include "union_room_chat_display.h"
#include "data_8479668.h"
#include "constants/songs.h"
enum
{
UNION_ROOM_KB_PAGE_UPPER,
UNION_ROOM_KB_PAGE_LOWER,
UNION_ROOM_KB_PAGE_EMOJI,
UNION_ROOM_KB_PAGE_COUNT
};
struct UnionRoomChat
{
u8 filler0[0x4];
@@ -147,7 +140,7 @@ const u8 gUnknown_845A8AC[] = {
CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE
};
const u8 *const sUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT][UNION_ROOM_KB_ROW_COUNT] = {
const u8 *const gUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT][UNION_ROOM_KB_ROW_COUNT] = {
[UNION_ROOM_KB_PAGE_UPPER] = {
gText_UnionRoomChatKeyboard_ABCDE,
gText_UnionRoomChatKeyboard_FGHIJ,
@@ -951,7 +944,7 @@ void sub_81292D8(void)
if (gUnknown_203B0E0->currentPage != UNION_ROOM_KB_PAGE_COUNT)
{
charsStr = sUnionRoomKeyboardText[gUnknown_203B0E0->currentPage][gUnknown_203B0E0->currentRow];
charsStr = gUnionRoomKeyboardText[gUnknown_203B0E0->currentPage][gUnknown_203B0E0->currentRow];
for (i = 0; i < gUnknown_203B0E0->unk11; i++)
{
if (*charsStr == CHAR_EXTRA_EMOJI)
@@ -1265,7 +1258,7 @@ u8 *sub_81297C4(void)
return gUnknown_203B0E0->unk39;
}
u8 sub_81297D0(void)
u16 sub_81297D0(void)
{
return gUnknown_203B0E0->unk16;
}
+572
View File
@@ -1,7 +1,12 @@
#include "global.h"
#include "gflib.h"
#include "dynamic_placeholder_text_util.h"
#include "graphics.h"
#include "menu.h"
#include "new_menu_helpers.h"
#include "scanline_effect.h"
#include "strings.h"
#include "text_window.h"
#include "union_room_chat.h"
#include "union_room_chat_display.h"
#include "union_room_chat_objects.h"
@@ -36,6 +41,18 @@ struct Unk845AABC
bool32 (*unk4)(u8 *);
};
struct Unk845AB64
{
const u8 *unk0;
u8 unk4;
u8 unk5;
u8 unk6;
u8 unk7;
u8 unk8;
u8 unk9;
u8 unkA;
};
EWRAM_DATA struct UnionRoomChat2 * gUnknown_203B0E4 = NULL;
void sub_8129BB8(struct UnionRoomChat2 * ptr);
@@ -87,6 +104,8 @@ void sub_812ACEC(void);
void sub_812AD04(void);
void sub_812AD20(void);
void sub_812AD50(void);
void sub_812ADA0(s16 a0);
void sub_812ADF8(s16 a0);
const u16 gUnknown_845AA24[] = INCBIN_U16("graphics/union_room_chat/unk_845AA24.gbapal");
const u16 gUnknown_845AA44[] = INCBIN_U16("graphics/union_room_chat/unk_845AA44.gbapal");
@@ -188,6 +207,30 @@ const struct Unk845AABC gUnknown_845AABC[] = {
{20, sub_812A3D0}
};
const struct Unk845AB64 gUnknown_845AB64[] = {
{gText_QuitChatting, 1, 0, 0, 1, 2, 0, 0},
{gText_RegisterTextWhere, 1, 0, 0, 1, 2, 0, 0},
{gText_RegisterTextHere, 1, 0, 0, 1, 2, 0, 0},
{gText_InputText, 1, 0, 0, 1, 2, 0, 0},
{gText_ExitingTheChat, 2, 0, 0, 1, 2, 0, 0},
{gText_LeaderHasLeftEndingChat, 2, 0, 0, 0, 2, 1, 0},
{gText_RegisteredTextChanged_OKtoSave, 2, 0, 0, 1, 2, 0, 1},
{gText_RegisteredTextChanged_AlreadySavedFile, 2, 0, 0, 1, 2, 0, 1},
{gText_RegisteredTextChanged_SavingDontTurnOff, 2, 0, 0, 1, 2, 0, 1},
{gText_RegisteredTextChanged_SavedTheGame, 2, 0, 0, 1, 2, 1, 1},
{gText_IfLeaderLeavesChatWillEnd, 2, 0, 0, 1, 2, 0, 1}
};
const u8 gText_Ellipsis[] = _("");
const struct MenuAction gUnknown_845ABEC[] = {
{gText_Upper},
{gText_Lower},
{gText_Symbols},
{gText_Register2},
{gText_Exit}
};
bool8 sub_8129B14(void)
{
gUnknown_203B0E4 = Alloc(sizeof(*gUnknown_203B0E4));
@@ -654,3 +697,532 @@ bool32 sub_812A1B8(u8 *state)
return TRUE;
}
bool32 sub_812A1FC(u8 *state)
{
switch (*state)
{
case 0:
sub_812A578(4, 0);
CopyWindowToVram(gUnknown_203B0E4->unk1E, 3);
(*state)++;
break;
case 1:
return IsDma3ManagerBusyWithBgCopy();
}
return TRUE;
}
bool32 sub_812A240(u8 *state)
{
u8 *str;
switch (*state)
{
case 0:
DynamicPlaceholderTextUtil_Reset();
str = sub_8129814();
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, str);
sub_812A578(5, 0);
CopyWindowToVram(gUnknown_203B0E4->unk1E, 3);
(*state)++;
break;
case 1:
return IsDma3ManagerBusyWithBgCopy();
}
return TRUE;
}
bool32 sub_812A294(u8 *state)
{
switch (*state)
{
case 0:
sub_812A578(6, 0);
sub_812A424(23, 10, 1);
CopyWindowToVram(gUnknown_203B0E4->unk1E, 3);
(*state)++;
break;
case 1:
return IsDma3ManagerBusyWithBgCopy();
}
return TRUE;
}
bool32 sub_812A2E4(u8 *state)
{
switch (*state)
{
case 0:
sub_812A578(7, 0);
sub_812A424(23, 10, 1);
CopyWindowToVram(gUnknown_203B0E4->unk1E, 3);
(*state)++;
break;
case 1:
return IsDma3ManagerBusyWithBgCopy();
}
return TRUE;
}
bool32 sub_812A334(u8 *state)
{
switch (*state)
{
case 0:
sub_812A578(8, 0);
CopyWindowToVram(gUnknown_203B0E4->unk1E, 3);
(*state)++;
break;
case 1:
return IsDma3ManagerBusyWithBgCopy();
}
return TRUE;
}
bool32 sub_812A378(u8 *state)
{
switch (*state)
{
case 0:
DynamicPlaceholderTextUtil_Reset();
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock2Ptr->playerName);
sub_812A578(9, 0);
CopyWindowToVram(gUnknown_203B0E4->unk1E, 3);
(*state)++;
break;
case 1:
return IsDma3ManagerBusyWithBgCopy();
}
return TRUE;
}
bool32 sub_812A3D0(u8 *state)
{
switch (*state)
{
case 0:
sub_812A578(10, 0);
sub_812A424(23, 10, 1);
CopyWindowToVram(gUnknown_203B0E4->unk1E, 3);
(*state)++;
break;
case 1:
return IsDma3ManagerBusyWithBgCopy();
}
return TRUE;
}
bool32 sub_812A420(u8 *arg0)
{
return FALSE;
}
void sub_812A424(u8 left, u8 top, u8 initialCursorPos)
{
struct WindowTemplate template;
template.bg = 0;
template.tilemapLeft = left;
template.tilemapTop = top;
template.width = 6;
template.height = 4;
template.paletteNum = 14;
template.baseBlock = 0x52;
gUnknown_203B0E4->unk18 = AddWindow(&template);
if (gUnknown_203B0E4->unk18 != 0xFF)
{
FillWindowPixelBuffer(gUnknown_203B0E4->unk18, PIXEL_FILL(1));
PutWindowTilemap(gUnknown_203B0E4->unk18);
AddTextPrinterParameterized(gUnknown_203B0E4->unk18, 2, gText_Yes, 8, 2, TEXT_SPEED_FF, NULL);
AddTextPrinterParameterized(gUnknown_203B0E4->unk18, 2, gText_No, 8, 16, TEXT_SPEED_FF, NULL);
DrawTextBorderOuter(gUnknown_203B0E4->unk18, 1, 13);
Menu_InitCursor(gUnknown_203B0E4->unk18, 2, 0, 2, 14, 2, initialCursorPos);
}
}
void sub_812A51C(void)
{
if (gUnknown_203B0E4->unk18 != 0xFF)
{
ClearStdWindowAndFrameToTransparent(gUnknown_203B0E4->unk18, FALSE);
ClearWindowTilemap(gUnknown_203B0E4->unk18);
}
}
void sub_812A544(void)
{
if (gUnknown_203B0E4->unk18 != 0xFF)
{
RemoveWindow(gUnknown_203B0E4->unk18);
gUnknown_203B0E4->unk18 = 0xFF;
}
}
s8 sub_812A568(void)
{
return Menu_ProcessInput();
}
void sub_812A578(int arg0, u16 arg1)
{
const u8 *str;
int windowId;
struct WindowTemplate template;
template.bg = 0;
template.tilemapLeft = 8;
template.tilemapTop = 16;
template.width = 21;
template.height = 4;
template.paletteNum = 14;
template.baseBlock = 0x06A;
if (gUnknown_845AB64[arg0].unkA)
{
template.tilemapLeft -= 7;
template.width += 7;
}
gUnknown_203B0E4->unk1E = AddWindow(&template);
windowId = gUnknown_203B0E4->unk1E;
if (gUnknown_203B0E4->unk1E == 0xFF)
return;
if (gUnknown_845AB64[arg0].unk9)
{
DynamicPlaceholderTextUtil_ExpandPlaceholders(gUnknown_203B0E4->unk22, gUnknown_845AB64[arg0].unk0);
str = gUnknown_203B0E4->unk22;
}
else
{
str = gUnknown_845AB64[arg0].unk0;
}
ChangeBgY(0, arg1 * 256, 0);
FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
PutWindowTilemap(windowId);
if (gUnknown_845AB64[arg0].unk4 == 1)
{
DrawTextBorderInner(windowId, 0xA, 2);
AddTextPrinterParameterized5(
windowId,
2,
str,
gUnknown_845AB64[arg0].unk5 + 8,
gUnknown_845AB64[arg0].unk6 + 8,
TEXT_SPEED_FF,
NULL,
gUnknown_845AB64[arg0].unk7,
gUnknown_845AB64[arg0].unk8);
}
else
{
DrawTextBorderOuter(windowId, 0xA, 2);
AddTextPrinterParameterized5(
windowId,
2,
str,
gUnknown_845AB64[arg0].unk5,
gUnknown_845AB64[arg0].unk6,
TEXT_SPEED_FF,
NULL,
gUnknown_845AB64[arg0].unk7,
gUnknown_845AB64[arg0].unk8);
}
gUnknown_203B0E4->unk1E = windowId;
}
void sub_812A6F4(void)
{
if (gUnknown_203B0E4->unk1E != 0xFF)
{
ClearStdWindowAndFrameToTransparent(gUnknown_203B0E4->unk1E, FALSE);
ClearWindowTilemap(gUnknown_203B0E4->unk1E);
}
ChangeBgY(0, 0, 0);
}
void sub_812A728(void)
{
if (gUnknown_203B0E4->unk1E != 0xFF)
{
RemoveWindow(gUnknown_203B0E4->unk1E);
gUnknown_203B0E4->unk1E = 0xFF;
}
}
void sub_812A74C(u16 x, u16 width, u8 fillValue)
{
FillWindowPixelRect(1, fillValue, x * 8, 1, width * 8, 14);
}
void sub_812A778(u16 x, u8 *str, u8 fillValue, u8 arg3, u8 arg4)
{
u8 *str2;
u8 sp[38];
if (fillValue)
sub_812A74C(x, sub_81297DC() - x, fillValue);
sp[0] = fillValue;
sp[1] = arg3;
sp[2] = arg4;
str2 = &sp[4];
str2[0] = EXT_CTRL_CODE_BEGIN;
str2[1] = EXT_CTRL_CODE_MIN_LETTER_SPACING;
str2[2] = 8;
StringCopy(&str2[3], str);
AddTextPrinterParameterized3(1, 2, x * 8, 1, sp, TEXT_SPEED_FF, str2);
}
void sub_812A804(void)
{
u8 page;
int i;
int var1;
u16 left;
u16 top;
u8 sp[52];
u8 *str;
u8 *str2;
FillWindowPixelBuffer(2, PIXEL_FILL(15));
page = GetCurrentKeyboardPage();
sp[0] = 0;
sp[1] = 14;
sp[2] = 13;
if (page != UNION_ROOM_KB_PAGE_COUNT)
{
str = &sp[4];
str[0] = EXT_CTRL_CODE_BEGIN;
str[1] = EXT_CTRL_CODE_MIN_LETTER_SPACING;
var1 = 8;
str[2] = var1;
left = var1;
if (page == UNION_ROOM_KB_PAGE_EMOJI)
left = 6;
for (i = 0, top = 0; i < UNION_ROOM_KB_ROW_COUNT; i++, top += 12)
{
if (!gUnionRoomKeyboardText[page][i])
return;
StringCopy(&sp[7], gUnionRoomKeyboardText[page][i]);
AddTextPrinterParameterized3(2, 0, left, top, sp, TEXT_SPEED_FF, &sp[4]);
}
}
else
{
left = 4;
for (i = 0, top = 0; i < 10; i++, top += 12)
{
str2 = sub_81294B0(i);
if (GetStringWidth(0, str2, 0) <= 40)
{
AddTextPrinterParameterized3(2, 0, left, top, sp, TEXT_SPEED_FF, str2);
}
else
{
int length = StringLength_Multibyte(str2);
do
{
length--;
StringCopyN_Multibyte(&sp[4], str2, length);
} while (GetStringWidth(0, &sp[4], 0) > 35);
AddTextPrinterParameterized3(2, 0, left, top, sp, TEXT_SPEED_FF, &sp[4]);
AddTextPrinterParameterized3(2, 0, left + 35, top, sp, TEXT_SPEED_FF, gText_Ellipsis);
}
}
}
}
bool32 sub_812A980(void)
{
if (gUnknown_203B0E4->unk20 < 56)
{
gUnknown_203B0E4->unk20 += 12;
if (gUnknown_203B0E4->unk20 >= 56)
gUnknown_203B0E4->unk20 = 56;
if (gUnknown_203B0E4->unk20 < 56)
{
sub_812ADA0(gUnknown_203B0E4->unk20);
return TRUE;
}
}
sub_812ADF8(gUnknown_203B0E4->unk20);
return FALSE;
}
bool32 sub_812A9C8(void)
{
if (gUnknown_203B0E4->unk20 > 0)
{
gUnknown_203B0E4->unk20 -= 12;
if (gUnknown_203B0E4->unk20 <= 0)
gUnknown_203B0E4->unk20 = 0;
if (gUnknown_203B0E4->unk20 > 0)
{
sub_812ADA0(gUnknown_203B0E4->unk20);
return TRUE;
}
}
sub_812ADF8(gUnknown_203B0E4->unk20);
return FALSE;
}
void sub_812AA10(void)
{
FillWindowPixelBuffer(3, PIXEL_FILL(1));
DrawTextBorderOuter(3, 1, 13);
UnionRoomAndTradeMenuPrintOptions(3, 2, 14, 5, gUnknown_845ABEC);
Menu_InitCursor(3, 2, 0, 0, 14, 5, GetCurrentKeyboardPage());
PutWindowTilemap(3);
}
void sub_812AA64(void)
{
ClearStdWindowAndFrameToTransparent(3, FALSE);
ClearWindowTilemap(3);
}
void sub_812AA78(u16 row, u8 *str, u8 arg2)
{
u8 color[3];
color[0] = 1;
color[1] = arg2 * 2 + 2;
color[2] = arg2 * 2 + 3;
FillWindowPixelRect(0, PIXEL_FILL(1), 0, row * 15, 168, 15);
AddTextPrinterParameterized3(0, 2, 0, row * 15, color, TEXT_SPEED_FF, str);
}
void sub_812AAD4(void)
{
ChangeBgX(0, 0, 0);
ChangeBgY(0, 0, 0);
ChangeBgX(1, 0, 0);
ChangeBgY(1, 0, 0);
ChangeBgX(2, 0, 0);
ChangeBgY(2, 0, 0);
ChangeBgX(3, 0, 0);
ChangeBgY(3, 0, 0);
ShowBg(0);
ShowBg(1);
ShowBg(2);
ShowBg(3);
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
SetGpuReg(REG_OFFSET_BLDCNT, 0);
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJWIN_ON);
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(64, 240));
SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(0, 144));
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 | WININ_WIN0_BG2 | WININ_WIN0_BG3
| WININ_WIN0_OBJ | WININ_WIN0_CLR);
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR);
}
void sub_812AB8C(void)
{
SetBgTilemapBuffer(0, gUnknown_203B0E4->unk128);
SetBgTilemapBuffer(1, gUnknown_203B0E4->unk928);
SetBgTilemapBuffer(3, gUnknown_203B0E4->unk1128);
SetBgTilemapBuffer(2, gUnknown_203B0E4->unk1928);
}
void sub_812ABD8(void)
{
RequestDma3Fill(0, (void *)BG_CHAR_ADDR(0), 0x20, 1);
FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32);
CopyBgTilemapBufferToVram(0);
}
void sub_812AC08(void)
{
LoadPalette(gUnknown_8EAA9F0, 0x70, 0x20);
LoadPalette(gUnknown_845AA24, 0xC0, 0x20);
DecompressAndCopyTileDataToVram(1, gUnknown_8EAAA10, 0, 0, 0);
CopyToBgTilemapBuffer(1, gUnknown_8EAAA6C, 0, 0);
CopyBgTilemapBufferToVram(1);
}
void sub_812AC58(void)
{
u8 *ptr;
LoadPalette(gLinkMiscMenu_Pal, 0, 0x20);
ptr = DecompressAndCopyTileDataToVram(2, gLinkMiscMenu_Gfx, 0, 0, 0);
CopyToBgTilemapBuffer(2, gLinkMiscMenu_Tilemap, 0, 0);
CopyBgTilemapBufferToVram(2);
}
void sub_812AC9C(void)
{
LoadPalette(gUnknown_845AA44, 0x80, 0x20);
RequestDma3Fill(0, (void *)BG_CHAR_ADDR(1) + 0x20, 0x20, 1);
}
void sub_812ACC0(void)
{
LoadPalette(gUnknown_845AA64, 0xF0, 0x20);
PutWindowTilemap(0);
FillWindowPixelBuffer(0, PIXEL_FILL(1));
CopyWindowToVram(0, 3);
}
void sub_812ACEC(void)
{
PutWindowTilemap(2);
sub_812A804();
CopyWindowToVram(2, 3);
}
void sub_812AD04(void)
{
FillWindowPixelBuffer(1, PIXEL_FILL(0));
PutWindowTilemap(1);
CopyWindowToVram(1, 3);
}
void sub_812AD20(void)
{
FillWindowPixelBuffer(3, PIXEL_FILL(1));
TextWindow_SetUserSelectedFrame(3, 1, 0xD0);
TextWindow_SetStdFrame0_WithPal(3, 0xA, 0x20);
LoadPalette(gTMCaseMainWindowPalette, 0xE0, 0x20);
}
void sub_812AD50(void)
{
struct ScanlineEffectParams params;
params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT;
params.dmaDest = &REG_BG1HOFS;
params.initState = 1;
params.unused9 = 0;
gUnknown_203B0E4->unk20 = 0;
CpuFastFill(0, gScanlineEffectRegBuffers, sizeof(gScanlineEffectRegBuffers));
ScanlineEffect_SetParams(params);
}
void sub_812ADA0(s16 arg0)
{
CpuFill16(arg0, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], 0x120);
CpuFill16(0, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer] + 0x90, 0x20);
}
void sub_812ADF8(s16 arg0)
{
CpuFill16(arg0, gScanlineEffectRegBuffers[0], 0x120);
CpuFill16(0, gScanlineEffectRegBuffers[0] + 0x90, 0x20);
CpuFill16(arg0, gScanlineEffectRegBuffers[0] + 0x3C0, 0x120);
CpuFill16(0, gScanlineEffectRegBuffers[0] + 0x450, 0x20);
}