summaryrefslogtreecommitdiff
path: root/Implement-Missing-Text-Function-RESET_SIZE.md
blob: 205036aaf05c2665492b11cdb752ce18061d71fb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
The text printer in Emerald is very versatile and has a lot of control codes. But it seems Game Freak skipped implementing one of the control codes in the release of the game, since it was likely never used. There's a control code that pokeemerald calls the `SIZE` control code, allowing you to change fonts (and thus font size) mid-text. But there's another control code right after that called the `RESET_SIZE` control code that does nothing. Here's how to implement it:

In the text.c, find the function `RenderText` and add the following:
```diff
            case EXT_CTRL_CODE_SIZE:
                subStruct->glyphId = *textPrinter->printerTemplate.currentChar;
                textPrinter->printerTemplate.currentChar++;
                return 2;
            case EXT_CTRL_CODE_RESET_SIZE:
+               subStruct->glyphId = textPrinter->printerTemplate.fontId;
                return 2;
```

Further down the same file, find the function `GetStringWidth` and add the following as well:
```diff
            case EXT_CTRL_CODE_ENG:
                isJapanese = 0;
                break;
            case EXT_CTRL_CODE_RESET_SIZE:
+               if (letterSpacing == -1)
+                   localLetterSpacing = GetFontAttribute(fontId, FONTATTR_LETTER_SPACING);
+               else
+                   localLetterSpacing = letterSpacing;
+               break;
            case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS:
```

Both of these will reset the font to whatever the previous font was when the text printer comes across a `RESET_SIZE` control code.