diff options
Diffstat (limited to 'gflib')
-rw-r--r-- | gflib/bg.c | 112 | ||||
-rw-r--r-- | gflib/text.c | 10 | ||||
-rw-r--r-- | gflib/text.h | 6 | ||||
-rw-r--r-- | gflib/window.c | 36 |
4 files changed, 75 insertions, 89 deletions
diff --git a/gflib/bg.c b/gflib/bg.c index 66dd81a25..12c42d124 100644 --- a/gflib/bg.c +++ b/gflib/bg.c @@ -34,8 +34,8 @@ struct BgConfig2 u32 unk_3:18; void* tilemap; - s32 bg_x; - s32 bg_y; + s32 bg_x; // Maybe unsigned, but game treats it as if it is signed a LOT. + s32 bg_y; // Same for this variable. }; static struct BgControl sGpuBgConfigs; @@ -621,17 +621,15 @@ s32 GetBgX(u8 bg) { if (IsInvalidBg32(bg)) return -1; - else if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) + if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) return -1; - else - return sGpuBgConfigs2[bg].bg_x; + return sGpuBgConfigs2[bg].bg_x; } s32 ChangeBgY(u8 bg, s32 value, u8 op) { u8 mode; - u16 temp1; - u16 temp2; + u16 temp1, temp2; if (IsInvalidBg32(bg) || !GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) { @@ -700,8 +698,7 @@ s32 ChangeBgY(u8 bg, s32 value, u8 op) s32 ChangeBgY_ScreenOff(u8 bg, u32 value, u8 op) { u8 mode; - u16 temp1; - u16 temp2; + u16 temp1, temp2; if (IsInvalidBg32(bg) || !GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) { @@ -772,10 +769,9 @@ s32 GetBgY(u8 bg) { if (IsInvalidBg32(bg)) return -1; - else if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) + if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) return -1; - else - return sGpuBgConfigs2[bg].bg_y; + return sGpuBgConfigs2[bg].bg_y; } void SetBgAffine(u8 bg, s32 srcCenterX, s32 srcCenterY, s16 dispCenterX, s16 dispCenterY, s16 scaleX, s16 scaleY, u16 rotationAngle) @@ -874,81 +870,77 @@ void* GetBgTilemapBuffer(u8 bg) { if (IsInvalidBg32(bg)) return NULL; - else if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) + if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) return NULL; - else - return sGpuBgConfigs2[bg].tilemap; + return sGpuBgConfigs2[bg].tilemap; } void CopyToBgTilemapBuffer(u8 bg, const void *src, u16 mode, u16 destOffset) { - if (!IsInvalidBg32(bg) && !IsTileMapOutsideWram(bg)) - { - if (mode != 0) - CpuCopy16(src, (void *)(sGpuBgConfigs2[bg].tilemap + (destOffset * 2)), mode); - else - LZ77UnCompWram(src, (void *)(sGpuBgConfigs2[bg].tilemap + (destOffset * 2))); - } + if (IsInvalidBg32(bg) || IsTileMapOutsideWram(bg)) + return; + if (mode != 0) + CpuCopy16(src, (void *)(sGpuBgConfigs2[bg].tilemap + (destOffset * 2)), mode); + else + LZ77UnCompWram(src, (void *)(sGpuBgConfigs2[bg].tilemap + (destOffset * 2))); } void CopyBgTilemapBufferToVram(u8 bg) { u16 sizeToLoad; - if (!IsInvalidBg32(bg) && !IsTileMapOutsideWram(bg)) + if (IsInvalidBg32(bg) || IsTileMapOutsideWram(bg)) + return; + + switch (GetBgType(bg)) { - switch (GetBgType(bg)) - { - case 0: - sizeToLoad = GetBgMetricTextMode(bg, 0) * 0x800; - break; - case 1: - sizeToLoad = GetBgMetricAffineMode(bg, 0) * 0x100; - break; - default: - sizeToLoad = 0; - break; - } - LoadBgVram(bg, sGpuBgConfigs2[bg].tilemap, sizeToLoad, 0, 2); + case 0: + sizeToLoad = GetBgMetricTextMode(bg, 0) * 0x800; + break; + case 1: + sizeToLoad = GetBgMetricAffineMode(bg, 0) * 0x100; + break; + default: + sizeToLoad = 0; + break; } + LoadBgVram(bg, sGpuBgConfigs2[bg].tilemap, sizeToLoad, 0, 2); } -void CopyToBgTilemapBufferRect(u8 bg, const void* src, u8 destX, u8 destY, u8 width, u8 height) +void CopyToBgTilemapBufferRect(u8 bg, const void *src, u8 destX, u8 destY, u8 width, u8 height) { - u16 destX16; - u16 destY16; + u16 destX16, destY16; u16 mode; - if (!IsInvalidBg32(bg) && !IsTileMapOutsideWram(bg)) + if (IsInvalidBg32(bg) || IsTileMapOutsideWram(bg)) + return; + switch (GetBgType(bg)) { - switch (GetBgType(bg)) - { - case 0: + case 0: + { + const u16 *srcCopy = src; + for (destY16 = destY; destY16 < (destY + height); destY16++) { - const u16 * srcCopy = src; - for (destY16 = destY; destY16 < (destY + height); destY16++) + for (destX16 = destX; destX16 < (destX + width); destX16++) { - for (destX16 = destX; destX16 < (destX + width); destX16++) - { - ((u16*)sGpuBgConfigs2[bg].tilemap)[((destY16 * 0x20) + destX16)] = *srcCopy++; - } + ((u16 *)sGpuBgConfigs2[bg].tilemap)[((destY16 * 0x20) + destX16)] = *srcCopy++; } - break; } - case 1: + break; + } + case 1: + { + const u8 *srcCopy = src; + mode = GetBgMetricAffineMode(bg, 0x1); + for (destY16 = destY; destY16 < (destY + height); destY16++) { - const u8 * srcCopy = src; - mode = GetBgMetricAffineMode(bg, 0x1); - for (destY16 = destY; destY16 < (destY + height); destY16++) + for (destX16 = destX; destX16 < (destX + width); destX16++) { - for (destX16 = destX; destX16 < (destX + width); destX16++) - { - ((u8*)sGpuBgConfigs2[bg].tilemap)[((destY16 * mode) + destX16)] = *srcCopy++; - } + ((u8 *)sGpuBgConfigs2[bg].tilemap)[((destY16 * mode) + destX16)] = *srcCopy++; } - break; - } } + break; + } } } diff --git a/gflib/text.c b/gflib/text.c index 636fe50a9..2f4dc4f19 100644 --- a/gflib/text.c +++ b/gflib/text.c @@ -154,7 +154,7 @@ u16 AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 printerTemplate.currentY = y; printerTemplate.letterSpacing = gFonts[fontId].letterSpacing; printerTemplate.lineSpacing = gFonts[fontId].lineSpacing; - printerTemplate.unk = gFonts[fontId].unk; + printerTemplate.style = gFonts[fontId].style; printerTemplate.fgColor = gFonts[fontId].fgColor; printerTemplate.bgColor = gFonts[fontId].bgColor; printerTemplate.shadowColor = gFonts[fontId].shadowColor; @@ -484,7 +484,7 @@ u8 GetLastTextColor(u8 colorType) { \ dst = windowTiles + ((j / 8) * 32) + ((j & 7) >> 1) + ((i / 8) * widthOffset) + ((i & 7) * 4); \ bits = ((j & 1) * 4); \ - *dst = (toOrr << bits) | ((0xF0 >> bits) & *dst); \ + *dst = (toOrr << bits) | (*dst & (0xF0 >> bits)); \ } \ r5 >>= 4; \ } \ @@ -1567,7 +1567,7 @@ void SetDefaultFontsPointer(void) u8 GetFontAttribute(u8 fontId, u8 attributeId) { - int result = 0; + u8 result = 0; switch (attributeId) { case FONTATTR_MAX_LETTER_WIDTH: @@ -1582,8 +1582,8 @@ u8 GetFontAttribute(u8 fontId, u8 attributeId) case FONTATTR_LINE_SPACING: result = gFontInfos[fontId].lineSpacing; break; - case FONTATTR_UNKNOWN: - result = gFontInfos[fontId].unk; + case FONTATTR_STYLE: + result = gFontInfos[fontId].style; break; case FONTATTR_COLOR_FOREGROUND: result = gFontInfos[fontId].fgColor; diff --git a/gflib/text.h b/gflib/text.h index 0829d748f..b76897757 100644 --- a/gflib/text.h +++ b/gflib/text.h @@ -282,7 +282,7 @@ enum FONTATTR_MAX_LETTER_HEIGHT, FONTATTR_LETTER_SPACING, FONTATTR_LINE_SPACING, - FONTATTR_UNKNOWN, // dunno what this is yet + FONTATTR_STYLE, FONTATTR_COLOR_FOREGROUND, FONTATTR_COLOR_BACKGROUND, FONTATTR_COLOR_SHADOW @@ -310,7 +310,7 @@ struct TextPrinterTemplate u8 currentY; u8 letterSpacing; u8 lineSpacing; - u8 unk:4; // 0xC + u8 style:4; // 0xC u8 fgColor:4; u8 bgColor:4; u8 shadowColor:4; @@ -339,7 +339,7 @@ struct FontInfo u8 maxLetterHeight; u8 letterSpacing; u8 lineSpacing; - u8 unk:4; + u8 style:4; //unused u8 fgColor:4; u8 bgColor:4; u8 shadowColor:4; diff --git a/gflib/window.c b/gflib/window.c index 7c87ea86d..0be59773c 100644 --- a/gflib/window.c +++ b/gflib/window.c @@ -30,21 +30,18 @@ static void nullsub_8(void) bool16 InitWindows(const struct WindowTemplate *templates) { - int i; - void *bgTilemapBuffer; - int j; - u8 bgLayer; - u16 attrib; + int i, j; u8* allocatedTilemapBuffer; + u16 attrib; int allocatedBaseBlock; + u8 bgLayer; for (i = 0; i < 0x4; ++i) { - bgTilemapBuffer = GetBgTilemapBuffer(i); - if (bgTilemapBuffer != NULL) + if (GetBgTilemapBuffer(i) != NULL) gUnknown_03002F70[i] = nullsub_8; else - gUnknown_03002F70[i] = bgTilemapBuffer; + gUnknown_03002F70[i] = NULL; } for (i = 0; i < 0x20; ++i) @@ -567,19 +564,19 @@ u32 GetWindowAttribute(u8 windowId, u8 attributeId) switch (attributeId) { case WINDOW_BG: - return gWindows[windowId].window.bg; + return (u32)gWindows[windowId].window.bg; case WINDOW_TILEMAP_LEFT: - return gWindows[windowId].window.tilemapLeft; + return (u32)gWindows[windowId].window.tilemapLeft; case WINDOW_TILEMAP_TOP: - return gWindows[windowId].window.tilemapTop; + return (u32)gWindows[windowId].window.tilemapTop; case WINDOW_WIDTH: - return gWindows[windowId].window.width; + return (u32)gWindows[windowId].window.width; case WINDOW_HEIGHT: - return gWindows[windowId].window.height; + return (u32)gWindows[windowId].window.height; case WINDOW_PALETTE_NUM: - return gWindows[windowId].window.paletteNum; + return (u32)gWindows[windowId].window.paletteNum; case WINDOW_BASE_BLOCK: - return gWindows[windowId].window.baseBlock; + return (u32)gWindows[windowId].window.baseBlock; case WINDOW_TILE_DATA: return (u32)(gWindows[windowId].tileData); default: @@ -643,12 +640,9 @@ u16 AddWindow8Bit(const struct WindowTemplate *template) } return 0xFF; } - else - { - gWindows[windowId].tileData = memAddress; - gWindows[windowId].window = *template; - return windowId; - } + gWindows[windowId].tileData = memAddress; + gWindows[windowId].window = *template; + return windowId; } void FillWindowPixelBuffer8Bit(u8 windowId, u8 fillValue) |