[Scummvm-cvs-logs] scummvm master -> e8f4c28d10e072a77aafbed9033991a4bb3da43b

sev- sev at scummvm.org
Thu Sep 12 21:52:18 CEST 2013


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

Summary:
7e08d4f6b2 FULLPIPE: Move PreloadItems to gameloader.h
6cd830fb1b FULLPIPE: Implement CGameLoader::preloadScene()
e8f4c28d10 FULLPIPE: Move Sc2 to gameloader.h


Commit: 7e08d4f6b290824e43c91cea8cb3b8716144b859
    https://github.com/scummvm/scummvm/commit/7e08d4f6b290824e43c91cea8cb3b8716144b859
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2013-09-12T12:51:21-07:00

Commit Message:
FULLPIPE: Move PreloadItems to gameloader.h

Changed paths:
    engines/fullpipe/gameloader.h
    engines/fullpipe/objects.h



diff --git a/engines/fullpipe/gameloader.h b/engines/fullpipe/gameloader.h
index a8d51cd..73873fb 100644
--- a/engines/fullpipe/gameloader.h
+++ b/engines/fullpipe/gameloader.h
@@ -34,6 +34,18 @@ class CMctlCompound;
 class CInputController;
 class CInteractionController;
 
+struct PreloadItem {
+	int preloadId1;
+	int preloadId2;
+	int sceneId;
+	int field_C;
+};
+
+class PreloadItems : public Common::Array<PreloadItem>, public CObject {
+ public:
+	virtual bool load(MfcArchive &file);
+};
+
 class CGameLoader : public CObject {
  public:
 	CGameLoader();
diff --git a/engines/fullpipe/objects.h b/engines/fullpipe/objects.h
index 55686ac..008e684 100644
--- a/engines/fullpipe/objects.h
+++ b/engines/fullpipe/objects.h
@@ -117,18 +117,6 @@ class CGameVar : public CObject {
 	CGameVar *getSubVarByIndex(int idx);
 };
 
-struct PreloadItem {
-	int preloadId1;
-	int preloadId2;
-	int sceneId;
-	int field_C;
-};
-
-class PreloadItems : public Common::Array<PreloadItem>, public CObject {
- public:
-	virtual bool load(MfcArchive &file);
-};
-
 } // End of namespace Fullpipe
 
 #endif /* FULLPIPE_OBJECTS_H */


Commit: 6cd830fb1bfaec9207248bb935d1f9c9c008dd7a
    https://github.com/scummvm/scummvm/commit/6cd830fb1bfaec9207248bb935d1f9c9c008dd7a
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2013-09-12T12:51:21-07:00

Commit Message:
FULLPIPE: Implement CGameLoader::preloadScene()

Changed paths:
    engines/fullpipe/gameloader.cpp
    engines/fullpipe/gameloader.h
    engines/fullpipe/messages.cpp
    engines/fullpipe/messages.h
    engines/fullpipe/motion.h
    engines/fullpipe/stateloader.cpp



diff --git a/engines/fullpipe/gameloader.cpp b/engines/fullpipe/gameloader.cpp
index 142c278..fef7f56 100644
--- a/engines/fullpipe/gameloader.cpp
+++ b/engines/fullpipe/gameloader.cpp
@@ -27,6 +27,7 @@
 #include "fullpipe/input.h"
 #include "fullpipe/statics.h"
 #include "fullpipe/interaction.h"
