From 6ef5154b02f25f746b45189238788d8f337c6690 Mon Sep 17 00:00:00 2001 From: Ted John Date: Sat, 2 Dec 2017 11:47:14 +0000 Subject: [PATCH] Fix #6761: An assertion failed - Invalid Font index 65675 Special font bases were not converted in font_sprite_get_codepoint_width. Assert converted to safe warning. --- src/openrct2/drawing/font.c | 23 +++++++++++++++++------ src/openrct2/drawing/font.h | 2 +- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/openrct2/drawing/font.c b/src/openrct2/drawing/font.c index 34437053d0..2f0b124ea7 100644 --- a/src/openrct2/drawing/font.c +++ b/src/openrct2/drawing/font.c @@ -121,13 +121,24 @@ sint32 font_sprite_get_codepoint_offset(sint32 codepoint) } } -sint32 font_sprite_get_codepoint_width(sint32 fontSpriteBase, sint32 codepoint) +sint32 font_sprite_get_codepoint_width(uint16 fontSpriteBase, sint32 codepoint) { - uint32 spriteFontIdx = fontSpriteBase + font_sprite_get_codepoint_offset(codepoint); -#ifdef NO_RCT2 - openrct2_assert(spriteFontIdx < countof(_spriteFontCharacterWidths), "Invalid font index %u", spriteFontIdx); -#endif - return _spriteFontCharacterWidths[spriteFontIdx]; + if (fontSpriteBase == (uint16)FONT_SPRITE_BASE_MEDIUM_DARK || + fontSpriteBase == (uint16)FONT_SPRITE_BASE_MEDIUM_EXTRA_DARK) + { + fontSpriteBase = (uint16)FONT_SPRITE_BASE_MEDIUM; + } + + sint32 spriteFontIdx = fontSpriteBase + font_sprite_get_codepoint_offset(codepoint); + if (spriteFontIdx >= 0 && spriteFontIdx < countof(_spriteFontCharacterWidths)) + { + return _spriteFontCharacterWidths[spriteFontIdx]; + } + else + { + log_warning("Invalid font index %u", spriteFontIdx); + return _spriteFontCharacterWidths[0]; + } } sint32 font_sprite_get_codepoint_sprite(sint32 fontSpriteBase, sint32 codepoint) diff --git a/src/openrct2/drawing/font.h b/src/openrct2/drawing/font.h index 90d773e805..58240685da 100644 --- a/src/openrct2/drawing/font.h +++ b/src/openrct2/drawing/font.h @@ -72,7 +72,7 @@ extern "C" { void font_sprite_initialise_characters(); sint32 font_sprite_get_codepoint_offset(sint32 codepoint); -sint32 font_sprite_get_codepoint_width(sint32 fontSpriteBase, sint32 codepoint); +sint32 font_sprite_get_codepoint_width(uint16 fontSpriteBase, sint32 codepoint); sint32 font_sprite_get_codepoint_sprite(sint32 fontSpriteBase, sint32 codepoint); sint32 font_get_size_from_sprite_base(uint16 spriteBase); sint32 font_get_line_height(sint32 fontSpriteBase);