From e06aa2862084906d5ff5c8a1156dcb18f9c6ebe3 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Fri, 22 Feb 2019 18:19:26 +0100 Subject: [PATCH] - fixed the usedcolor array's base type. The usedcolors array which counts the number of pixels in a given color in a font used bytes as storage, so any color that just happened to have a count that is a multiple of 256 the color was considered not present. --- src/gamedata/fonts/font.cpp | 8 ++++---- src/gamedata/fonts/fontinternals.h | 2 +- src/gamedata/fonts/specialfont.cpp | 4 ++-- src/gamedata/fonts/v_font.cpp | 1 - src/gamedata/fonts/v_font.h | 2 +- 5 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/gamedata/fonts/font.cpp b/src/gamedata/fonts/font.cpp index b8725eae630..5d67b3bceee 100644 --- a/src/gamedata/fonts/font.cpp +++ b/src/gamedata/fonts/font.cpp @@ -471,7 +471,7 @@ FFont *FFont::FindFont (FName name) // //========================================================================== -void RecordTextureColors (FImageSource *pic, uint8_t *usedcolors) +void RecordTextureColors (FImageSource *pic, uint32_t *usedcolors) { int x; @@ -524,7 +524,7 @@ static int compare (const void *arg1, const void *arg2) // //========================================================================== -int FFont::SimpleTranslation (uint8_t *colorsused, uint8_t *translation, uint8_t *reverse, TArray &Luminosity) +int FFont::SimpleTranslation (uint32_t *colorsused, uint8_t *translation, uint8_t *reverse, TArray &Luminosity) { double min, max, diver; int i, j; @@ -889,10 +889,10 @@ int FFont::StringWidth(const uint8_t *string) const void FFont::LoadTranslations() { unsigned int count = LastChar - FirstChar + 1; - uint8_t usedcolors[256], identity[256]; + uint32_t usedcolors[256] = {}; + uint8_t identity[256]; TArray Luminosity; - memset (usedcolors, 0, 256); for (unsigned int i = 0; i < count; i++) { if (Chars[i].TranslatedPic) diff --git a/src/gamedata/fonts/fontinternals.h b/src/gamedata/fonts/fontinternals.h index 13250729934..63a69733b2d 100644 --- a/src/gamedata/fonts/fontinternals.h +++ b/src/gamedata/fonts/fontinternals.h @@ -39,6 +39,6 @@ extern uint16_t upperforlower[65536]; class FImageSource; -void RecordTextureColors (FImageSource *pic, uint8_t *usedcolors); +void RecordTextureColors (FImageSource *pic, uint32_t *usedcolors); bool myislower(int code); int stripaccent(int code); diff --git a/src/gamedata/fonts/specialfont.cpp b/src/gamedata/fonts/specialfont.cpp index d90cb330b72..1d3c92c238c 100644 --- a/src/gamedata/fonts/specialfont.cpp +++ b/src/gamedata/fonts/specialfont.cpp @@ -153,12 +153,12 @@ FSpecialFont::FSpecialFont (const char *name, int first, int count, FTexture **l void FSpecialFont::LoadTranslations() { int count = LastChar - FirstChar + 1; - uint8_t usedcolors[256], identity[256]; + uint32_t usedcolors[256] = {}; + uint8_t identity[256]; TArray Luminosity; int TotalColors; int i, j; - memset (usedcolors, 0, 256); for (i = 0; i < count; i++) { if (Chars[i].TranslatedPic) diff --git a/src/gamedata/fonts/v_font.cpp b/src/gamedata/fonts/v_font.cpp index 4c84513bb77..6ec033c9e58 100644 --- a/src/gamedata/fonts/v_font.cpp +++ b/src/gamedata/fonts/v_font.cpp @@ -63,7 +63,6 @@ #define DEFAULT_LOG_COLOR PalEntry(223,223,223) // TYPES ------------------------------------------------------------------- -void RecordTextureColors (FImageSource *pic, uint8_t *colorsused); // EXTERNAL FUNCTION PROTOTYPES -------------------------------------------- diff --git a/src/gamedata/fonts/v_font.h b/src/gamedata/fonts/v_font.h index b8043f08985..9495cf5e6ac 100644 --- a/src/gamedata/fonts/v_font.h +++ b/src/gamedata/fonts/v_font.h @@ -114,7 +114,7 @@ class FFont const void *ranges, int total_colors, const PalEntry *palette); void FixXMoves(); - static int SimpleTranslation (uint8_t *colorsused, uint8_t *translation, + static int SimpleTranslation (uint32_t *colorsused, uint8_t *translation, uint8_t *identity, TArray &Luminosity); void ReadSheetFont(TArray &folderdata, int width, int height, const DVector2 &Scale);