diff options
| author | Andrew Kurushin | 2005-01-22 21:40:54 +0000 | 
|---|---|---|
| committer | Andrew Kurushin | 2005-01-22 21:40:54 +0000 | 
| commit | 4f68706f3ca05f882a616cb7277e1c68cd31130e (patch) | |
| tree | a6c2e9eb64a28985ac75aa76ba220575c82d1d3a | |
| parent | 01a863414e6a7c795ba3367841a565f71733736c (diff) | |
| download | scummvm-rg350-4f68706f3ca05f882a616cb7277e1c68cd31130e.tar.gz scummvm-rg350-4f68706f3ca05f882a616cb7277e1c68cd31130e.tar.bz2 scummvm-rg350-4f68706f3ca05f882a616cb7277e1c68cd31130e.zip  | |
implemented sfWaitWalk scriptFunction
svn-id: r16619
| -rw-r--r-- | saga/resnames.h | 2 | ||||
| -rw-r--r-- | saga/script.h | 8 | ||||
| -rw-r--r-- | saga/sfuncs.cpp | 47 | 
3 files changed, 40 insertions, 17 deletions
diff --git a/saga/resnames.h b/saga/resnames.h index e5b4e486e4..1d0e3aeec9 100644 --- a/saga/resnames.h +++ b/saga/resnames.h @@ -97,6 +97,8 @@ namespace Saga {  #define RID_ITE_INTRO_IMG_3 1561  #define RID_ITE_INTRO_IMG_4 1565 +#define RID_ITE_ENDCREDIT_SCENE_1 1802 +  // ITE_VOICES  #define RID_CAVE_VOICE_0 0  #define RID_CAVE_VOICE_1 1 diff --git a/saga/script.h b/saga/script.h index 5ae4eefd8d..5d6d0328c2 100644 --- a/saga/script.h +++ b/saga/script.h @@ -469,10 +469,10 @@ private:  	void sfLockUser(SCRIPTFUNC_PARAMS);  	void sfPreDialog(SCRIPTFUNC_PARAMS);  	void sfKillActorThreads(SCRIPTFUNC_PARAMS); -  	void sfFaceTowards(SCRIPTFUNC_PARAMS);  	void sfSetFollower(SCRIPTFUNC_PARAMS); -	void SF_gotoScene(SCRIPTFUNC_PARAMS); +	void sfScriptGotoScene(SCRIPTFUNC_PARAMS); +  	void SF_setObjImage(SCRIPTFUNC_PARAMS);  	void SF_setObjName(SCRIPTFUNC_PARAMS);  	void SF_getObjImage(SCRIPTFUNC_PARAMS); @@ -486,7 +486,7 @@ private:  	void sfScriptWalkToAsync(SCRIPTFUNC_PARAMS);  	void SF_enableZone(SCRIPTFUNC_PARAMS);  	void sfSetActorState(SCRIPTFUNC_PARAMS); -	void scriptMoveTo(SCRIPTFUNC_PARAMS); +	void sfScriptMoveTo(SCRIPTFUNC_PARAMS);  	void SF_sceneEq(SCRIPTFUNC_PARAMS);  	void SF_dropObject(SCRIPTFUNC_PARAMS);  	void sfFinishBgdAnim(SCRIPTFUNC_PARAMS); @@ -509,7 +509,7 @@ private:  	void SF_setProtagState(SCRIPTFUNC_PARAMS);  	void sfResumeBgdAnim(SCRIPTFUNC_PARAMS);  	void SF_throwActor(SCRIPTFUNC_PARAMS); -	void SF_waitWalk(SCRIPTFUNC_PARAMS); +	void sfWaitWalk(SCRIPTFUNC_PARAMS);  	void SF_sceneID(SCRIPTFUNC_PARAMS);  	void SF_changeActorScene(SCRIPTFUNC_PARAMS);  	void SF_climb(SCRIPTFUNC_PARAMS); diff --git a/saga/sfuncs.cpp b/saga/sfuncs.cpp index 322f31562b..14177ee404 100644 --- a/saga/sfuncs.cpp +++ b/saga/sfuncs.cpp @@ -65,7 +65,7 @@ void Script::setupScriptFuncList(void) {  		OPCODE(sfKillActorThreads),  		OPCODE(sfFaceTowards),  		OPCODE(sfSetFollower), -		OPCODE(SF_gotoScene), +		OPCODE(sfScriptGotoScene),  		OPCODE(SF_setObjImage),  		OPCODE(SF_setObjName),  		OPCODE(SF_getObjImage), @@ -79,7 +79,7 @@ void Script::setupScriptFuncList(void) {  		OPCODE(sfScriptWalkToAsync),  		OPCODE(SF_enableZone),  		OPCODE(sfSetActorState), -		OPCODE(scriptMoveTo), +		OPCODE(sfScriptMoveTo),  		OPCODE(SF_sceneEq),  		OPCODE(SF_dropObject),  		OPCODE(sfFinishBgdAnim), @@ -102,7 +102,7 @@ void Script::setupScriptFuncList(void) {  		OPCODE(SF_setProtagState),  		OPCODE(sfResumeBgdAnim),  		OPCODE(SF_throwActor), -		OPCODE(SF_waitWalk), +		OPCODE(sfWaitWalk),  		OPCODE(SF_sceneID),  		OPCODE(SF_changeActorScene),  		OPCODE(SF_climb), @@ -465,15 +465,27 @@ static struct SceneSubstitutes {  };  // Script function #16 (0x10) -void Script::SF_gotoScene(SCRIPTFUNC_PARAMS) { -	int16 sceneNum = thread->pop(); -	int16 entrance = thread->pop(); +void Script::sfScriptGotoScene(SCRIPTFUNC_PARAMS) { +	int16 sceneNumber; +	int16 entrance; + +	sceneNumber = thread->pop(); +	entrance = thread->pop(); +	if (sceneNumber < 0) { +		//TODO: quit from game at all +	} +	 +//	_vm->_scene->loadScene(sceneNumber, BY_SCENE, _vm->_scene->SC_defaultScene, NULL, (sceneNumber = RID_ITE_ENDCREDIT_SCENE_1) ? SCENE_FADE : SCENE_NOFADE, entrance); -	for (int i = 0; i < ARRAYSIZE(sceneSubstitutes); i++) +	//TODO: placard stuff +	_pendingVerb = kVerbNone; +	_currentObject[0] = _currentObject[1] = ID_NOTHING; +	showVerb(); +/*	for (int i = 0; i < ARRAYSIZE(sceneSubstitutes); i++)  		if (sceneSubstitutes[i].sceneId == sceneNum)  			debug(0, "Scene %d substitute exists", sceneNum); -	debug(1, "stub: SF_gotoScene(%d, %d)", sceneNum, entrance); +	debug(1, "stub: SF_gotoScene(%d, %d)", sceneNum, entrance);*/  }  // Script function #17 (0x11) @@ -653,7 +665,7 @@ void Script::sfSetActorState(SCRIPTFUNC_PARAMS) {  // Param1: actor id  // Param2: actor pos x  // Param3: actor pos y -void Script::scriptMoveTo(SCRIPTFUNC_PARAMS) { +void Script::sfScriptMoveTo(SCRIPTFUNC_PARAMS) {  	int16 actorId;  	Location actorLocation;  	ActorData *actor; @@ -666,7 +678,6 @@ void Script::scriptMoveTo(SCRIPTFUNC_PARAMS) {  	actor->location.x = actorLocation.x;  	actor->location.y = actorLocation.y; -  }  // Script function #31 (0x21) @@ -1227,10 +1238,20 @@ void Script::SF_throwActor(SCRIPTFUNC_PARAMS) {  }  // Script function #53 (0x35) -void Script::SF_waitWalk(SCRIPTFUNC_PARAMS) { -	int16 param = thread->pop(); +// Param1: actor id +// Param2: target object +void Script::sfWaitWalk(SCRIPTFUNC_PARAMS) { +	int16 actorId; +	ActorData *actor; + +	actorId = thread->pop(); +	actor = _vm->_actor->getActor(actorId); -	debug(1, "stub: SF_waitWalk(%d)", param); +	if ((actor->currentAction == kActionWalkToPoint) || +		(actor->currentAction == kActionWalkToLink) || +		(actor->currentAction == kActionFall)) { +			thread->waitWalk(actor); +	}  }  // Script function #54 (0x36)  | 
