Text colour incorrect at start of a line

Sun Mar 14, 2021 12:45 pm

Here's an example. The opening parenthesis before the URL should be gray, but it is orange. Only the URL should be orange.

Re: Text colour incorrect at start of a line

Sun Mar 14, 2021 2:06 pm

I can confirm this has been happening for a long time, seemingly arbitrarily, every time line breaking is involved. I just never figured a way to reproduce it consistently, though, so it's nice to see a proper report.

Re: Text colour incorrect at start of a line

Sun Mar 14, 2021 2:45 pm

If this is about line breaking screwing up text colors, yes, this is ancient. However, due to the inevitable fact that some mods depend on it it could not be fixed.
For multiline text, each line needs to start with a color control code then.

Re: Text colour incorrect at start of a line

Sun Mar 14, 2021 3:24 pm

Mods depend on broken color when breaking lines?

Re: Text colour incorrect at start of a line

Sun Mar 14, 2021 3:49 pm

Don't ask me, this was more than 10 years ago. Randi declined to fix it back then.

Re: Text colour incorrect at start of a line

Sun Mar 14, 2021 5:08 pm

Graf Zahl wrote:For multiline text, each line needs to start with a color control code then.


It's not exactly multi-line... It's one line of text, but it gets wrapped to 4 lines because of the SetHudSize call.

Re: Text colour incorrect at start of a line

Mon Mar 15, 2021 3:59 am

Looking at V_BreakLines it does seem that it TRIES to preserve color escapes when splitting a line in half, but it doesn't always work, even though one quick look through the code tells me everything is fine, but maybe it goes deeper.

Re: Text colour incorrect at start of a line

Fri Apr 23, 2021 9:05 pm

I think we have narrowed down the cause of this bug...

V_BreakLines does not account for colors that are defined after the space that ends up being use to split the string into lines once the max width is hit...

So something nonsensical like this:
SetHudSize(640, 400, 1);
SetHUDWrapWidth(150);
HudMessage(s:"\cCThis is a test string\cR!!!!!!!!"; 0, 1, CR_UNTRANSLATED, 100.0, 100.0, 0, 1.0);

...would end up split between 'test' and 'string', but because the "\cR" would have already been parsed before the max width was hit (but after the last whitespace was set), the next line would start out colored dark red (R), despite still being supposed to be gray (C).

Simple map with this script included is attached.
You do not have the required permissions to view the files attached to this post.