[Scummvm-cvs-logs] SF.net SVN: scummvm:[35473] scummvm/trunk/engines/saga

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Sun Dec 21 23:52:45 CET 2008


Revision: 35473
          http://scummvm.svn.sourceforge.net/scummvm/?rev=35473&view=rev
Author:   thebluegr
Date:     2008-12-21 22:52:44 +0000 (Sun, 21 Dec 2008)

Log Message:
-----------
- Added some stubs for the SAGA2 games dino and fta2
- Stopped loading the isomap and puzzle game modules for IHNM, as they are not used for that game (this saves some memory for IHNM)
- Removed getDisplayWidth() and getDisplayHeight()

Modified Paths:
--------------
    scummvm/trunk/engines/saga/actor.cpp
    scummvm/trunk/engines/saga/actor_walk.cpp
    scummvm/trunk/engines/saga/animation.cpp
    scummvm/trunk/engines/saga/detection.cpp
    scummvm/trunk/engines/saga/detection_tables.h
    scummvm/trunk/engines/saga/displayinfo.h
    scummvm/trunk/engines/saga/events.cpp
    scummvm/trunk/engines/saga/interface.cpp
    scummvm/trunk/engines/saga/introproc_ite.cpp
    scummvm/trunk/engines/saga/isomap.cpp
    scummvm/trunk/engines/saga/render.cpp
    scummvm/trunk/engines/saga/rscfile.cpp
    scummvm/trunk/engines/saga/rscfile.h
    scummvm/trunk/engines/saga/saga.cpp
    scummvm/trunk/engines/saga/saga.h
    scummvm/trunk/engines/saga/saveload.cpp
    scummvm/trunk/engines/saga/scene.cpp
    scummvm/trunk/engines/saga/sfuncs.cpp
    scummvm/trunk/engines/saga/sndres.cpp
    scummvm/trunk/engines/saga/sprite.cpp

Modified: scummvm/trunk/engines/saga/actor.cpp
===================================================================
--- scummvm/trunk/engines/saga/actor.cpp	2008-12-21 21:44:35 UTC (rev 35472)
+++ scummvm/trunk/engines/saga/actor.cpp	2008-12-21 22:52:44 UTC (rev 35473)
@@ -110,14 +110,14 @@
 	_lastTickMsec = 0;
 
 	_yCellCount = _vm->_scene->getHeight();
-	_xCellCount = _vm->getDisplayWidth();
+	_xCellCount = _vm->getDisplayInfo().logicalWidth;
 
 	_pathCell = (int8 *)malloc(_yCellCount * _xCellCount * sizeof(*_pathCell));
 
 	_pathRect.left = 0;
-	_pathRect.right = _vm->getDisplayWidth();
+	_pathRect.right = _vm->getDisplayInfo().logicalWidth;
 	_pathRect.top = _vm->getDisplayInfo().pathStartY;
-	_pathRect.bottom = _vm->_scene->getHeight();
+	_pathRect.bottom = _vm->getDisplayInfo().logicalHeight;
 
 	// Get actor resource file context
 	_actorContext = _vm->_resource->getContext(GAME_RESOURCEFILE);
