Some of the additions I'm strongly considering are.
* Moving support for formatting variables into the Text class. Right now, substitutions take place in the say (and maybe menu) statement, and so they don't work in things like the screen language. I'd like to make substitutions part of Text itself, so that it works whenever Text is displayed. I'd also like to move from the old-style Python string formatting syntax to something inspired by the new one. Specifically, I'd like to reserve square brackets for string formatting. We'd go from:
Code: Select all
e "Hello, %(player)s. Here's the $%(payment).2f I owe you."
to:
Code: Select all
e "Hello, [player]. Here's the $[payment:.2f] I owe you."
* Reducing texture creation and transfer. Right now, when using the slow text feature, Ren'Py creates a new texture for each frame, and transfers that texture to the GPU. This can (and has been) causing speed problems when displaying walls of text in NVL-mode. My plan is that in 6.12.2, all the text will be rendered at once, and then the GPU (or software renderer) will be responsible for deciding what to display.
This could yield problems with slow-text mode when lines of text overlap vertically - but I think those layouts are rare, and so it won't be a burden in practice. (Evidence to the contrary, presented soon, could make me change to a different approach, one that is slower but doesn't have the potential problem.)
* More options for slow-text mode. Right now, we type out characters one at a time. In 6.12.2, I'm hoping to add a few more effects - having characters fade in, showing pixels instead of characters, having text fade in over the course of a few pixels. (Some effects may require GL rendering, falling back to less sophisticated effects if it's absent.)
* A mode where the text class oversamples text when Ren'Py is upscaling, so the text comes out sharp at the higher size. For example, if an 800x600 game is being displayed at 1024x768, Ren'Py will use a 28 pixel font instead of a 22 pixel one, with the end result being sharper text. (This may be optional or disabled in 6.12.2, as it may require changes to the GL renderer to make it visually appealing.)
* Support for a spacing text tag, a kerning text tag, and a kerning style property. The spacing text tag allows white space to be inserted into text, while kerning would control the space between characters. Does anyone have a good idea how the kerning controls in other programs work? Does it add pixels/points, or does it work on a percentage basis?
* Support for ruby/furigana, small text above the main text.
I'm also debating adding support for text with a vertical layout, although I'm leaning against it. It seems like it would ad a lot of complexity, but probably wouldn't be used much - even in languages were vertical layout is an option, VNs seem to mostly stick with horizontal layouts.