+#include "fullpipe/motion.h"
 
 namespace Fullpipe {
 
@@ -227,12 +228,88 @@ bool CGameLoader::gotoScene(int sceneId, int entranceId) {
 	return true;
 }
 
+bool preloadCallback(const PreloadItem &pre, int flag) {
+	warning("STUB: preloadCallback");
+
+	return true;
+}
+
 bool CGameLoader::preloadScene(int sceneId, int entranceId) {
-	warning("STUB: preloadScene(%d, %d), ", sceneId, entranceId);
+	debug(0, "preloadScene(%d, %d), ", sceneId, entranceId);
+
+	if (_preloadSceneId != sceneId || _preloadEntranceId != entranceId) {
+		_preloadSceneId = sceneId;
+		_preloadEntranceId = entranceId;
+		return true;
+	}
+
+	int idx = -1;
+
+	for (uint i = 0; i < _preloadItems.size(); i++)
+		if (_preloadItems[i].preloadId1 == sceneId && _preloadItems[i].preloadId2 == entranceId) {
+			idx = i;
+			break;
+		}
+
+	if (idx == -1) {
+		_preloadSceneId = 0;
+		_preloadEntranceId = 0;
+		return false;
+	}
+
+	if (_preloadCallback) {
+		if (!_preloadCallback(_preloadItems[idx], 0))
+			return false;
+	}
+
+	if (g_fullpipe->_currentScene && g_fullpipe->_currentScene->_sceneId == sceneId)
+		g_fullpipe->_currentScene = 0;
+
+	saveScenePicAniInfos(sceneId);
+	clearGlobalMessageQueueList1();
+	unloadScene(sceneId);
+
+	if (_preloadCallback)
+		_preloadCallback(_preloadItems[idx], 50);
+
+	loadScene(_preloadItems[idx].sceneId);
+
+	ExCommand *ex = new ExCommand(_preloadItems[idx].sceneId, 17, 62, 0, 0, 0, 1, 0, 0, 0);
+	ex->_excFlags = 2;
+	ex->_keyCode = _preloadItems[idx].keyCode;
+
+	_preloadSceneId = 0;
+	_preloadEntranceId = 0;
+
+	if (_preloadCallback)
+		_preloadCallback(_preloadItems[idx], 100);
+
+	ex->postMessage();
 
 	return true;
 }
 
+bool CGameLoader::unloadScene(int sceneId) {
+	SceneTag *tag;
+	int sceneTag = getSceneTagBySceneId(sceneId, &tag);
+
+	if (sceneTag < 0)
+		return false;
+
+	if (_sc2array[sceneTag]._isLoaded)
+		saveScenePicAniInfos(sceneId);
+
+	_sc2array[sceneTag]._motionController->freeItems();
+
+	delete tag->_scene;
+	tag->_scene = 0;
+
+	_sc2array[sceneTag]._isLoaded = 0;
+	_sc2array[sceneTag]._scene = 0;
+
+   return true;
+}
+
 int CGameLoader::getSceneTagBySceneId(int sceneId, SceneTag **st) {
 	if (_sc2array.size() > 0 && _gameProject->_sceneTagList->size() > 0) {
 		for (uint i = 0; i < _sc2array.size(); i++) {
@@ -304,6 +381,10 @@ void CGameLoader::applyPicAniInfos(Scene *sc, PicAniInfo **picAniInfo, int picAn
 	}
 }
 
+void CGameLoader::saveScenePicAniInfos(int sceneId) {
+	warning("STUB: CGameLoader::saveScenePicAniInfos(%d)", sceneId);
+}
+
 void CGameLoader::updateSystems(int counterdiff) {
 	if (g_fullpipe->_currentScene) {
 		g_fullpipe->_currentScene->update(counterdiff);
diff --git a/engines/fullpipe/gameloader.h b/engines/fullpipe/gameloader.h
index 73873fb..6db9c98 100644
--- a/engines/fullpipe/gameloader.h
+++ b/engines/fullpipe/gameloader.h
@@ -38,9 +38,11 @@ struct PreloadItem {
 	int preloadId1;
 	int preloadId2;
 	int sceneId;
-	int field_C;
+	int keyCode;
 };
 
+bool preloadCallback(const PreloadItem &pre, int flag);
+
 class PreloadItems : public Common::Array<PreloadItem>, public CObject {
  public:
 	virtual bool load(MfcArchive &file);
@@ -55,11 +57,13 @@ class CGameLoader : public CObject {
 	bool loadScene(int sceneId);
 	bool gotoScene(int sceneId, int entranceId);
 	bool preloadScene(int sceneId, int entranceId);
+	bool unloadScene(int sceneId);
 
 	void updateSystems(int counterdiff);
 
 	int getSceneTagBySceneId(int sceneId, SceneTag **st);
 	void applyPicAniInfos(Scene *sc, PicAniInfo **picAniInfo, int picAniInfoCount);
+	void saveScenePicAniInfos(int sceneId);
 
 	GameProject *_gameProject;
 	CInteractionController *_interactionController;
@@ -67,7 +71,7 @@ class CGameLoader : public CObject {
 	CInventory2 _inventory;
 	Sc2Array _sc2array;
 	void *_sceneSwitcher;
-	void *_preloadCallback;
+	bool (*_preloadCallback)(const PreloadItem &pre, int flag);
 	void *_readSavegameCallback;
 	int16 _field_F8;
 	int16 _field_FA;
diff --git a/engines/fullpipe/messages.cpp b/engines/fullpipe/messages.cpp
index 478112f..36fd139 100644
--- a/engines/fullpipe/messages.cpp
+++ b/engines/fullpipe/messages.cpp
@@ -530,6 +530,10 @@ void GlobalMessageQueueList::addMessageQueue(MessageQueue *msg) {
 	push_back(msg);
 }
 
+void clearGlobalMessageQueueList1() {
+	warning("STUB: clearGlobalMessageQueueList1()");
+}
+
 bool removeMessageHandler(int16 id, int pos) {
 	if (g_fullpipe->_messageHandlers) {
 		MessageHandler *curItem = g_fullpipe->_messageHandlers;
diff --git a/engines/fullpipe/messages.h b/engines/fullpipe/messages.h
index 960e184..7ba9126 100644
--- a/engines/fullpipe/messages.h
+++ b/engines/fullpipe/messages.h
@@ -168,6 +168,7 @@ bool insertMessageHandler(int (*callback)(ExCommand *), int index, int16 id);
 void clearMessageHandlers();
 void processMessages();
 void updateGlobalMessageQueue(int id, int objid);
+void clearGlobalMessageQueueList1();
 
 } // End of namespace Fullpipe
 
diff --git a/engines/fullpipe/motion.h b/engines/fullpipe/motion.h
index 89a9896..85a5291 100644
--- a/engines/fullpipe/motion.h
+++ b/engines/fullpipe/motion.h
@@ -42,6 +42,7 @@ class CMotionController : public CObject {
 	void clearEnabled() { _isEnabled = false; }
 
 	virtual void addObject(StaticANIObject *obj) {}
+	virtual void freeItems() {}
 };
 
 class CMctlCompoundArray : public Common::Array<CObject>, public CObject {
diff --git a/engines/fullpipe/stateloader.cpp b/engines/fullpipe/stateloader.cpp
index 40169dd..366872c 100644
--- a/engines/fullpipe/stateloader.cpp
+++ b/engines/fullpipe/stateloader.cpp
@@ -59,8 +59,8 @@ bool FullpipeEngine::loadGam(const char *fname, int scene) {
 	}
 
 	// _sceneSwitcher = sceneSwitcher; // substituted with direct call
-	// _preloadCallback = gameLoaderPreloadCallback
-	// _readSavegameCallback = gameLoaderReadSavegameCallback;
+	_gameLoader->_preloadCallback = preloadCallback;
+	// _readSavegameCallback = gameLoaderReadSavegameCallback; // TODO
 
 	_aniMan = accessScene(SC_COMMON)->getAniMan();
 	_scene2 = 0;
@@ -155,7 +155,7 @@ bool PreloadItems::load(MfcArchive &file) {
 		t->preloadId1 = file.readUint32LE();
 		t->preloadId2 = file.readUint32LE();
 		t->sceneId = file.readUint32LE();
-		t->field_C = file.readUint32LE();
+		t->keyCode = file.readUint32LE();
 
 		push_back(*t);
 	}


Commit: e8f4c28d10e072a77aafbed9033991a4bb3da43b
    https://github.com/scummvm/scummvm/commit/e8f4c28d10e072a77aafbed9033991a4bb3da43b
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2013-09-12T12:51:21-07:00

Commit Message:
FULLPIPE: Move Sc2 to gameloader.h

Changed paths:
    engines/fullpipe/gameloader.cpp
    engines/fullpipe/gameloader.h
    engines/fullpipe/objects.h
    engines/fullpipe/stateloader.cpp



diff --git a/engines/fullpipe/gameloader.cpp b/engines/fullpipe/gameloader.cpp
index fef7f56..fa8eddf 100644
--- a/engines/fullpipe/gameloader.cpp
+++ b/engines/fullpipe/gameloader.cpp
@@ -404,6 +404,78 @@ void CGameLoader::updateSystems(int counterdiff) {
 	}
 }
 
+Sc2::Sc2() {
+	_sceneId = 0;
+	_field_2 = 0;
+	_scene = 0;
+	_motionController = 0;
+	_data1 = 0;
+	_count1 = 0;
+	_defPicAniInfos = 0;
+	_defPicAniInfosCount = 0;
+	_picAniInfos = 0;
+	_picAniInfosCount = 0;
+	_isLoaded = 0;
+	_entranceData = 0;
+	_entranceDataCount = 0;
+}
+
+bool Sc2::load(MfcArchive &file) {
+	debug(5, "Sc2::load()");
+
+	_sceneId = file.readUint16LE();
+
+	_motionController = (CMotionController *)file.readClass();
+
+	_count1 = file.readUint32LE();
+	debug(4, "count1: %d", _count1);
+	if (_count1 > 0) {
+		_data1 = (int32 *)malloc(_count1 * sizeof(int32));
+
+		for (int i = 0; i < _count1; i++) {
+			_data1[i] = file.readUint32LE();
+		}
+	} else {
+		_data1 = 0;
+	}
+
+	_defPicAniInfosCount = file.readUint32LE();
+	debug(4, "defPicAniInfos: %d", _defPicAniInfosCount);
+	if (_defPicAniInfosCount > 0) {
+		_defPicAniInfos = (PicAniInfo **)malloc(_defPicAniInfosCount * sizeof(PicAniInfo *));
+
+		for (int i = 0; i < _defPicAniInfosCount; i++) {
+			_defPicAniInfos[i] = new PicAniInfo();
+
+			_defPicAniInfos[i]->load(file);
+		}
+	} else {
+		_defPicAniInfos = 0;
+	}
+
+	_picAniInfos = 0;
+	_picAniInfosCount = 0;
+
+	_entranceDataCount = file.readUint32LE();
+	debug(4, "_entranceData: %d", _entranceDataCount);
+
+	if (_entranceDataCount > 0) {
+		_entranceData = (EntranceInfo **)malloc(_entranceDataCount * sizeof(EntranceInfo *));
+
+		for (int i = 0; i < _entranceDataCount; i++) {
+			_entranceData[i] = new EntranceInfo();
+			_entranceData[i]->load(file);
+		}
+	} else {
+		_entranceData = 0;
+	}
+
+	if (file.size() - file.pos() > 0)
+		error("Sc2::load(): (%d bytes left)", file.size() - file.pos());
+
+	return true;
+}
+
 CGameVar *FullpipeEngine::getGameLoaderGameVar() {
 	if (_gameLoader)
 		return _gameLoader->_gameVar;
diff --git a/engines/fullpipe/gameloader.h b/engines/fullpipe/gameloader.h
index 6db9c98..87cd1f1 100644
--- a/engines/fullpipe/gameloader.h
+++ b/engines/fullpipe/gameloader.h
@@ -33,6 +33,30 @@ class SceneTag;
 class CMctlCompound;
 class CInputController;
 class CInteractionController;
+class CMotionController;
+
+class Sc2 : public CObject {
+ public:
+	int16 _sceneId;
+	int16 _field_2;
+	Scene *_scene;
+	CMotionController *_motionController;
+	int32 *_data1; // FIXME, could be a struct
+	int _count1;
+	PicAniInfo **_defPicAniInfos;
+	int _defPicAniInfosCount;
+	PicAniInfo **_picAniInfos;
+	int _picAniInfosCount;
+	int _isLoaded;
+	EntranceInfo **_entranceData;
+	int _entranceDataCount;
+
+ public:
+	Sc2();
+	virtual bool load(MfcArchive &file);
+};
+
+typedef Common::Array<Sc2> Sc2Array;
 
 struct PreloadItem {
 	int preloadId1;
diff --git a/engines/fullpipe/objects.h b/engines/fullpipe/objects.h
index 008e684..9e7c753 100644
--- a/engines/fullpipe/objects.h
+++ b/engines/fullpipe/objects.h
@@ -63,31 +63,6 @@ struct PicAniInfo {
 	bool load(MfcArchive &file);
 };
 
-class CMotionController;
-
-class Sc2 : public CObject {
- public:
-	int16 _sceneId;
-	int16 _field_2;
-	Scene *_scene;
-	CMotionController *_motionController;
-	int32 *_data1; // FIXME, could be a struct
-	int _count1;
-	PicAniInfo **_defPicAniInfos;
-	int _defPicAniInfosCount;
-	PicAniInfo **_picAniInfos;
-	int _picAniInfosCount;
-	int _isLoaded;
-	EntranceInfo **_entranceData;
-	int _entranceDataCount;
-
- public:
-	Sc2();
-	virtual bool load(MfcArchive &file);
-};
-
-typedef Common::Array<Sc2> Sc2Array;
-
 union VarValue {
 	float floatValue;
 	int32 intValue;
diff --git a/engines/fullpipe/stateloader.cpp b/engines/fullpipe/stateloader.cpp
index 366872c..dd00361 100644
--- a/engines/fullpipe/stateloader.cpp
+++ b/engines/fullpipe/stateloader.cpp
@@ -314,78 +314,6 @@ CGameVar *CGameVar::getSubVarByIndex(int idx) {
 	return sub;
 }
 
-Sc2::Sc2() {
-	_sceneId = 0;
-	_field_2 = 0;
-	_scene = 0;
-	_motionController = 0;
-	_data1 = 0;
-	_count1 = 0;
-	_defPicAniInfos = 0;
-	_defPicAniInfosCount = 0;
-	_picAniInfos = 0;
-	_picAniInfosCount = 0;
-	_isLoaded = 0;
-	_entranceData = 0;
-	_entranceDataCount = 0;
-}
-
-bool Sc2::load(MfcArchive &file) {
-	debug(5, "Sc2::load()");
-
-	_sceneId = file.readUint16LE();
-
-	_motionController = (CMotionController *)file.readClass();
-
-	_count1 = file.readUint32LE();
-	debug(4, "count1: %d", _count1);
-	if (_count1 > 0) {
-		_data1 = (int32 *)malloc(_count1 * sizeof(int32));
-
-		for (int i = 0; i < _count1; i++) {
-			_data1[i] = file.readUint32LE();
-		}
-	} else {
-		_data1 = 0;
-	}
-
-	_defPicAniInfosCount = file.readUint32LE();
-	debug(4, "defPicAniInfos: %d", _defPicAniInfosCount);
-	if (_defPicAniInfosCount > 0) {
-		_defPicAniInfos = (PicAniInfo **)malloc(_defPicAniInfosCount * sizeof(PicAniInfo *));
-
-		for (int i = 0; i < _defPicAniInfosCount; i++) {
-			_defPicAniInfos[i] = new PicAniInfo();
-
-			_defPicAniInfos[i]->load(file);
-		}
-	} else {
-		_defPicAniInfos = 0;
-	}
-
-	_picAniInfos = 0;
-	_picAniInfosCount = 0;
-
-	_entranceDataCount = file.readUint32LE();
-	debug(4, "_entranceData: %d", _entranceDataCount);
-
-	if (_entranceDataCount > 0) {
-		_entranceData = (EntranceInfo **)malloc(_entranceDataCount * sizeof(EntranceInfo *));
-
-		for (int i = 0; i < _entranceDataCount; i++) {
-			_entranceData[i] = new EntranceInfo();
-			_entranceData[i]->load(file);
-		}
-	} else {
-		_entranceData = 0;
-	}
-
-	if (file.size() - file.pos() > 0)
-		error("Sc2::load(): (%d bytes left)", file.size() - file.pos());
-
-	return true;
-}
-
 bool PicAniInfo::load(MfcArchive &file) {
 	debug(5, "PicAniInfo::load()");
 






More information about the Scummvm-git-logs mailing list