this post was submitted on 14 Aug 2024
21 points (100.0% liked)

Godot

5903 readers
5 users here now

Welcome to the programming.dev Godot community!

This is a place where you can discuss about anything relating to the Godot game engine. Feel free to ask questions, post tutorials, show off your godot game, etc.

Make sure to follow the Godot CoC while chatting

We have a matrix room that can be used for chatting with other members of the community here

Links

Other Communities

Rules

We have a four strike system in this community where you get warned the first time you break a rule, then given a week ban, then given a year ban, then a permanent ban. Certain actions may bypass this and go straight to permanent ban if severe enough and done with malicious intent

Wormhole

[email protected]

Credits

founded 1 year ago
MODERATORS
21
submitted 3 months ago* (last edited 3 months ago) by [email protected] to c/godot
 

I'm sure there's a really simple answer to this, but it's a surprisingly difficult problem to search for.

I've got a RichTextBox control and I'm trying to write text that includes the letters "ff", but they don't show up. This is the specific code in question:

for entry in suffix:
  desc += "[color=darkgray]Suffix (Tier: %s, Quality: %s%%) 'of %s'\n[color=royalblue]" % [entry.tier, entry.quality, entry.mod.name]

This is what it ends up printing:

If I change one or both of the Fs to capitals, they both display fine; it's specifically two lowercase Fs that're problematic. They also display fine elsewhere in the same textbox; it's just this line specifically that's problematic. Even tried escaping it but it didn't like that, either.

Most of the settings on the RichTextBox are default; the font has a lowercase 'f' character; I haven't done anything weird with the font size, or style, or anything else.

I'm tearing my hair out here. Please tell me this is just some stupid bbcode tag or some such.

Edit: For anyone finding this later:

It's a ligature (ffi) that the font is missing a glyph for. To solve the problem: On the Import tab, choose the font you're using, click Advanced, and under Metadata Overrides, expand OpenType Features, click Add Feature -> Ligatures, add whichever option is appropriate (discretionary or standard ligatures), then disable the option. Reimport the font, and the issue is fixed!

top 10 comments
sorted by: hot top controversial new old
[–] [email protected] 24 points 3 months ago (1 children)

Not a Godot expert but does the font maybe declare that it contains an "ff" ligature that it doesn't actually contain? The fact that this affects the combination "ff" strongly suggests a ligature issue to me.

[–] [email protected] 10 points 3 months ago* (last edited 3 months ago) (1 children)

Oh my god, this is exactly it. If I type "Suffix" in a word processor in that font I get the same result. I didn't actually have the font installed as a system font; I'd only imported it into Godot, so I hadn't even considered this possibility. Thank you!

I guess the followup question now is, is there a way to disable contextual ligatures in RichTextBox controls? I'm not seeing an option for it. :|

I've found the stupidest temporary hack, which is to include useless BBCode tags in the middle of the word:

for entry in suffix:
    desc += "[color=darkgray]Suf[i][/i]fix (Tier: %s, Quality: %s%%) 'of %s'\n[color=royalblue]" % [entry.tier, entry.quality, entry.mod.name]

Sure would be nice to have a non-hacky fix though.

[–] [email protected] 5 points 3 months ago (1 children)

Ligatures are a core feature of fonts themselves, even for "normal" fonts, so I quite doubt it.

[–] [email protected] 9 points 3 months ago (1 children)

OpenType font features like ligatures can be individually disabled if the renderer supports this. A quick web search for "godot disable opentype features" reveals that Godot does: https://docs.godotengine.org/en/stable/tutorials/ui/gui_using_fonts.html#advanced-font-features

@[email protected]: This might take care of your problem.

[–] [email protected] 6 points 3 months ago

This is it! Turns out it's an import option under Advanced -> Metadata Overrides -> OpenType Features; you have to add the ligatures feature, then disable the feature (unintuitively). Thanks so much!

[–] [email protected] 4 points 3 months ago (1 children)

I'm unable to test this, but I was browsing around and found that in a FontVariation you add "Standard Ligatures" to "OpenType Features" and then disable it. Would that by chance help solve your issue? There's also a similar field in the font import options in "Metadata Overrides".

[–] [email protected] 4 points 3 months ago (1 children)

This did it! Thank you very much! That's very unintuitive... I would have thought that adding the feature and disabling it would have been equitable to not having added it at all.

[–] 0xDREADBEEF 4 points 3 months ago* (last edited 3 months ago)

This kind of stuff might be worth mentioning in their discord and asking if it's worth writing some docs on :) go get some contributor cred 😄 Even just writing reproducible steps and solution and why the solution works could be worth it because then a technical doc writer can take that and start from there.

[–] [email protected] 4 points 3 months ago (1 children)

I don't wish to out your project too much, but does it have anything to do with Path of Exile?

[–] [email protected] 4 points 3 months ago

Sure does! It's an only semi-serious fan project, I guess you could say. Trying hard to mimic PoE's item appearance... I guess it's working, if you identified it that easily. ;)