@@ -820,13 +820,13 @@
 			height = _vm->_font->getHeight(kKnownFontScript, _activeSpeech.strings[0], width - 2, _activeSpeech.getFontFlags(0)) + 1;
 
 			if (_vm->getGameId() == GID_IHNM) {
-				if (height > _vm->_scene->getHeight(true) / 2 && width < _vm->getDisplayWidth() - 20) {
-					width = _vm->getDisplayWidth() - 20;
+				if (height > _vm->_scene->getHeight(true) / 2 && width < _vm->getDisplayInfo().logicalWidth - 20) {
+					width = _vm->getDisplayInfo().logicalWidth - 20;
 					height = _vm->_font->getHeight(kKnownFontScript, _activeSpeech.strings[0], width - 2, _activeSpeech.getFontFlags(0)) + 1;
 				}
 			} else if (_vm->getGameId() == GID_ITE) {
-				if (height > 40 && width < _vm->getDisplayWidth() - 100) {
-					width = _vm->getDisplayWidth() - 100;
+				if (height > 40 && width < _vm->getDisplayInfo().logicalWidth - 100) {
+					width = _vm->getDisplayInfo().logicalWidth - 100;
 					height = _vm->_font->getHeight(kKnownFontScript, _activeSpeech.strings[0], width - 2, _activeSpeech.getFontFlags(0)) + 1;
 				}
 			}
@@ -837,8 +837,8 @@
 				actor = getActor(_activeSpeech.actorIds[0]);
 				_activeSpeech.speechBox.setHeight(height);
 
-				if (_activeSpeech.speechBox.right > _vm->getDisplayWidth() - 10) {
-					_activeSpeech.drawRect.left = _vm->getDisplayWidth() - 10 - width;
+				if (_activeSpeech.speechBox.right > _vm->getDisplayInfo().logicalWidth - 10) {
+					_activeSpeech.drawRect.left = _vm->getDisplayInfo().logicalWidth - 10 - width;
 				} else {
 					_activeSpeech.drawRect.left = _activeSpeech.speechBox.left;
 				}
@@ -891,7 +891,7 @@
 	}
 
 	result = commonObjectData->_screenPosition.x > -64 &&
-			commonObjectData->_screenPosition.x < _vm->getDisplayWidth() + 64 &&
+			commonObjectData->_screenPosition.x < _vm->getDisplayInfo().logicalWidth + 64 &&
 			commonObjectData->_screenPosition.y > -64 &&
 			commonObjectData->_screenPosition.y < _vm->_scene->getHeight() + 64;
 
@@ -1091,7 +1091,7 @@
 			actor = getActor(_activeSpeech.actorIds[i]);
 			calcScreenPosition(actor);
 
-			textPoint.x = CLIP(actor->_screenPosition.x - width / 2, 10, _vm->getDisplayWidth() - 10 - width);
+			textPoint.x = CLIP(actor->_screenPosition.x - width / 2, 10, _vm->getDisplayInfo().logicalWidth - 10 - width);
 
 			if (_vm->getGameId() == GID_ITE)
 				textPoint.y = CLIP(actor->_screenPosition.y - 58, 10, _vm->_scene->getHeight(true) - 10 - height);
@@ -1130,7 +1130,7 @@
 	_activeSpeech.playing = false;
 	_activeSpeech.slowModeCharIndex = 0;
 
-	dist = MIN(actor->_screenPosition.x - 10, _vm->getDisplayWidth() - 10 - actor->_screenPosition.x);
+	dist = MIN(actor->_screenPosition.x - 10, _vm->getDisplayInfo().logicalWidth - 10 - actor->_screenPosition.x);
 
 	if (_vm->getGameId() == GID_ITE)
 		dist = CLIP<int16>(dist, 60, 150);
@@ -1144,9 +1144,9 @@
 		_activeSpeech.speechBox.right += 10 - _activeSpeech.speechBox.left;
 		_activeSpeech.speechBox.left = 10;
 	}
-	if (_activeSpeech.speechBox.right > _vm->getDisplayWidth() - 10) {
-		_activeSpeech.speechBox.left -= _activeSpeech.speechBox.right - _vm->getDisplayWidth() - 10;
-		_activeSpeech.speechBox.right = _vm->getDisplayWidth() - 10;
+	if (_activeSpeech.speechBox.right > _vm->getDisplayInfo().logicalWidth - 10) {
+		_activeSpeech.speechBox.left -= _activeSpeech.speechBox.right - _vm->getDisplayInfo().logicalWidth - 10;
+		_activeSpeech.speechBox.right = _vm->getDisplayInfo().logicalWidth - 10;
 	}
 
 	// HACK for the compact disk in Ellen's chapter

Modified: scummvm/trunk/engines/saga/actor_walk.cpp
===================================================================
--- scummvm/trunk/engines/saga/actor_walk.cpp	2008-12-21 21:44:35 UTC (rev 35472)
+++ scummvm/trunk/engines/saga/actor_walk.cpp	2008-12-21 22:52:44 UTC (rev 35473)
@@ -101,7 +101,7 @@
 	Point point;
 	location.toScreenPointXY(point);
 
-	if ((point.x < 5) || (point.x >= _vm->getDisplayWidth() - 5) ||
+	if ((point.x < 5) || (point.x >= _vm->getDisplayInfo().logicalWidth - 5) ||
 		(point.y < 0) || (point.y > _vm->_scene->getHeight())) {
 		return false;
 	}
@@ -856,7 +856,7 @@
 					newLocation.y += _vm->_rnd.getRandomNumber(prefer1.y - 1) - prefer1.y / 2;
 				}
 
-				newLocation.x = CLIP<int>(newLocation.x, -31 * 4, (_vm->getDisplayWidth() + 31) * 4);
+				newLocation.x = CLIP<int>(newLocation.x, -31 * 4, (_vm->getDisplayInfo().logicalWidth + 31) * 4);
 
 				return actorWalkTo(actor->_id, newLocation);
 			}

Modified: scummvm/trunk/engines/saga/animation.cpp
===================================================================
--- scummvm/trunk/engines/saga/animation.cpp	2008-12-21 21:44:35 UTC (rev 35472)
+++ scummvm/trunk/engines/saga/animation.cpp	2008-12-21 22:52:44 UTC (rev 35473)
@@ -540,8 +540,8 @@
 		frame = anim->currentFrame;
 
 		// FIXME: if start > 0, then this works incorrectly
-		decodeFrame(anim, anim->frameOffsets[frame], displayBuffer, _vm->getDisplayWidth() * _vm->getDisplayHeight());
-		_vm->_render->addDirtyRect(Common::Rect(0, 0, _vm->getDisplayWidth(), _vm->getDisplayHeight()));
+		decodeFrame(anim, anim->frameOffsets[frame], displayBuffer, _vm->getDisplayInfo().logicalWidth * _vm->getDisplayInfo().logicalHeight);
+		_vm->_render->addDirtyRect(Common::Rect(0, 0, _vm->getDisplayInfo().logicalWidth, _vm->getDisplayInfo().logicalHeight));
 		_vm->_frameCount++;
 		anim->currentFrame++;
 		if (anim->completed != 65535) {

Modified: scummvm/trunk/engines/saga/detection.cpp
===================================================================
--- scummvm/trunk/engines/saga/detection.cpp	2008-12-21 21:44:35 UTC (rev 35472)
+++ scummvm/trunk/engines/saga/detection.cpp	2008-12-21 22:52:44 UTC (rev 35473)
@@ -105,12 +105,16 @@
 	{"saga", "SAGA Engine game"},
 	{"ite", "Inherit the Earth: Quest for the Orb"},
 	{"ihnm", "I Have No Mouth and I Must Scream"},
+	{"dino", "Dinotopia"},
+	{"fta2", "Faery Tale Adventure II: Halls of the Dead"},
 	{0, 0}
 };
 
 static const Common::ADObsoleteGameID obsoleteGameIDsTable[] = {
 	{"ite", "saga", Common::kPlatformUnknown},
 	{"ihnm", "saga", Common::kPlatformUnknown},
+	{"dino", "saga", Common::kPlatformUnknown},
+	{"fta2", "saga", Common::kPlatformUnknown},
 	{0, 0, Common::kPlatformUnknown}
 };
 
@@ -315,19 +319,21 @@
 }
 
 const GameDisplayInfo &SagaEngine::getDisplayInfo() {
-	return _gameDescription->gameId == GID_ITE ? ITE_DisplayInfo : IHNM_DisplayInfo;
+	switch (_gameDescription->gameId) {
+		case GID_ITE:
+			return ITE_DisplayInfo;
+		case GID_IHNM:
+			return IHNM_DisplayInfo;
+		case GID_DINO:
+			return IHNM_DisplayInfo;	// TODO
+		case GID_FTA2:
+			return FTA2_DisplayInfo;
+		default:
+			error("getDisplayInfo: Unknown game ID");
+			return IHNM_DisplayInfo;	// unreachable
+	}
 }
 
