[Scummvm-git-logs] scummvm master -> 3d461fca18bd43155c804a97d69bd34981d3078f

somaen einarjohants at gmail.com
Tue Feb 16 22:24:42 UTC 2021


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:
f9c1f62cdd TINSEL: Partially implement scene loading for Discworld Noir
0831a53422 TINSEL: Map EVENT
e583392bac TINSEL: Map and stub SET3DTEXTURE
70aa0e793d TINSEL: Map and stub PLAYMUSIC
25c91b5213 TINSEL: Map BACKGROUND
dfbdd4bca6 TINSEL: Map WAITTIME
3d461fca18 TINSEL: Initialize graphics for Noir as 16 Bit 565


Commit: f9c1f62cdd6070830e8177ea0a5fdcbcd49300ce
    https://github.com/scummvm/scummvm/commit/f9c1f62cdd6070830e8177ea0a5fdcbcd49300ce
Author: Einar Johan Trøan Sømåen (somaen at scummvm.org)
Date: 2021-02-16T23:24:27+01:00

Commit Message:
TINSEL: Partially implement scene loading for Discworld Noir

Changed paths:
    engines/tinsel/music.cpp
    engines/tinsel/polygons.cpp
    engines/tinsel/scene.cpp


diff --git a/engines/tinsel/music.cpp b/engines/tinsel/music.cpp
index 623183ccb4..f5b904ff47 100644
--- a/engines/tinsel/music.cpp
+++ b/engines/tinsel/music.cpp
@@ -804,6 +804,11 @@ void PCMMusicPlayer::restoreThatTune(void *voidPtr) {
 void PCMMusicPlayer::setMusicSceneDetails(SCNHANDLE hScript,
 		SCNHANDLE hSegment, const char *fileName) {
 
+	if (TinselV3) {
+		warning("TODO: Implement music handling for Noir");
+		return;
+	}
+
 	Common::StackLock lock(_mutex);
 
 	stop();
diff --git a/engines/tinsel/polygons.cpp b/engines/tinsel/polygons.cpp
index 1b1a2fb088..2f3eb9d542 100644
--- a/engines/tinsel/polygons.cpp
+++ b/engines/tinsel/polygons.cpp
@@ -243,6 +243,11 @@ void Poly::nextPoly() {
 		xoff = nextLong(_pData);
 		yoff = nextLong(_pData);
 		id = nextLong(_pData);
+		if (TinselV3) {
+			warning("TODO: Complete implementation of Polygon loading for Noir");
+			nextLong(_pData);
+			nextLong(_pData);
+		}
 		reftype = nextLong(_pData);
 	}
 
diff --git a/engines/tinsel/scene.cpp b/engines/tinsel/scene.cpp
index eb0930bbe2..641c48c766 100644
--- a/engines/tinsel/scene.cpp
+++ b/engines/tinsel/scene.cpp
@@ -48,6 +48,7 @@
 #include "tinsel/sysvar.h"
 #include "tinsel/token.h"
 
+#include "common/memstream.h"
 #include "common/textconsole.h"
 
 namespace Tinsel {
@@ -128,9 +129,36 @@ void ResetVarsScene() {
 	memset(&g_tempStruc, 0, sizeof(SCENE_STRUC));
 }
 
+SCENE_STRUC* parseV3Scene(const byte *pStruc) {
+	memset(&g_tempStruc, 0, sizeof(SCENE_STRUC));
+	Common::MemoryReadStream stream(pStruc, 84);
+	g_tempStruc.defRefer = stream.readUint32LE();
+	g_tempStruc.hSceneScript = stream.readUint32LE();
+	g_tempStruc.hSceneDesc = stream.readUint32LE();
+	g_tempStruc.numEntrance = stream.readUint32LE();
+	g_tempStruc.hEntrance = stream.readUint32LE();
+	stream.readUint32LE();
+	stream.readUint32LE();
+	stream.readUint32LE();
+	stream.readUint32LE();
+	g_tempStruc.numPoly = stream.readUint32LE();
+	g_tempStruc.hPoly = stream.readUint32LE();
+	g_tempStruc.numTaggedActor = stream.readUint32LE();
+	g_tempStruc.hTaggedActor = stream.readUint32LE();
+	g_tempStruc.numProcess = stream.readUint32LE();
+	g_tempStruc.hProcess = stream.readUint32LE();
+	g_tempStruc.hMusicScript = stream.readUint32LE();
+	g_tempStruc.hMusicSegment = stream.readUint32LE();
+	warning("TODO: Complete scene loading logic for Noir");
+
+	return &g_tempStruc;
+}
+
 const SCENE_STRUC *GetSceneStruc(const byte *pStruc) {
 	if (TinselVersion == TINSEL_V2)
 		return (const SCENE_STRUC *)pStruc;
+	else if (TinselVersion == TINSEL_V3)
+		return parseV3Scene(pStruc);
 
 	// Copy appropriate fields into tempStruc, and return a pointer to it
 	const byte *p = pStruc;
@@ -263,9 +291,6 @@ static void LoadScene(SCNHANDLE scene, int entry) {
 
 	} else {
 		// Genuine new scene
-		if (TinselV3) {
-			error("TODO: Implement scene loading for Noir");
-		}
 
 		// Initialize all the polygons for this scene
 		InitPolygons(FROM_32(ss->hPoly), FROM_32(ss->numPoly), false);


Commit: 0831a534228c478e3d92deff7323b2f9b5694959
    https://github.com/scummvm/scummvm/commit/0831a534228c478e3d92deff7323b2f9b5694959
Author: Einar Johan Trøan Sømåen (somaen at scummvm.org)
Date: 2021-02-16T23:24:27+01:00

Commit Message:
TINSEL: Map EVENT

Changed paths:
    engines/tinsel/tinlib.cpp


diff --git a/engines/tinsel/tinlib.cpp b/engines/tinsel/tinlib.cpp
index 7d011d3664..51875f9fef 100644
--- a/engines/tinsel/tinlib.cpp
+++ b/engines/tinsel/tinlib.cpp
@@ -4252,6 +4252,10 @@ NoirMapping translateNoirLibCode(int libCode, int32 *pp) {
 		pp -= mapping.numArgs - 1;
 		debug(7, "%s(0x%08X)", mapping.name, pp[0]);
 		break;
+	case 61:
+		mapping = NoirMapping{"EVENT", EVENT, 0};
+		debug(7, "%s()", mapping.name);
+		break;
 	case 86:
 		mapping = NoirMapping{"OP86", ZZZZZZ, 2};
 		pp -= mapping.numArgs - 1;
@@ -4759,8 +4763,8 @@ int CallLibraryRoutine(CORO_PARAM, int operand, int32 *pp, const INT_CONTEXT *pi
 		error("Escape isn't a real function");
 
 	case EVENT:
-		// Common to both DW1 & DW2
-		if (TinselVersion == TINSEL_V2)
+		// Common to DW1 / DW2 / Noir
+		if (TinselVersion == TINSEL_V2 || TinselVersion == TINSEL_V3)
 			pp[0] = pic->event;
 		else
 			pp[0] = TINSEL1_EVENT_MAP[pic->event];


Commit: e583392bac4f0ce28c38fb966f853429602f272a
    https://github.com/scummvm/scummvm/commit/e583392bac4f0ce28c38fb966f853429602f272a
Author: Einar Johan Trøan Sømåen (somaen at scummvm.org)
Date: 2021-02-16T23:24:28+01:00

Commit Message:
TINSEL: Map and stub SET3DTEXTURE

Changed paths:
    engines/tinsel/tinlib.cpp


diff --git a/engines/tinsel/tinlib.cpp b/engines/tinsel/tinlib.cpp
index 51875f9fef..17daa33e56 100644
--- a/engines/tinsel/tinlib.cpp
+++ b/engines/tinsel/tinlib.cpp
@@ -153,7 +153,7 @@ enum MASTER_LIB_CODES {
 	TRYPLAYSAMPLE, UNDIMMUSIC, UNHOOKSCENE, UNTAGACTOR, VIBRATE, WAITFRAME, WAITKEY,
 	WAITSCROLL, WAITTIME, WALK, WALKED, WALKEDPOLY, WALKEDTAG, WALKINGACTOR, WALKPOLY,
 	WALKTAG, WALKXPOS, WALKYPOS, WHICHCD, WHICHINVENTORY, ZZZZZZ, DEC3D, DECINVMAIN,
-	ADDNOTEBOOK, ADDINV3, ADDCONV, HIGHEST_LIBCODE
+	ADDNOTEBOOK, ADDINV3, ADDCONV, SET3DTEXTURE, HIGHEST_LIBCODE
 };
 
 static const MASTER_LIB_CODES DW1DEMO_CODES[] = {
@@ -4296,6 +4296,11 @@ NoirMapping translateNoirLibCode(int libCode, int32 *pp) {
 		pp -= mapping.numArgs - 1;
 		debug(7, "%s(0x%08X, 0x%08X, 0x%08X, 0x%08X, 0x%08X, 0x%08X, 0x%08X, 0x%08X)", mapping.name, pp[0], pp[1], pp[2], pp[3], pp[4], pp[5], pp[6], pp[7]);
 		break;
+	case 214:
+		mapping = NoirMapping{"SET3DTEXTURE", SET3DTEXTURE, 1};
+		pp -= mapping.numArgs - 1;
+		debug(7, "%s(0x%08X)", mapping.name, pp[0]);
+		break;
 	default:
 		error("Unmapped libCode %d", libCode);
 	}
@@ -5304,6 +5309,10 @@ int CallLibraryRoutine(CORO_PARAM, int operand, int32 *pp, const INT_CONTEXT *pi
 		}
 		return -1;
 
+	case SET3DTEXTURE:
+		// Noir only
+		warning("TODO: Implement SET3DTEXTURE(0x%08X)", pp[0]);
+		return -1;
 
 	case SETACTOR:
 		// DW1 only


Commit: 70aa0e793da20ee5539486cbdc8461f3f0cfafcb
    https://github.com/scummvm/scummvm/commit/70aa0e793da20ee5539486cbdc8461f3f0cfafcb
Author: Einar Johan Trøan Sømåen (somaen at scummvm.org)
Date: 2021-02-16T23:24:28+01:00

Commit Message:
TINSEL: Map and stub PLAYMUSIC

Changed paths:
    engines/tinsel/tinlib.cpp


diff --git a/engines/tinsel/tinlib.cpp b/engines/tinsel/tinlib.cpp
index 17daa33e56..57c4015fc2 100644
--- a/engines/tinsel/tinlib.cpp
+++ b/engines/tinsel/tinlib.cpp
@@ -1661,6 +1661,10 @@ static void PlayMovie(CORO_PARAM, SCNHANDLE hFileStem, int myEscape) {
  * Play some music
  */
 static void PlayMusic(int tune) {
+	if (TinselV3) {
+		warning("TODO: Implement PLAYMUSIC(%d) for Noir", tune);
+		return;
+	}
 	_vm->_pcmMusic->startPlay(tune);
 }
 
@@ -4266,6 +4270,11 @@ NoirMapping translateNoirLibCode(int libCode, int32 *pp) {
 		pp -= mapping.numArgs - 1;
 		debug(7, "%s(0x%08X, 0x%08X, 0x%08X)", mapping.name, pp[0], pp[1], pp[2]);
 		break;
+	case 112:
+		mapping = NoirMapping{"PLAYMUSIC", PLAYMUSIC, 1};
+		pp -= mapping.numArgs - 1;
+		debug(7, "%s(0x%08X)", mapping.name, pp[0]);
+		break;
 	case 151:
 		mapping = NoirMapping{"SETSYSTEMREEL", SETSYSTEMREEL, 2};
 		pp -= mapping.numArgs - 1;
@@ -5083,7 +5092,7 @@ int CallLibraryRoutine(CORO_PARAM, int operand, int32 *pp, const INT_CONTEXT *pi
 		return -1;
 
 	case PLAYMUSIC:
-		// DW2 only
+		// DW2 / Noir only
 		PlayMusic(pp[0]);
 		return -1;
 


Commit: 25c91b52134d79a28c472582496433c824aa01ac
    https://github.com/scummvm/scummvm/commit/25c91b52134d79a28c472582496433c824aa01ac
Author: Einar Johan Trøan Sømåen (somaen at scummvm.org)
Date: 2021-02-16T23:24:28+01:00

Commit Message:
TINSEL: Map BACKGROUND

And don't load a palette in Discworld Noir

Changed paths:
    engines/tinsel/bg.cpp
    engines/tinsel/tinlib.cpp


diff --git a/engines/tinsel/bg.cpp b/engines/tinsel/bg.cpp
index 9f83936650..2e69cf7925 100644
--- a/engines/tinsel/bg.cpp
+++ b/engines/tinsel/bg.cpp
@@ -168,13 +168,14 @@ void Background::StartupBackground(CORO_PARAM, SCNHANDLE hFilm) {
 	CORO_BEGIN_CODE(_ctx);
 
 	const FILM *pfilm;
-	IMAGE *pim;
 
 	_hBackground = hFilm;		// Save handle in case of Save_Scene()
 
-	pim = _vm->_cursor->GetImageFromFilm(hFilm, 0, NULL, NULL, &pfilm);
+	if (!TinselV3) {
+		IMAGE *pim = _vm->_cursor->GetImageFromFilm(hFilm, 0, NULL, NULL, &pfilm);
 
-	SetBackPal(FROM_32(pim->hImgPal));
+		SetBackPal(FROM_32(pim->hImgPal));
+	}
 
 	// Extract the film speed
 	_BGspeed = ONE_SECOND / FROM_32(pfilm->frate);
diff --git a/engines/tinsel/tinlib.cpp b/engines/tinsel/tinlib.cpp
index 57c4015fc2..7a0e5ab146 100644
--- a/engines/tinsel/tinlib.cpp
+++ b/engines/tinsel/tinlib.cpp
@@ -4216,6 +4216,11 @@ NoirMapping translateNoirLibCode(int libCode, int32 *pp) {
 		pp -= mapping.numArgs - 1;
 		debug(7, "%s(%08X)", mapping.name, pp[0]);
 		break;
+	case 18:
+		mapping = NoirMapping{"BACKGROUND", BACKGROUND, 1};
+		pp -= mapping.numArgs - 1;
+		debug(7, "%s(0x%08X)", mapping.name, pp[0]);
+		break;
 	case 28:
 		mapping = NoirMapping{"CDCHANGESCENE", CDCHANGESCENE, 1};
 		pp -= mapping.numArgs - 1;
@@ -4462,7 +4467,7 @@ int CallLibraryRoutine(CORO_PARAM, int operand, int32 *pp, const INT_CONTEXT *pi
 		return -14;
 
 	case BACKGROUND:
-		// Common to both DW1 & DW2
+		// Common to DW1 / DW2 / Noir
 		startBackground(coroParam, pp[0]);
 		return -1;
 


Commit: dfbdd4bca69e450041b2007c4485e31125a2afa2
    https://github.com/scummvm/scummvm/commit/dfbdd4bca69e450041b2007c4485e31125a2afa2
Author: Einar Johan Trøan Sømåen (somaen at scummvm.org)
Date: 2021-02-16T23:24:28+01:00

Commit Message:
TINSEL: Map WAITTIME

Changed paths:
    engines/tinsel/tinlib.cpp


diff --git a/engines/tinsel/tinlib.cpp b/engines/tinsel/tinlib.cpp
index 7a0e5ab146..d313603b79 100644
--- a/engines/tinsel/tinlib.cpp
+++ b/engines/tinsel/tinlib.cpp
@@ -4295,6 +4295,11 @@ NoirMapping translateNoirLibCode(int libCode, int32 *pp) {
 		pp -= mapping.numArgs - 1;
 		debug(7, "%s(%d, 0x%08X)", mapping.name, pp[0], pp[1]);
 		break;
+	case 197:
+		mapping = NoirMapping{"WAITTIME", WAITTIME, 2};
+		pp -= mapping.numArgs - 1;
+		debug(7, "%s(%d, %d)", mapping.name, pp[0], pp[1]);
+		break;
 	case 210: // STUBBED
 		mapping = NoirMapping{"OP210", ZZZZZZ, 8};
 		pp -= mapping.numArgs - 1;
@@ -5714,7 +5719,7 @@ int CallLibraryRoutine(CORO_PARAM, int operand, int32 *pp, const INT_CONTEXT *pi
 		return 0;
 
 	case WAITTIME:
-		// Common to both DW1 & DW2
+		// Common to DW1 / DW2 / Noir
 		pp -= 1;			// 2 parameters
 		WaitTime(coroParam, pp[0], pp[1], pic->escOn, pic->myEscape);
 		if (!coroParam && (pic->hCode == 0x3007540) && (pic->resumeState == RES_2))


Commit: 3d461fca18bd43155c804a97d69bd34981d3078f
    https://github.com/scummvm/scummvm/commit/3d461fca18bd43155c804a97d69bd34981d3078f
Author: Einar Johan Trøan Sømåen (somaen at scummvm.org)
Date: 2021-02-16T23:24:28+01:00

Commit Message:
TINSEL: Initialize graphics for Noir as 16 Bit 565

Also avoid touching palettes when drawing backgrounds.

Changed paths:
    engines/tinsel/background.cpp
    engines/tinsel/tinsel.cpp


diff --git a/engines/tinsel/background.cpp b/engines/tinsel/background.cpp
index 19da3f51cb..f0c0ceb4ad 100644
--- a/engines/tinsel/background.cpp
+++ b/engines/tinsel/background.cpp
@@ -242,9 +242,11 @@ void Background::DrawBackgnd() {
 		}
 	}
 
-	// transfer any new palettes to the video DAC
-	PalettesToVideoDAC();
-
+	if (!TinselV3) {
+		// transfer any new palettes to the video DAC
+		PalettesToVideoDAC();
+	}
+	
 	// update the screen within the clipping rectangles
 	for (RectList::const_iterator r = clipRects.begin(); r != clipRects.end(); ++r) {
 		UpdateScreenRect(*r);
diff --git a/engines/tinsel/tinsel.cpp b/engines/tinsel/tinsel.cpp
index 440b1ae7c3..157b3e60d5 100644
--- a/engines/tinsel/tinsel.cpp
+++ b/engines/tinsel/tinsel.cpp
@@ -1023,9 +1023,14 @@ Common::Error TinselEngine::run() {
 
 	// Initialize backend
 	if (getGameID() == GID_NOIR) {
-		initGraphics(640, 480);
+		int width = 640;
+		int height = 480;
 
-		_screenSurface.create(640, 432, Graphics::PixelFormat::createFormatCLUT8());
+		Graphics::PixelFormat noirFormat(2, 5, 6, 5, 0, 11, 5, 0, 0);
+
+		initGraphics(width, height, &noirFormat);
+
+		_screenSurface.create(width, height, noirFormat);
 	} else if (getGameID() == GID_DW2) {
 #ifndef DW2_EXACT_SIZE
 		initGraphics(640, 480);




More information about the Scummvm-git-logs mailing list