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 | |
parent | 0cdd1cc1daf51cb5f128ff0bf2cd208937419cc7 (diff) |
Finish decompiling internation_string_util.c
Diffstat (limited to 'src')
-rw-r--r-- | src/international_string_util.c | 208 | ||||
-rw-r--r-- | src/pokedex.c | 13 | ||||
-rw-r--r-- | src/record_mixing.c | 2 | ||||
-rw-r--r-- | src/text.c | 26 |
4 files changed, 209 insertions, 40 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--; + } + } +} diff --git a/src/pokedex.c b/src/pokedex.c index 66a68f0bd..fa3faab84 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -42,19 +42,6 @@ static EWRAM_DATA struct PokedexListItem *gUnknown_02039B54 = NULL; u8 gUnknown_030060B0; void (*gUnknown_030060B4)(void); -struct PokedexEntry -{ - /*0x00*/ u8 categoryName[12]; - /*0x0C*/ u16 height; //in decimeters - /*0x0E*/ u16 weight; //in hectograms - /*0x10*/ const u8 *description; - /*0x14*/ u16 unused; - /*0x16*/ u16 pokemonScale; - /*0x18*/ u16 pokemonOffset; - /*0x1A*/ u16 trainerScale; - /*0x1C*/ u16 trainerOffset; -}; /*size = 0x20*/ - struct UnknownStruct2 { const u8 *text1; diff --git a/src/record_mixing.c b/src/record_mixing.c index 5f1aef1df..df4a1a720 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -1848,7 +1848,7 @@ static void SanitizeDayCareMailForRuby(struct RecordMixingDayCareMail *src) if (mail->message.itemId != 0) { if (mail->gameLanguage != LANGUAGE_JAPANESE) - PadNameString(mail->OT_name, 0xFC); + PadNameString(mail->OT_name, EXT_CTRL_CODE_BEGIN); ConvertInternationalString(mail->monName, mail->monLanguage); } diff --git a/src/text.c b/src/text.c index ecd3a3095..07c15596e 100644 --- a/src/text.c +++ b/src/text.c @@ -1539,7 +1539,7 @@ u16 RenderText(struct TextPrinter *textPrinter) subStruct->glyphId = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; return 2; - case 7: + case EXT_CTRL_CODE_UNKNOWN_7: return 2; case 8: textPrinter->delayCounter = *textPrinter->printerTemplate.currentChar; @@ -1591,7 +1591,7 @@ u16 RenderText(struct TextPrinter *textPrinter) case 24: m4aMPlayContinue(&gMPlayInfo_BGM); return 2; - case 17: + case EXT_CTRL_CODE_CLEAR: width = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; if (width > 0) @@ -1622,10 +1622,10 @@ u16 RenderText(struct TextPrinter *textPrinter) case 20: textPrinter->minLetterSpacing = *textPrinter->printerTemplate.currentChar++; return 2; - case 21: + case EXT_CTRL_CODE_JPN: textPrinter->japanese = 1; return 2; - case 22: + case EXT_CTRL_CODE_ENG: textPrinter->japanese = 0; return 2; } @@ -1810,12 +1810,12 @@ u32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpacing) case 0x14: ++strPos; break; - case 0x7: + case EXT_CTRL_CODE_UNKNOWN_7: case 0x9: case 0xA: case 0xF: - case 0x15: - case 0x16: + case EXT_CTRL_CODE_JPN: + case EXT_CTRL_CODE_ENG: default: break; } @@ -1970,13 +1970,13 @@ u32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing) case 0x14: minGlyphWidth = *++str; break; - case 0x15: + case EXT_CTRL_CODE_JPN: isJapanese = 1; break; - case 0x16: + case EXT_CTRL_CODE_ENG: isJapanese = 0; break; - case 0x7: + case EXT_CTRL_CODE_UNKNOWN_7: case 0x9: case 0xA: case 0xF: @@ -2096,12 +2096,12 @@ u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str) case 0x14: ++strPos; break; - case 0x7: + case EXT_CTRL_CODE_UNKNOWN_7: case 0x9: case 0xA: case 0xF: - case 0x15: - case 0x16: + case EXT_CTRL_CODE_JPN: + case EXT_CTRL_CODE_ENG: default: continue; } |