-int SagaEngine::getDisplayWidth() const {
-	const GameDisplayInfo &di = _gameDescription->gameId == GID_ITE ? ITE_DisplayInfo : IHNM_DisplayInfo;
-	return di.logicalWidth;
-}
-
-int SagaEngine::getDisplayHeight() const {
-	const GameDisplayInfo &di = _gameDescription->gameId == GID_ITE ? ITE_DisplayInfo : IHNM_DisplayInfo;
-	return di.logicalHeight;
-}
-
 Common::Error SagaEngine::loadGameState(int slot) {
 	// Init the current chapter to 8 (character selection) for IHNM
 	if (getGameId() == GID_IHNM)

Modified: scummvm/trunk/engines/saga/detection_tables.h
===================================================================
--- scummvm/trunk/engines/saga/detection_tables.h	2008-12-21 21:44:35 UTC (rev 35472)
+++ scummvm/trunk/engines/saga/detection_tables.h	2008-12-21 22:52:44 UTC (rev 35473)
@@ -834,6 +834,41 @@
 		&MAC_GameSound,
 		NULL,
 	},
+
+	// Dinotopia Section //////////////////////////////////////////////////////////////////////////////////////
+
+	// TODO
+
+	// Faery Tale Adventure II: Halls of the Dead Section /////////////////////////////////////////////////////
+
+	// Faery Tale Adventure II: Halls of the Dead - English CD version
+	{
+		{
+			"fta2",
+			"",
+			{
+	// TODO: this is still quite incomplete
+	{"fta.hrs",	GAME_RESOURCEFILE,						"c34a5ee5f1a14a87712a35c4a209a033", 213376},
+	{"scripts.hrs",	GAME_SCRIPTFILE,					"95f33928f6c4f02ee04d2ec5c3314c30", 1041948},
+	{"ftasound.hrs", GAME_SOUNDFILE,					"ce930cb38922e6a03461f55d51b4e165", 12403350},
+	{ NULL, 0, NULL, 0}
+			},
+			Common::EN_ANY,
+			Common::kPlatformPC,
+			Common::ADGF_NO_FLAGS
+		},
+		GID_FTA2,
+		0,
+		// TODO: fill out the data below
+		-1,		// default scene
+		NULL,	// game resources
+		0,		// number of fonts
+		NULL,	// font array
+		NULL,	// voice info
+		NULL,	// SFX info
+		NULL,
+	},
+
 	{ AD_TABLE_END_MARKER, 0, 0, 0, NULL, 0, NULL, NULL, NULL, NULL }
 };
 

Modified: scummvm/trunk/engines/saga/displayinfo.h
===================================================================
--- scummvm/trunk/engines/saga/displayinfo.h	2008-12-21 21:44:35 UTC (rev 35472)
+++ scummvm/trunk/engines/saga/displayinfo.h	2008-12-21 22:52:44 UTC (rev 35473)
@@ -428,6 +428,74 @@
 	IHNM_SavePanelButtons
 };
 
