-
Notifications
You must be signed in to change notification settings - Fork 212
Maniacs text rendering smaller updates #3479
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
jetrotal
wants to merge
2
commits into
EasyRPG:master
Choose a base branch
from
EasyRPG-NewFeatures:jetrotal-maniacs-TextRenderingSmallerUpdates
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Maniacs text rendering smaller updates #3479
jetrotal
wants to merge
2
commits into
EasyRPG:master
from
EasyRPG-NewFeatures:jetrotal-maniacs-TextRenderingSmallerUpdates
Conversation
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
more than 20 color are no possible.
Thanks. Could you document e.g. inside this PR how the parsing of invalid data behaves? Such as |
Analysis of Color Command
|
Input String | How It's Parsed (ParseArray ) |
Resulting text_color Index |
Visual Output |
---|---|---|---|
\C[3] |
values={3} , is_array=false |
3 |
Text becomes color #3. |
\C[3,1] |
values={3, 1} , is_array=true |
1 * 10 + 3 = 13 |
Text becomes color #13. |
\C[3, 100] |
values={3, 100} , is_array=true |
100 * 10 + 3 = 1003 |
Out of Bounds. The renderer will try to read from an invalid area of the System graphic. This results in a black, transparent, or garbage-colored pixel being used as the text color. |
\C[3,a] |
parse_one_number for y reads nothing, gets 0 . Returns values={3, 0} , is_array=true . |
0 * 10 + 3 = 3 |
The text becomes color #3. The a and everything after it until the ] is ignored for that parameter. |
\C[3, a] |
parse_one_number for y encounters a space, stops, and returns 0 . Returns values={3, 0} , is_array=true . |
0 * 10 + 3 = 3 |
The text becomes color #3. The spaces and the a are ignored. |
\C[3, 0003] |
parse_one_number handles leading zeros correctly. Parsed as values={3, 3} , is_array=true . |
3 * 10 + 3 = 33 |
The text becomes color #33 (valid only with Maniacs). Without the patch, it would be clamped to 0. |
\C[3 |
ParseArray never finds the closing ] . It reads to the end of the string. The command is considered malformed |
(dialog skips itself) | for some reason the dialog skips to the next comment right after hitting '3' |
\C[] |
ParseArray returns values={} . The if (!pres.values.empty()) check fails. |
(no change) | The text color does not change. |
\C[3,] |
ParseArray returns values={3, 0} , is_array=true . |
0 * 10 + 3 = 3 |
The text becomes color #3. |
Analysis of ExFont Command $[...]
This command is handled by Utils::ExFontNext
. It has more complex internal logic.
Input String | How It's Parsed (ExFontNext ) |
Renderer Action | Visual Output |
---|---|---|---|
$? |
The character after $ is not [ or an alphabet character. The parser fails. |
The $ is treated as a literal character, and ? is parsed next. |
The literal text $? is printed. |
$[ ] |
ParseArray is called on [ ] . It finds no numbers and returns an empty values vector. The if conditions in ExFontNext fail. |
The parser fails to identify a valid ExFont command. | The literal text $[ ] is printed. |
$a |
Standard (non-Maniacs) syntax. The parser returns the character code for 'a'. | The renderer looks up the 'a' icon (index 0) and draws it. | Icon 'a' (top-left icon). |
$[a] |
Maniacs AZ Mode. The parser finds [a] , identifies the single letter, and returns the character code for 'a'. |
The renderer looks up the 'a' icon (index 0) and draws it. | Icon 'a' (top-left icon). |
$[1] |
Maniacs Index Mode. ParseArray returns values={1} , is_array=false . The parser calculates coordinates x=1 , y=0 . |
The renderer receives (x=1, y=0) and draws the icon at that grid position. |
Icon 'b' (the second icon on the first row). |
$[4,1] |
Maniacs XY Mode. ParseArray returns values={4, 1} , is_array=true . |
The renderer receives (x=4, y=1) and draws the icon at that grid position. |
The icon at the 5th column, 2nd row. |
$[1000] |
Maniacs Index Mode. ParseArray returns values={1000} . Parser calculates x = 1000 % 13 = 12 , y = 1000 / 13 = 76 . |
The renderer receives (x=12, y=76) . ExFont::vRender then performs a bounds check against the ExFont sheet's dimensions. Since y=76 is far beyond the typical height, this check fails. |
A blank space the size of one icon. |
$[1,a] |
ParseArray on the second argument (a ) returns 0 . Parsed as $[1,0] . |
The renderer receives (x=1, y=0) . |
Icon 'b'. The ,a part is effectively ignored and treated as ,0 . |
$[3 |
ExFontNext finds [ but never finds the closing ] . It fails to match any bracketed syntax. It also fails the standard $A-Z check. |
The parser fails completely. | The literal text $[3 is printed. |
$[\V[1]] |
Maniacs Index Mode with a variable. ParseArray 's internal helper resolves \V[1] . If Variable #1 contains 27 , it's parsed as $[27] . |
The parser calculates coordinates for index 27 (x=1 , y=2 ). The renderer draws the icon at that position. |
The icon corresponding to index 27. |
syntax used:
@sys.skin "System" .stretch .gothic
@comment "--- Color Command Tests (\\C) ---"
@comment "These tests assume the Maniacs patch is enabled."
@msg.show "\c[0]First, some valid examples."
@msg.show "This is default color \c[0]0."
@msg.show "This is standard color \c[2]2."
@msg.show "This is a Maniacs patch extended color \c[25]25."
@msg.show "\c[0]This uses XY coordinates: \c[3,1](3,1)."
@comment "---"
@comment "Now testing with variables."
v[500] = 13
@msg.show "Color is from V[500]: \c[\v[500]]Hello!"
v[500] = 5
v[501] = 1
@msg.show "Color from XY V[500],V[501]: \c[\v[500],\v[501]]Hello!"
@comment "---"
@comment "Now for problematic and invalid examples."
@comment "The parser should treat non-numeric parts as 0."
@msg.show "\c[3,a] becomes \c[3,0]Color 3."
@msg.show "\c[3, a] spaces are ignored, also \c[3,0]Color 3."
@comment "---"
@comment "The parser should handle leading zeros correctly."
@msg.show "\c[3,0003] becomes \c[3,3]Color 33."
@comment "---"
@comment "Out of bounds values result in garbage/black colors."
@msg.show "\c[3,100] is color 1003 (out of bounds)."
@msg.show "\c[9999999999] will likely overflow."
@comment "---"
@comment "Malformed syntax is rendered as literal text."
@msg.show "Unterminated bracket: \c[3"
@msg.show "Empty bracket: \c[]No color change."
@msg.show "Trailing comma: \c[3,]becomes \c[3,0]Color 3."
@comment " "
@comment "--- ExFont Icon Tests ($) ---"
@comment "These tests assume the Maniacs patch is enabled."
@comment "And that you have a valid ExFont.png file."
@msg.show "Standard: $A, Maniacs AZ: $[A]"
@comment "Icon at index 1 is 'B'"
@msg.show "Maniacs Index: $[1]"
@comment "Icon at X=4, Y=1"
@msg.show "Maniacs XY: $[4,1]"
@comment "---"
@comment "Now testing with variables."
v[500] = 2
@msg.show "Icon index from V[500]: $[\v[500]]"
v[500] = 2
v[501] = 2
@msg.show "Icon XY from variables: $[\v[500],\v[501]]"
@comment "---"
@comment "Now for problematic and invalid examples."
@comment "Invalid char after '$' is rendered literally."
@msg.show "Invalid syntax: $?"
@comment "---"
@comment "The parser treats non-numeric parts as 0."
@msg.show "$[1,a] should become $[1,0]"
@comment "---"
@comment "Out of bounds coordinates will result in a blank icon."
@msg.show "Out of bounds index: $[1000]"
@msg.show "Out of bounds XY: $[1,1000]"
@comment "---"
@comment "Malformed syntax is rendered as literal text."
@msg.show "Unterminated bracket: $[3"
@msg.show "Empty bracket: $[ ]"
@comment " "
@comment "--- End of Tests ---"
@msg.show "All tests complete."
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.
Support For some missing maniacs text rendering tags:
\c[19]
$[n]
or$[\v[n]]
\c[x,y] or $[x,y]
I noticed some duplicated code when formating strings in game_message and game_windows... But I won't mess with those, because every time I propose structural changes my PR goes to limbo to never be aproved.