[Scummvm-git-logs] scummvm master -> 79f87d4001558310b6b7bb3673eacd5cae47922b
tag2015
noreply at scummvm.org
Tue Aug 27 15:47:26 UTC 2024
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
79f87d4001 AGS: Implement variable font color in SpriteFont plugin
Commit: 79f87d4001558310b6b7bb3673eacd5cae47922b
https://github.com/scummvm/scummvm/commit/79f87d4001558310b6b7bb3673eacd5cae47922b
Author: Walter Agazzi (walter.agazzi at protonmail.com)
Date: 2024-08-27T17:29:49+02:00
Commit Message:
AGS: Implement variable font color in SpriteFont plugin
The current implementation is based off old code that ignored
the textcolor, resulting in all texts being white.
This is a straight port from Clifftop's implementation.
Fixes texts in
* The Witch's Lullaby / * Ossuarium
* Off the Clock / * Mess Goblins
* Detective Gallo
Changed paths:
engines/ags/plugins/ags_sprite_font/sprite_font_renderer.cpp
engines/ags/plugins/ags_sprite_font/sprite_font_renderer.h
engines/ags/plugins/ags_sprite_font/variable_width_sprite_font.cpp
engines/ags/plugins/ags_sprite_font/variable_width_sprite_font.h
diff --git a/engines/ags/plugins/ags_sprite_font/sprite_font_renderer.cpp b/engines/ags/plugins/ags_sprite_font/sprite_font_renderer.cpp
index 380ec42f5ca..c83bef6bcae 100644
--- a/engines/ags/plugins/ags_sprite_font/sprite_font_renderer.cpp
+++ b/engines/ags/plugins/ags_sprite_font/sprite_font_renderer.cpp
@@ -117,7 +117,7 @@ void SpriteFontRenderer::RenderText(const char *text, int fontNumber, BITMAP *de
int row = c / font->Columns;
int column = c % font->Columns;
BITMAP *src = _engine->GetSpriteGraphic(font->SpriteNumber);
- Draw(src, destination, x + (i * font->CharWidth), y, column * font->CharWidth, row * font->CharHeight, font->CharWidth, font->CharHeight);
+ Draw(src, destination, x + (i * font->CharWidth), y, column * font->CharWidth, row * font->CharHeight, font->CharWidth, font->CharHeight, colour);
}
//_engine->SetVirtualScreen(vScreen);
@@ -126,7 +126,7 @@ void SpriteFontRenderer::RenderText(const char *text, int fontNumber, BITMAP *de
-void SpriteFontRenderer::Draw(BITMAP *src, BITMAP *dest, int destx, int desty, int srcx, int srcy, int width, int height) {
+void SpriteFontRenderer::Draw(BITMAP *src, BITMAP *dest, int destx, int desty, int srcx, int srcy, int width, int height, int colour) {
int32 srcWidth, srcHeight, destWidth, destHeight, srcColDepth, destColDepth;
@@ -150,7 +150,10 @@ void SpriteFontRenderer::Draw(BITMAP *src, BITMAP *dest, int destx, int desty, i
int starty = MAX(0, (-1 * desty));
- int srca, srcr, srcg, srcb, desta, destr, destg, destb, finalr, finalg, finalb, finala, col;
+ int srca, srcr, srcg, srcb, desta, destr, destg, destb, finalr, finalg, finalb, finala, col, col_r, col_g, col_b;
+ col_r = getr32(colour);
+ col_g = getg32(colour);
+ col_b = getb32(colour);
int srcxx = (startx + srcx) * bpp;
int destxx = (startx + destx) * bpp;
@@ -187,11 +190,9 @@ void SpriteFontRenderer::Draw(BITMAP *src, BITMAP *dest, int destx, int desty, i
destb = getb32(destargb);
desta = geta32(destargb);
-
- finalr = srcr;
- finalg = srcg;
- finalb = srcb;
-
+ finalr = (col_r * srcr) / 255;
+ finalg = (col_g * srcg) / 255;
+ finalb = (col_b * srcb) / 255;
finala = 255 - (255 - srca) * (255 - desta) / 255;
finalr = srca * finalr / finala + desta * destr * (255 - srca) / finala / 255;
diff --git a/engines/ags/plugins/ags_sprite_font/sprite_font_renderer.h b/engines/ags/plugins/ags_sprite_font/sprite_font_renderer.h
index d1825ec8a6c..2526d34f7c9 100644
--- a/engines/ags/plugins/ags_sprite_font/sprite_font_renderer.h
+++ b/engines/ags/plugins/ags_sprite_font/sprite_font_renderer.h
@@ -34,7 +34,7 @@ class SpriteFontRenderer : public IAGSFontRenderer2 {
protected:
IAGSEngine *_engine;
SpriteFont *getFontFor(int fontNum);
- void Draw(BITMAP *src, BITMAP *dest, int destx, int desty, int srcx, int srcy, int width, int height);
+ void Draw(BITMAP *src, BITMAP *dest, int destx, int desty, int srcx, int srcy, int width, int height, int colour);
std::vector<SpriteFont *> _fonts;
public:
diff --git a/engines/ags/plugins/ags_sprite_font/variable_width_sprite_font.cpp b/engines/ags/plugins/ags_sprite_font/variable_width_sprite_font.cpp
index f215300cfa5..58059b70ec8 100644
--- a/engines/ags/plugins/ags_sprite_font/variable_width_sprite_font.cpp
+++ b/engines/ags/plugins/ags_sprite_font/variable_width_sprite_font.cpp
@@ -163,14 +163,14 @@ void VariableWidthSpriteFontRenderer::RenderText(const char *text, int fontNumbe
char c = text[i];
BITMAP *src = _engine->GetSpriteGraphic(font->SpriteNumber);
- Draw(src, destination, x + totalWidth, y, font->characters[c].X, font->characters[c].Y, font->characters[c].Width, font->characters[c].Height);
+ Draw(src, destination, x + totalWidth, y, font->characters[c].X, font->characters[c].Y, font->characters[c].Width, font->characters[c].Height, colour);
totalWidth += font->characters[c].Width;
if (text[i] != ' ') totalWidth += font->Spacing;
}
}
-void VariableWidthSpriteFontRenderer::Draw(BITMAP *src, BITMAP *dest, int destx, int desty, int srcx, int srcy, int width, int height) {
+void VariableWidthSpriteFontRenderer::Draw(BITMAP *src, BITMAP *dest, int destx, int desty, int srcx, int srcy, int width, int height, int colour) {
int32 srcWidth, srcHeight, destWidth, destHeight, srcColDepth, destColDepth;
@@ -195,7 +195,10 @@ void VariableWidthSpriteFontRenderer::Draw(BITMAP *src, BITMAP *dest, int destx,
int starty = MAX(0, (-1 * desty));
- int srca, srcr, srcg, srcb, desta, destr, destg, destb, finalr, finalg, finalb, finala, col;
+ int srca, srcr, srcg, srcb, desta, destr, destg, destb, finalr, finalg, finalb, finala, col, col_r, col_g, col_b;;
+ col_r = getr32(colour);
+ col_g = getg32(colour);
+ col_b = getb32(colour);
int srcxx = (startx + srcx) * bpp;
int destxx = (startx + destx) * bpp;
@@ -232,9 +235,9 @@ void VariableWidthSpriteFontRenderer::Draw(BITMAP *src, BITMAP *dest, int destx,
destb = getb32(destargb);
desta = geta32(destargb);
- finalr = srcr;
- finalg = srcg;
- finalb = srcb;
+ finalr = (col_r * srcr) / 255;
+ finalg = (col_g * srcg) / 255;
+ finalb = (col_b * srcb) / 255;
finala = 255 - (255 - srca) * (255 - desta) / 255;
finalr = srca * finalr / finala + desta * destr * (255 - srca) / finala / 255;
diff --git a/engines/ags/plugins/ags_sprite_font/variable_width_sprite_font.h b/engines/ags/plugins/ags_sprite_font/variable_width_sprite_font.h
index d047299c6e4..ea240a18553 100644
--- a/engines/ags/plugins/ags_sprite_font/variable_width_sprite_font.h
+++ b/engines/ags/plugins/ags_sprite_font/variable_width_sprite_font.h
@@ -36,7 +36,7 @@ protected:
std::vector<VariableWidthFont *> _fonts;
VariableWidthFont *getFontFor(int fontNum);
- void Draw(BITMAP *src, BITMAP *dest, int destx, int desty, int srcx, int srcy, int width, int height);
+ void Draw(BITMAP *src, BITMAP *dest, int destx, int desty, int srcx, int srcy, int width, int height, int colour);
public:
VariableWidthSpriteFontRenderer(IAGSEngine *engine);
virtual ~VariableWidthSpriteFontRenderer();
More information about the Scummvm-git-logs
mailing list