diff options
author | Marcus Huderle <huderlem@gmail.com> | 2018-11-27 17:21:23 -0600 |
---|---|---|
committer | Marcus Huderle <huderlem@gmail.com> | 2018-11-27 17:21:23 -0600 |
commit | 9fafa637438b45a48de36a4a7bf898111951ec92 (patch) | |
tree | aa3daaacbff8c43cd73d66a0a50a1bd7e91487d8 /src/international_string_util.c | |
parent | 0cdd1cc1daf51cb5f128ff0bf2cd208937419cc7 (diff) |
Finish decompiling internation_string_util.c
Diffstat (limited to 'src/international_string_util.c')
-rw-r--r-- | src/international_string_util.c | 208 |
1 files changed, 195 insertions, 13 deletions
diff --git a/src/international_string_util.c b/src/international_string_util.c index 9de338c59..a7c42c39e 100644 --- a/src/international_string_util.c +++ b/src/international_string_util.c @@ -1,40 +1,46 @@ #include "global.h" -#include "text.h" #include "international_string_util.h" +#include "list_menu.h" +#include "pokedex.h" +#include "script_menu.h" +#include "string_util.h" +#include "strings.h" +#include "text.h" +#include "window.h" -extern s32 convert_pixel_width_to_tile_width(s32 a0); // script menu +extern const struct PokedexEntry gPokedexEntries[]; -s32 GetStringCenterAlignXOffset(s32 fontId, const u8 *str, s32 totalWidth) +int GetStringCenterAlignXOffset(int fontId, const u8 *str, int totalWidth) { return GetStringCenterAlignXOffsetWithLetterSpacing(fontId, str, totalWidth, 0); } -s32 GetStringRightAlignXOffset(s32 fontId, const u8 *str, s32 totalWidth) +int GetStringRightAlignXOffset(int fontId, const u8 *str, int totalWidth) { return GetStringWidthDifference(fontId, str, totalWidth, 0); } -s32 GetStringCenterAlignXOffsetWithLetterSpacing(s32 fontId, const u8 *str, s32 totalWidth, s32 letterSpacing) +int GetStringCenterAlignXOffsetWithLetterSpacing(int fontId, const u8 *str, int totalWidth, int letterSpacing) { return GetStringWidthDifference(fontId, str, totalWidth, letterSpacing) / 2; } -s32 GetStringWidthDifference(s32 fontId, const u8 *str, s32 totalWidth, s32 letterSpacing) +int GetStringWidthDifference(int fontId, const u8 *str, int totalWidth, int letterSpacing) { - s32 stringWidth = GetStringWidth(fontId, str, letterSpacing); + int stringWidth = GetStringWidth(fontId, str, letterSpacing); if (totalWidth > stringWidth) return totalWidth - stringWidth; else return 0; } -s32 GetMaxWidthInMenuTable(const struct MenuAction *str, s32 arg1) +int GetMaxWidthInMenuTable(const struct MenuAction *str, int arg1) { - s32 i, var; + int i, var; for (var = 0, i = 0; i < arg1; i++) { - s32 stringWidth = GetStringWidth(1, str[i].text, 0); + int stringWidth = GetStringWidth(1, str[i].text, 0); if (stringWidth > var) var = stringWidth; } @@ -42,16 +48,192 @@ s32 GetMaxWidthInMenuTable(const struct MenuAction *str, s32 arg1) return convert_pixel_width_to_tile_width(var); } -s32 sub_81DB3D8(const struct MenuAction *str, const u8* arg1, s32 arg2) +int sub_81DB3D8(const struct MenuAction *str, const u8* arg1, int arg2) { - s32 i, var; + int i, var; for (var = 0, i = 0; i < arg2; i++) { - s32 stringWidth = GetStringWidth(1, str[arg1[i]].text, 0); + int stringWidth = GetStringWidth(1, str[arg1[i]].text, 0); if (stringWidth > var) var = stringWidth; } return convert_pixel_width_to_tile_width(var); } + +int sub_81DB41C(const struct ListMenuTemplate *listMenu) +{ + int i, maxWidth, finalWidth; + const struct ListMenuItem *items = listMenu->items; + + maxWidth = 0; + for (i = 0; i < listMenu->totalItems; i++) + { + int width = GetStringWidth(listMenu->fontId, items[i].name, 0); + if (width > maxWidth) + maxWidth = width; + } + + finalWidth = maxWidth + listMenu->item_X + 9; + if (finalWidth < 0) + finalWidth += 7; + + finalWidth >>= 3; + if (finalWidth > 28) + finalWidth = 28; + + return finalWidth; +} + +void CopyMonCategoryText(int dexNum, u8 *dest) +{ + u8 *str = StringCopy(dest, gPokedexEntries[dexNum].categoryName); + *str = CHAR_SPACE; + StringCopy(str + 1, gText_Pokemon); +} + +u8 *sub_81DB494(u8 *str, int fontId, u8 *str2, int totalStringWidth) +{ + u8 *buffer; + int width; + int clearWidth; + + if (str2) + { + buffer = StringCopy(str, str2); + width = GetStringWidth(fontId, str2, 0); + } + else + { + buffer = str; + width = 0; + } + + clearWidth = totalStringWidth - width; + if (clearWidth > 0) + { + *buffer = EXT_CTRL_CODE_BEGIN; + buffer++; + *buffer = EXT_CTRL_CODE_CLEAR; + buffer++; + *buffer = clearWidth; + buffer++; + *buffer = EOS; + } + + return buffer; +} + +void PadNameString(u8 *dest, u8 padChar) +{ + u8 length; + + StripExtCtrlCodes(dest); + length = StringLength(dest); + if (padChar == EXT_CTRL_CODE_BEGIN) + { + while (length < PLAYER_NAME_LENGTH - 1) + { + dest[length] = EXT_CTRL_CODE_BEGIN; + dest[length + 1] = EXT_CTRL_CODE_UNKNOWN_7; + length += 2; + } + } + else + { + while (length < PLAYER_NAME_LENGTH - 1) + { + dest[length] = padChar; + length++; + } + } + + dest[length] = EOS; +} + +void sub_81DB52C(u8 *str) +{ + if (StringLength(str) < PLAYER_NAME_LENGTH - 1) + ConvertInternationalString(str, LANGUAGE_JAPANESE); + else + StripExtCtrlCodes(str); +} + +void sub_81DB554(u8 *str, u8 arg1) +{ + u8 *buffer; + if (StringLength(str) < PLAYER_NAME_LENGTH - 1) + { + ConvertInternationalString(str, LANGUAGE_JAPANESE); + } + else if (arg1 == EXT_CTRL_CODE_BEGIN) + { + StripExtCtrlCodes(str); + } + else + { + buffer = str; + while (buffer[1] != EOS) + buffer++; + + while (buffer >= str && buffer[0] == arg1) + { + buffer[0] = EOS; + buffer--; + } + } +} + +void sub_81DB5AC(u8 *str) +{ + if (*str++ == EXT_CTRL_CODE_BEGIN && *str++ == EXT_CTRL_CODE_JPN) + { + while (*str != EOS) + { + if (str[0] == EXT_CTRL_CODE_BEGIN && str[1] == EXT_CTRL_CODE_ENG) + return; + + str++; + } + + *str++ = EXT_CTRL_CODE_BEGIN; + *str++ = EXT_CTRL_CODE_ENG; + *str = EOS; + } +} + +void TVShowConvertInternationalString(u8 *dest, const u8 *src, int language) +{ + StringCopy(dest, src); + ConvertInternationalString(dest, language); +} + +int sub_81DB604(u8 *str) +{ + if (str[0] == EXT_CTRL_CODE_BEGIN && str[1] == EXT_CTRL_CODE_JPN) + return LANGUAGE_JAPANESE; + else + return LANGUAGE_ENGLISH; +} + +void sub_81DB620(int windowId, int columnStart, int rowStart, int numFillTiles, int numRows) +{ + u8 *windowTileData; + int fillSize, windowRowSize, rowsToFill; + struct Window *window = &gWindows[windowId]; + + fillSize = numFillTiles * TILE_SIZE_4BPP; + windowRowSize = window->window.width * TILE_SIZE_4BPP; + windowTileData = window->tileData + (rowStart * windowRowSize) + (columnStart * TILE_SIZE_4BPP); + if (numRows > 0) + { + rowsToFill = numRows; + while (rowsToFill) + { + CpuFastFill8(0x11, windowTileData, fillSize); + windowTileData += windowRowSize; + rowsToFill--; + } + } +} |