+
+// TODO: Fill in missing bits, currently contains IHNM_DisplayInfo
+static const GameDisplayInfo FTA2_DisplayInfo = {
+	640, 480,	// logical width&height
+
+	0,			// scene path y offset
+	304,		// scene height
+
+	0,			// status x offset
+	304,		// status y offset
+	616,		// status width
+	24,			// status height
+	8,			// status text y offset
+	253,		// status text color
+	250,		// status BG color
+	616, 304,	// save reminder pos
+	24, 24,		// save reminder w&h
+	0,			// save reminder first sprite number
+	16,			// number of save reminder sprites
+
+	11, 12,		// left portrait x, y offset
+	-1, -1,		// right portrait x, y offset
+
+	8, 9,		// inventory Up & Down button indexes
+	2, 4,		// inventory rows, columns
+
+	0, 328,		// main panel offsets
+	ARRAYSIZE(IHNM_MainPanelButtons),
+	IHNM_MainPanelButtons,
+
+	IHNM_CONVERSE_MAX_TEXT_WIDTH,
+	IHNM_CONVERSE_TEXT_HEIGHT,
+	IHNM_CONVERSE_TEXT_LINES,
+	11, 12,		// converse Up & Down button indexes
+	0, 328,		// converse panel offsets
+	ARRAYSIZE(IHNM_ConversePanelButtons),
+	IHNM_ConversePanelButtons,
+
+	11, 0,		// save file index
+	15,			// optionSaveFileVisible
+	92, 46,		// option panel offsets
+	ARRAYSIZE(IHNM_OptionPanelButtons),
+	IHNM_OptionPanelButtons,
+
+	190,94,			// quit panel offsets
+	260,115,		// quit panel width & height
+	ARRAYSIZE(IHNM_QuitPanelButtons),
+	IHNM_QuitPanelButtons,
+
+	190, 94,		// load panel offsets
+	260, 115,		// load panel width & height
+	ARRAYSIZE(IHNM_LoadPanelButtons),
+	IHNM_LoadPanelButtons,
+
+	2,				// save edit index
+	190, 94,		// save panel offsets
+	260, 115,		// save panel width & height
+	ARRAYSIZE(IHNM_SavePanelButtons),
+	IHNM_SavePanelButtons,
+
+	// No protection panel in IHNM
+	-1,				// protect edit index
+	0, 0,			// protect panel offsets
+	0, 0,			// protect panel width & height
+	ARRAYSIZE(IHNM_SavePanelButtons),
+	IHNM_SavePanelButtons
+};
+
 } // End of namespace Saga
 
 #endif

Modified: scummvm/trunk/engines/saga/events.cpp
===================================================================
--- scummvm/trunk/engines/saga/events.cpp	2008-12-21 21:44:35 UTC (rev 35472)
+++ scummvm/trunk/engines/saga/events.cpp	2008-12-21 22:52:44 UTC (rev 35473)
@@ -180,8 +180,8 @@
 			size_t len;
 
 			_vm->_scene->getBGMaskInfo(w, h, maskBuffer, len);
-			rect.left = (_vm->getDisplayWidth() - w) / 2;
-			rect.top = (_vm->getDisplayHeight() - h) / 2;
+			rect.left = (_vm->getDisplayInfo().logicalWidth - w) / 2;
+			rect.top = (_vm->getDisplayInfo().logicalHeight - h) / 2;
 			rect.setWidth(w);
 			rect.setHeight(h);
 
@@ -319,7 +319,7 @@
 				backGroundSurface->blit(bgInfo.bounds, bgInfo.buffer);
 
 				// If it is inset scene then draw black border
