resolved SetWindowTemplateFields

This commit is contained in:
jiangzhengwenjz
2019-07-10 03:19:28 +08:00
parent 05371e5875
commit bcf27c2de1
6 changed files with 16 additions and 131 deletions
+1 -10
View File
@@ -17,12 +17,6 @@ struct MenuAction
} func;
};
struct WindowTemplateWithAttr
{
struct WindowTemplate *ptr;
u32 attr;
};
// menu2
void AddTextPrinterParameterized3(u8 windowId, u8 fontId, u8 x, u8 y, const struct TextColor * color, s8 speed, const u8 * str);
void AddTextPrinterParameterized4(u8 windowId, u8 fontId, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, const struct TextColor *color, s8 speed, const u8 *str);
@@ -68,9 +62,6 @@ void ClearStdWindowAndFrameToTransparent(u8 windowId, bool8 copyToVram);
void DrawStdFrameWithCustomTileAndPalette(u8 windowId, bool8 copyToVram, u16 baseTileNum, u8 paletteNum);
void ClearDialogWindowAndFrameToTransparent(u8 windowId, bool8 copyToVram);
void DrawDialogFrameWithCustomTileAndPalette(u8 windowId, bool8 copyToVram, u16 tileNum, u8 paletteNum);
// currently incorrect, WIP
void SetWindowTemplateFields(struct WindowTemplate *template, u8 bg, u8 left, u8 top, u8 width, u8 height, u8 paletteNum, u16 baseBlock);
struct WindowTemplate SetWindowTemplateFields(u8 bg, u8 left, u8 top, u8 width, u8 height, u8 paletteNum, u16 baseBlock);
#endif // GUARD_MENU_H
+2 -4
View File
@@ -110,13 +110,11 @@ void sub_815F070(void)
void sub_815F094(void)
{
struct WindowTemplate template;
struct WindowTemplate template2;
if (sub_81119D4(sub_809D6D4) != TRUE)
{
SetWindowTemplateFields(&template, 0, 1, 1, 8, 3, 15, 32);
template2 = template;
gUnknown_203F464 = AddWindow(&template2);
template = SetWindowTemplateFields(0, 1, 1, 8, 3, 15, 32);
gUnknown_203F464 = AddWindow(&template);
FillWindowPixelBuffer(gUnknown_203F464, 0);
PutWindowTilemap(gUnknown_203F464);
TextWindow_SetStdFrame0_WithPal(gUnknown_203F464, 0x21D, 0xD0);
+3 -4
View File
@@ -80,11 +80,10 @@ void PrintCoinsString(u32 coinAmount)
void ShowCoinsWindow(u32 coinAmount, u8 x, u8 y)
{
struct WindowTemplate template, template2;
struct WindowTemplate template;
SetWindowTemplateFields(&template, 0, x + 1, y + 1, 8, 3, 0xF, 0x20);
template2 = template; // again, why...
sCoinsWindowId = AddWindow(&template2);
template = SetWindowTemplateFields(0, x + 1, y + 1, 8, 3, 0xF, 0x20);
sCoinsWindowId = AddWindow(&template);
FillWindowPixelBuffer(sCoinsWindowId, 0);
PutWindowTilemap(sCoinsWindowId);
TextWindow_SetStdFrame0_WithPal(sCoinsWindowId, 0x21D, 0xD0);
+4 -105
View File
@@ -519,11 +519,9 @@ static void sub_810FDE4(u8 windowId, u8 fontId, u8 lineHeight, u8 itemCount, con
AddItemMenuActionTextPrinters(windowId, fontId, GetFontAttribute(fontId, FONTATTR_MAX_LETTER_WIDTH), 0, GetFontAttribute(fontId, FONTATTR_LETTER_SPACING), lineHeight, itemCount, strs, orderArray);
}
/*
struct WindowTemplateWithAttr SetWindowTemplateFields(struct WindowTemplate *template, u8 bg, u8 left, u8 top, u8 width, u8 height, u8 paletteNum, u16 baseBlock)
struct WindowTemplate SetWindowTemplateFields(u8 bg, u8 left, u8 top, u8 width, u8 height, u8 paletteNum, u16 baseBlock)
{
struct WindowTemplate temp;
struct WindowTemplateWithAttr ret;
temp.bg = bg;
temp.tilemapLeft = left;
@@ -532,113 +530,14 @@ struct WindowTemplateWithAttr SetWindowTemplateFields(struct WindowTemplate *tem
temp.height = height;
temp.paletteNum = paletteNum;
temp.baseBlock = baseBlock;
*template = temp;
ret.ptr = template;
ret.attr = *((u32*)&temp);
return ret;
}
*/
NAKED
void SetWindowTemplateFields(struct WindowTemplate *template, u8 bg, u8 left, u8 top, u8 width, u8 height, u8 paletteNum, u16 baseBlock)
{
asm_unified("\n\
push {r4-r7,lr}\n\
mov r7, r10\n\
mov r6, r9\n\
mov r5, r8\n\
push {r5-r7}\n\
sub sp, 0x8\n\
ldr r4, [sp, 0x28]\n\
mov r12, r4\n\
ldr r4, [sp, 0x2C]\n\
mov r9, r4\n\
ldr r4, [sp, 0x30]\n\
mov r10, r4\n\
ldr r7, [sp, 0x34]\n\
lsls r1, 24\n\
lsrs r1, 24\n\
lsls r2, 24\n\
lsls r3, 24\n\
mov r4, r9\n\
lsls r4, 24\n\
lsrs r4, 24\n\
mov r9, r4\n\
mov r4, r10\n\
lsls r4, 24\n\
mov r10, r4\n\
ldr r4, _0810FEF0 @ =0xffffff00\n\
mov r8, r4\n\
mov r5, r8\n\
ldr r4, [sp]\n\
ands r5, r4\n\
orrs r5, r1\n\
str r5, [sp]\n\
lsrs r2, 16\n\
ldr r6, _0810FEF4 @ =0xffff00ff\n\
adds r4, r6, 0\n\
ands r4, r5\n\
orrs r4, r2\n\
str r4, [sp]\n\
lsrs r3, 8\n\
ldr r1, _0810FEF8 @ =0xff00ffff\n\
ands r1, r4\n\
orrs r1, r3\n\
str r1, [sp]\n\
mov r2, r12\n\
lsls r2, 24\n\
mov r12, r2\n\
ldr r2, _0810FEFC @ =0x00ffffff\n\
ands r1, r2\n\
mov r4, r12\n\
orrs r4, r1\n\
str r4, [sp]\n\
ldr r1, [sp, 0x4]\n\
mov r2, r8\n\
ands r1, r2\n\
mov r4, r9\n\
orrs r1, r4\n\
mov r8, r1\n\
str r1, [sp, 0x4]\n\
mov r1, r10\n\
lsrs r1, 16\n\
mov r2, r8\n\
ands r6, r2\n\
orrs r6, r1\n\
str r6, [sp, 0x4]\n\
lsls r2, r7, 16\n\
ldr r1, _0810FF00 @ =0x0000ffff\n\
ands r6, r1\n\
orrs r6, r2\n\
str r6, [sp, 0x4]\n\
ldr r1, [sp]\n\
ldr r2, [sp, 0x4]\n\
str r1, [r0]\n\
str r2, [r0, 0x4]\n\
add sp, 0x8\n\
pop {r3-r5}\n\
mov r8, r3\n\
mov r9, r4\n\
mov r10, r5\n\
pop {r4-r7}\n\
pop {r2}\n\
bx r2\n\
.align 2, 0\n\
_0810FEF0: .4byte 0xffffff00\n\
_0810FEF4: .4byte 0xffff00ff\n\
_0810FEF8: .4byte 0xff00ffff\n\
_0810FEFC: .4byte 0x00ffffff\n\
_0810FF00: .4byte 0x0000ffff\n\
");
return temp;
}
// not used
static u16 CreateWindowTemplate(u8 bg, u8 left, u8 top, u8 width, u8 height, u8 paletteNum, u16 baseBlock)
{
struct WindowTemplate template, temp;
SetWindowTemplateFields(&template, bg, left, top, width, height, paletteNum, baseBlock);
temp = template;
return (u16)AddWindow(&temp);
struct WindowTemplate template = SetWindowTemplateFields(bg, left, top, width, height, paletteNum, baseBlock);
return AddWindow(&template);
}
void CreateYesNoMenu(const struct WindowTemplate *window, u8 fontId, u8 left, u8 top, u16 baseTileNum, u8 paletteNum, u8 initialCursorPos)
+3 -4
View File
@@ -121,11 +121,10 @@ void ChangeAmountInMoneyBox(int amount)
void DrawMoneyBox(int amount, u8 x, u8 y)
{
struct WindowTemplate template, template2;
struct WindowTemplate template;
SetWindowTemplateFields(&template, 0, x + 1, y + 1, 8, 3, 15, 8);
template2 = template;
sMoneyBoxWindowId = AddWindow(&template2);
template = SetWindowTemplateFields(0, x + 1, y + 1, 8, 3, 15, 8);
sMoneyBoxWindowId = AddWindow(&template);
FillWindowPixelBuffer(sMoneyBoxWindowId, 0);
PutWindowTilemap(sMoneyBoxWindowId);
TextWindow_SetStdFrame0_WithPal(sMoneyBoxWindowId, 0x21D, 0xD0);
+3 -4
View File
@@ -671,10 +671,9 @@ u8 sub_80F78E0(u8 height)
{
if (sStartMenuWindowId == 0xFF)
{
struct WindowTemplate wTemp1, wTemp2;
SetWindowTemplateFields(&wTemp1, 0, 0x16, 1, 7, height * 2 - 1, DLG_WINDOW_PALETTE_NUM, 0x13D);
wTemp2 = wTemp1;
sStartMenuWindowId = AddWindow(&wTemp2);
struct WindowTemplate template;
template = SetWindowTemplateFields(0, 0x16, 1, 7, height * 2 - 1, DLG_WINDOW_PALETTE_NUM, 0x13D);
sStartMenuWindowId = AddWindow(&template);
PutWindowTilemap(sStartMenuWindowId);
}
return sStartMenuWindowId;