[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ømaÌ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ømaÌ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ømaÌ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ømaÌ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ømaÌ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ømaÌ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ømaÌ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