[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