[Scummvm-git-logs] scummvm master -> 9552dabaab8f4518a41c5c73825410da3b5a60af

sev- sev at scummvm.org
Sun Sep 4 00:57:56 CEST 2016


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

Summary:
9552dabaab FULLPIPE: Implement GameLoader::saveScenePicAniInfos(). Now object states are restored


Commit: 9552dabaab8f4518a41c5c73825410da3b5a60af
    https://github.com/scummvm/scummvm/commit/9552dabaab8f4518a41c5c73825410da3b5a60af
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-09-04T00:57:43+02:00

Commit Message:
FULLPIPE: Implement GameLoader::saveScenePicAniInfos(). Now object states are restored

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



diff --git a/engines/fullpipe/gameloader.cpp b/engines/fullpipe/gameloader.cpp
index 270e69a..d03ac0f 100644
--- a/engines/fullpipe/gameloader.cpp
+++ b/engines/fullpipe/gameloader.cpp
@@ -504,7 +504,79 @@ void GameLoader::applyPicAniInfos(Scene *sc, PicAniInfo **picAniInfo, int picAni
 }
 
 void GameLoader::saveScenePicAniInfos(int sceneId) {
-	warning("STUB: GameLoader::saveScenePicAniInfos(%d)", sceneId);
+	SceneTag *st;
+
+	int idx = getSceneTagBySceneId(sceneId, &st);
+
+	if (idx < 0)
+		return;
+
+	if (!_sc2array[idx]._isLoaded)
+		return;
+
+	if (!st->_scene)
+		return;
+
+	int picAniInfosCount;
+
+	PicAniInfo **pic = savePicAniInfos(st->_scene, 0, 128, &picAniInfosCount);
+
+	if (_sc2array[idx]._picAniInfos)
+		free(_sc2array[idx]._picAniInfos);
+
+	_sc2array[idx]._picAniInfos = pic;
+	_sc2array[idx]._picAniInfosCount = picAniInfosCount;
+}
+
+PicAniInfo **GameLoader::savePicAniInfos(Scene *sc, int flag1, int flag2, int *picAniInfoCount) {
+	PicAniInfo **res;
+
+	*picAniInfoCount = 0;
+	if (!sc)
+		return NULL;
+
+	if (!sc->_picObjList.size())
+		return NULL;
+
+	int numInfos = sc->_staticANIObjectList1.size() + sc->_picObjList.size() - 1;
+	if (numInfos < 1)
+		return NULL;
+
+	res = (PicAniInfo **)malloc(sizeof(PicAniInfo *) * numInfos);
+
+	int idx = 0;
+
+	for (uint i = 0; i < sc->_picObjList.size(); i++) {
+		PictureObject *obj = sc->_picObjList[i];
+
+		if (obj && ((obj->_flags & flag1) == flag1) && ((obj->_field_8 & flag2) == flag2)) {
+			res[idx] = new PicAniInfo();
+			obj->getPicAniInfo(res[idx]);
+			idx++;
+		}
+	}
+
+	for (uint i = 0; i < sc->_staticANIObjectList1.size(); i++) {
+		StaticANIObject *obj = sc->_staticANIObjectList1[i];
+
+		if (obj && ((obj->_flags & flag1) == flag1) && ((obj->_field_8 & flag2) == flag2)) {
+			res[idx] = new PicAniInfo();
+			obj->getPicAniInfo(res[idx]);
+			res[idx]->type &= 0xFFFF;
+			idx++;
+		}
+	}
+
+	*picAniInfoCount = idx;
+
+	debugC(4, kDebugBehavior | kDebugAnimation, "savePicAniInfos: Stored %d infos", idx);
+
+	if (!idx) {
+		free(res);
+		return NULL;
+	}
+
+	return res;
 }
 
 void GameLoader::updateSystems(int counterdiff) {
diff --git a/engines/fullpipe/gameloader.h b/engines/fullpipe/gameloader.h
index 772cc51..682d1aa 100644
--- a/engines/fullpipe/gameloader.h
+++ b/engines/fullpipe/gameloader.h
@@ -96,6 +96,7 @@ class GameLoader : public CObject {
 	int getSceneTagBySceneId(int sceneId, SceneTag **st);
 	void applyPicAniInfos(Scene *sc, PicAniInfo **picAniInfo, int picAniInfoCount);
 	void saveScenePicAniInfos(int sceneId);
+	PicAniInfo **savePicAniInfos(Scene *sc, int flag1, int flag2, int *picAniInfoCount);
 
 	void readSavegame(const char *fname);
 	void writeSavegame(Scene *sc, const char *fname);





More information about the Scummvm-git-logs mailing list