Repository navigation
feat(menu): a Text size row for dialogue, Navi and signs - #1579
Merged
Merged
Conversation
The Insert menu's Gameplay tab gets a Text size row (Original, 110%, 125%, 150%, 175%), under Text speed. It scales the text of dialogue, Navi and signs. nx2/oot_patches.py's letters' block of f_80b1e140 (a LetterAnimControl's step, already patched for Text speed) now also calls hos_oot_text_pane with the control (x19). host/oot_text_size.c scales the diagonal of the pane wrapper's 2D scale (+0x28, +0x38; 0.8 for dialogue) from the game's own value: never twice, again from the game's value whenever the game writes it, and back to it at Original. A field never scaled is not touched at Original. HOS_TEXT_SIZE=<0..4> stands over the menu, as HOS_TEXT_SPEED does. The option id is HOS_OPT_TEXT_SIZE (10). tests/test_rumble_menu.py's id table now reads one-name HOS_OPT_* enums too, so it still checks that no option id is answered twice. tests/test_audio_volume.py (NotRexed#1270) reads them the same way now. Tests: tests/test_text_size.py compiles host/oot_text_size.c against a fake guest memory (Original, each size, the game writing its value again, back to Original, missing control/wrapper/pane, more panes than the table keeps). tests/test_text_speed.py checks the hook gets x19. Played on Windows (this change applied to the v2.0.11 builder's source): dialogue and signs grow at each size and go back at Original; the choice is kept in hookshot_options.ini. Assisted-by: Claude Code (Claude Opus 5.5) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
getzabelz
force-pushed
the
feat/text-size
branch
from
November 10, 2026 19:06
e888633 to
4bae30c
Compare
Contributor
Author
|
@hckrman101 Thanks for the review!
|
Contributor
Author
|
One more note, also added to the description: at 175% a long line of text can reach slightly past the edges of the dialogue box. It is only a little, and the text stays fully readable, so I would keep this size anyway: it is the one that helps players with low vision the most. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds a Text size row to the Insert menu's Gameplay tab, under Text speed: Original, 110%, 125%, 150%, 175%. It scales the text of dialogue, Navi and signs, for players who find the game's text small: on a TV across the room, or with low vision.
I have low vision myself, and the game's dialogue text is hard for me to read at its own size. That is why I made this row.
What changed
host/oot_text_size.c(new):hos_oot_text_panegets a LetterAnimControl and scales its pane wrapper's 2D scale (+0x28 x, +0x38 y; 0.8 for dialogue) by the menu's choice. It always works from the game's own value: never scaled twice, taken again whenever the game writes it, and given back at Original. A field never scaled is not touched at Original, so the default changes nothing.HOS_TEXT_SIZE=<0..4>stands over the menu, asHOS_TEXT_SPEEDdoes.nx2/oot_patches.py: the letters' block off_80b1e140(already patched for Text speed) also callshos_oot_text_pane(c, c->x[19]). Same anchor as Text speed, so a game version whose code differs keeps its own code, as today.gpu/vk/vk_menu.*,vk_replay.cpp,vk_api.h: the row, its hints,opts.text_size(saved inhookshot_options.iniastext_size) and option idHOS_OPT_TEXT_SIZE(10).readme.md: the row in the options table.Tests
tests/test_text_size.py(new; declares its ownRUN_ALL_ARGS): compileshost/oot_text_size.cagainst a fake guest memory and checks Original, each size, the game writing its value again, a different size after another, back to Original, a missing control/wrapper/pane, and more panes than the host's table keeps. It also checks the menu row, the option id and the patch's call.tests/test_text_speed.py: the patched block passes x19 to the hook.tests/test_rumble_menu.pyandtests/test_audio_volume.py(feat: Audio tab in the Insert menu with Volume and Mute in background #1270): their option-id tables now also read one-nameHOS_OPT_*enums (asHOS_OPT_TEXT_SIZE), so they still check that no option id is answered twice.python -I -B tests/run_all.pyon Windows, rebased on currentmain: 272 passed, 6 failed. The 6 fail the same way on unmodifiedmainon this PC (local environment); none of them touch these files.Played
On Windows, with this change applied to a v2.0.13 build's source:
text_sizeinhookshot_options.ini).The new size applies from the next conversation: a text box already on screen, or the rest of the conversation it belongs to, keeps the size it was drawn at. Not yet played on a build of current
main, or on Linux.In game
The same line at three sizes (Hyrule Market, 3440x1440):
Other lines, at 110% and 175%:
Measured on these screenshots, against Original:
At 175% a long line of text can reach slightly past the edges of the dialogue box. I have seen it while playing: it is only a little, and the text stays fully readable. I would keep this size anyway. As a player with low vision, it is the size that helps me the most, and it will be the same for others.
The row in the v2.0.11 builder's Insert menu (one help line; on current
maineach value has its own hint):