-				if (bgInfo.bounds.width() < _vm->getDisplayWidth() || bgInfo.bounds.height() < _vm->_scene->getHeight()) {
+				if (bgInfo.bounds.width() < _vm->getDisplayInfo().logicalWidth || bgInfo.bounds.height() < _vm->_scene->getHeight()) {
 					Common::Rect rect1(2, bgInfo.bounds.height() + 4);
 					Common::Rect rect2(bgInfo.bounds.width() + 4, 2);
 					Common::Rect rect3(2, bgInfo.bounds.height() + 4);

Modified: scummvm/trunk/engines/saga/interface.cpp
===================================================================
--- scummvm/trunk/engines/saga/interface.cpp	2008-12-21 21:44:35 UTC (rev 35472)
+++ scummvm/trunk/engines/saga/interface.cpp	2008-12-21 22:52:44 UTC (rev 35473)
@@ -1879,7 +1879,7 @@
 	// Erase background of status bar
 	rect.left = _vm->getDisplayInfo().statusXOffset;
 	rect.top = _vm->getDisplayInfo().statusYOffset;
-	rect.right = rect.left + _vm->getDisplayWidth();
+	rect.right = rect.left + _vm->getDisplayInfo().logicalWidth;
 	rect.bottom = rect.top + _vm->getDisplayInfo().statusHeight;
 
 	_vm->_gfx->drawRect(rect, _vm->getDisplayInfo().statusBGColor - offset);
@@ -2787,7 +2787,7 @@
 	_mapPanelCrossHairState = !_mapPanelCrossHairState;
 
 	Point mapPosition = _vm->_isoMap->getMapPosition();
-	Rect screen(_vm->getDisplayWidth(), _vm->_scene->getHeight());
+	Rect screen(_vm->getDisplayInfo().logicalWidth, _vm->_scene->getHeight());
 
 	if (screen.contains(mapPosition)) {
 		_vm->_sprite->draw(_vm->_sprite->_mainSprites,

Modified: scummvm/trunk/engines/saga/introproc_ite.cpp
===================================================================
--- scummvm/trunk/engines/saga/introproc_ite.cpp	2008-12-21 21:44:35 UTC (rev 35472)
+++ scummvm/trunk/engines/saga/introproc_ite.cpp	2008-12-21 22:52:44 UTC (rev 35473)
@@ -114,7 +114,7 @@
 	textEntry.effectKnownColor = kKnownColorTransparent;
 	textEntry.useRect = true;
 	textEntry.rect.left = 0;
-	textEntry.rect.right = _vm->getDisplayWidth();
+	textEntry.rect.right = _vm->getDisplayInfo().logicalWidth;
 	if (_vm->getLanguage() == Common::DE_DEU) {
 		textEntry.rect.top = INTRO_DE_CAPTION_Y;
 	} else if (_vm->getLanguage() == Common::IT_ITA) {
@@ -122,7 +122,7 @@
 	} else {
 		textEntry.rect.top = INTRO_CAPTION_Y;
 	}
-	textEntry.rect.bottom = _vm->getDisplayHeight();
+	textEntry.rect.bottom = _vm->getDisplayInfo().logicalHeight;
 	textEntry.font = kKnownFontMedium;
 	textEntry.flags = (FontEffectFlags)(kFontOutline | kFontCentered);
 

Modified: scummvm/trunk/engines/saga/isomap.cpp
===================================================================
--- scummvm/trunk/engines/saga/isomap.cpp	2008-12-21 21:44:35 UTC (rev 35472)
+++ scummvm/trunk/engines/saga/isomap.cpp	2008-12-21 22:52:44 UTC (rev 35473)
@@ -295,7 +295,7 @@
 	}
 	playerPoint.y -= 28;
 
-	playerPoint.x += _viewScroll.x - _vm->getDisplayWidth()/2;
+	playerPoint.x += _viewScroll.x - _vm->getDisplayInfo().logicalWidth/2;
 	playerPoint.y += _viewScroll.y - _vm->_scene->getHeight()/2;
 
 	minScrollPos.x = playerPoint.x - SAGA_SCROLL_LIMIT_X1;
@@ -401,8 +401,8 @@
 	spritePointer.x = screenPosition.x + xAlign;
 	spritePointer.y = screenPosition.y + yAlign;
 
-	_tileClip.left = CLIP<int>(spritePointer.x, 0, _vm->getDisplayWidth());
-	_tileClip.right = CLIP<int>(spritePointer.x + width, 0, _vm->getDisplayWidth());
+	_tileClip.left = CLIP<int>(spritePointer.x, 0, _vm->getDisplayInfo().logicalWidth);
+	_tileClip.right = CLIP<int>(spritePointer.x + width, 0, _vm->getDisplayInfo().logicalWidth);
 	_tileClip.top = CLIP<int>(spritePointer.y, 0, _vm->_scene->getHeight());
 	_tileClip.bottom = CLIP<int>(spritePointer.y + height, 0, _vm->_scene->getHeight());
 
@@ -441,7 +441,7 @@
 	metaTileY.x = (u0 - v0) * 128 - (view1.x * 16 + fineScroll.x);
 	metaTileY.y = (view1.y * 16 - fineScroll.y) - (u0 + v0) * 64;
 
-	workAreaWidth = _vm->getDisplayWidth() + 128;
+	workAreaWidth = _vm->getDisplayInfo().logicalWidth + 128;
 	workAreaHeight = _vm->_scene->getHeight() + 128 + 80;
 
 	for (u1 = u0, v1 = v0; metaTileY.y < workAreaHeight; u1--, v1-- ) {
@@ -852,8 +852,8 @@
 				}
 				while ((col < _tileClip.right) && (count < fgRunCount)) {
 					assert(_vm->_gfx->getBackBufferPixels() <= (byte *)(drawPointer + count));
-					assert((_vm->_gfx->getBackBufferPixels() + (_vm->getDisplayWidth() *
-								 _vm->getDisplayHeight())) > (byte *)(drawPointer + count));
+					assert((_vm->_gfx->getBackBufferPixels() + (_vm->getDisplayInfo().logicalWidth *
+								 _vm->getDisplayInfo().logicalHeight)) > (byte *)(drawPointer + count));
 					drawPointer[count] = readPointer[count];
 					count++;
 					col++;

Modified: scummvm/trunk/engines/saga/render.cpp
===================================================================
--- scummvm/trunk/engines/saga/render.cpp	2008-12-21 21:44:35 UTC (rev 35472)
+++ scummvm/trunk/engines/saga/render.cpp	2008-12-21 22:52:44 UTC (rev 35473)
@@ -55,7 +55,7 @@
 	_vm->_timer->installTimerProc(&fpsTimerCallback, 1000000, this);
 #endif
 
-	_backGroundSurface.create(_vm->getDisplayWidth(), _vm->getDisplayHeight(), 1);
+	_backGroundSurface.create(_vm->getDisplayInfo().logicalWidth, _vm->getDisplayInfo().logicalHeight, 1);
 
 	_flags = 0;
 
@@ -104,7 +104,7 @@
 			if (!(_flags & RF_DISABLE_ACTORS) || _vm->getGameId() == GID_ITE)
 				_vm->_scene->draw();
 
-			if (_vm->_puzzle->isActive()) {
+			if (_vm->getGameId() == GID_ITE && _vm->_puzzle->isActive()) {
 				_vm->_puzzle->movePiece(mousePoint);
 				_vm->_actor->drawSpeech();
 			} else {

Modified: scummvm/trunk/engines/saga/rscfile.cpp
===================================================================
--- scummvm/trunk/engines/saga/rscfile.cpp	2008-12-21 21:44:35 UTC (rev 35472)
+++ scummvm/trunk/engines/saga/rscfile.cpp	2008-12-21 22:52:44 UTC (rev 35473)
@@ -74,7 +74,7 @@
 	clearContexts();
 }
 
-bool Resource::loadSagaContext(ResourceContext *context, uint32 contextOffset, uint32 contextSize) {
+bool Resource::loadResContext(ResourceContext *context, uint32 contextOffset, uint32 contextSize) {
 	size_t i;
 	bool result;
 	byte tableInfo[RSC_TABLEINFO_SIZE];
@@ -254,13 +254,19 @@
 	}
 	free(macResTypes);
 
-	if ((!notSagaContext) && (!loadSagaContext(context, MAC_BINARY_HEADER_SIZE, macDataSize))) {
+	if ((!notSagaContext) && (!loadResContext(context, MAC_BINARY_HEADER_SIZE, macDataSize))) {
 		return false;
 	}
 
 	return true;
 }
 
+bool Resource::loadHResContext(ResourceContext *context, uint32 contextSize) {
+	// Stub for now
+
+	return true;
+}
+
 bool Resource::loadContext(ResourceContext *context) {
 	size_t i;
 	const GamePatchDescription *patchDescription;
@@ -286,18 +292,26 @@
 	isMacBinary = (context->fileType & GAME_MACBINARY) > 0;
 	context->fileType &= ~GAME_MACBINARY;
 
-	if (isMacBinary) {
-		if (!loadMacContext(context)) {
-			return false;
+	if (!isMacBinary) {
+		if (!_vm->isSaga2()) {
+			// ITE, IHNM
+			if (!loadResContext(context, 0, context->file->size())) {
+				return false;
+			}
+		} else {
+			// DINO, FTA2
+			if (!loadHResContext(context, context->file->size())) {
+				return false;
+			}
 		}
 	} else {
-		if (!loadSagaContext(context, 0, context->file->size())) {
+		if (!loadMacContext(context)) {
 			return false;
 		}
 	}
 
 	//process internal patch files
-	if (GAME_PATCHFILE & context->fileType) {
+	if (context->fileType & GAME_PATCHFILE) {
 		subjectResourceType = ~GAME_PATCHFILE & context->fileType;
 		subjectContext = getContext((GameFileTypes)subjectResourceType);
 		if (subjectContext == NULL) {

Modified: scummvm/trunk/engines/saga/rscfile.h
===================================================================
--- scummvm/trunk/engines/saga/rscfile.h	2008-12-21 21:44:35 UTC (rev 35472)
+++ scummvm/trunk/engines/saga/rscfile.h	2008-12-21 22:52:44 UTC (rev 35473)
@@ -156,7 +156,8 @@
 
 	bool loadContext(ResourceContext *context);
 	bool loadMacContext(ResourceContext *context);
-	bool loadSagaContext(ResourceContext *context, uint32 contextOffset, uint32 contextSize);
+	bool loadResContext(ResourceContext *context, uint32 contextOffset, uint32 contextSize);
+	bool loadHResContext(ResourceContext *context, uint32 contextSize);
 
 public:
 	MetaResource _metaResource;

Modified: scummvm/trunk/engines/saga/saga.cpp
===================================================================
--- scummvm/trunk/engines/saga/saga.cpp	2008-12-21 21:44:35 UTC (rev 35472)
+++ scummvm/trunk/engines/saga/saga.cpp	2008-12-21 22:52:44 UTC (rev 35473)
@@ -118,18 +118,26 @@
 		}
 	}
 
-	delete _puzzle;
-	delete _sndRes;
-	delete _events;
-	delete _font;
-	delete _sprite;
-	delete _anim;
-	delete _script;
-	delete _interface;
-	delete _actor;
-	delete _palanim;
+	if (!isSaga2()) {
+		if (getGameId() == GID_ITE)
+			delete _puzzle;
+		delete _sndRes;
+		delete _events;
+		delete _font;
+		delete _sprite;
+		delete _anim;
+		delete _script;
+		delete _interface;
+		delete _actor;
+		delete _palanim;
+	}
+
 	delete _scene;
-	delete _isoMap;
+
+	if (getGameId() == GID_ITE) {
+		delete _isoMap;
+	}
+
 	delete _render;
 	delete _music;
 	delete _sound;
@@ -165,25 +173,34 @@
 	}
 
 	// Initialize engine modules
-	_sndRes = new SndRes(this);
-	_events = new Events(this);
-	_font = new Font(this);
-	_sprite = new Sprite(this);
-	_anim = new Anim(this);
-	_script = new Script(this);
-	_interface = new Interface(this); // requires script module
+	// TODO: implement differences for SAGA2
+	if (!isSaga2()) {
+		_sndRes = new SndRes(this);
+		_events = new Events(this);
+		_font = new Font(this);
+		_sprite = new Sprite(this);
+		_anim = new Anim(this);
+		_script = new Script(this);
+		_interface = new Interface(this); // requires script module
+	}
+	
 	_scene = new Scene(this);
-	_actor = new Actor(this);
-	_palanim = new PalAnim(this);
-	_isoMap = new IsoMap(this);
-	_puzzle = new Puzzle(this);
 
+	if (!isSaga2()) {
+		_actor = new Actor(this);
+		_palanim = new PalAnim(this);
+		if (getGameId() == GID_ITE) {
+			_isoMap = new IsoMap(this);
+			_puzzle = new Puzzle(this);
+		}
+	}
+
 	// System initialization
 
 	_previousTicks = _system->getMillis();
 
 	// Initialize graphics
-	_gfx = new Gfx(this, _system, getDisplayWidth(), getDisplayHeight());
+	_gfx = new Gfx(this, _system, getDisplayInfo().logicalWidth, getDisplayInfo().logicalHeight);
 
 	// Graphics driver should be initialized before console
 	_console = new Console(this);
@@ -296,7 +313,7 @@
 			}
 
 			// Since Puzzle and forced text are actorless, we do them here
-			if (_puzzle->isActive() || _actor->isForcedTextShown()) {
+			if ((getGameId() == GID_ITE && _puzzle->isActive()) || _actor->isForcedTextShown()) {
 				_actor->handleSpeech(msec);
 			} else if (!_scene->isInIntro()) {
 				if (_interface->getMode() == kPanelMain ||

Modified: scummvm/trunk/engines/saga/saga.h
===================================================================
--- scummvm/trunk/engines/saga/saga.h	2008-12-21 21:44:35 UTC (rev 35472)
+++ scummvm/trunk/engines/saga/saga.h	2008-12-21 22:52:44 UTC (rev 35473)
@@ -96,7 +96,9 @@
 
 enum GameIds {
 	GID_ITE = 0,
-	GID_IHNM = 1
+	GID_IHNM = 1,
+	GID_DINO = 2,
+	GID_FTA2 = 3
 };
 
 enum GameFileTypes {
@@ -594,6 +596,7 @@
 
 	bool isBigEndian() const;
 	bool isMacResources() const;
+	bool isSaga2() const { return getGameId() == GID_DINO || getGameId() == GID_FTA2; }
 	const GameResourceDescription *getResourceDescription();
 	const GameSoundInfo *getVoiceInfo() const;
 	const GameSoundInfo *getSfxInfo() const;
@@ -614,8 +617,6 @@
 	const Common::ADGameFileDescription *getFilesDescriptions() const;
 
 	const Common::Rect &getDisplayClip() const { return _displayClip;}
-	int getDisplayWidth() const;
-	int getDisplayHeight() const;
 	Common::Error loadGameState(int slot);
 	Common::Error saveGameState(int slot, const char *desc);
 	bool canLoadGameStateCurrently();

Modified: scummvm/trunk/engines/saga/saveload.cpp
===================================================================
--- scummvm/trunk/engines/saga/saveload.cpp	2008-12-21 21:44:35 UTC (rev 35472)
+++ scummvm/trunk/engines/saga/saveload.cpp	2008-12-21 22:52:44 UTC (rev 35473)
@@ -331,7 +331,8 @@
 	int volume = _music->getVolume();
 	_music->setVolume(0);
 
-	_isoMap->setMapPosition(mapx, mapy);
+	if (getGameId() == GID_ITE)
+		_isoMap->setMapPosition(mapx, mapy);
 
 	// Protagonist swapping
 	if (getGameId() == GID_IHNM) {

Modified: scummvm/trunk/engines/saga/scene.cpp
===================================================================
--- scummvm/trunk/engines/saga/scene.cpp	2008-12-21 21:44:35 UTC (rev 35472)
+++ scummvm/trunk/engines/saga/scene.cpp	2008-12-21 22:52:44 UTC (rev 35473)
@@ -483,9 +483,9 @@
 
 				_vm->_interface->setStatusText("Click or Press Return to continue. Press Q to quit.", 96);
 				_vm->_font->textDrawRect(kKnownFontMedium, sceneSubstitutes[i].title,
-					 Common::Rect(0, 7, _vm->getDisplayWidth(), 27), _vm->KnownColor2ColorId(kKnownColorBrightWhite), _vm->KnownColor2ColorId(kKnownColorBlack), kFontOutline);
+					 Common::Rect(0, 7, _vm->getDisplayInfo().logicalWidth, 27), _vm->KnownColor2ColorId(kKnownColorBrightWhite), _vm->KnownColor2ColorId(kKnownColorBlack), kFontOutline);
 				_vm->_font->textDrawRect(kKnownFontMedium, sceneSubstitutes[i].message,
-					 Common::Rect(24, getHeight() - 33, _vm->getDisplayWidth() - 11,
+					 Common::Rect(24, getHeight() - 33, _vm->getDisplayInfo().logicalWidth - 11,
 								  getHeight()), _vm->KnownColor2ColorId(kKnownColorBrightWhite), _vm->KnownColor2ColorId(kKnownColorBlack), kFontOutline);
 				return;
 			}
@@ -520,8 +520,8 @@
 	bgInfo.bounds.left = 0;
 	bgInfo.bounds.top = 0;
 
-	if (_bg.w < _vm->getDisplayWidth()) {
-		bgInfo.bounds.left = (_vm->getDisplayWidth() - _bg.w) / 2;
+	if (_bg.w < _vm->getDisplayInfo().logicalWidth) {
+		bgInfo.bounds.left = (_vm->getDisplayInfo().logicalWidth - _bg.w) / 2;
 	}
 
 	if (_bg.h < getHeight()) {
@@ -553,7 +553,7 @@
 		return false;
 	}
 
-	point.x = CLIP<int>(testPoint.x, 0, _vm->getDisplayWidth() - 1);
+	point.x = CLIP<int>(testPoint.x, 0, _vm->getDisplayInfo().logicalWidth - 1);
 	point.y = CLIP<int>(testPoint.y, 0, _bgMask.h - 1);
 	if (point == testPoint) {
 		return false;
@@ -719,13 +719,13 @@
 
 		_sceneClip.left = 0;
 		_sceneClip.top = 0;
-		_sceneClip.right = _vm->getDisplayWidth();
+		_sceneClip.right = _vm->getDisplayInfo().logicalWidth;
 		_sceneClip.bottom = getHeight();
 	} else {
 		BGInfo backGroundInfo;
 		getBGInfo(backGroundInfo);
 		_sceneClip = backGroundInfo.bounds;
-		if (!(_bg.w < _vm->getDisplayWidth() || _bg.h < getHeight()))
+		if (!(_bg.w < _vm->getDisplayInfo().logicalWidth || _bg.h < getHeight()))
 			_outsetSceneNumber = _sceneNumber;
 	}
 
@@ -1039,7 +1039,7 @@
 
 			// At least in ITE the mask needs to be clipped.
 
-			_bgMask.w = MIN(_bgMask.w, _vm->getDisplayWidth());
+			_bgMask.w = MIN(_bgMask.w, _vm->getDisplayInfo().logicalWidth);
 			_bgMask.h = MIN(_bgMask.h, getHeight());
 
 			debug(4, "BACKGROUND MASK width=%d height=%d length=%d", _bgMask.w, _bgMask.h, (int)_bgMask.buf_len);
@@ -1222,8 +1222,10 @@
 	_actionMap->freeMem();
 	_entryList.freeMem();
 	_sceneStrings.freeMem();
-	_vm->_isoMap->freeMem();
 
+	if (_vm->getGameId() == GID_ITE)
+		_vm->_isoMap->freeMem();
+
 	_vm->_events->clearList();
 	_textList.clear();
 

Modified: scummvm/trunk/engines/saga/sfuncs.cpp
===================================================================
--- scummvm/trunk/engines/saga/sfuncs.cpp	2008-12-21 21:44:35 UTC (rev 35472)
+++ scummvm/trunk/engines/saga/sfuncs.cpp	2008-12-21 22:52:44 UTC (rev 35473)
@@ -1219,7 +1219,7 @@
 	event.param2 = 0;
 	event.param3 = _vm->_scene->getHeight();
 	event.param4 = 0;
-	event.param5 = _vm->getDisplayWidth();
+	event.param5 = _vm->getDisplayInfo().logicalWidth;
 	q_event = _vm->_events->chain(q_event, &event);
 
 	// Put the text in the center of the viewport, assuming it will fit on
@@ -1232,7 +1232,7 @@
 
 	textEntry.knownColor = kKnownColorBrightWhite;
 	textEntry.effectKnownColor = kKnownColorBlack;
-	textEntry.point.x = _vm->getDisplayWidth() / 2;
+	textEntry.point.x = _vm->getDisplayInfo().logicalWidth / 2;
 	textEntry.point.y = (_vm->_scene->getHeight() - _vm->_font->getHeight(kKnownFontMedium)) / 2;
 	textEntry.font = kKnownFontMedium;
 	textEntry.flags = (FontEffectFlags)(kFontOutline | kFontCentered);

Modified: scummvm/trunk/engines/saga/sndres.cpp
===================================================================
--- scummvm/trunk/engines/saga/sndres.cpp	2008-12-21 21:44:35 UTC (rev 35472)
+++ scummvm/trunk/engines/saga/sndres.cpp	2008-12-21 22:52:44 UTC (rev 35473)
@@ -59,7 +59,7 @@
 	if (_vm->getGameId() == GID_ITE) {
 		_fxTable = ITE_SfxTable;
 		_fxTableLen = ITE_SFXCOUNT;
-	} else {
+	} else if (_vm->getGameId() == GID_IHNM) {
 		ResourceContext *resourceContext;
 
 		resourceContext = _vm->_resource->getContext(GAME_SOUNDFILE);
@@ -93,6 +93,10 @@
 
 		_fxTable = 0;
 		_fxTableLen = 0;
+	} else if (_vm->getGameId() == GID_DINO) {
+		// TODO
+	} else if (_vm->getGameId() == GID_FTA2) {
+		// TODO
 	}
 }
 

Modified: scummvm/trunk/engines/saga/sprite.cpp
===================================================================
--- scummvm/trunk/engines/saga/sprite.cpp	2008-12-21 21:44:35 UTC (rev 35472)
+++ scummvm/trunk/engines/saga/sprite.cpp	2008-12-21 22:52:44 UTC (rev 35473)
@@ -243,8 +243,8 @@
 	for (i = io; i < clipHeight; i++) {
 		for (j = jo; j < clipWidth; j++) {
 			assert(_vm->_gfx->getBackBufferPixels() <= (byte *)(bufRowPointer + j + spritePointer.x));
-			assert((_vm->_gfx->getBackBufferPixels() + (_vm->getDisplayWidth() *
-				 _vm->getDisplayHeight())) > (byte *)(bufRowPointer + j + spritePointer.x));
+			assert((_vm->_gfx->getBackBufferPixels() + (_vm->getDisplayInfo().logicalWidth *
+				 _vm->getDisplayInfo().logicalHeight)) > (byte *)(bufRowPointer + j + spritePointer.x));
 			assert((const byte *)spriteBuffer <= (const byte *)(srcRowPointer + j));
 			assert(((const byte *)spriteBuffer + (width * height)) > (const byte *)(srcRowPointer + j));
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list