[Scummvm-git-logs] scummvm master -> 25303384802a189faf55c1960c95958dfe17ee72

mduggan noreply at scummvm.org
Sat Jan 28 08:13:27 UTC 2023


This automated email contains information about 8 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
0bfc989d5d TETRAEDGE: Store and restore unlocked artwork
ed10480dc6 TETRAEDGE: Remove outdated comment
8e1753a8df TETRAEDGE: Partly implement original bonus menu
cd1fc938ad TETRAEDGE: Improve types for visualfade.
4cd5989f93 TETRAEDGE: Rename shadow mode enum vals to be meaningful
9f87c6edc9 TETRAEDGE: Use true window size for fade sprite
6ff1723a21 TETRAEDGE: Fix potential crash from filling 3-byte image
2530338480 TETRAEDGE: Fix blending modes so fades keep right colors


Commit: 0bfc989d5d3aa7ecaefcb912f5eabb6456729b77
    https://github.com/scummvm/scummvm/commit/0bfc989d5d3aa7ecaefcb912f5eabb6456729b77
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2023-01-28T17:13:12+09:00

Commit Message:
TETRAEDGE: Store and restore unlocked artwork

Changed paths:
    engines/tetraedge/game/application.cpp
    engines/tetraedge/game/bonus_menu.cpp
    engines/tetraedge/game/game.cpp
    engines/tetraedge/game/game.h


diff --git a/engines/tetraedge/game/application.cpp b/engines/tetraedge/game/application.cpp
index da6f0aaf372..ccfb4c95a6b 100644
--- a/engines/tetraedge/game/application.cpp
+++ b/engines/tetraedge/game/application.cpp
@@ -286,6 +286,10 @@ void Application::create() {
 	_splashScreens.enter();
 
 	_drawShadows = (ConfMan.get("disable_shadows") != "true");
+
+	// Note: this is not in the original, but seems like a good place to do it..
+	g_engine->getGame()->loadUnlockedArtwork();
+
 	_created = true;
 }
 
diff --git a/engines/tetraedge/game/bonus_menu.cpp b/engines/tetraedge/game/bonus_menu.cpp
index 4dc9bdfb12c..1788e6801c5 100644
--- a/engines/tetraedge/game/bonus_menu.cpp
+++ b/engines/tetraedge/game/bonus_menu.cpp
@@ -24,6 +24,7 @@
 #include "common/textconsole.h"
 #include "tetraedge/tetraedge.h"
 #include "tetraedge/game/application.h"
