[Scummvm-git-logs] scummvm master -> 22a98d80f466b96a3b14d4a821291cebe01e2eda
mduggan
noreply at scummvm.org
Mon Jan 30 07:22:55 UTC 2023
This automated email contains information about 7 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
c5ebc0a8ad TETRAEDGE: Don't allow quickload direct from main menu
001e4f4e8a TETRAEDGE: Clean up shadow rendering a little
4d3337b5db TETRAEDGE: Implement clipping for long dialog
fad5cac0c0 TETRAEDGE: Work around artifacts on text rendering
057da99725 TETRAEDGE: Fix addAnchorZone to actually add the zone
e7cac97877 TETRAEDGE: Fix many small issues identified by Coverity
22a98d80f4 TETRAEDGE: Fix font anti-aliasing result slightly
Commit: c5ebc0a8adb3fd57cc8a354e4d604d757e9c5be1
https://github.com/scummvm/scummvm/commit/c5ebc0a8adb3fd57cc8a354e4d604d757e9c5be1
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2023-01-30T13:24:09+09:00
Commit Message:
TETRAEDGE: Don't allow quickload direct from main menu
Changed paths:
engines/tetraedge/game/main_menu.h
engines/tetraedge/tetraedge.cpp
engines/tetraedge/tetraedge.h
diff --git a/engines/tetraedge/game/main_menu.h b/engines/tetraedge/game/main_menu.h
index 81708ecfe89..d2566696c07 100644
--- a/engines/tetraedge/game/main_menu.h
+++ b/engines/tetraedge/game/main_menu.h
@@ -63,6 +63,7 @@ public:
void refresh();
void setCenterButtonsVisibility(bool visible);
+ bool isEntered() const { return _entered; }
private:
diff --git a/engines/tetraedge/tetraedge.cpp b/engines/tetraedge/tetraedge.cpp
index 7565ba429aa..da30680072b 100644
--- a/engines/tetraedge/tetraedge.cpp
+++ b/engines/tetraedge/tetraedge.cpp
@@ -132,6 +132,10 @@ Common::String TetraedgeEngine::getGameId() const {
return _gameDescription->gameId;
}
+bool TetraedgeEngine::canLoadGameStateCurrently() {
+ return _game && _application && !_application->mainMenu().isEntered();
+}
+
bool TetraedgeEngine::canSaveGameStateCurrently() {
return canSaveAutosaveCurrently() && !_application->isLockCursor();
}
diff --git a/engines/tetraedge/tetraedge.h b/engines/tetraedge/tetraedge.h
index e97739a411c..6daa7d1f1ad 100644
--- a/engines/tetraedge/tetraedge.h
+++ b/engines/tetraedge/tetraedge.h
@@ -91,10 +91,7 @@ public:
(f == kSupportsReturnToLauncher);
};
- bool canLoadGameStateCurrently() override {
- return true;
- }
-
+ bool canLoadGameStateCurrently() override;
bool canSaveGameStateCurrently() override;
bool canSaveAutosaveCurrently() override;
Commit: 001e4f4e8a35daf2fd89aa344649af47a7018037
https://github.com/scummvm/scummvm/commit/001e4f4e8a35daf2fd89aa344649af47a7018037
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2023-01-30T13:24:09+09:00
Commit Message:
TETRAEDGE: Clean up shadow rendering a little
It's still broken, but code is easier to understand now.
Changed paths:
engines/tetraedge/game/characters_shadow.cpp
engines/tetraedge/game/characters_shadow_opengl.cpp
engines/tetraedge/game/characters_shadow_tinygl.cpp
engines/tetraedge/game/in_game_scene.cpp
engines/tetraedge/game/scene_lights_xml_parser.cpp
engines/tetraedge/te/te_material.cpp
engines/tetraedge/te/te_material.h
engines/tetraedge/te/te_mesh.cpp
engines/tetraedge/te/te_renderer_opengl.cpp
engines/tetraedge/te/te_renderer_tinygl.cpp
diff --git a/engines/tetraedge/game/characters_shadow.cpp b/engines/tetraedge/game/characters_shadow.cpp
index c982e3cb4e0..14be1f105c4 100644
--- a/engines/tetraedge/game/characters_shadow.cpp
+++ b/engines/tetraedge/game/characters_shadow.cpp
@@ -58,15 +58,15 @@ void CharactersShadow::createTexture(InGameScene *scene) {
renderer->enableTexture();
TeLight *light = scene->shadowLight();
if (light) {
- TeQuaternion q1 = TeQuaternion::fromAxisAndAngle(TeVector3f32(0, 1, 0), light->positionRadial().getX() - M_PI_2);
- TeQuaternion q2 = TeQuaternion::fromAxisAndAngle(TeVector3f32(1, 0, 0), light->positionRadial().getY());
+ const TeQuaternion q1 = TeQuaternion::fromAxisAndAngle(TeVector3f32(0, 1, 0), light->positionRadial().getX() - M_PI_2);
+ const TeQuaternion q2 = TeQuaternion::fromAxisAndAngle(TeVector3f32(1, 0, 0), light->positionRadial().getY());
_camera->setRotation(q2 * q1);
_camera->setPosition(light->position3d());
}
_camera->setFov((float)(scene->shadowFov() * M_PI / 180.0));
_camera->setOrthoPlanes(scene->shadowNearPlane(), scene->shadowFarPlane());
_camera->apply();
-
+
createTextureInternal(scene);
TeCamera::restore();
diff --git a/engines/tetraedge/game/characters_shadow_opengl.cpp b/engines/tetraedge/game/characters_shadow_opengl.cpp
index ccba697b9fe..d118f49bebd 100644
--- a/engines/tetraedge/game/characters_shadow_opengl.cpp
+++ b/engines/tetraedge/game/characters_shadow_opengl.cpp
@@ -28,6 +28,13 @@
#include "tetraedge/te/te_renderer.h"
#include "tetraedge/te/te_3d_texture_opengl.h"
+//#define TETRAEDGE_DUMP_SHADOW_RENDER 1
+
+#ifdef TETRAEDGE_DUMP_SHADOW_RENDER
+#include "image/png.h"
+static int dumpCount = 0;
+#endif
+
namespace Tetraedge {
void CharactersShadowOpenGL::createInternal() {
@@ -54,6 +61,19 @@ void CharactersShadowOpenGL::createTextureInternal(InGameScene *scene) {
glBindTexture(GL_TEXTURE_2D, _glTex);
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, _texSize, _texSize);
renderer->clearBuffer(TeRenderer::ColorAndDepth);
+
+#ifdef TETRAEDGE_DUMP_SHADOW_RENDER
+ Graphics::Surface tex;
+ tex.create(_texSize, _texSize, Graphics::PixelFormat(4, 8, 8, 8, 8, 0, 8, 16, 24));
+ glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, tex.getPixels());
+ Common::DumpFile dumpFile;
+ tex.flipVertical(Common::Rect(tex.w, tex.h));
+ dumpFile.open(Common::String::format("/tmp/rendered-shadow-dump-%04d.png", dumpCount));
+ dumpCount++;
+ Image::writePNG(dumpFile, tex);
+ tex.free();
+ dumpFile.close();
+#endif
}
void CharactersShadowOpenGL::deleteTexture() {
@@ -118,7 +138,7 @@ void CharactersShadowOpenGL::draw(InGameScene *scene) {
for (TeIntrusivePtr<TeModel> model : scene->zoneModels()) {
if (model->meshes().size() > 0 && model->meshes()[0]->materials().empty()) {
model->meshes()[0]->defaultMaterial(TeIntrusivePtr<Te3DTexture>());
- model->meshes()[0]->materials()[0]._enableSomethingDefault0 = true;
+ model->meshes()[0]->materials()[0]._isShadowTexture = true;
model->meshes()[0]->materials()[0]._diffuseColor = scene->shadowColor();
}
model->draw();
diff --git a/engines/tetraedge/game/characters_shadow_tinygl.cpp b/engines/tetraedge/game/characters_shadow_tinygl.cpp
index 278a205c8a4..12c9463eebd 100644
--- a/engines/tetraedge/game/characters_shadow_tinygl.cpp
+++ b/engines/tetraedge/game/characters_shadow_tinygl.cpp
@@ -123,7 +123,7 @@ void CharactersShadowTinyGL::draw(InGameScene *scene) {
for (TeIntrusivePtr<TeModel> model : scene->zoneModels()) {
if (model->meshes().size() > 0 && model->meshes()[0]->materials().empty()) {
model->meshes()[0]->defaultMaterial(TeIntrusivePtr<Te3DTexture>());
- model->meshes()[0]->materials()[0]._enableSomethingDefault0 = true;
+ model->meshes()[0]->materials()[0]._isShadowTexture = true;
model->meshes()[0]->materials()[0]._diffuseColor = scene->shadowColor();
}
model->draw();
diff --git a/engines/tetraedge/game/in_game_scene.cpp b/engines/tetraedge/game/in_game_scene.cpp
index 46816da1153..8bd7d2a5f60 100644
--- a/engines/tetraedge/game/in_game_scene.cpp
+++ b/engines/tetraedge/game/in_game_scene.cpp
@@ -226,12 +226,13 @@ void InGameScene::convertPathToMesh(TeFreeMoveZone *zone) {
model->setPosition(zone->position());
model->setRotation(zone->rotation());
model->setScale(zone->scale());
- unsigned long nverticies = zone->verticies().size();
- model->meshes()[0]->setConf(nverticies, nverticies, TeMesh::MeshMode_Triangles, 0, 0);
+ unsigned long nverticies = zone->freeMoveZoneVerticies().size();
+ TeMesh *mesh0 = model->meshes()[0].get();
+ mesh0->setConf(nverticies, nverticies, TeMesh::MeshMode_Triangles, 0, 0);
for (uint i = 0; i < nverticies; i++) {
- model->meshes()[0]->setIndex(i, i);
- model->meshes()[0]->setVertex(i, zone->verticies()[i]);
- model->meshes()[0]->setNormal(i, TeVector3f32(0, 0, 1));
+ mesh0->setIndex(i, i);
+ mesh0->setVertex(i, zone->freeMoveZoneVerticies()[i]);
+ mesh0->setNormal(i, TeVector3f32(0, 0, 1));
}
_zoneModels.push_back(model);
}
diff --git a/engines/tetraedge/game/scene_lights_xml_parser.cpp b/engines/tetraedge/game/scene_lights_xml_parser.cpp
index c5fb3727518..34cce550195 100644
--- a/engines/tetraedge/game/scene_lights_xml_parser.cpp
+++ b/engines/tetraedge/game/scene_lights_xml_parser.cpp
@@ -150,7 +150,8 @@ bool SceneLightsXmlParser::parserCallback_Shadow(ParserNode *node) {
}
bool SceneLightsXmlParser::parserCallback_SourceLight(ParserNode *node) {
- _shadowLightNo = atof(node->values["number"].c_str());
+ // Note: must be signed, -1 to disable shadows.
+ _shadowLightNo = atoi(node->values["number"].c_str());
return true;
}
diff --git a/engines/tetraedge/te/te_material.cpp b/engines/tetraedge/te/te_material.cpp
index c01ca0f6839..8a6a27e7207 100644
--- a/engines/tetraedge/te/te_material.cpp
+++ b/engines/tetraedge/te/te_material.cpp
@@ -48,7 +48,7 @@ void TeMaterial::defaultValues() {
_emissionColor = TeColor(0, 0, 0, 255);
_shininess = 0.0;
_enableLights = false;
- _enableSomethingDefault0 = false;
+ _isShadowTexture = false;
}
Common::String TeMaterial::dump() const {
@@ -83,7 +83,7 @@ TeMaterial &TeMaterial::operator=(const TeMaterial &other) {
_shininess = other._shininess;
_mode = other._mode;
_enableLights = other._enableLights;
- _enableSomethingDefault0 = other._enableSomethingDefault0;
+ _isShadowTexture = other._isShadowTexture;
return *this;
}
diff --git a/engines/tetraedge/te/te_material.h b/engines/tetraedge/te/te_material.h
index 2fd060abbc3..1e8fab6b365 100644
--- a/engines/tetraedge/te/te_material.h
+++ b/engines/tetraedge/te/te_material.h
@@ -64,7 +64,7 @@ public:
TeColor _specularColor;
TeColor _emissionColor;
float _shininess;
- bool _enableSomethingDefault0;
+ bool _isShadowTexture;
bool _enableLights;
};
diff --git a/engines/tetraedge/te/te_mesh.cpp b/engines/tetraedge/te/te_mesh.cpp
index 106e7617342..42ee76e2a5f 100644
--- a/engines/tetraedge/te/te_mesh.cpp
+++ b/engines/tetraedge/te/te_mesh.cpp
@@ -72,7 +72,7 @@ bool TeMesh::hasAlpha(uint idx) {
bool retval = hasGlobalAlpha;
if (idx < _materials.size()) {
const TeMaterial &material = _materials[idx];
- if (material._enableSomethingDefault0) {
+ if (material._isShadowTexture) {
retval = false;
} else {
retval = true;
@@ -157,7 +157,7 @@ void TeMesh::attachMaterial(uint idx, const TeMaterial &src) {
TeMaterial &dest = _materials[idx];
dest._texture = src._texture;
dest._enableLights = src._enableLights;
- dest._enableSomethingDefault0 = src._enableSomethingDefault0;
+ dest._isShadowTexture = src._isShadowTexture;
dest._emissionColor = src._emissionColor;
dest._shininess = src._shininess;
dest._diffuseColor = src._diffuseColor;
diff --git a/engines/tetraedge/te/te_renderer_opengl.cpp b/engines/tetraedge/te/te_renderer_opengl.cpp
index de72dfc3061..95ee7c8d6bb 100644
--- a/engines/tetraedge/te/te_renderer_opengl.cpp
+++ b/engines/tetraedge/te/te_renderer_opengl.cpp
@@ -184,7 +184,7 @@ void TeRendererOpenGL::renderTransparentMeshes() {
glEnable(GL_TEXTURE_2D);
_textureEnabled = true;
}
- if (material._enableSomethingDefault0) {
+ if (material._isShadowTexture) {
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
}
@@ -207,7 +207,7 @@ void TeRendererOpenGL::renderTransparentMeshes() {
vertsDrawn += meshProperties._vertexCount;
- if (material._enableSomethingDefault0) {
+ if (material._isShadowTexture) {
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
}
@@ -299,7 +299,7 @@ void TeRendererOpenGL::shadowMode(enum ShadowMode mode) {
void TeRendererOpenGL::applyMaterial(const TeMaterial &m) {
//debug("TeMaterial::apply (%s)", dump().c_str());
static const float constColor[4] = { 1.0f, 1.0f, 1.0f, 1.0f };
- if (_shadowMode == TeRenderer::ShadowModeNone) {
+ if (_shadowMode == ShadowModeNone) {
if (m._enableLights)
TeLightOpenGL::enableAll();
else
@@ -347,10 +347,10 @@ void TeRendererOpenGL::applyMaterial(const TeMaterial &m) {
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diffuse);
setCurrentColor(m._diffuseColor);
- } else if (_shadowMode == TeRenderer::ShadowModeCreating) {
- // NOTE: Diverge from original here, it sets 255.0 but the
- // colors should be scaled -1.0 .. 1.0.
- static const float fullColor[4] = { 1.0f, 1.0f, 1.0f, 1.0f };
+ } else if (_shadowMode == ShadowModeCreating) {
+ // NOTE: Replicate seeming bug from original here, it sets 255.0 but the
+ // colors should be scaled -1.0 .. 1.0?
+ static const float fullColor[4] = { 255.0f, 255.0f, 255.0f, 255.0f };
TeLightOpenGL::disableAll();
glDisable(GL_ALPHA_TEST);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
@@ -360,8 +360,7 @@ void TeRendererOpenGL::applyMaterial(const TeMaterial &m) {
glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, fullColor);
}
- // TODO: Work out what TeMaterial::_enableSomethingDefault0 actually is.
- if (!m._enableSomethingDefault0) {
+ if (!m._isShadowTexture) {
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glDisable(GL_TEXTURE_GEN_R);
diff --git a/engines/tetraedge/te/te_renderer_tinygl.cpp b/engines/tetraedge/te/te_renderer_tinygl.cpp
index 7ab22a9aba2..6e666a4455c 100644
--- a/engines/tetraedge/te/te_renderer_tinygl.cpp
+++ b/engines/tetraedge/te/te_renderer_tinygl.cpp
@@ -190,7 +190,7 @@ void TeRendererTinyGL::renderTransparentMeshes() {
tglEnable(TGL_TEXTURE_2D);
_textureEnabled = true;
}
- if (material._enableSomethingDefault0) {
+ if (material._isShadowTexture) {
tglDisableClientState(TGL_TEXTURE_COORD_ARRAY);
tglDisableClientState(TGL_COLOR_ARRAY);
}
@@ -216,7 +216,7 @@ void TeRendererTinyGL::renderTransparentMeshes() {
vertsDrawn += meshProperties._vertexCount;
- if (material._enableSomethingDefault0) {
+ if (material._isShadowTexture) {
tglEnableClientState(TGL_TEXTURE_COORD_ARRAY);
tglEnableClientState(TGL_COLOR_ARRAY);
}
@@ -374,8 +374,7 @@ void TeRendererTinyGL::applyMaterial(const TeMaterial &m) {
tglMaterialfv(TGL_FRONT_AND_BACK, TGL_EMISSION, fullColor);
}
- //warning("TODO: Work out what TeMaterial::_enableSomethingDefault0 actually is.");
- if (!m._enableSomethingDefault0) {
+ if (!m._isShadowTexture) {
tglDisable(TGL_TEXTURE_GEN_S);
tglDisable(TGL_TEXTURE_GEN_T);
tglDisable(TGL_TEXTURE_GEN_R);
Commit: 4d3337b5db3eef213170201a1dae07934d0894f9
https://github.com/scummvm/scummvm/commit/4d3337b5db3eef213170201a1dae07934d0894f9
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2023-01-30T13:24:09+09:00
Commit Message:
TETRAEDGE: Implement clipping for long dialog
Changed paths:
engines/tetraedge/te/te_clip_layout.cpp
engines/tetraedge/te/te_clip_layout.h
engines/tetraedge/te/te_extended_text_layout.h
engines/tetraedge/te/te_free_move_zone.h
engines/tetraedge/te/te_i_text_layout.h
engines/tetraedge/te/te_lua_gui.cpp
engines/tetraedge/te/te_text_base2.cpp
engines/tetraedge/te/te_text_layout.h
diff --git a/engines/tetraedge/te/te_clip_layout.cpp b/engines/tetraedge/te/te_clip_layout.cpp
index c3bb6ee8454..a86e6b80efb 100644
--- a/engines/tetraedge/te/te_clip_layout.cpp
+++ b/engines/tetraedge/te/te_clip_layout.cpp
@@ -20,10 +20,46 @@
*/
#include "tetraedge/te/te_clip_layout.h"
+#include "tetraedge/tetraedge.h"
+#include "tetraedge/game/application.h"
+#include "tetraedge/te/te_renderer.h"
namespace Tetraedge {
TeClipLayout::TeClipLayout() {
}
+void TeClipLayout::draw() {
+ if (!worldVisible())
+ return;
+
+ TeRenderer *renderer = g_engine->getRenderer();
+ bool prevScissorEnabled = renderer->scissorEnabled();
+ const TeVector2f32 prevScissorPos(renderer->scissorX(), renderer->scissorY());
+ const TeVector2f32 prevScissorSize(renderer->scissorWidth(), renderer->scissorHeight());
+
+ const TeMatrix4x4 worldTransform = worldTransformationMatrix();
+
+ const TeVector3f32 v1 = worldTransform * TeVector3f32(0, 0, 0);
+ const TeVector3f32 v2 = worldTransform * TeVector3f32(1, 0, 0);
+ const TeVector3f32 v3 = worldTransform * TeVector3f32(0, 1, 0);
+
+ const TeVector3f32 offset((v2 - v1).length(), (v3 - v1).length(), 1);
+ const TeVector3f32 thisSize(xSize(), ySize(), 0);
+ const TeVector3f32 newScissorSize = thisSize * offset;
+ const TeVector3f32 transformedSize(v1.x() - newScissorSize.x() / 2, v1.y() + newScissorSize.y() / 2, 0);
+
+ const TeVector3f32 winSize = g_engine->getApplication()->getMainWindow().size();
+
+ const TeVector3f32 newScissorOff(transformedSize.x() + winSize.x() / 2, winSize.y() - (transformedSize.y() + winSize.y() / 2), 0);
+
+ renderer->setScissorEnabled(true);
+ renderer->setScissor(newScissorOff.x(), newScissorOff.y(), newScissorSize.x(), newScissorSize.y());
+
+ TeLayout::draw();
+
+ renderer->setScissor(prevScissorPos.getX(), prevScissorPos.getY(), prevScissorSize.getX(), prevScissorSize.getY());
+ renderer->setScissorEnabled(prevScissorEnabled);
+}
+
} // end namespace Tetraedge
diff --git a/engines/tetraedge/te/te_clip_layout.h b/engines/tetraedge/te/te_clip_layout.h
index 3df4d741f80..e67225f04d6 100644
--- a/engines/tetraedge/te/te_clip_layout.h
+++ b/engines/tetraedge/te/te_clip_layout.h
@@ -31,6 +31,7 @@ class TeClipLayout : public TeLayout {
public:
TeClipLayout();
+ virtual void draw() override;
};
} // end namespace Tetraedge
diff --git a/engines/tetraedge/te/te_extended_text_layout.h b/engines/tetraedge/te/te_extended_text_layout.h
index 82091ddf13c..9f2c23d03de 100644
--- a/engines/tetraedge/te/te_extended_text_layout.h
+++ b/engines/tetraedge/te/te_extended_text_layout.h
@@ -25,10 +25,11 @@
#include "tetraedge/te/te_i_text_layout.h"
#include "tetraedge/te/te_text_layout.h"
#include "tetraedge/te/te_scrolling_layout.h"
+#include "tetraedge/te/te_clip_layout.h"
namespace Tetraedge {
-class TeExtendedTextLayout : public TeITextLayout {
+class TeExtendedTextLayout : public TeClipLayout, public TeITextLayout {
public:
TeExtendedTextLayout();
diff --git a/engines/tetraedge/te/te_free_move_zone.h b/engines/tetraedge/te/te_free_move_zone.h
index 45a96d1aeea..4f36d085541 100644
--- a/engines/tetraedge/te/te_free_move_zone.h
+++ b/engines/tetraedge/te/te_free_move_zone.h
@@ -114,6 +114,8 @@ public:
static TePickMesh2 *findNearestMesh(TeIntrusivePtr<TeCamera> &camera, const TeVector2s32 &frompt,
Common::Array<TePickMesh2*> &pickMeshes, TeVector3f32 *outloc, bool lastHitFirst);
+ const Common::Array<TeVector3f32> freeMoveZoneVerticies() const { return _freeMoveZoneVerticies; }
+
private:
TeVector2s32 aStarResolution() const;
diff --git a/engines/tetraedge/te/te_i_text_layout.h b/engines/tetraedge/te/te_i_text_layout.h
index bdb987f150a..f311a8bff59 100644
--- a/engines/tetraedge/te/te_i_text_layout.h
+++ b/engines/tetraedge/te/te_i_text_layout.h
@@ -27,7 +27,7 @@
namespace Tetraedge {
-class TeITextLayout : public TeLayout {
+class TeITextLayout {
public:
TeITextLayout();
diff --git a/engines/tetraedge/te/te_lua_gui.cpp b/engines/tetraedge/te/te_lua_gui.cpp
index 84d30ee5c4a..1cf23fd67f3 100644
--- a/engines/tetraedge/te/te_lua_gui.cpp
+++ b/engines/tetraedge/te/te_lua_gui.cpp
@@ -79,7 +79,7 @@ TeLayout *TeLuaGUI::layout(const Common::String &name) {
if (layout)
return layout;
- layout = textLayout(name);
+ layout = dynamic_cast<TeLayout *>(textLayout(name));
if (layout)
return layout;
diff --git a/engines/tetraedge/te/te_text_base2.cpp b/engines/tetraedge/te/te_text_base2.cpp
index a0eb1958be0..c970b24a9b3 100644
--- a/engines/tetraedge/te/te_text_base2.cpp
+++ b/engines/tetraedge/te/te_text_base2.cpp
@@ -112,6 +112,7 @@ void TeTextBase2::build() {
dumpFile.open(Common::String::format("/tmp/rendered-font-dump-%04d.png", dumpCount));
dumpCount++;
Image::writePNG(dumpFile, img);
+ dumpFile.close();
#endif
_mesh->setConf(4, 4, TeMesh::MeshMode_TriangleStrip, 0, 0);
diff --git a/engines/tetraedge/te/te_text_layout.h b/engines/tetraedge/te/te_text_layout.h
index 0992dbc7676..3bb97622c7f 100644
--- a/engines/tetraedge/te/te_text_layout.h
+++ b/engines/tetraedge/te/te_text_layout.h
@@ -28,7 +28,7 @@
namespace Tetraedge {
-class TeTextLayout : public TeITextLayout {
+class TeTextLayout : public TeITextLayout, public TeLayout {
public:
TeTextLayout();
Commit: fad5cac0c01a62171f628311a5e68df59d90b68f
https://github.com/scummvm/scummvm/commit/fad5cac0c01a62171f628311a5e68df59d90b68f
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2023-01-30T14:32:06+09:00
Commit Message:
TETRAEDGE: Work around artifacts on text rendering
Changed paths:
engines/tetraedge/te/te_3d_texture_opengl.cpp
engines/tetraedge/te/te_text_base2.cpp
diff --git a/engines/tetraedge/te/te_3d_texture_opengl.cpp b/engines/tetraedge/te/te_3d_texture_opengl.cpp
index 2d0f42bc848..efb352aa3c8 100644
--- a/engines/tetraedge/te/te_3d_texture_opengl.cpp
+++ b/engines/tetraedge/te/te_3d_texture_opengl.cpp
@@ -145,6 +145,15 @@ bool Te3DTextureOpenGL::load(const TeImage &img) {
} else if (_format == TeImage::RGBA8) {
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, _texWidth, _texHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, img.w, img.h, GL_RGBA, GL_UNSIGNED_BYTE, imgdata);
+ // FIXME: Slight hack.. sometimes artifacts appear because we draw
+ // a (half?)pixel outside the original texture. Clear one more row
+ // of the new texture with 0s to avoid artifacts.
+ if ((int)_texHeight > img.h) {
+ byte *buf = new byte[img.w * 4];
+ memset(buf, 0, img.w * 4);
+ glTexSubImage2D(GL_TEXTURE_2D, 0, 0, img.h, img.w, 1, GL_RGBA, GL_UNSIGNED_BYTE, buf);
+ delete [] buf;
+ }
} else {
warning("Te3DTexture::load can't send image format %d to GL.", _format);
}
diff --git a/engines/tetraedge/te/te_text_base2.cpp b/engines/tetraedge/te/te_text_base2.cpp
index c970b24a9b3..61202b26e5b 100644
--- a/engines/tetraedge/te/te_text_base2.cpp
+++ b/engines/tetraedge/te/te_text_base2.cpp
@@ -98,7 +98,8 @@ void TeTextBase2::build() {
TeImage img;
Common::SharedPtr<TePalette> nullpal;
img.createImg(_size._x, _size._y, nullpal, TeImage::RGBA8);
- img.fill(_globalColor.r(), _globalColor.g(), _globalColor.b(), 0);
+ // fill with transparent white, the global color is applied on the mesh.
+ img.fill(255, 255, 255, 0);
for (uint i = 0; i < _wrappedLines.size(); i++) {
drawLine(img, _wrappedLines[i], lineoffsets[i]);
Commit: 057da99725fb3b4884bc3f296a03efabcb0683d1
https://github.com/scummvm/scummvm/commit/057da99725fb3b4884bc3f296a03efabcb0683d1
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2023-01-30T15:42:19+09:00
Commit Message:
TETRAEDGE: Fix addAnchorZone to actually add the zone
Changed paths:
engines/tetraedge/game/in_game_scene.cpp
diff --git a/engines/tetraedge/game/in_game_scene.cpp b/engines/tetraedge/game/in_game_scene.cpp
index 8bd7d2a5f60..c49d220c05e 100644
--- a/engines/tetraedge/game/in_game_scene.cpp
+++ b/engines/tetraedge/game/in_game_scene.cpp
@@ -86,6 +86,7 @@ void InGameScene::addAnchorZone(const Common::String &s1, const Common::String &
zone->_loc = d._position;
}
}
+ _anchorZones.push_back(zone);
}
bool InGameScene::addMarker(const Common::String &markerName, const Common::String &imgPath, float x, float y, const Common::String &locType, const Common::String &markerVal) {
@@ -713,7 +714,7 @@ bool InGameScene::loadLights(const Common::Path &path) {
debug("Shadow: %s no:%d far:%.02f near:%.02f fov:%.02f", _shadowColor.dump().c_str(), _shadowLightNo, _shadowFarPlane, _shadowNearPlane, _shadowFov);
debug("Global: %s", TeLight::globalAmbient().dump().c_str());
for (uint i = 0; i < _lights.size(); i++) {
- debug("%s", _lights[i].dump().c_str());
+ debug("%s", _lights[i]->dump().c_str());
}
debug("--- end lights ---");
#endif
Commit: e7cac97877351113ba4ce62c3f756224615ae453
https://github.com/scummvm/scummvm/commit/e7cac97877351113ba4ce62c3f756224615ae453
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2023-01-30T16:11:29+09:00
Commit Message:
TETRAEDGE: Fix many small issues identified by Coverity
Changed paths:
engines/tetraedge/game/bonus_menu.cpp
engines/tetraedge/game/cellphone.cpp
engines/tetraedge/game/character.cpp
engines/tetraedge/game/confirm.cpp
engines/tetraedge/game/credits.cpp
engines/tetraedge/game/game.cpp
engines/tetraedge/game/in_game_scene.cpp
engines/tetraedge/game/inventory.cpp
engines/tetraedge/game/lua_binds.cpp
engines/tetraedge/game/objectif.cpp
engines/tetraedge/game/owner_error_menu.cpp
engines/tetraedge/te/te_3d_texture.cpp
engines/tetraedge/te/te_act_zone.cpp
engines/tetraedge/te/te_act_zone.h
engines/tetraedge/te/te_camera.cpp
engines/tetraedge/te/te_curve_anim2.h
engines/tetraedge/te/te_free_move_zone.cpp
engines/tetraedge/te/te_images_sequence.cpp
engines/tetraedge/te/te_lua_gui.cpp
engines/tetraedge/te/te_model_animation.cpp
engines/tetraedge/te/te_renderer.cpp
engines/tetraedge/te/te_renderer.h
engines/tetraedge/te/te_timer.cpp
diff --git a/engines/tetraedge/game/bonus_menu.cpp b/engines/tetraedge/game/bonus_menu.cpp
index 0c13ca42362..1189b9ec624 100644
--- a/engines/tetraedge/game/bonus_menu.cpp
+++ b/engines/tetraedge/game/bonus_menu.cpp
@@ -30,7 +30,7 @@
namespace Tetraedge {
-BonusMenu::BonusMenu() {
+BonusMenu::BonusMenu() : _pageNo(0) {
}
void BonusMenu::enter(const Common::String &scriptName) {
diff --git a/engines/tetraedge/game/cellphone.cpp b/engines/tetraedge/game/cellphone.cpp
index c49253d0297..076b9d9fc60 100644
--- a/engines/tetraedge/game/cellphone.cpp
+++ b/engines/tetraedge/game/cellphone.cpp
@@ -169,7 +169,7 @@ Common::Error Cellphone::syncState(Common::Serializer &s) {
if (!_addedNumbers.empty())
leave();
- for (auto num : numbers)
+ for (const auto &num : numbers)
addNumber(num);
}
return Common::kNoError;
diff --git a/engines/tetraedge/game/character.cpp b/engines/tetraedge/game/character.cpp
index f57b8a3a1a2..62e2b0ef4b3 100644
--- a/engines/tetraedge/game/character.cpp
+++ b/engines/tetraedge/game/character.cpp
@@ -67,7 +67,9 @@ _stepSound1("sounds/SFX/PAS_H_BOIS1.ogg"), _stepSound2("sounds/SFX/PAS_H_BOIS2.o
_freeMoveZone(nullptr), _animSoundOffset(0), _lastAnimFrame(0), _charLookingAt(nullptr),
_recallageY(true), _walkToFlag(false), _walkCurveEnd(0.0f), _walkCurveLast(0.0f),
_walkCurveLen(0.0f), _walkCurveIncrement(0.0f), _walkEndAnimG(false), _walkTotalFrames(0),
-_walkCurveNextLength(0.0f) {
+_walkCurveNextLength(0.0f), _walkedLength(0.0f), _walkLoopAnimLen(0.0f), _walkEndGAnimLen(0.0f),
+_walkStartAnimLen(0.0f), _walkStartAnimFrameCount(0), _walkLoopAnimFrameCount(0),
+_walkEndGAnimFrameCount(0), _hasAnchor(false) {
_curModelAnim.setDeleteFn(&TeModelAnimation::deleteLater);
}
diff --git a/engines/tetraedge/game/confirm.cpp b/engines/tetraedge/game/confirm.cpp
index 399d349b336..2703c707b46 100644
--- a/engines/tetraedge/game/confirm.cpp
+++ b/engines/tetraedge/game/confirm.cpp
@@ -62,6 +62,9 @@ void Confirm::enter(const Common::String &guiPath, const Common::String &y) {
const Common::String *cancelButtonLoc = app->loc().value("cancelButton");
TeTextLayout *textTextLayout = dynamic_cast<TeTextLayout *>(textLayout->child(0));
+ if (!textTextLayout)
+ error("Expected text layout child.");
+
textTextLayout->setText(textAttributs + *app->loc().value(textTextLayout->name()));
if (!okButtonLoc || !cancelButtonLoc) {
diff --git a/engines/tetraedge/game/credits.cpp b/engines/tetraedge/game/credits.cpp
index ce784ad63be..d0631e05743 100644
--- a/engines/tetraedge/game/credits.cpp
+++ b/engines/tetraedge/game/credits.cpp
@@ -111,7 +111,7 @@ void Credits::enter(bool returnToOptions) {
void Credits::leave() {
_curveAnim.stop();
- for (auto anim : _gui.layoutPositionLinearAnimations()) {
+ for (auto &anim : _gui.layoutPositionLinearAnimations()) {
anim._value->stop();
}
if (_gui.loaded()) {
diff --git a/engines/tetraedge/game/game.cpp b/engines/tetraedge/game/game.cpp
index 7fb3e6b179d..6ade5c90938 100644
--- a/engines/tetraedge/game/game.cpp
+++ b/engines/tetraedge/game/game.cpp
@@ -52,7 +52,8 @@ _sceneCharacterVisibleFromLoad(false), _isCharacterWalking(false),
_lastCharMoveMousePos(0.0f, 0.0f), _randomSoundFinished(false),
_previousMousePos(-1, -1), _markersVisible(true), _saveRequested(false),
_gameLoadState(0), _luaShowOwnerError(false), _score(0), _warped(false),
-_firstInventory(true), _randomSource("SyberiaGameRandom") {
+_firstInventory(true), _randomSource("SyberiaGameRandom"), _frameCounter(0),
+_warpFadeFlag(false), _dialogsTold(0) {
for (int i = 0; i < NUM_OBJECTS_TAKEN_IDS; i++) {
_objectsTakenBits[i] = false;
}
diff --git a/engines/tetraedge/game/in_game_scene.cpp b/engines/tetraedge/game/in_game_scene.cpp
index c49d220c05e..591692cfdc7 100644
--- a/engines/tetraedge/game/in_game_scene.cpp
+++ b/engines/tetraedge/game/in_game_scene.cpp
@@ -549,12 +549,12 @@ bool InGameScene::load(const Common::Path &path) {
error("Improbable number of actzones %d", count);
_actZones.resize(count);
for (uint i = 0; i < _actZones.size(); i++) {
- _actZones[i].s1 = Te3DObject2::deserializeString(actzonefile);
- _actZones[i].s2 = Te3DObject2::deserializeString(actzonefile);
+ _actZones[i]._s1 = Te3DObject2::deserializeString(actzonefile);
+ _actZones[i]._s2 = Te3DObject2::deserializeString(actzonefile);
for (int j = 0; j < 4; j++)
- TeVector2f32::deserialize(actzonefile, _actZones[i].points[j]);
- _actZones[i].flag1 = (actzonefile.readByte() != 0);
- _actZones[i].flag2 = true;
+ TeVector2f32::deserialize(actzonefile, _actZones[i]._points[j]);
+ _actZones[i]._flag1 = (actzonefile.readByte() != 0);
+ _actZones[i]._flag2 = true;
}
}
}
@@ -862,7 +862,7 @@ void InGameScene::loadBackground(const Common::Path &path) {
bg->disableAutoZ();
bg->setZPosition(wincam->orthoNearPlane());
- for (auto layoutEntry : _bgGui.spriteLayouts()) {
+ for (const auto &layoutEntry : _bgGui.spriteLayouts()) {
AnimObject *animobj = new AnimObject();
animobj->_name = layoutEntry._key;
animobj->_layout = layoutEntry._value;
diff --git a/engines/tetraedge/game/inventory.cpp b/engines/tetraedge/game/inventory.cpp
index 8e48c1b0b45..348ff58ad30 100644
--- a/engines/tetraedge/game/inventory.cpp
+++ b/engines/tetraedge/game/inventory.cpp
@@ -414,6 +414,8 @@ void Inventory::selectedObject(InventoryObject *obj) {
TeSpriteLayout *selection = _gui.spriteLayoutChecked("selectionSprite");
selection->setVisible(obj->worldVisible());
TeLayout *parentLayout = dynamic_cast<TeLayout *>(obj->parent());
+ if (!parentLayout)
+ error("Couldn't get parent of object");
TeVector3f32 pos = parentLayout->position();
pos.z() = selection->position().z();
selection->setPosition(pos);
diff --git a/engines/tetraedge/game/lua_binds.cpp b/engines/tetraedge/game/lua_binds.cpp
index 4b37235aa2d..47a696acbdb 100644
--- a/engines/tetraedge/game/lua_binds.cpp
+++ b/engines/tetraedge/game/lua_binds.cpp
@@ -834,7 +834,7 @@ static int tolua_ExportedFunctions_SetCharacterAnimationAndWaitForEnd00(lua_Stat
static void BlendCharacterAnimation(const Common::String &charname, const Common::String &animname, float blendAmount, bool repeat, bool returnToIdle) {
Game *game = g_engine->getGame();
Character *c = game->scene().character(charname);
- bool result = c->blendAnimation(animname, blendAmount, repeat, returnToIdle);
+ bool result = c && c->blendAnimation(animname, blendAmount, repeat, returnToIdle);
if (!result) {
warning("[BlendCharacterAnimation] Character's animation \"%s\" doesn't exist for the character\"%s\" ",
animname.c_str(), charname.c_str());
diff --git a/engines/tetraedge/game/objectif.cpp b/engines/tetraedge/game/objectif.cpp
index 213c8e8ca3f..d80969af406 100644
--- a/engines/tetraedge/game/objectif.cpp
+++ b/engines/tetraedge/game/objectif.cpp
@@ -183,6 +183,8 @@ void Objectif::update() {
float z = 0.1f;
for (Te3DObject2 *child : tasks->childList()) {
TeTextLayout *text = dynamic_cast<TeTextLayout *>(child);
+ if (!text)
+ continue;
/*TeVector3f32 size =*/
text->size();
TeVector3f32 userPos = text->userPosition();
diff --git a/engines/tetraedge/game/owner_error_menu.cpp b/engines/tetraedge/game/owner_error_menu.cpp
index 4694698a4b5..f2adc7e179b 100644
--- a/engines/tetraedge/game/owner_error_menu.cpp
+++ b/engines/tetraedge/game/owner_error_menu.cpp
@@ -40,6 +40,8 @@ void OwnerErrorMenu::enter() {
TeLayout *menuLayout = layoutChecked("menu");
app->frontLayout().addChild(menuLayout);
TeTextLayout *txt = dynamic_cast<TeTextLayout*>(layoutChecked("ownerMenuText"));
+ if (!txt)
+ error("Couldn't get ownerMenuText layout");
const Common::String *locname = app->loc().value(txt->name());
txt->setText(value("textAttributs").toString() + (locname ? *locname : txt->name()));
}
diff --git a/engines/tetraedge/te/te_3d_texture.cpp b/engines/tetraedge/te/te_3d_texture.cpp
index d033dd2526b..65b96d4f984 100644
--- a/engines/tetraedge/te/te_3d_texture.cpp
+++ b/engines/tetraedge/te/te_3d_texture.cpp
@@ -29,7 +29,9 @@
namespace Tetraedge {
Te3DTexture::Te3DTexture() : _createdTexture(false),
-_numFrames(1), _frameRate(0), _format(TeImage::INVALID) {
+_numFrames(1), _frameRate(0), _format(TeImage::INVALID), _loaded(false),
+_width(0), _height(0), _texHeight(0), _texWidth(0), _topBorder(0), _leftBorder(0),
+_rightBorder(0), _btmBorder(0), _flipY(false) {
}
Te3DTexture::~Te3DTexture() {
diff --git a/engines/tetraedge/te/te_act_zone.cpp b/engines/tetraedge/te/te_act_zone.cpp
index 092717f4441..c5cf6799fac 100644
--- a/engines/tetraedge/te/te_act_zone.cpp
+++ b/engines/tetraedge/te/te_act_zone.cpp
@@ -23,7 +23,7 @@
namespace Tetraedge {
-TeActZone::TeActZone() {
+TeActZone::TeActZone() : _flag1(false), _flag2(false) {
}
} // end namespace Tetraedge
diff --git a/engines/tetraedge/te/te_act_zone.h b/engines/tetraedge/te/te_act_zone.h
index c3b1e427618..cb8e87eecb1 100644
--- a/engines/tetraedge/te/te_act_zone.h
+++ b/engines/tetraedge/te/te_act_zone.h
@@ -31,11 +31,11 @@ class TeActZone {
public:
TeActZone();
- Common::String s1;
- Common::String s2;
- TeVector2f32 points[4];
- bool flag1;
- bool flag2;
+ Common::String _s1;
+ Common::String _s2;
+ TeVector2f32 _points[4];
+ bool _flag1;
+ bool _flag2;
private:
diff --git a/engines/tetraedge/te/te_camera.cpp b/engines/tetraedge/te/te_camera.cpp
index 4065f354ca9..13177cf3eb4 100644
--- a/engines/tetraedge/te/te_camera.cpp
+++ b/engines/tetraedge/te/te_camera.cpp
@@ -32,7 +32,8 @@ namespace Tetraedge {
TeCamera::TeCamera() : _projectionMatrixType(0), _orthogonalParamL(0.0f),
_orthogonalParamR(1.0f), _orthogonalParamT(1.0f), _orthogonalParamB(0.0f),
_orthNearVal(10.0f), _orthFarVal(4000.0f), _transformA(0), /*_transformB(0),*/
- _fov(40.0f), _somePerspectiveVal(1.0f)
+ _fov(40.0f), _somePerspectiveVal(1.0f), _viewportX(0), _viewportY(0), _viewportW(0),
+ _viewportH(0)
{
}
diff --git a/engines/tetraedge/te/te_curve_anim2.h b/engines/tetraedge/te/te_curve_anim2.h
index 7f9fd6e8a7e..c0ef1f1e512 100644
--- a/engines/tetraedge/te/te_curve_anim2.h
+++ b/engines/tetraedge/te/te_curve_anim2.h
@@ -37,7 +37,7 @@ class TeCurveAnim2 : public TeAnimation {
public:
typedef void(T::*TMethod)(const S &);
- TeCurveAnim2() {}
+ TeCurveAnim2() : _callbackObj(nullptr), _duration(0), _lastUpdateTime(0) {}
virtual ~TeCurveAnim2() {}
void setCurve(const Common::Array<float> &curve) {
diff --git a/engines/tetraedge/te/te_free_move_zone.cpp b/engines/tetraedge/te/te_free_move_zone.cpp
index a9dee0ddc7c..7051e06ed31 100644
--- a/engines/tetraedge/te/te_free_move_zone.cpp
+++ b/engines/tetraedge/te/te_free_move_zone.cpp
@@ -33,6 +33,9 @@ namespace Tetraedge {
class TeFreeMoveZoneGraph : micropather::Graph {
friend class TeFreeMoveZone;
+
+ TeFreeMoveZoneGraph() : _owner(nullptr) {}
+
TeVector2s32 _size;
Common::Array<char> _flags;
float _bordersDistance;
diff --git a/engines/tetraedge/te/te_images_sequence.cpp b/engines/tetraedge/te/te_images_sequence.cpp
index ffe55b35745..b32e65ff915 100644
--- a/engines/tetraedge/te/te_images_sequence.cpp
+++ b/engines/tetraedge/te/te_images_sequence.cpp
@@ -28,7 +28,7 @@
namespace Tetraedge {
-TeImagesSequence::TeImagesSequence() : _width(0), _height(0), _curFrame(0) {
+TeImagesSequence::TeImagesSequence() : _width(0), _height(0), _curFrame(0), _frameRate(0) {
}
TeImagesSequence::~TeImagesSequence() {
diff --git a/engines/tetraedge/te/te_lua_gui.cpp b/engines/tetraedge/te/te_lua_gui.cpp
index 1cf23fd67f3..0c61c3e01cd 100644
--- a/engines/tetraedge/te/te_lua_gui.cpp
+++ b/engines/tetraedge/te/te_lua_gui.cpp
@@ -27,7 +27,7 @@
namespace Tetraedge {
-TeLuaGUI::TeLuaGUI() {
+TeLuaGUI::TeLuaGUI() : _loaded(false) {
}
TeButtonLayout *TeLuaGUI::buttonLayout(const Common::String &name) {
diff --git a/engines/tetraedge/te/te_model_animation.cpp b/engines/tetraedge/te/te_model_animation.cpp
index 7ab1f8bbc4a..23a60904fd6 100644
--- a/engines/tetraedge/te/te_model_animation.cpp
+++ b/engines/tetraedge/te/te_model_animation.cpp
@@ -33,7 +33,7 @@ namespace Tetraedge {
TeModelAnimation::TeModelAnimation() : _firstFrame(-1), _lastFrame(SHRT_MAX),
_curFrame(0), _curFrameValFresh(false), _repeatNum(0), _finishedSignalPending(false),
-_curFrame2(0), _useNMOArrays(0), _speed(0.0f) {
+_curFrame2(0), _useNMOArrays(0), _speed(0.0f), _numNMOFrames(0) {
}
int TeModelAnimation::calcCurrentFrame(double millis) {
diff --git a/engines/tetraedge/te/te_renderer.cpp b/engines/tetraedge/te/te_renderer.cpp
index 69f40ad8110..1e22dcb3ce2 100644
--- a/engines/tetraedge/te/te_renderer.cpp
+++ b/engines/tetraedge/te/te_renderer.cpp
@@ -33,7 +33,8 @@
namespace Tetraedge {
TeRenderer::TeRenderer() : _textureEnabled(false), _shadowMode(ShadowModeNone), _matrixMode(MM_GL_PROJECTION),
-_numTransparentMeshes(0), _pendingTransparentMeshProperties(0) {
+_numTransparentMeshes(0), _pendingTransparentMeshProperties(0), _currentCamera(nullptr), _scissorEnabled(false),
+_scissorX(0), _scissorY(0), _scissorWidth(0), _scissorHeight(0) {
}
void TeRenderer::addTransparentMesh(const TeMesh &mesh, unsigned long i1, unsigned long tricount, unsigned long materialno) {
diff --git a/engines/tetraedge/te/te_renderer.h b/engines/tetraedge/te/te_renderer.h
index 87cf89fd27f..691b4b381ab 100644
--- a/engines/tetraedge/te/te_renderer.h
+++ b/engines/tetraedge/te/te_renderer.h
@@ -49,7 +49,10 @@ public:
class TransparentMeshProperties {
public:
- TransparentMeshProperties() : _camera(nullptr), _vertexCount(0), _shouldDraw(false), _scissorEnabled(false), _hasColor(false) {}
+ TransparentMeshProperties() : _camera(nullptr), _vertexCount(0), _shouldDraw(false),
+ _scissorEnabled(false), _hasColor(false), _glTexEnvMode(0), _zOrder(0.0f),
+ _sourceTransparentMesh(0), _scissorX(0), _scissorY(0),
+ _scissorWidth(0), _scissorHeight(0) {}
TeCamera *_camera;
int _vertexCount;
diff --git a/engines/tetraedge/te/te_timer.cpp b/engines/tetraedge/te/te_timer.cpp
index ea02846a2a8..d217a4b7b9d 100644
--- a/engines/tetraedge/te/te_timer.cpp
+++ b/engines/tetraedge/te/te_timer.cpp
@@ -32,7 +32,8 @@ namespace Tetraedge {
TeTimer::TeTimer() : _stopped(true), _pausable(true), _alarmTime(0),
-_startTime(0), _lastTimeElapsed(0), _startTimeOffset(0), _updated(false) {
+_startTime(0), _lastTimeElapsed(0), _startTimeOffset(0), _updated(false),
+_alarmSet(false) {
if (realTimer()->isPaused()) {
realTimer()->start();
_realTime = realTimer()->getTimeFromStart();
Commit: 22a98d80f466b96a3b14d4a821291cebe01e2eda
https://github.com/scummvm/scummvm/commit/22a98d80f466b96a3b14d4a821291cebe01e2eda
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2023-01-30T16:18:01+09:00
Commit Message:
TETRAEDGE: Fix font anti-aliasing result slightly
Changed paths:
engines/tetraedge/te/te_text_base2.cpp
diff --git a/engines/tetraedge/te/te_text_base2.cpp b/engines/tetraedge/te/te_text_base2.cpp
index 61202b26e5b..ccd5d8972a6 100644
--- a/engines/tetraedge/te/te_text_base2.cpp
+++ b/engines/tetraedge/te/te_text_base2.cpp
@@ -98,8 +98,9 @@ void TeTextBase2::build() {
TeImage img;
Common::SharedPtr<TePalette> nullpal;
img.createImg(_size._x, _size._y, nullpal, TeImage::RGBA8);
- // fill with transparent white, the global color is applied on the mesh.
- img.fill(255, 255, 255, 0);
+ // fill with global color, alpha 0 so that the font anti-aliasing blends
+ // to the right color (see eg, the cellphone display)
+ img.fill(_globalColor.r(), _globalColor.g(), _globalColor.b(), 0);
for (uint i = 0; i < _wrappedLines.size(); i++) {
drawLine(img, _wrappedLines[i], lineoffsets[i]);
More information about the Scummvm-git-logs
mailing list