diff options
| author | Eugene Sandulenko | 2005-04-22 01:38:27 +0000 | 
|---|---|---|
| committer | Eugene Sandulenko | 2005-04-22 01:38:27 +0000 | 
| commit | 65ade039ecf14033ec114de0697ccb8cfa987673 (patch) | |
| tree | 763ea04c183ef35282cabcca0b6954594987df83 /saga/saveload.cpp | |
| parent | a81fbc04d996152399857dd01e70dfb78d4d1f02 (diff) | |
| download | scummvm-rg350-65ade039ecf14033ec114de0697ccb8cfa987673.tar.gz scummvm-rg350-65ade039ecf14033ec114de0697ccb8cfa987673.tar.bz2 scummvm-rg350-65ade039ecf14033ec114de0697ccb8cfa987673.zip | |
o Fix save/load. Now it restores game properly but still at exit #0.
o Proper background for inset rooms. Crowd is gone now.
o Draw black border around inset rooms.
svn-id: r17744
Diffstat (limited to 'saga/saveload.cpp')
| -rw-r--r-- | saga/saveload.cpp | 78 | 
1 files changed, 42 insertions, 36 deletions
| diff --git a/saga/saveload.cpp b/saga/saveload.cpp index fd7f096104..71661128a2 100644 --- a/saga/saveload.cpp +++ b/saga/saveload.cpp @@ -35,6 +35,7 @@  #include "saga/script.h"  #include "saga/interface.h"  #include "saga/scene.h" +#include "saga/render.h"  namespace Saga { @@ -103,46 +104,49 @@ void SagaEngine::save() {  }  void SagaEngine::load() { -	File out; +	File in;  	int actorsCount, objsCount, commonBufferSize;  	int scenenum, inset; +	int mapx, mapy; -	out.open("ite.sav"); +	in.open("ite.sav"); -	if (!out.isOpen()) +	if (!in.isOpen())  		return; -	actorsCount = out.readSint16LE(); -	objsCount = out.readSint16LE(); -	commonBufferSize = out.readSint16LE(); -	_actor->setProtagState(out.readSint16LE()); +	actorsCount = in.readSint16LE(); +	objsCount = in.readSint16LE(); +	commonBufferSize = in.readSint16LE(); +	_actor->setProtagState(in.readSint16LE());  	// Surrounding scene -	scenenum = out.readSint32LE(); -	out.readSint32LE(); +	scenenum = in.readSint32LE(); +	in.readSint32LE();  	// Inset scene -	inset = out.readSint32LE(); -	out.readSint32LE(); +	inset = in.readSint32LE(); +	in.readSint32LE(); + +	debug(0, "scene: %d out: %d", scenenum, inset);  	uint16 i;  	for (i = 0; i < actorsCount; i++) {  		ActorData *a = _actor->_actors[i]; -		a->sceneNumber = out.readSint32LE(); -		a->location.x = out.readSint16LE(); -		a->location.y = out.readSint16LE(); -		a->location.z = out.readSint16LE(); -		a->finalTarget.x = out.readSint16LE(); -		a->finalTarget.y = out.readSint16LE(); -		a->finalTarget.z = out.readSint16LE(); -		a->currentAction = out.readByte(); -		a->facingDirection = out.readByte(); -		a->targetObject = out.readSint16LE(); -		a->flags = (a->flags & ~(kProtagonist | kFollower) | out.readByte()); -		a->frameNumber = out.readByte(); -		out.readSint16LE(); +		a->sceneNumber = in.readSint32LE(); +		a->location.x = in.readSint16LE(); +		a->location.y = in.readSint16LE(); +		a->location.z = in.readSint16LE(); +		a->finalTarget.x = in.readSint16LE(); +		a->finalTarget.y = in.readSint16LE(); +		a->finalTarget.z = in.readSint16LE(); +		a->currentAction = in.readByte(); +		a->facingDirection = in.readByte(); +		a->targetObject = in.readSint16LE(); +		a->flags = (a->flags & ~(kProtagonist | kFollower) | in.readByte()); +		a->frameNumber = in.readByte(); +		in.readSint16LE();  	}  	_interface->clearInventory(); @@ -151,28 +155,29 @@ void SagaEngine::load() {  		ObjectData *o = _actor->_objs[i];  		int pos; -		o->sceneNumber = out.readSint32LE(); -		o->id = out.readSint32LE(); -		o->location.x = out.readSint16LE(); -		o->location.y = out.readSint16LE(); -		o->location.z = out.readSint16LE(); -		o->nameIndex = out.readSint16LE(); +		o->sceneNumber = in.readSint32LE(); +		o->id = in.readSint32LE(); +		o->location.x = in.readSint16LE(); +		o->location.y = in.readSint16LE(); +		o->location.z = in.readSint16LE(); +		o->nameIndex = in.readSint16LE(); -		pos = out.readSint16LE(); +		pos = in.readSint16LE();  		if (o->sceneNumber == ITE_SCENE_INV) {  			_interface->addToInventory(_actor->objIndexToId(i), pos);  		} -		out.readByte(); +		in.readByte();  	}  	for (i = 0; i < commonBufferSize; i++) -		_script->_commonBuffer[i] = out.readByte(); +		_script->_commonBuffer[i] = in.readByte(); -	_isoMap->getMapPosition().x = out.readSint16LE(); -	_isoMap->getMapPosition().y = out.readSint16LE(); +	mapx = in.readSint16LE(); +	mapy = in.readSint16LE(); -	out.close(); +	in.close(); +	_isoMap->setMapPosition(mapx, mapy);  	// FIXME: When save/load screen will be implemented we should  	// call these after that screen left by user @@ -184,6 +189,7 @@ void SagaEngine::load() {  	_scene->changeScene(scenenum, 0);  	if (inset != scenenum) { +		_render->drawScene();  		_scene->clearSceneQueue();  		_scene->changeScene(inset, 0);  	} | 