+#include "tetraedge/te/te_core.h"
 #include "tetraedge/te/te_input_mgr.h"
 
 namespace Tetraedge {
@@ -49,7 +50,18 @@ void BonusMenu::enter(const Common::String &scriptName) {
 		SaveButton *saveBtn = new SaveButton(btn, btnNoStr);
 		_saveButtons.push_back(saveBtn);
 
-		// TODO: Finish this.
+		TeVector3f32 mainWinSz = g_engine->getApplication()->getMainWindow().size();
+		if (g_engine->getCore()->fileFlagSystemFlag("definition") == "SD")
+			mainWinSz = mainWinSz / 3.0f;
+		else
+			mainWinSz = mainWinSz / 4.0f;
+		mainWinSz.z() = 1.0f;
+		saveBtn->setSize(mainWinSz);
+		for (Te3DObject2 *child : saveBtn->childList()) {
+			child->setSize(mainWinSz);
+		}
+
+		// TODO: Finish this (lines 170-186)
 
 		btnNo++;
 	}
diff --git a/engines/tetraedge/game/game.cpp b/engines/tetraedge/game/game.cpp
index 30d6273a6c9..e99ce276f77 100644
--- a/engines/tetraedge/game/game.cpp
+++ b/engines/tetraedge/game/game.cpp
@@ -105,6 +105,8 @@ bool Game::addAnimToSet(const Common::String &anim) {
 void Game::addArtworkUnlocked(const Common::String &name, bool notify) {
 	if (_unlockedArtwork.contains(name))
 		return;
+	Common::String configName = Common::String::format("artwork_%s", name.c_str());
+	ConfMan.setBool(configName, true);
 	_unlockedArtwork[name] = true;
 	if (notify) {
 		_notifier.push("BONUS!", "Inventory/Objects/VPapierCrayon.png");
@@ -806,6 +808,15 @@ void Game::loadBackup(const Common::String &path) {
 	}
 }
 
+void Game::loadUnlockedArtwork() {
+	Common::ConfigManager::Domain *domain = ConfMan.getActiveDomain();
+	for (auto &val : *domain) {
+		if (val._key.substr(0, 8) == "artwork_") {
+			_unlockedArtwork[val._key.substr(8)] = true;
+		}
+	}
+}
+
 bool Game::loadCharacter(const Common::String &name) {
 	bool result = true;
 	Character *character = _scene.character(name);
@@ -1497,7 +1508,11 @@ void Game::stopSound(const Common::String &name) {
 
 Common::Error Game::syncGame(Common::Serializer &s) {
 	Application *app = g_engine->getApplication();
-	s.setVersion(1);
+
+	// TODO: should be an error before testing.
+	//if (!s.syncVersion(1))
+	//	error("Save game version too new: %d", s.getVersion());
+
 	inventory().syncState(s);
 	inventory().cellphone()->syncState(s);
 	// dialog2().syncState(s); // game saves this here, but doesn't actually save anything
@@ -1521,6 +1536,7 @@ Common::Error Game::syncGame(Common::Serializer &s) {
 	s.syncString(_scene._character->walkModeStr());
 	s.syncAsByte(_firstInventory);
 	s.syncAsByte(app->tutoActivated());
+
 	app->showLoadingIcon(false);
 	return Common::kNoError;
 }
diff --git a/engines/tetraedge/game/game.h b/engines/tetraedge/game/game.h
index 9674923b5e5..8c4f8f353e4 100644
--- a/engines/tetraedge/game/game.h
+++ b/engines/tetraedge/game/game.h
@@ -123,6 +123,9 @@ public:
 	bool loadPlayerCharacter(const Common::String &name);
 	bool loadScene(const Common::String &name);
 
+	// Not in original. Load unlocked artwork from ScummVM config.
+	void loadUnlockedArtwork();
+
 	bool onAnswered(const Common::String &val);
 	bool onCallNumber(Common::String val);
 	bool onCharacterAnimationFinished(const Common::String &val);


Commit: ed10480dc6b1d343105e3f22289e9d47964f3e8b
    https://github.com/scummvm/scummvm/commit/ed10480dc6b1d343105e3f22289e9d47964f3e8b
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2023-01-28T17:13:12+09:00

Commit Message:
TETRAEDGE: Remove outdated comment

Changed paths:
    engines/tetraedge/te/te_theora.cpp


diff --git a/engines/tetraedge/te/te_theora.cpp b/engines/tetraedge/te/te_theora.cpp
index 2096d84f71e..0d456e8c0ec 100644
--- a/engines/tetraedge/te/te_theora.cpp
+++ b/engines/tetraedge/te/te_theora.cpp
@@ -104,7 +104,6 @@ bool TeTheora::update(unsigned long i, TeImage &imgout) {
 		load(_path);
 	}
 
-	// TODO: Should this seek to frame i? Currently just continues.
 	const Graphics::Surface *frame = nullptr;
 	while (_decoder->getCurFrame() <= (int)i && !_decoder->endOfVideo())
 		frame = _decoder->decodeNextFrame();


Commit: 8e1753a8df52397a2ee4d28c44af33fc6e13e951
    https://github.com/scummvm/scummvm/commit/8e1753a8df52397a2ee4d28c44af33fc6e13e951
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2023-01-28T17:13:12+09:00

Commit Message:
TETRAEDGE: Partly implement original bonus menu

Changed paths:
    engines/tetraedge/game/bonus_menu.cpp
    engines/tetraedge/game/game.h
    engines/tetraedge/te/te_variant.cpp


diff --git a/engines/tetraedge/game/bonus_menu.cpp b/engines/tetraedge/game/bonus_menu.cpp
index 1788e6801c5..a5b6ef92b1b 100644
--- a/engines/tetraedge/game/bonus_menu.cpp
+++ b/engines/tetraedge/game/bonus_menu.cpp
@@ -24,6 +24,7 @@
 #include "common/textconsole.h"
 #include "tetraedge/tetraedge.h"
 #include "tetraedge/game/application.h"
+#include "tetraedge/game/game.h"
 #include "tetraedge/te/te_core.h"
 #include "tetraedge/te/te_input_mgr.h"
 
@@ -61,7 +62,10 @@ void BonusMenu::enter(const Common::String &scriptName) {
 			child->setSize(mainWinSz);
 		}
 
-		// TODO: Finish this (lines 170-186)
+		if (btn->childCount() <= 4)
+			error("expected save button to have >4 children");
+		const Common::String &artName = btn->child(4)->name();
+		btn->setEnable(g_engine->getGame()->unlockedArtwork().getValOrDefault(artName, false));
 
 		btnNo++;
 	}
@@ -95,7 +99,7 @@ void BonusMenu::enter(const Common::String &scriptName) {
 	if (rightBtn)
 		rightBtn->onMouseClickValidated().add(this, &BonusMenu::onRightButton);
 
-	// TODO: more stuff here with "text" values (also finish loop above)
+	// TODO: more stuff here with "text" values
 	warning("TODO: Finish BonusMenu::enter(%s)", scriptName.c_str());
 
 	TeButtonLayout *pictureBtn = buttonLayout("fullScreenPictureButton");
@@ -148,7 +152,17 @@ bool BonusMenu::onMouseMove(const Common::Point &pt) {
 	if (slideLayout->state() == TeButtonLayout::BUTTON_STATE_DOWN) {
 		TeCurveAnim2<TeLayout, TeVector3f32> *slideAnim = layoutPositionLinearAnimation("slideAnimation");
 		if (!slideAnim->_runTimer.running()) {
-			warning("TODO: implement BonusMenu::onMouseMove");
+			const Common::Point mousePos = g_engine->getInputMgr()->lastMousePos();
+			const TeVector3f32 slotsSize = layoutChecked("slots")->size();
+
+			float slideAmount = (mousePos.x - _slideBtnStartMousePos._x) / slotsSize.x();
+			if (slideAmount <= -0.1) {
+				onRightButton();
+				buttonLayoutChecked("slideButton")->setClickPassThrough(false);
+			} else if (slideAmount > 0.1){
+				onLeftButton();
+				buttonLayoutChecked("slideButton")->setClickPassThrough(false);
+			}
 		}
 	}
 
@@ -213,7 +227,7 @@ bool BonusMenu::onSlideButtonDown() {
 BonusMenu::SaveButton::SaveButton(TeButtonLayout *btn, const Common::String &name) {
 	setName(name);
 	btn->setEnable(true);
-	// TODO: Add child something here?
+	addChild(btn);
 	btn->onMouseClickValidated().add(this, &BonusMenu::SaveButton::onLoadSave);
 }
 
diff --git a/engines/tetraedge/game/game.h b/engines/tetraedge/game/game.h
index 8c4f8f353e4..4eb7c76361e 100644
--- a/engines/tetraedge/game/game.h
+++ b/engines/tetraedge/game/game.h
@@ -202,6 +202,7 @@ public:
 	Common::RandomSource &randomSource() { return _randomSource; }
 	void setLoadName(const Common::String &loadName) { _loadName = loadName; }
 	bool hasLoadName() const { return !_loadName.empty(); }
+	const Common::HashMap<Common::String, bool> unlockedArtwork() const { return _unlockedArtwork; }
 
 private:
 	bool _luaShowOwnerError;
diff --git a/engines/tetraedge/te/te_variant.cpp b/engines/tetraedge/te/te_variant.cpp
index f8367daa036..ba113f33652 100644
--- a/engines/tetraedge/te/te_variant.cpp
+++ b/engines/tetraedge/te/te_variant.cpp
@@ -29,7 +29,8 @@ TeVariant::TeVariant() : _type(TypeNone), _data(0) {
 TeVariant::TeVariant(bool val) : _type(TypeBoolean), _data(val) {
 }
 
-TeVariant::TeVariant(double val) : _type(TypeFloat64), _data((uint64)val) {
+TeVariant::TeVariant(double val) : _type(TypeFloat64) {
+	*(double *)(&_data) = val;
 }
 
 TeVariant::TeVariant(const Common::String &val) : _type(TypeString), _data(0), _strVal(val) {
@@ -57,7 +58,7 @@ float TeVariant::toFloat32(bool *success) const {
 	if (_type == TypeFloat32) {
 		if (success)
 			*success = true;
-		return *(float *)_data;
+		return *(float *)(&_data);
 	} else {
 		if (success)
 			*success = false;
@@ -70,7 +71,7 @@ double TeVariant::toFloat64(bool *success) const {
 	if (_type == TypeFloat64) {
 		if (success)
 			*success = true;
-		return *(double *)_data;
+		return *(double *)(&_data);
 	} else {
 		if (success)
 			*success = false;
@@ -83,7 +84,7 @@ int32 TeVariant::toSigned32(bool *success) const {
 	if (_type == TypeInt32) {
 		if (success)
 			*success = true;
-		return *(int32 *)_data;
+		return *(int32 *)(&_data);
 	} else {
 		if (success)
 			*success = false;
@@ -96,7 +97,7 @@ int64 TeVariant::toSigned64(bool *success) const {
 	if (_type == TypeInt64) {
 		if (success)
 			*success = true;
-		return *(int64 *)_data;
+		return *(int64 *)(&_data);
 	} else {
 		if (success)
 			*success = false;
@@ -122,7 +123,7 @@ int32 TeVariant::toUnsigned32(bool *success) const {
 	if (_type == TypeUInt32) {
 		if (success)
 			*success = true;
-		return *(uint32 *)_data;
+		return *(uint32 *)(&_data);
 	} else {
 		if (success)
 			*success = false;
@@ -135,7 +136,7 @@ int64 TeVariant::toUnsigned64(bool *success) const {
 	if (_type == TypeUInt64) {
 		if (success)
 			*success = true;
-		return *(uint64 *)_data;
+		return *(uint64 *)(&_data);
 	} else {
 		if (success)
 			*success = false;


Commit: cd1fc938adeb5172fe46d4cbd22a5e77bae9a709
    https://github.com/scummvm/scummvm/commit/cd1fc938adeb5172fe46d4cbd22a5e77bae9a709
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2023-01-28T17:13:12+09:00

Commit Message:
TETRAEDGE: Improve types for visualfade.

Changed paths:
    engines/tetraedge/te/te_visual_fade.cpp
    engines/tetraedge/te/te_visual_fade.h


diff --git a/engines/tetraedge/te/te_visual_fade.cpp b/engines/tetraedge/te/te_visual_fade.cpp
index 3eaf7f30dc2..7d355755640 100644
--- a/engines/tetraedge/te/te_visual_fade.cpp
+++ b/engines/tetraedge/te/te_visual_fade.cpp
@@ -43,7 +43,7 @@ void TeVisualFade::animateBlackFade() {
 	_fadeCurveAnim.setCurve(curve);
 	_fadeCurveAnim._duration = 2000.0;
 	_fadeCurveAnim._callbackObj = &_fadeCaptureSprite;
-	_fadeCurveAnim._callbackMethod = &Te3DObject2::setColor;
+	_fadeCurveAnim._callbackMethod = &TeSpriteLayout::setColor;
 	_fadeCurveAnim.play();
 
 	_blackFadeSprite.setVisible(true);
@@ -53,7 +53,7 @@ void TeVisualFade::animateBlackFade() {
 	_blackFadeCurveAnim.setCurve(curve);
 	_blackFadeCurveAnim._duration = 2000.0;
 	_blackFadeCurveAnim._callbackObj = &_blackFadeSprite;
-	_blackFadeCurveAnim._callbackMethod = &Te3DObject2::setColor;
+	_blackFadeCurveAnim._callbackMethod = &TeSpriteLayout::setColor;
 	_blackFadeCurveAnim.play();
 }
 
@@ -69,7 +69,7 @@ void TeVisualFade::animateFade() {
 	_fadeCurveAnim.setCurve(curve);
 	_fadeCurveAnim._duration = 400.0;
 	_fadeCurveAnim._callbackObj = &_fadeCaptureSprite;
-	_fadeCurveAnim._callbackMethod = &Te3DObject2::setColor;
+	_fadeCurveAnim._callbackMethod = &TeSpriteLayout::setColor;
 	_fadeCurveAnim.play();
 }
 
diff --git a/engines/tetraedge/te/te_visual_fade.h b/engines/tetraedge/te/te_visual_fade.h
index 6a9f363b610..f99a6ded32c 100644
--- a/engines/tetraedge/te/te_visual_fade.h
+++ b/engines/tetraedge/te/te_visual_fade.h
@@ -48,15 +48,15 @@ public:
 	bool fading() const { return _fadeCurveAnim._runTimer.running(); }
 	bool blackFading() const { return _blackFadeCurveAnim._runTimer.running(); }
 
-	TeCurveAnim2<Te3DObject2, TeColor> blackFadeCurveAnim() { return _blackFadeCurveAnim; }
+	TeCurveAnim2<TeSpriteLayout, TeColor> blackFadeCurveAnim() { return _blackFadeCurveAnim; }
 
 	TeIntrusivePtr<Te3DTexture> texture() { return _texturePtr; }
 
 private:
 
 	TeIntrusivePtr<Te3DTexture> _texturePtr;
-	TeCurveAnim2<Te3DObject2, TeColor> _fadeCurveAnim;
-	TeCurveAnim2<Te3DObject2, TeColor> _blackFadeCurveAnim;
+	TeCurveAnim2<TeSpriteLayout, TeColor> _fadeCurveAnim;
+	TeCurveAnim2<TeSpriteLayout, TeColor> _blackFadeCurveAnim;
 	TeImage _image;
 
 };


Commit: 4cd5989f93b43eedc879bc36c961ea78b6641231
    https://github.com/scummvm/scummvm/commit/4cd5989f93b43eedc879bc36c961ea78b6641231
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2023-01-28T17:13:12+09:00

Commit Message:
TETRAEDGE: Rename shadow mode enum vals to be meaningful

Changed paths:
    engines/tetraedge/game/application.cpp
    engines/tetraedge/te/te_mesh_opengl.cpp
    engines/tetraedge/te/te_mesh_tinygl.cpp
    engines/tetraedge/te/te_renderer.cpp
    engines/tetraedge/te/te_renderer.h
    engines/tetraedge/te/te_renderer_opengl.cpp
    engines/tetraedge/te/te_renderer_tinygl.cpp


diff --git a/engines/tetraedge/game/application.cpp b/engines/tetraedge/game/application.cpp
index ccfb4c95a6b..9de4362532f 100644
--- a/engines/tetraedge/game/application.cpp
+++ b/engines/tetraedge/game/application.cpp
@@ -432,9 +432,9 @@ void Application::performRender() {
 	if (_drawShadows && game->running() && game->scene()._character
 			&& game->scene().shadowLightNo() != -1
 			&& game->scene().charactersShadow() != nullptr) {
-		renderer->shadowMode(TeRenderer::ShadowMode1);
+		renderer->shadowMode(TeRenderer::ShadowModeCreating);
 		game->scene().charactersShadow()->createTexture(&game->scene());
-		renderer->shadowMode(TeRenderer::ShadowMode0);
+		renderer->shadowMode(TeRenderer::ShadowModeNone);
 	}
 
 	drawBack();
@@ -448,9 +448,9 @@ void Application::performRender() {
 			TeIntrusivePtr<TeCamera> currentCamera = game->scene().currentCamera();
 			if (currentCamera) {
 				currentCamera->apply();
-				renderer->shadowMode(TeRenderer::ShadowMode2);
+				renderer->shadowMode(TeRenderer::ShadowModeDrawing);
 				game->scene().charactersShadow()->draw(&game->scene());
-				renderer->shadowMode(TeRenderer::ShadowMode0);
+				renderer->shadowMode(TeRenderer::ShadowModeNone);
 			}
 		}
 		game->draw();
diff --git a/engines/tetraedge/te/te_mesh_opengl.cpp b/engines/tetraedge/te/te_mesh_opengl.cpp
index 97925714e77..e1646a3e653 100644
--- a/engines/tetraedge/te/te_mesh_opengl.cpp
+++ b/engines/tetraedge/te/te_mesh_opengl.cpp
@@ -56,7 +56,7 @@ void TeMeshOpenGL::draw() {
 	debug("   worldRot   %s", worldRotation().dump().c_str());
 	*/
 
-	if (renderer->shadowMode() != TeRenderer::ShadowMode1) {
+	if (renderer->shadowMode() != TeRenderer::ShadowModeCreating) {
 		if (_faceCounts.empty()) {
 			if (hasAlpha(0) && _shouldDraw) {
 				renderer->addTransparentMesh(*this, 0, 0, 0);
@@ -90,15 +90,15 @@ void TeMeshOpenGL::draw() {
 	if (!_colors.empty())
 		glEnableClientState(GL_COLOR_ARRAY);
 
-	glVertexPointer(3, GL_FLOAT, 12, verticies.data());
+	glVertexPointer(3, GL_FLOAT, sizeof(TeVector3f32), verticies.data());
 	if (!normals.empty())
-		glNormalPointer(GL_FLOAT, 12, normals.data());
+		glNormalPointer(GL_FLOAT, sizeof(TeVector3f32), normals.data());
 
-	if (!_uvs.empty() && renderer->shadowMode() != TeRenderer::ShadowMode2)
-		glTexCoordPointer(2, GL_FLOAT, 8, _uvs.data());
+	if (!_uvs.empty() && renderer->shadowMode() != TeRenderer::ShadowModeDrawing)
+		glTexCoordPointer(2, GL_FLOAT, sizeof(TeVector2f32), _uvs.data());
 
 	if (!_colors.empty())
-		glColorPointer(4, GL_UNSIGNED_BYTE, 4, _colors.data());
+		glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(TeColor), _colors.data());
 
 	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, _gltexEnvMode);
 	if (renderer->scissorEnabled()) {
@@ -125,7 +125,7 @@ void TeMeshOpenGL::draw() {
 		for (uint i = 0; i < _materials.size(); i++) {
 			if (!_faceCounts[i])
 				continue;
-			if (!hasAlpha(i) || renderer->shadowMode() == TeRenderer::ShadowMode1 || !_shouldDraw) {
+			if (!hasAlpha(i) || renderer->shadowMode() == TeRenderer::ShadowModeCreating || !_shouldDraw) {
 				renderer->applyMaterial(_materials[i]);
 				glDrawElements(_glMeshMode, _faceCounts[i] * 3, GL_UNSIGNED_SHORT, _indexes.data() + totalFaceCount * 3);
 				glDisableClientState(GL_TEXTURE_COORD_ARRAY);
diff --git a/engines/tetraedge/te/te_mesh_tinygl.cpp b/engines/tetraedge/te/te_mesh_tinygl.cpp
index acedd32db39..3f9db8ea0ca 100644
--- a/engines/tetraedge/te/te_mesh_tinygl.cpp
+++ b/engines/tetraedge/te/te_mesh_tinygl.cpp
@@ -55,7 +55,7 @@ void TeMeshTinyGL::draw() {
 	debug("   worldRot   %s", worldRotation().dump().c_str());
 	*/
 
-	if (renderer->shadowMode() != TeRenderer::ShadowMode1) {
+	if (renderer->shadowMode() != TeRenderer::ShadowModeCreating) {
 		if (_faceCounts.empty()) {
 			if (hasAlpha(0) && _shouldDraw) {
 				renderer->addTransparentMesh(*this, 0, 0, 0);
@@ -89,15 +89,15 @@ void TeMeshTinyGL::draw() {
 	if (!_colors.empty())
 		tglEnableClientState(TGL_COLOR_ARRAY);
 
-	tglVertexPointer(3, TGL_FLOAT, 12, verticies.data());
+	tglVertexPointer(3, TGL_FLOAT, sizeof(TeVector3f32), verticies.data());
 	if (!normals.empty())
-		tglNormalPointer(TGL_FLOAT, 12, normals.data());
+		tglNormalPointer(TGL_FLOAT, sizeof(TeVector3f32), normals.data());
 
-	if (!_uvs.empty() && renderer->shadowMode() != TeRenderer::ShadowMode2)
-		tglTexCoordPointer(2, TGL_FLOAT, 8, _uvs.data());
+	if (!_uvs.empty() && renderer->shadowMode() != TeRenderer::ShadowModeDrawing)
+		tglTexCoordPointer(2, TGL_FLOAT, sizeof(TeVector2f32), _uvs.data());
 
 	if (!_colors.empty())
-		tglColorPointer(4, TGL_UNSIGNED_BYTE, 4, _colors.data());
+		tglColorPointer(4, TGL_UNSIGNED_BYTE, sizeof(TeColor), _colors.data());
 
 	// TODO: not supported in TGL
 	//tglTexEnvi(TGL_TEXTURE_ENV, TGL_TEXTURE_ENV_MODE, _gltexEnvMode);
@@ -128,7 +128,7 @@ void TeMeshTinyGL::draw() {
 		for (uint i = 0; i < _materials.size(); i++) {
 			if (!_faceCounts[i])
 				continue;
-			if (!hasAlpha(i) || renderer->shadowMode() == TeRenderer::ShadowMode1 || !_shouldDraw) {
+			if (!hasAlpha(i) || renderer->shadowMode() == TeRenderer::ShadowModeCreating || !_shouldDraw) {
 				renderer->applyMaterial(_materials[i]);
 				tglDrawElements(_glMeshMode, _faceCounts[i] * 3, TGL_UNSIGNED_SHORT, _indexes.data() + totalFaceCount * 3);
 				tglDisableClientState(TGL_TEXTURE_COORD_ARRAY);
diff --git a/engines/tetraedge/te/te_renderer.cpp b/engines/tetraedge/te/te_renderer.cpp
index 153bf7a650c..69f40ad8110 100644
--- a/engines/tetraedge/te/te_renderer.cpp
+++ b/engines/tetraedge/te/te_renderer.cpp
@@ -32,7 +32,7 @@
 
 namespace Tetraedge {
 
-TeRenderer::TeRenderer() : _textureEnabled(false), _shadowMode(ShadowMode0), _matrixMode(MM_GL_PROJECTION),
+TeRenderer::TeRenderer() : _textureEnabled(false), _shadowMode(ShadowModeNone), _matrixMode(MM_GL_PROJECTION),
 _numTransparentMeshes(0), _pendingTransparentMeshProperties(0) {
 }
 
@@ -200,7 +200,7 @@ void TeRenderer::addTransparentMesh(const TeMesh &mesh, unsigned long i1, unsign
 void TeRenderer::create() {
 	_textureEnabled = false;
 	_currentCamera = nullptr;
-	_shadowMode = ShadowMode0;
+	_shadowMode = ShadowModeNone;
 	_numTransparentMeshes = 0;
 	_pendingTransparentMeshProperties = 0;
 }
diff --git a/engines/tetraedge/te/te_renderer.h b/engines/tetraedge/te/te_renderer.h
index 3f7c964adee..87cf89fd27f 100644
--- a/engines/tetraedge/te/te_renderer.h
+++ b/engines/tetraedge/te/te_renderer.h
@@ -42,9 +42,9 @@ public:
 	};
 
 	enum ShadowMode {
-		ShadowMode0 = 0,
-		ShadowMode1 = 1,
-		ShadowMode2 = 2
+		ShadowModeNone = 0,
+		ShadowModeCreating = 1,
+		ShadowModeDrawing = 2
 	};
 
 	class TransparentMeshProperties {
diff --git a/engines/tetraedge/te/te_renderer_opengl.cpp b/engines/tetraedge/te/te_renderer_opengl.cpp
index 4aeaf16632e..1e540d82f45 100644
--- a/engines/tetraedge/te/te_renderer_opengl.cpp
+++ b/engines/tetraedge/te/te_renderer_opengl.cpp
@@ -155,10 +155,10 @@ void TeRendererOpenGL::renderTransparentMeshes() {
 	glEnableClientState(GL_TEXTURE_COORD_ARRAY);
 	glEnableClientState(GL_COLOR_ARRAY);
 
-	glVertexPointer(3, GL_FLOAT, 12, _transparentMeshVertexes.data());
-	glNormalPointer(GL_FLOAT, 12, _transparentMeshNormals.data());
-	glTexCoordPointer(2, GL_FLOAT, 8, _transparentMeshCoords.data());
-	glColorPointer(4, GL_UNSIGNED_BYTE, 4, _transparentMeshColors.data());
+	glVertexPointer(3, GL_FLOAT, sizeof(TeVector3f32), _transparentMeshVertexes.data());
+	glNormalPointer(GL_FLOAT, sizeof(TeVector3f32), _transparentMeshNormals.data());
+	glTexCoordPointer(2, GL_FLOAT, sizeof(TeVector2f32), _transparentMeshCoords.data());
+	glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(TeColor), _transparentMeshColors.data());
 
 	TeMaterial lastMaterial;
 	TeMatrix4x4 lastMatrix;
@@ -276,16 +276,16 @@ void TeRendererOpenGL::setViewport(int x, int y, int w, int h) {
 
 void TeRendererOpenGL::shadowMode(enum ShadowMode mode) {
 	_shadowMode = mode;
-	if (mode == ShadowMode0) {
+	if (mode == ShadowModeNone) {
 		glDisable(GL_CULL_FACE);
 		glShadeModel(GL_SMOOTH);
 		return;
 	}
 
-	if (mode == ShadowMode1) {
+	if (mode == ShadowModeCreating) {
 		glEnable(GL_CULL_FACE);
 		glCullFace(GL_BACK);
-	} else { // ShadowMode2
+	} else { // ShadowModeDrawing
 		glDisable(GL_CULL_FACE);
 	}
 	glEnable(GL_BLEND);
@@ -297,7 +297,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::ShadowMode0) {
+	if (_shadowMode == TeRenderer::ShadowModeNone) {
 		if (m._enableLights)
 			TeLightOpenGL::enableAll();
 		else
@@ -345,7 +345,7 @@ void TeRendererOpenGL::applyMaterial(const TeMaterial &m) {
 		glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diffuse);
 
 		setCurrentColor(m._diffuseColor);
-	} else if (_shadowMode == TeRenderer::ShadowMode1) {
+	} 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 };
diff --git a/engines/tetraedge/te/te_renderer_tinygl.cpp b/engines/tetraedge/te/te_renderer_tinygl.cpp
index 9654f530c3b..7ab22a9aba2 100644
--- a/engines/tetraedge/te/te_renderer_tinygl.cpp
+++ b/engines/tetraedge/te/te_renderer_tinygl.cpp
@@ -162,10 +162,10 @@ void TeRendererTinyGL::renderTransparentMeshes() {
 	tglEnableClientState(TGL_TEXTURE_COORD_ARRAY);
 	tglEnableClientState(TGL_COLOR_ARRAY);
 
-	tglVertexPointer(3, TGL_FLOAT, 12, _transparentMeshVertexes.data());
-	tglNormalPointer(TGL_FLOAT, 12, _transparentMeshNormals.data());
-	tglTexCoordPointer(2, TGL_FLOAT, 8, _transparentMeshCoords.data());
-	tglColorPointer(4, TGL_UNSIGNED_BYTE, 4, _transparentMeshColors.data());
+	tglVertexPointer(3, TGL_FLOAT, sizeof(TeVector3f32), _transparentMeshVertexes.data());
+	tglNormalPointer(TGL_FLOAT, sizeof(TeVector3f32), _transparentMeshNormals.data());
+	tglTexCoordPointer(2, TGL_FLOAT, sizeof(TeVector2f32), _transparentMeshCoords.data());
+	tglColorPointer(4, TGL_UNSIGNED_BYTE, sizeof(TeColor), _transparentMeshColors.data());
 
 	TeMaterial lastMaterial;
 	TeMatrix4x4 lastMatrix;
@@ -287,16 +287,16 @@ void TeRendererTinyGL::setViewport(int x, int y, int w, int h) {
 
 void TeRendererTinyGL::shadowMode(enum ShadowMode mode) {
 	_shadowMode = mode;
-	if (mode == ShadowMode0) {
+	if (mode == ShadowModeNone) {
 		tglDisable(TGL_CULL_FACE);
 		tglShadeModel(TGL_SMOOTH);
 		return;
 	}
 
-	if (mode == ShadowMode1) {
+	if (mode == ShadowModeCreating) {
 		tglEnable(TGL_CULL_FACE);
 		tglCullFace(TGL_BACK);
-	} else { // ShadowMode2
+	} else { // ShadowModeDrawing
 		tglDisable(TGL_CULL_FACE);
 	}
 	tglEnable(TGL_BLEND);
@@ -308,7 +308,7 @@ void TeRendererTinyGL::shadowMode(enum ShadowMode mode) {
 void TeRendererTinyGL::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::ShadowMode0) {
+	if (_shadowMode == TeRenderer::ShadowModeNone) {
 		if (m._enableLights)
 			TeLightTinyGL::enableAll();
 		else
@@ -360,7 +360,7 @@ void TeRendererTinyGL::applyMaterial(const TeMaterial &m) {
 		tglMaterialfv(TGL_FRONT_AND_BACK, TGL_DIFFUSE, diffuse);
 
 		setCurrentColor(m._diffuseColor);
-	} else if (_shadowMode == TeRenderer::ShadowMode1) {
+	} 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 };


Commit: 9f87c6edc9ae8c0529e06155a81d9f35b7eb5a47
    https://github.com/scummvm/scummvm/commit/9f87c6edc9ae8c0529e06155a81d9f35b7eb5a47
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2023-01-28T17:13:12+09:00

Commit Message:
TETRAEDGE: Use true window size for fade sprite

Changed paths:
    engines/tetraedge/te/te_visual_fade.cpp


diff --git a/engines/tetraedge/te/te_visual_fade.cpp b/engines/tetraedge/te/te_visual_fade.cpp
index 7d355755640..2e9502fd9e0 100644
--- a/engines/tetraedge/te/te_visual_fade.cpp
+++ b/engines/tetraedge/te/te_visual_fade.cpp
@@ -21,6 +21,7 @@
 
 #include "common/textconsole.h"
 #include "tetraedge/tetraedge.h"
+#include "tetraedge/game/application.h"
 #include "tetraedge/te/te_visual_fade.h"
 #include "tetraedge/te/te_renderer.h"
 
@@ -107,9 +108,8 @@ void TeVisualFade::init() {
 	// create an image the size of the window, no palette, format 6.
 	Common::SharedPtr<TePalette> nullpal;
 	_image.destroy();
-	// TODO: should this get actual window size instead of default?
-	_image.createImg(g_engine->getDefaultScreenWidth(),
-			g_engine->getDefaultScreenHeight(), nullpal, TeImage::RGBA8);
+	const TeVector3f32 winSize = g_engine->getApplication()->getMainWindow().size();
+	_image.createImg((int)winSize.x(), (int)winSize.y(), nullpal, TeImage::RGBA8);
 	_texturePtr->load(_image);
 	g_engine->getRenderer()->enableTexture();
 	_texturePtr->load(_image);


Commit: 6ff1723a2191c3e0bacddda8bc27e2ee746cd220
    https://github.com/scummvm/scummvm/commit/6ff1723a2191c3e0bacddda8bc27e2ee746cd220
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2023-01-28T17:13:13+09:00

Commit Message:
TETRAEDGE: Fix potential crash from filling 3-byte image

Changed paths:
    engines/tetraedge/te/te_image.cpp


diff --git a/engines/tetraedge/te/te_image.cpp b/engines/tetraedge/te/te_image.cpp
index 7cf40e0f8f4..4e864d983ff 100644
--- a/engines/tetraedge/te/te_image.cpp
+++ b/engines/tetraedge/te/te_image.cpp
@@ -56,7 +56,8 @@ void TeImage::createImg(uint xsize, uint ysize, Common::SharedPtr<TePalette> &pa
 									  Graphics::PixelFormat(3, 8, 8, 8, 0, 16, 8, 0, 0) : Graphics::PixelFormat(4, 8, 8, 8, 8, 0, 8, 16, 24));
 
 	Graphics::ManagedSurface::create(xsize, ysize, pxformat);
-	Graphics::ManagedSurface::fillRect(Common::Rect(0, 0, xsize, ysize), 0);
+	if (teformat == TeImage::RGBA8)
+		Graphics::ManagedSurface::fillRect(Common::Rect(0, 0, xsize, ysize), 0);
 }
 
 void TeImage::deserialize(Common::ReadStream &stream) {


Commit: 25303384802a189faf55c1960c95958dfe17ee72
    https://github.com/scummvm/scummvm/commit/25303384802a189faf55c1960c95958dfe17ee72
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2023-01-28T17:13:13+09:00

Commit Message:
TETRAEDGE: Fix blending modes so fades keep right colors

Changed paths:
    engines/tetraedge/te/te_renderer_opengl.cpp


diff --git a/engines/tetraedge/te/te_renderer_opengl.cpp b/engines/tetraedge/te/te_renderer_opengl.cpp
index 1e540d82f45..de72dfc3061 100644
--- a/engines/tetraedge/te/te_renderer_opengl.cpp
+++ b/engines/tetraedge/te/te_renderer_opengl.cpp
@@ -96,7 +96,8 @@ void TeRendererOpenGL::init(uint width, uint height) {
 	glDepthMask(GL_TRUE);
 	glShadeModel(GL_SMOOTH);
 	glEnable(GL_BLEND);
-	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+	// Note: original doesn't separate but blends are nicer that way.
+	glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
 	glDepthFunc(GL_LEQUAL);
 	glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_DONT_CARE);
 	glClearDepth(1.0);
@@ -289,7 +290,8 @@ void TeRendererOpenGL::shadowMode(enum ShadowMode mode) {
 		glDisable(GL_CULL_FACE);
 	}
 	glEnable(GL_BLEND);
-	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+	// Note: original doesn't separate but blends are nicer that way.
+	glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
 	glShadeModel(GL_FLAT);
 	TeLightOpenGL::disableAll();
 }




More information about the Scummvm-git-logs mailing list