[Scummvm-cvs-logs] CVS: scummvm/saga actor.cpp,1.123,1.124 actor.h,1.67,1.68 events.cpp,1.50,1.51 ihnm_introproc.cpp,1.41,1.42 ite_introproc.cpp,1.52,1.53 render.cpp,1.54,1.55 saga.h,1.88,1.89 saveload.cpp,1.4,1.5 scene.cpp,1.101,1.102 scene.h,1.50,1.51 sdebug.cpp,1.28,1.29 sfuncs.cpp,1.107,1.108

Andrew Kurushin h00ligan at users.sourceforge.net
Sun May 8 07:05:29 CEST 2005


Update of /cvsroot/scummvm/scummvm/saga
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19999

Modified Files:
	actor.cpp actor.h events.cpp ihnm_introproc.cpp 
	ite_introproc.cpp render.cpp saga.h saveload.cpp scene.cpp 
	scene.h sdebug.cpp sfuncs.cpp 
Log Message:
fixed sfSceneEq bug
fixed load actors entrance
removed some orphans

Index: actor.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/actor.cpp,v
retrieving revision 1.123
retrieving revision 1.124
diff -u -d -r1.123 -r1.124
--- actor.cpp	28 Apr 2005 17:19:36 -0000	1.123
+++ actor.cpp	8 May 2005 14:04:02 -0000	1.124
@@ -374,7 +374,7 @@
 	actor = getActor(actorId);
 	actor->lastZone = NULL;
 	
-	_vm->_scene->changeScene(hitZone->getSceneNumber(), hitZone->getActorsEntrance());
+	_vm->_scene->changeScene(hitZone->getSceneNumber(), hitZone->getActorsEntrance(), kTransitionNoFade);
 	_vm->_script->setNoPendingVerb();
 }
 
@@ -562,6 +562,10 @@
 		return;
 	}
 
+	if (_vm->_scene->currentSceneNumber() == 0) {
+		error("Actor::updateActorsScene _vm->_scene->currentSceneNumber() == 0");
+	}
+
 	_activeSpeech.stringsCount = 0;
 	_protagonist = NULL;
 
@@ -597,8 +601,6 @@
 			_protagonist->location.z = sceneEntry->location.z * ACTOR_LMULT;
 		}
 		_protagonist->facingDirection = _protagonist->actionDirection = sceneEntry->facing;
-	} else {
-		warning("actorsEntrance < 0");
 	}
 
 	_protagonist->currentAction = kActionWait;
@@ -1261,7 +1263,11 @@
 	return true;
 }
 
-int Actor::drawActors() {
+void Actor::drawActors() {
+	if (_vm->_scene->currentSceneNumber() <= 0) {
+		return;
+	}
+
 	CommonObjectOrderList::iterator drawOrderIterator;
 	CommonObjectDataPointer drawObject;
 	int frameNumber;
@@ -1321,8 +1327,6 @@
 		}
 
 	}
-
-	return SUCCESS;
 }
 
 bool Actor::followProtagonist(ActorData *actor) {
@@ -2295,8 +2299,6 @@
 void Actor::saveState(File& out) {
 	uint16 i;
 	
-	out.writeSint32LE(_centerActor == NULL ? -1 : _centerActor->index);
-	out.writeSint32LE(_protagonist == NULL ? -1 : _protagonist->index);
 	out.writeSint16LE(getProtagState());
 
 	for (i = 0; i < _actorsCount; i++) {
@@ -2304,8 +2306,6 @@
 		a->saveState(out);
 	}
 
-	//TODO: save _activeSpeech
-
 	for (i = 0; i < _objsCount; i++) {
 		ObjectData *o = _objs[i];
 		o->saveState(out);
@@ -2315,16 +2315,8 @@
 void Actor::loadState(File& in) {
 	int32 i;
 
-	i = in.readSint32LE();
-	_centerActor = (i < 0) ? NULL : _actors[i];
-
-	i = in.readSint32LE();
-	_protagonist = (i < 0) ? NULL : _actors[i];
-
 	setProtagState(in.readSint16LE());
 
-	//TODO: load _activeSpeech
-
 	for (i = 0; i < _actorsCount; i++) {
 		ActorData *a = _actors[i];
 		a->loadState(in);

Index: actor.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/actor.h,v
retrieving revision 1.67
retrieving revision 1.68
diff -u -d -r1.67 -r1.68
--- actor.h	28 Apr 2005 17:19:43 -0000	1.67
+++ actor.h	8 May 2005 14:04:03 -0000	1.68
@@ -60,6 +60,8 @@
 #define ACTOR_SPEECH_STRING_MAX 16	// speech const
 #define ACTOR_SPEECH_ACTORS_MAX 8
 
+#define ACTOR_NO_ENTRANCE -1
+
 #define PATH_NODE_EMPTY -1
 
 enum ActorActions {
@@ -464,7 +466,7 @@
 	}
 
 	int direct(int msec);
-	int drawActors();
+	void drawActors();
 	void updateActorsScene(int actorsEntrance);			// calls from scene loading to update Actors info
 
 	void drawPathTest();

Index: events.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/events.cpp,v
retrieving revision 1.50
retrieving revision 1.51
diff -u -d -r1.50 -r1.51
--- events.cpp	22 Apr 2005 01:38:27 -0000	1.50
+++ events.cpp	8 May 2005 14:04:04 -0000	1.51
@@ -277,9 +277,7 @@
 			break;
 		case EVENT_REMOVE:
 			{
-			 SCENE_INFO scene_info;
-				_vm->_scene->getInfo(&scene_info);
-				_vm->textDeleteEntry(scene_info.text_list, (TEXTLIST_ENTRY *)event->data);
+				_vm->textDeleteEntry(_vm->_scene->_textList, (TEXTLIST_ENTRY *)event->data);
 			}
 			break;
 		default:

Index: ihnm_introproc.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/ihnm_introproc.cpp,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -d -r1.41 -r1.42
--- ihnm_introproc.cpp	9 Mar 2005 07:28:49 -0000	1.41
+++ ihnm_introproc.cpp	8 May 2005 14:04:04 -0000	1.42
@@ -80,18 +80,18 @@
 	ARRAYSIZE(IHNM_IntroMovie4RL)
 };
 
-SCENE_QUEUE IHNM_IntroList[] = {
-	{0, &IHNM_IntroMovie1Desc, BY_DESC, Scene::SC_IHNMIntroMovieProc1, 0, SCENE_NOFADE},
-	{0, &IHNM_IntroMovie2Desc, BY_DESC, Scene::SC_IHNMIntroMovieProc2, 0, SCENE_NOFADE},
-	{0, &IHNM_IntroMovie3Desc, BY_DESC, Scene::SC_IHNMIntroMovieProc3, 0, SCENE_NOFADE},
-	{0, &IHNM_IntroMovie4Desc, BY_DESC, Scene::SC_IHNMHateProc, 0, SCENE_NOFADE}
+LoadSceneParams IHNM_IntroList[] = {
+	{0, kLoadByDescription, &IHNM_IntroMovie1Desc, Scene::SC_IHNMIntroMovieProc1, false, kTransitionNoFade, 0},
+	{0, kLoadByDescription, &IHNM_IntroMovie2Desc, Scene::SC_IHNMIntroMovieProc2, false, kTransitionNoFade, 0},
+	{0, kLoadByDescription, &IHNM_IntroMovie3Desc, Scene::SC_IHNMIntroMovieProc3, false, kTransitionNoFade, 0},
+	{0, kLoadByDescription, &IHNM_IntroMovie4Desc, Scene::SC_IHNMHateProc, false, kTransitionNoFade, 0}
 };
 
 int Scene::IHNMStartProc() {
 	size_t n_introscenes;
 	size_t i;
 
-	SCENE_QUEUE first_scene;
+	LoadSceneParams firstScene;
 
 	n_introscenes = ARRAYSIZE(IHNM_IntroList);
 
@@ -106,22 +106,23 @@
 	// IHNM yet. Also, the end titles music to plays over the scene, which
 	// is wrong. (But hey, it's a nice piece of music!)
 
-	first_scene.load_flag = BY_SCENE;
-	first_scene.scene_n = _vm->getStartSceneNumber();
-	first_scene.scene_skiptarget = 1;
-	first_scene.scene_proc = NULL;
-	first_scene.fadeType = SCENE_FADE;
+	firstScene.loadFlag = kLoadBySceneNumber;
+	firstScene.sceneDescriptor = _vm->getStartSceneNumber();
+	firstScene.sceneSkipTarget = true;
+	firstScene.sceneProc = NULL;
+	firstScene.transitionType = kTransitionFade;
+	firstScene.actorsEntrance = 0;
 
-	_vm->_scene->queueScene(&first_scene);
+	_vm->_scene->queueScene(&firstScene);
 
 	return SUCCESS;
 }
 
-int Scene::SC_IHNMIntroMovieProc1(int param, SCENE_INFO *scene_info, void *refCon) {
-	return ((Scene *)refCon)->IHNMIntroMovieProc1(param, scene_info);
+int Scene::SC_IHNMIntroMovieProc1(int param, void *refCon) {
+	return ((Scene *)refCon)->IHNMIntroMovieProc1(param);
 }
 
-int Scene::IHNMIntroMovieProc1(int param, SCENE_INFO *scene_info) {
+int Scene::IHNMIntroMovieProc1(int param) {
 	EVENT event;
 	EVENT *q_event;
 
@@ -155,11 +156,11 @@
 	return 0;
 }
 
-int Scene::SC_IHNMIntroMovieProc2(int param, SCENE_INFO *scene_info, void *refCon) {
-	return ((Scene *)refCon)->IHNMIntroMovieProc2(param, scene_info);
+int Scene::SC_IHNMIntroMovieProc2(int param, void *refCon) {
+	return ((Scene *)refCon)->IHNMIntroMovieProc2(param);
 }
 
-int Scene::IHNMIntroMovieProc2(int param, SCENE_INFO *scene_info) {
+int Scene::IHNMIntroMovieProc2(int param) {
 	EVENT event;
 	EVENT *q_event;
 	PALENTRY *pal;
@@ -241,11 +242,11 @@
 	return 0;
 }
 
-int Scene::SC_IHNMIntroMovieProc3(int param, SCENE_INFO *scene_info, void *refCon) {
-	return ((Scene *)refCon)->IHNMIntroMovieProc3(param, scene_info);
+int Scene::SC_IHNMIntroMovieProc3(int param, void *refCon) {
+	return ((Scene *)refCon)->IHNMIntroMovieProc3(param);
 }
 
-int Scene::IHNMIntroMovieProc3(int param, SCENE_INFO *scene_info) {
+int Scene::IHNMIntroMovieProc3(int param) {
 	EVENT event;
 	EVENT *q_event;
 	PALENTRY *pal;
@@ -327,11 +328,11 @@
 	return 0;
 }
 
-int Scene::SC_IHNMHateProc(int param, SCENE_INFO *scene_info, void *refCon) {
-	return ((Scene *)refCon)->IHNMHateProc(param, scene_info);
+int Scene::SC_IHNMHateProc(int param, void *refCon) {
+	return ((Scene *)refCon)->IHNMHateProc(param);
 }
 
-int Scene::IHNMHateProc(int param, SCENE_INFO *scene_info) {
+int Scene::IHNMHateProc(int param) {
 	EVENT event;
 	EVENT *q_event;
 

Index: ite_introproc.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/ite_introproc.cpp,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -d -r1.52 -r1.53
--- ite_introproc.cpp	19 Apr 2005 22:18:09 -0000	1.52
+++ ite_introproc.cpp	8 May 2005 14:04:04 -0000	1.53
@@ -40,46 +40,47 @@
 
 namespace Saga {
 
-SCENE_QUEUE ITE_IntroList[] = {
-	{RID_ITE_INTRO_ANIM_SCENE, NULL, BY_RESOURCE, Scene::SC_ITEIntroAnimProc, 0, SCENE_NOFADE},
-	{RID_ITE_CAVE_SCENE_1, NULL, BY_RESOURCE, Scene::SC_ITEIntroCave1Proc, 0, SCENE_FADE_NO_INTERFACE},
-	{RID_ITE_CAVE_SCENE_2, NULL, BY_RESOURCE, Scene::SC_ITEIntroCave2Proc, 0, SCENE_NOFADE},
-	{RID_ITE_CAVE_SCENE_3, NULL, BY_RESOURCE, Scene::SC_ITEIntroCave3Proc, 0, SCENE_NOFADE},
-	{RID_ITE_CAVE_SCENE_4, NULL, BY_RESOURCE, Scene::SC_ITEIntroCave4Proc, 0, SCENE_NOFADE},
-	{RID_ITE_VALLEY_SCENE, NULL, BY_RESOURCE, Scene::SC_ITEIntroValleyProc, 0, SCENE_FADE_NO_INTERFACE},
-	{RID_ITE_TREEHOUSE_SCENE, NULL, BY_RESOURCE, Scene::SC_ITEIntroTreeHouseProc, 0, SCENE_NOFADE},
-	{RID_ITE_FAIREPATH_SCENE, NULL, BY_RESOURCE, Scene::SC_ITEIntroFairePathProc, 0, SCENE_NOFADE},
-	{RID_ITE_FAIRETENT_SCENE, NULL, BY_RESOURCE, Scene::SC_ITEIntroFaireTentProc, 0, SCENE_NOFADE}
+LoadSceneParams ITE_IntroList[] = {
+	{RID_ITE_INTRO_ANIM_SCENE, kLoadByResourceId, NULL, Scene::SC_ITEIntroAnimProc, false, kTransitionNoFade, 0},
+	{RID_ITE_CAVE_SCENE_1, kLoadByResourceId, NULL, Scene::SC_ITEIntroCave1Proc, false, kTransitionFadeNoInterface, 0},
+	{RID_ITE_CAVE_SCENE_2, kLoadByResourceId, NULL, Scene::SC_ITEIntroCave2Proc, false, kTransitionNoFade, 0},
+	{RID_ITE_CAVE_SCENE_3, kLoadByResourceId, NULL, Scene::SC_ITEIntroCave3Proc, false, kTransitionNoFade, 0},
+	{RID_ITE_CAVE_SCENE_4, kLoadByResourceId, NULL, Scene::SC_ITEIntroCave4Proc, false, kTransitionNoFade, 0},
+	{RID_ITE_VALLEY_SCENE, kLoadByResourceId, NULL, Scene::SC_ITEIntroValleyProc, false, kTransitionFadeNoInterface, 0},
+	{RID_ITE_TREEHOUSE_SCENE, kLoadByResourceId, NULL, Scene::SC_ITEIntroTreeHouseProc, false, kTransitionNoFade, 0},
+	{RID_ITE_FAIREPATH_SCENE, kLoadByResourceId, NULL, Scene::SC_ITEIntroFairePathProc, false, kTransitionNoFade, 0},
+	{RID_ITE_FAIRETENT_SCENE, kLoadByResourceId, NULL, Scene::SC_ITEIntroFaireTentProc, false, kTransitionNoFade, 0}
 };
 
 int Scene::ITEStartProc() {
 	size_t n_introscenes;
 	size_t i;
 
-	SCENE_QUEUE first_scene;
-	SCENE_QUEUE tempScene;
+	LoadSceneParams firstScene;
+	LoadSceneParams tempScene;
 
 	n_introscenes = ARRAYSIZE(ITE_IntroList);
 
 	for (i = 0; i < n_introscenes; i++) {
 		tempScene = ITE_IntroList[i];
-		tempScene.scene_n = RSC_ConvertID(tempScene.scene_n);
+		tempScene.sceneDescriptor = RSC_ConvertID(tempScene.sceneDescriptor);
 		_vm->_scene->queueScene(&tempScene);
 	}
 
 
-	first_scene.load_flag = BY_SCENE;
-	first_scene.scene_n = _vm->getStartSceneNumber();
-	first_scene.scene_skiptarget = 1;
-	first_scene.scene_proc = NULL;
-	first_scene.fadeType = SCENE_FADE;
+	firstScene.loadFlag = kLoadBySceneNumber;
+	firstScene.sceneDescriptor = _vm->getStartSceneNumber();
+	firstScene.sceneSkipTarget = true;
+	firstScene.sceneProc = NULL;
+	firstScene.transitionType = kTransitionFade;
+	firstScene.actorsEntrance = 0;
 
-	_vm->_scene->queueScene(&first_scene);
+	_vm->_scene->queueScene(&firstScene);
 
 	return SUCCESS;
 }
 
-EVENT *Scene::ITEQueueDialogue(EVENT *q_event, SCENE_INFO *scene_info, int n_dialogues, const INTRO_DIALOGUE dialogue[]) {
+EVENT *Scene::ITEQueueDialogue(EVENT *q_event, int n_dialogues, const INTRO_DIALOGUE dialogue[]) {
 	TEXTLIST_ENTRY text_entry;
 	TEXTLIST_ENTRY *entry_p;
 	EVENT event;
@@ -96,7 +97,7 @@
 
 	for (i = 0; i < n_dialogues; i++) {
 		text_entry.string = dialogue[i].i_str;
-		entry_p = _vm->textAddEntry(scene_info->text_list, &text_entry);
+		entry_p = _vm->textAddEntry(_textList, &text_entry);
 
 		// Display text
 		event.type = ONESHOT_EVENT;
@@ -154,7 +155,7 @@
 // Queue a page of credits text. The original interpreter did word-wrapping
 // automatically. We currently don't.
 
-EVENT *Scene::ITEQueueCredits(SCENE_INFO *scene_info, int delta_time, int duration, int n_credits, const INTRO_CREDIT credits[]) {
+EVENT *Scene::ITEQueueCredits(int delta_time, int duration, int n_credits, const INTRO_CREDIT credits[]) {
 	int game;
 
 	// The assumption here is that all WyrmKeep versions have the same
@@ -240,7 +241,7 @@
 		text_entry.font_id = font;
 		text_entry.text_y = y;
 
-		entry_p = _vm->textAddEntry(scene_info->text_list, &text_entry);
+		entry_p = _vm->textAddEntry(_textList, &text_entry);
 
 		// Display text
 		event.type = ONESHOT_EVENT;
@@ -266,12 +267,12 @@
 	return q_event;
 }
 
-int Scene::SC_ITEIntroAnimProc(int param, SCENE_INFO *scene_info, void *refCon) {
-	return ((Scene *)refCon)->ITEIntroAnimProc(param, scene_info);
+int Scene::SC_ITEIntroAnimProc(int param, void *refCon) {
+	return ((Scene *)refCon)->ITEIntroAnimProc(param);
 }
 
 // Handles the introductory Dreamer's Guild / NWC logo animation scene.
-int Scene::ITEIntroAnimProc(int param, SCENE_INFO *scene_info) {
+int Scene::ITEIntroAnimProc(int param) {
 	EVENT event;
 	EVENT *q_event;
 
@@ -347,12 +348,12 @@
 	return 0;
 }
 
-int Scene::SC_ITEIntroCave1Proc(int param, SCENE_INFO *scene_info, void *refCon) {
-	return ((Scene *)refCon)->ITEIntroCave1Proc(param, scene_info);
+int Scene::SC_ITEIntroCave1Proc(int param, void *refCon) {
+	return ((Scene *)refCon)->ITEIntroCave1Proc(param);
 }
 
 // Handles first introductory cave painting scene
-int Scene::ITEIntroCave1Proc(int param, SCENE_INFO *scene_info) {
+int Scene::ITEIntroCave1Proc(int param) {
 	EVENT event;
 	EVENT *q_event;
 	int lang = _vm->getFeatures() & GF_LANG_DE ? 1 : 0;
@@ -414,7 +415,7 @@
 		q_event = _vm->_events->queue(&event);
 
 		// Queue narrator dialogue list
-		q_event = ITEQueueDialogue(q_event, scene_info, n_dialogues, dialogue[lang]);
+		q_event = ITEQueueDialogue(q_event, n_dialogues, dialogue[lang]);
 
 		// End scene after last dialogue over
 		event.type = ONESHOT_EVENT;
@@ -435,12 +436,12 @@
 	return 0;
 }
 
-int Scene::SC_ITEIntroCave2Proc(int param, SCENE_INFO *scene_info, void *refCon) {
-	return ((Scene *)refCon)->ITEIntroCave2Proc(param, scene_info);
+int Scene::SC_ITEIntroCave2Proc(int param, void *refCon) {
+	return ((Scene *)refCon)->ITEIntroCave2Proc(param);
 }
 
 // Handles second introductory cave painting scene
-int Scene::ITEIntroCave2Proc(int param, SCENE_INFO *scene_info) {
+int Scene::ITEIntroCave2Proc(int param) {
 	EVENT event;
 	EVENT *q_event;
 	int lang = _vm->getFeatures() & GF_LANG_DE ? 1 : 0;
@@ -499,7 +500,7 @@
 		q_event = _vm->_events->chain(q_event, &event);
 
 		// Queue narrator dialogue list
-		q_event = ITEQueueDialogue(q_event, scene_info, n_dialogues, dialogue[lang]);
+		q_event = ITEQueueDialogue(q_event, n_dialogues, dialogue[lang]);
 
 		// End scene after last dialogue over
 		event.type = ONESHOT_EVENT;
@@ -519,12 +520,12 @@
 	return 0;
 }
 
-int Scene::SC_ITEIntroCave3Proc(int param, SCENE_INFO *scene_info, void *refCon) {
-	return ((Scene *)refCon)->ITEIntroCave3Proc(param, scene_info);
+int Scene::SC_ITEIntroCave3Proc(int param, void *refCon) {
+	return ((Scene *)refCon)->ITEIntroCave3Proc(param);
 }
 
 // Handles third introductory cave painting scene
-int Scene::ITEIntroCave3Proc(int param, SCENE_INFO *scene_info) {
+int Scene::ITEIntroCave3Proc(int param) {
 	EVENT event;
 	EVENT *q_event;
 	int lang = _vm->getFeatures() & GF_LANG_DE ? 1 : 0;
@@ -583,7 +584,7 @@
 		q_event = _vm->_events->chain(q_event, &event);
 
 		// Queue narrator dialogue list
-		q_event = ITEQueueDialogue(q_event, scene_info, n_dialogues, dialogue[lang]);
+		q_event = ITEQueueDialogue(q_event, n_dialogues, dialogue[lang]);
 
 		// End scene after last dialogue over
 		event.type = ONESHOT_EVENT;
@@ -603,12 +604,12 @@
 	return 0;
 }
 
-int Scene::SC_ITEIntroCave4Proc(int param, SCENE_INFO *scene_info, void *refCon) {
-	return ((Scene *)refCon)->ITEIntroCave4Proc(param, scene_info);
+int Scene::SC_ITEIntroCave4Proc(int param, void *refCon) {
+	return ((Scene *)refCon)->ITEIntroCave4Proc(param);
 }
 
 // Handles fourth introductory cave painting scene
-int Scene::ITEIntroCave4Proc(int param, SCENE_INFO *scene_info) {
+int Scene::ITEIntroCave4Proc(int param) {
 	EVENT event;
 	EVENT *q_event;
 	int lang = _vm->getFeatures() & GF_LANG_DE ? 1 : 0;
@@ -676,7 +677,7 @@
 		q_event = _vm->_events->chain(q_event, &event);
 
 		// Queue narrator dialogue list
-		q_event = ITEQueueDialogue(q_event, scene_info, n_dialogues, dialogue[lang]);
+		q_event = ITEQueueDialogue(q_event, n_dialogues, dialogue[lang]);
 
 		// End scene after last dialogue over
 		event.type = ONESHOT_EVENT;
@@ -696,12 +697,12 @@
 	return 0;
 }
 
-int Scene::SC_ITEIntroValleyProc(int param, SCENE_INFO *scene_info, void *refCon) {
-	return ((Scene *)refCon)->ITEIntroValleyProc(param, scene_info);
+int Scene::SC_ITEIntroValleyProc(int param, void *refCon) {
+	return ((Scene *)refCon)->ITEIntroValleyProc(param);
 }
 
 // Handles intro title scene (valley overlook)
-int Scene::ITEIntroValleyProc(int param, SCENE_INFO *scene_info) {
+int Scene::ITEIntroValleyProc(int param) {
 	EVENT event;
 	EVENT *q_event;
 
@@ -782,7 +783,7 @@
 		q_event = _vm->_events->chain(q_event, &event);
 
 		// Queue game credits list
-		q_event = ITEQueueCredits(scene_info, 9000, CREDIT_DURATION1, n_credits, credits);
+		q_event = ITEQueueCredits(9000, CREDIT_DURATION1, n_credits, credits);
 
 		// End scene after credit display
 		event.type = ONESHOT_EVENT;
@@ -802,12 +803,12 @@
 	return 0;
 }
 
-int Scene::SC_ITEIntroTreeHouseProc(int param, SCENE_INFO *scene_info, void *refCon) {
-	return ((Scene *)refCon)->ITEIntroTreeHouseProc(param, scene_info);
+int Scene::SC_ITEIntroTreeHouseProc(int param, void *refCon) {
+	return ((Scene *)refCon)->ITEIntroTreeHouseProc(param);
 }
 
 // Handles second intro credit screen (treehouse view)
-int Scene::ITEIntroTreeHouseProc(int param, SCENE_INFO *scene_info) {
+int Scene::ITEIntroTreeHouseProc(int param) {
 	EVENT event;
 	EVENT *q_event;
 
@@ -866,8 +867,8 @@
 		q_event = _vm->_events->chain(q_event, &event);
 
 		// Queue game credits list
-		q_event = ITEQueueCredits(scene_info, DISSOLVE_DURATION + 2000, CREDIT_DURATION1, n_credits1, credits1);
-		q_event = ITEQueueCredits(scene_info, DISSOLVE_DURATION + 7000, CREDIT_DURATION1, n_credits2, credits2);
+		q_event = ITEQueueCredits(DISSOLVE_DURATION + 2000, CREDIT_DURATION1, n_credits1, credits1);
+		q_event = ITEQueueCredits(DISSOLVE_DURATION + 7000, CREDIT_DURATION1, n_credits2, credits2);
 
 		// End scene after credit display
 		event.type = ONESHOT_EVENT;
@@ -887,12 +888,12 @@
 	return 0;
 }
 
-int Scene::SC_ITEIntroFairePathProc(int param, SCENE_INFO *scene_info, void *refCon) {
-	return ((Scene *)refCon)->ITEIntroFairePathProc(param, scene_info);
+int Scene::SC_ITEIntroFairePathProc(int param, void *refCon) {
+	return ((Scene *)refCon)->ITEIntroFairePathProc(param);
 }
 
 // Handles third intro credit screen (path to puzzle tent)
-int Scene::ITEIntroFairePathProc(int param, SCENE_INFO *scene_info) {
+int Scene::ITEIntroFairePathProc(int param) {
 	EVENT event;
 	EVENT *q_event;
 
@@ -944,8 +945,8 @@
 		q_event = _vm->_events->chain(q_event, &event);
 
 		// Queue game credits list
-		q_event = ITEQueueCredits(scene_info, DISSOLVE_DURATION + 2000, CREDIT_DURATION1, n_credits1, credits1);
-		q_event = ITEQueueCredits(scene_info, DISSOLVE_DURATION + 7000, CREDIT_DURATION1, n_credits2, credits2);
+		q_event = ITEQueueCredits(DISSOLVE_DURATION + 2000, CREDIT_DURATION1, n_credits1, credits1);
+		q_event = ITEQueueCredits(DISSOLVE_DURATION + 7000, CREDIT_DURATION1, n_credits2, credits2);
 
 		// End scene after credit display
 		event.type = ONESHOT_EVENT;
@@ -965,12 +966,12 @@
 	return 0;
 }
 
-int Scene::SC_ITEIntroFaireTentProc(int param, SCENE_INFO *scene_info, void *refCon) {
-	return ((Scene *)refCon)->ITEIntroFaireTentProc(param, scene_info);
+int Scene::SC_ITEIntroFaireTentProc(int param, void *refCon) {
+	return ((Scene *)refCon)->ITEIntroFaireTentProc(param);
 }
 
 // Handles fourth intro credit screen (treehouse view)
-int Scene::ITEIntroFaireTentProc(int param, SCENE_INFO *scene_info) {
+int Scene::ITEIntroFaireTentProc(int param) {
 	EVENT event;
 	EVENT *q_event;
 	EVENT *q_event_start;

Index: render.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/render.cpp,v
retrieving revision 1.54
retrieving revision 1.55
diff -u -d -r1.54 -r1.55
--- render.cpp	18 Apr 2005 20:03:12 -0000	1.54
+++ render.cpp	8 May 2005 14:04:05 -0000	1.55
@@ -96,7 +96,6 @@
 
 int Render::drawScene() {
 	SURFACE *backbuf_surface;
-	SCENE_INFO scene_info;
 	SCENE_BGINFO bg_info;
 	Point bg_pt;
 	char txt_buf[20];
@@ -140,9 +139,7 @@
 	}
 
 	// Draw queued text strings
-	_vm->_scene->getInfo(&scene_info);
-
-	_vm->textDrawList(scene_info.text_list, backbuf_surface);
+	_vm->textDrawList(_vm->_scene->_textList, backbuf_surface);
 
 	// Handle user input
 	_vm->processInput();

Index: saga.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/saga.h,v
retrieving revision 1.88
retrieving revision 1.89
diff -u -d -r1.88 -r1.89
--- saga.h	24 Apr 2005 15:17:37 -0000	1.88
+++ saga.h	8 May 2005 14:04:05 -0000	1.89
@@ -433,8 +433,14 @@
 	virtual ~SagaEngine();
 	void shutDown() { _quit = true; }
 
-	void save();
-	void load();
+	void save() { //TODO: remove
+		save("iteSCUMMVM.sav");
+	}
+	void load() { //TODO: remove
+		load("iteSCUMMVM.sav");
+	}
+	void save(const char *fileName);
+	void load(const char *fileName);
 
 	int _soundEnabled;
 	int _musicEnabled;

Index: saveload.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/saveload.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- saveload.cpp	28 Apr 2005 17:19:43 -0000	1.4
+++ saveload.cpp	8 May 2005 14:04:06 -0000	1.5
@@ -39,26 +39,24 @@
 
 namespace Saga {
 
-void SagaEngine::save() {
+void SagaEngine::save(const char *fileName) {
 	File out;
 
-	out.open("iteSCUMMVM.sav", File::kFileWriteMode);
+	out.open(fileName, File::kFileWriteMode);
 	//TODO: version number
 
-	out.writeSint16LE(_script->_commonBufferSize);
-
 	// Surrounding scene
 	out.writeSint32LE(_scene->getOutsetSceneNumber());
-	out.writeSint32LE(0);
 
 	// Inset scene
 	out.writeSint32LE(_scene->currentSceneNumber());
-	out.writeSint32LE(0);
 
 	uint16 i;
 
 	_actor->saveState(out);
 	
+	out.writeSint16LE(_script->_commonBufferSize);
+
 	for (i = 0; i < _script->_commonBufferSize; i++)
 		out.writeByte(_script->_commonBuffer[i]);
 
@@ -68,36 +66,33 @@
 	out.close();
 }
 
-void SagaEngine::load() {
+void SagaEngine::load(const char *fileName) {
 	File in;
 	int  commonBufferSize;
-	int scenenum, inset;
+	int sceneNumber, insetSceneNumber;
 	int mapx, mapy;
+	uint16 i;
 
-	in.open("iteSCUMMVM.sav");
+	in.open(fileName);
 
 	if (!in.isOpen())
 		return;
 
-	commonBufferSize = in.readSint16LE();
 
 	// Surrounding scene
-	scenenum = in.readSint32LE();
-	in.readSint32LE();
+	sceneNumber = in.readSint32LE();
 
 	// Inset scene
-	inset = in.readSint32LE();
-	in.readSint32LE();
-
-	debug(0, "scene: %d out: %d", scenenum, inset);
+	insetSceneNumber = in.readSint32LE();
 
-	uint16 i;
+	debug(0, "scene: #%d inset scene: #%d", sceneNumber, insetSceneNumber);
 
 	
-	_interface->clearInventory(); //TODO: interface load-save-state
+	_interface->clearInventory();
 
 	_actor->loadState(in);
 	
+	commonBufferSize = in.readSint16LE();
 	for (i = 0; i < commonBufferSize; i++)
 		_script->_commonBuffer[i] = in.readByte();
 
@@ -108,20 +103,18 @@
 
 	_isoMap->setMapPosition(mapx, mapy);
 
-	// FIXME: When save/load screen will be implemented we should
-	// call these after that screen left by user
-	_interface->draw();
-
-	// FIXME: hmmm... now we always require actorsEntrance to be defined
-	// so no way to restore at arbitrary position
 	_scene->clearSceneQueue();
-	_scene->changeScene(scenenum, 0);
+	_scene->changeScene(sceneNumber, ACTOR_NO_ENTRANCE, kTransitionNoFade);
 
-	if (inset != scenenum) {
+	if (insetSceneNumber != sceneNumber) {
 		_render->drawScene();
 		_scene->clearSceneQueue();
-		_scene->changeScene(inset, 0);
+		_scene->changeScene(insetSceneNumber, ACTOR_NO_ENTRANCE, kTransitionNoFade);
 	}
+
+	// FIXME: When save/load screen will be implemented we should
+	// call these after that screen left by user
+	_interface->draw();
 }
 
 } // End of namespace Saga

Index: scene.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/scene.cpp,v
retrieving revision 1.101
retrieving revision 1.102
diff -u -d -r1.101 -r1.102
--- scene.cpp	24 Apr 2005 15:35:03 -0000	1.101
+++ scene.cpp	8 May 2005 14:04:06 -0000	1.102
@@ -86,6 +86,7 @@
 
 	for (i = 0; i < _sceneMax; i++) {
 		_sceneLUT[i] = readS.readUint16();
+		debug(8, "sceneNumber %i has resourceId %i", i, _sceneLUT[i]);
 	}
 
 	free(scene_lut_p);
@@ -108,8 +109,8 @@
 	_sceneNumber = 0;
 	_sceneResourceId = 0;
 	_inGame = false;
-	_loadDesc = false;
-	memset(&_desc, 0, sizeof(_desc));
+	_loadDescription = false;
+	memset(&_sceneDescription, 0, sizeof(_sceneDescription));
 	_resListEntries = 0;
 	_resList = NULL;
 	_animEntries = 0;
@@ -130,37 +131,17 @@
 	}
 }
 
-int Scene::queueScene(SCENE_QUEUE *scene_queue) {
-	assert(_initialized);
-	assert(scene_queue != NULL);
-
-	_sceneQueue.push_back(*scene_queue);
-	return SUCCESS;
-}
-
-int Scene::clearSceneQueue() {
-	assert(_initialized);
-
-	_sceneQueue.clear();
-
-	return SUCCESS;
-}
-
-int Scene::startScene() {
+void Scene::startScene() {
 	SceneQueueList::iterator queueIterator;
-	SCENE_QUEUE *scene_qdat;
+	LoadSceneParams *sceneQueue;
 	EVENT event;
 
-	assert(_initialized);
-
 	if (_sceneLoaded) {
-		warning("Scene::start(): Error: Can't start game...scene already loaded");
-		return FAILURE;
+		error("Scene::start(): Error: Can't start game...scene already loaded");
 	}
 
 	if (_inGame) {
-		warning("Scene::start(): Error: Can't start game...game already started");
-		return FAILURE;
+		error("Scene::start(): Error: Can't start game...game already started");
 	}
 
 	// Hide cursor during intro
@@ -177,38 +158,31 @@
 		IHNMStartProc();
 		break;
 	default:
-		warning("Scene::start(): Error: Can't start game... gametype not supported");
+		error("Scene::start(): Error: Can't start game... gametype not supported");
 		break;
 	}
 
 	// Load the head in scene queue
 	queueIterator = _sceneQueue.begin();
 	if (queueIterator == _sceneQueue.end()) {
-		return SUCCESS;
+		return; 
 	}
 
-	scene_qdat = queueIterator.operator->();
-	assert(scene_qdat != NULL);
-
-	loadScene(scene_qdat->scene_n, scene_qdat->load_flag, scene_qdat->scene_proc, scene_qdat->sceneDescription, scene_qdat->fadeType, 0);
+	sceneQueue = queueIterator.operator->();
 
-	return SUCCESS;
+	loadScene(sceneQueue);
 }
 
-int Scene::nextScene() {
+void Scene::nextScene() {
 	SceneQueueList::iterator queueIterator;
-	SCENE_QUEUE *scene_qdat;
-
-	assert(_initialized);
+	LoadSceneParams *sceneQueue;
 
 	if (!_sceneLoaded) {
-		warning("Scene::next(): Error: Can't advance scene...no scene loaded");
-		return FAILURE;
+		error("Scene::next(): Error: Can't advance scene...no scene loaded");
 	}
 
 	if (_inGame) {
-		warning("Scene::next(): Error: Can't advance scene...game already started");
-		return FAILURE;
+		error("Scene::next(): Error: Can't advance scene...game already started");
 	}
 
 	endScene();
@@ -216,100 +190,82 @@
 	// Delete the current head  in scene queue
 	queueIterator = _sceneQueue.begin();
 	if (queueIterator == _sceneQueue.end()) {
-		return SUCCESS;
+		return;
 	}
 	
 	queueIterator = _sceneQueue.erase(queueIterator);
 
 	if (queueIterator == _sceneQueue.end()) {
-		return SUCCESS;
+		return;
 	}
 
 	// Load the head  in scene queue
-	scene_qdat = queueIterator.operator->();
-	assert(scene_qdat != NULL);
-
-	loadScene(scene_qdat->scene_n, scene_qdat->load_flag, scene_qdat->scene_proc, scene_qdat->sceneDescription, scene_qdat->fadeType, 0);
+	sceneQueue = queueIterator.operator->();
 
-	return SUCCESS;
+	loadScene(sceneQueue);
 }
 
-int Scene::skipScene() {
+void Scene::skipScene() {
 	SceneQueueList::iterator queueIterator;
 
-	SCENE_QUEUE *scene_qdat = NULL;
-	SCENE_QUEUE *skip_qdat = NULL;
+	LoadSceneParams *sceneQueue = NULL;
+	LoadSceneParams *skipQueue = NULL;
 
 	assert(_initialized);
 
 	if (!_sceneLoaded) {
-		warning("Scene::skip(): Error: Can't skip scene...no scene loaded");
-		return FAILURE;
+		error("Scene::skip(): Error: Can't skip scene...no scene loaded");
 	}
 
 	if (_inGame) {
-		warning("Scene::skip(): Error: Can't skip scene...game already started");
-		return FAILURE;
+		error("Scene::skip(): Error: Can't skip scene...game already started");
 	}
 
 	// Walk down scene queue and try to find a skip target
 	queueIterator = _sceneQueue.begin();
 	if (queueIterator == _sceneQueue.end()) {
-		warning("Scene::skip(): Error: Can't skip scene...no scenes in queue");
-		return FAILURE;
+		error("Scene::skip(): Error: Can't skip scene...no scenes in queue");
 	}
 
 	++queueIterator;
 	while (queueIterator != _sceneQueue.end()) {
-		scene_qdat = queueIterator.operator->();
-		assert(scene_qdat != NULL);
+		sceneQueue = queueIterator.operator->();
+		assert(sceneQueue != NULL);
 
-		if (scene_qdat->scene_skiptarget) {
-			skip_qdat = scene_qdat;
+		if (sceneQueue->sceneSkipTarget) {
+			skipQueue = sceneQueue;
 			break;
 		}
 		++queueIterator;
 	}
 
 	// If skip target found, remove preceding scenes and load
-	if (skip_qdat != NULL) {
+	if (skipQueue != NULL) {
 		_sceneQueue.erase(_sceneQueue.begin(), queueIterator);
 
 		endScene();
-		loadScene(skip_qdat->scene_n, skip_qdat->load_flag, skip_qdat->scene_proc, skip_qdat->sceneDescription, skip_qdat->fadeType, 0);
+		loadScene(skipQueue);
 	}
-	// Search for a scene to skip to
-
-	return SUCCESS;
 }
 
-int Scene::changeScene(int sceneNumber, int actorsEntrance, int fadeIn) {
-	assert(_initialized);
-
-	if (!_sceneLoaded) {
-		warning("Scene::changeScene(): Error: Can't change scene. No scene currently loaded. Game in invalid state");
-		return FAILURE;
-	}
-
-	if ((sceneNumber < 0) || (sceneNumber > _sceneMax)) {
-		warning("Scene::changeScene(): Error: Can't change scene. Invalid scene number");
-		return FAILURE;
-	}
+void Scene::changeScene(uint16 sceneNumber, int actorsEntrance, SceneTransitionType transitionType) {
+	LoadSceneParams sceneParams;
 
-	if (_sceneLUT[sceneNumber] == 0) {
-		warning("Scene::changeScene(): Error: Can't change scene; invalid scene descriptor resource number (0)");
-		return FAILURE;
-	}
+	sceneParams.actorsEntrance = actorsEntrance;
+	sceneParams.loadFlag = kLoadBySceneNumber;
+	sceneParams.sceneDescriptor = sceneNumber;
+	sceneParams.transitionType = transitionType;
+	sceneParams.sceneProc = NULL;
+	sceneParams.sceneSkipTarget = false;
 
 	endScene();
-	loadScene(sceneNumber, BY_SCENE, NULL, NULL, fadeIn, actorsEntrance);
+	loadScene(&sceneParams);
 
-	return SUCCESS;
 }
 
 void Scene::getSlopes(int &beginSlope, int &endSlope) {
-	beginSlope = _vm->getSceneHeight() - _desc.beginSlope; 
-	endSlope = _vm->getSceneHeight() - _desc.endSlope;
+	beginSlope = _vm->getSceneHeight() - _sceneDescription.beginSlope; 
+	endSlope = _vm->getSceneHeight() - _sceneDescription.endSlope;
 }
 
 int Scene::getBGInfo(SCENE_BGINFO *bginfo) {
@@ -434,78 +390,50 @@
 	memcpy(_sceneDoors, initSceneDoors, sizeof (_sceneDoors) );
 }
 
-int Scene::getInfo(SCENE_INFO *si) {
-	assert(_initialized);
-	assert(si != NULL);
-
-	si->text_list = _textList;
-
-	return SUCCESS;
-}
-
-int Scene::getSceneLUT(int scene_num) { 
-	assert((scene_num > 0) && (scene_num < _sceneMax));
-
-	return _sceneLUT[scene_num];
-}
-
-int Scene::loadScene(int scene_num, int load_flag, SCENE_PROC scene_proc, SceneDescription *scene_desc_param, int fadeType, int actorsEntrance) {
-	SCENE_INFO scene_info;
-	uint32 resourceId = 0;
+void Scene::loadScene(LoadSceneParams *loadSceneParams) {
 	int result;
 	int i;
 	EVENT event;
 	EVENT *q_event;
 	static PALENTRY current_pal[PAL_ENTRIES];
 
-	assert(_initialized);
-
 	if (_sceneLoaded) {
-		warning("Scene::loadScene(): Error, a scene is already loaded");
-		return FAILURE;
+		error("Scene::loadScene(): Error, a scene is already loaded");
 	}
 
-	_loadDesc = true;
-	_sceneNumber = -1;
+	_loadDescription = true;
 
-	switch (load_flag) {
-	case BY_RESOURCE:
-		resourceId = scene_num;
-		break;
-	case BY_SCENE:
-		assert((scene_num > 0) && (scene_num < _sceneMax));
-		resourceId = _sceneLUT[scene_num];
-		_sceneNumber = scene_num;
+	switch (loadSceneParams->loadFlag) {
+	case kLoadByResourceId:
+		_sceneNumber = 0;		// original assign zero for loaded by resource id
+		_sceneResourceId = loadSceneParams->sceneDescriptor;
 		break;
-	case BY_DESC:
-		assert(scene_desc_param != NULL);
-		assert(scene_desc_param->resList != NULL);
-		_loadDesc = false;
-		_desc = *scene_desc_param;
-		_resList = scene_desc_param->resList;
-		_resListEntries = scene_desc_param->resListCnt;
+	case kLoadBySceneNumber:
+		_sceneNumber = loadSceneParams->sceneDescriptor;
+		_sceneResourceId = getSceneResourceId(_sceneNumber);
 		break;
-	default:
-		warning("Scene::loadScene(): Error: Invalid scene load flag");
-		return FAILURE;
+	case kLoadByDescription:
+		_sceneNumber = -1;
+		_sceneResourceId = -1;
+		assert(loadSceneParams->sceneDescription != NULL);
+		assert(loadSceneParams->sceneDescription->resList != NULL);
+		_loadDescription = false;
+		_sceneDescription = *loadSceneParams->sceneDescription;
+		_resList = loadSceneParams->sceneDescription->resList;
+		_resListEntries = loadSceneParams->sceneDescription->resListCnt;
 		break;
 	}
 
 	// Load scene descriptor and resource list resources
-	if (_loadDesc) {
-
-		_sceneResourceId = resourceId;
-		assert(_sceneResourceId != 0);
-		debug(0, "Loading scene resource %u:", resourceId);
+	if (_loadDescription) {
+		debug(0, "Loading scene resource %u:", _sceneResourceId);
 
-		if (loadSceneDescriptor(resourceId) != SUCCESS) {
-			warning("Scene::loadScene(): Error reading scene descriptor");
-			return FAILURE;
+		if (loadSceneDescriptor(_sceneResourceId) != SUCCESS) {
+			error("Scene::loadScene(): Error reading scene descriptor");
 		}
 
-		if (loadSceneResourceList(_desc.resListRN) != SUCCESS) {
-			warning("Scene::loadScene(): Error reading scene resource list");
-			return FAILURE;
+		if (loadSceneResourceList(_sceneDescription.resListRN) != SUCCESS) {
+			error("Scene::loadScene(): Error reading scene resource list");
 		}
 	} else {
 		debug(0, "Loading memory scene resource.");
@@ -516,18 +444,16 @@
 		result = RSC_LoadResource(_sceneContext, _resList[i].res_number,
 								&_resList[i].res_data, &_resList[i].res_data_len);
 		if (result != SUCCESS) {
-			warning("Scene::loadScene(): Error: Allocation failure loading scene resource list");
-			return FAILURE;
+			error("Scene::loadScene(): Error: Allocation failure loading scene resource list");
 		}
 	}
 
 	// Process resources from scene resource list
 	if (processSceneResources() != SUCCESS) {
-		warning("Scene::loadScene(): Error loading scene resources");
-		return FAILURE;
+		error("Scene::loadScene(): Error loading scene resources");
 	}
 
-	if (_desc.flags & kSceneFlagISO) {
+	if (_sceneDescription.flags & kSceneFlagISO) {
 		_outsetSceneNumber = _sceneNumber;
 	} else {
 		if (!(_bg.w < _vm->getDisplayWidth() || _bg.h < _vm->getSceneHeight()))
@@ -537,7 +463,8 @@
 	_sceneLoaded = true;
 	
 	q_event = NULL;
-	if (fadeType == SCENE_FADE || fadeType == SCENE_FADE_NO_INTERFACE) {
+	if (loadSceneParams->transitionType == kTransitionFade || 
+		loadSceneParams->transitionType == kTransitionFadeNoInterface) {
 
 		_vm->_interface->rememberMode();
 		_vm->_interface->setMode(kPanelFade, true);
@@ -552,7 +479,7 @@
 		event.data = current_pal;
 		q_event = _vm->_events->queue(&event);
 
-		if (fadeType != SCENE_FADE_NO_INTERFACE) {
+		if (loadSceneParams->transitionType != kTransitionFadeNoInterface) {
 			// Activate user interface
 			event.type = IMMEDIATE_EVENT;
 			event.code = INTERFACE_EVENT;
@@ -581,22 +508,23 @@
 	}
 
 	// Start the scene pre script, but stay with black palette
-	if (_desc.startScriptEntrypointNumber > 0) {
+	if (_sceneDescription.startScriptEntrypointNumber > 0) {
 		event.type = ONESHOT_EVENT;
 		event.code = SCRIPT_EVENT;
 		event.op = EVENT_EXEC_BLOCKING;
 		event.time = 0;
-		event.param = _desc.scriptModuleNumber;
-		event.param2 = _desc.startScriptEntrypointNumber;
+		event.param = _sceneDescription.scriptModuleNumber;
+		event.param2 = _sceneDescription.startScriptEntrypointNumber;
 		event.param3 = 0;		// Action
 		event.param4 = _sceneNumber;	// Object
-		event.param5 = actorsEntrance;	// With Object
+		event.param5 = loadSceneParams->actorsEntrance;	// With Object
 		event.param6 = 0;		// Actor
 
 		q_event = _vm->_events->chain(q_event, &event);
 	}
 
-	if (fadeType == SCENE_FADE || fadeType == SCENE_FADE_NO_INTERFACE) {
+	if (loadSceneParams->transitionType == kTransitionFade || 
+		loadSceneParams->transitionType == kTransitionFadeNoInterface) {
 		// Fade in from black to the scene background palette
 		event.type = IMMEDIATE_EVENT;
 		event.code = PAL_EVENT;
@@ -608,9 +536,8 @@
 		q_event = _vm->_events->chain(q_event, &event);
 	}
 
-	getInfo(&scene_info);
 
-	if (scene_proc == NULL) {
+	if (loadSceneParams->sceneProc == NULL) {
 		if (!_inGame) {
 			_inGame = true;
 			_vm->_interface->setMode(kPanelInventory);
@@ -619,10 +546,10 @@
 		_vm->_sound->stopVoice();
 		_vm->_sound->stopSound();
 
-		if (_desc.musicRN >= 0) {
+		if (_sceneDescription.musicRN >= 0) {
 			event.type = ONESHOT_EVENT;
 			event.code = MUSIC_EVENT;
-			event.param = _desc.musicRN;
+			event.param = _sceneDescription.musicRN;
 			event.param2 = MUSIC_DEFAULT;
 			event.op = EVENT_PLAY;
 			event.time = 0;
@@ -669,16 +596,16 @@
 		_vm->_events->chain(q_event, &event);
 
 		// Start the scene main script
-		if (_desc.sceneScriptEntrypointNumber > 0) {
+		if (_sceneDescription.sceneScriptEntrypointNumber > 0) {
 			event.type = ONESHOT_EVENT;
 			event.code = SCRIPT_EVENT;
 			event.op = EVENT_EXEC_NONBLOCKING;
 			event.time = 0;
-			event.param = _desc.scriptModuleNumber;
-			event.param2 = _desc.sceneScriptEntrypointNumber;
+			event.param = _sceneDescription.scriptModuleNumber;
+			event.param2 = _sceneDescription.sceneScriptEntrypointNumber;
 			event.param3 = kVerbEnter;		// Action
 			event.param4 = _sceneNumber;	// Object
-			event.param5 = actorsEntrance;		// With Object
+			event.param5 = loadSceneParams->actorsEntrance;		// With Object
 			event.param6 = 0;		// Actor
 
 			_vm->_events->queue(&event);
@@ -687,20 +614,19 @@
 		debug(0, "Scene started");
 
 	} else {
-		scene_proc(SCENE_BEGIN, &scene_info, this);
+		loadSceneParams->sceneProc(SCENE_BEGIN, this);
 	}
 
 
 
-	// We probably don't want "followers" to go into scene -1. At the very
+	// We probably don't want "followers" to go into scene -1 , 0. At the very
 	// least we don't want garbage to be drawn that early in the ITE intro.
-	if (_sceneNumber != -1)
-		_vm->_actor->updateActorsScene(actorsEntrance);
+	if (_sceneNumber > 0)
+		_vm->_actor->updateActorsScene(loadSceneParams->actorsEntrance);
 
-	if (_desc.flags & kSceneFlagShowCursor)
+	if (_sceneDescription.flags & kSceneFlagShowCursor)
 		_vm->_interface->activate();
 
-	return SUCCESS;
 }
 
 int Scene::loadSceneDescriptor(uint32 res_number) {
@@ -716,14 +642,14 @@
 
 	MemoryReadStreamEndian readS(scene_desc_data, scene_desc_len, IS_BIG_ENDIAN);
 
-	_desc.flags = readS.readSint16();
-	_desc.resListRN = readS.readSint16();
-	_desc.endSlope = readS.readSint16();
-	_desc.beginSlope = readS.readSint16();
-	_desc.scriptModuleNumber = readS.readUint16();
-	_desc.sceneScriptEntrypointNumber = readS.readUint16();
-	_desc.startScriptEntrypointNumber = readS.readUint16();
-	_desc.musicRN = readS.readSint16();
+	_sceneDescription.flags = readS.readSint16();
+	_sceneDescription.resListRN = readS.readSint16();
+	_sceneDescription.endSlope = readS.readSint16();
+	_sceneDescription.beginSlope = readS.readSint16();
+	_sceneDescription.scriptModuleNumber = readS.readUint16();
+	_sceneDescription.sceneScriptEntrypointNumber = readS.readUint16();
+	_sceneDescription.startScriptEntrypointNumber = readS.readUint16();
+	_sceneDescription.musicRN = readS.readSint16();
 
 	RSC_FreeResource(scene_desc_data);
 
@@ -828,7 +754,7 @@
 			_actionMap->load(res_data, res_data_len);
 			break;
 		case SAGA_ISO_IMAGES:
-			if (!(_desc.flags & kSceneFlagISO)) {
+			if (!(_sceneDescription.flags & kSceneFlagISO)) {
 				error("Scene::ProcessSceneResources(): not Iso mode");
 			}
 
@@ -837,7 +763,7 @@
 			_vm->_isoMap->loadImages(res_data, res_data_len);
 			break;
 		case SAGA_ISO_MAP:
-			if (!(_desc.flags & kSceneFlagISO)) {
+			if (!(_sceneDescription.flags & kSceneFlagISO)) {
 				error("Scene::ProcessSceneResources(): not Iso mode");
 			}
 
@@ -846,7 +772,7 @@
 			_vm->_isoMap->loadMap(res_data, res_data_len);
 			break;
 		case SAGA_ISO_PLATFORMS:
-			if (!(_desc.flags & kSceneFlagISO)) {
+			if (!(_sceneDescription.flags & kSceneFlagISO)) {
 				error("Scene::ProcessSceneResources(): not Iso mode");
 			}
 
@@ -855,7 +781,7 @@
 			_vm->_isoMap->loadPlatforms(res_data, res_data_len);
 			break;
 		case SAGA_ISO_METATILES:
-			if (!(_desc.flags & kSceneFlagISO)) {
+			if (!(_sceneDescription.flags & kSceneFlagISO)) {
 				error("Scene::ProcessSceneResources(): not Iso mode");
 			}
 
@@ -891,7 +817,7 @@
 			}
 			break;
 		case SAGA_ISO_MULTI:
-			if (!(_desc.flags & kSceneFlagISO)) {
+			if (!(_sceneDescription.flags & kSceneFlagISO)) {
 				error("Scene::ProcessSceneResources(): not Iso mode");
 			}
 
@@ -926,7 +852,7 @@
 
 	_vm->_render->getBufferInfo(&buf_info);
 
-	if (_desc.flags & kSceneFlagISO) {
+	if (_sceneDescription.flags & kSceneFlagISO) {
 		_vm->_isoMap->adjustScroll(false);
 		_vm->_isoMap->draw(dst_s);
 	} else {
@@ -937,22 +863,16 @@
 	return SUCCESS;
 }
 
-int Scene::endScene() {
-	SCENE_INFO scene_info;
-
-	assert(_initialized);
+void Scene::endScene() {
 
 	if (!_sceneLoaded) {
-		warning("Scene::endScene(): No scene to end");
-		return -1;
+		error("Scene::endScene(): No scene to end");
 	}
 
 	debug(0, "Ending scene...");
 
 	if (_sceneProc != NULL) {
-		getInfo(&scene_info);
-
-		_sceneProc(SCENE_END, &scene_info, this);
+		_sceneProc(SCENE_END, this);
 	}
 
 	//
@@ -978,7 +898,7 @@
 	}
 
 	// Free scene resource list
-	if (_loadDesc) {
+	if (_loadDescription) {
 
 		free(_resList);
 	}
@@ -1003,7 +923,6 @@
 
 	_sceneLoaded = false;
 
-	return SUCCESS;
 }
 
 void Scene::cmdSceneChange(int argc, const char **argv) {
@@ -1018,11 +937,7 @@
 
 	clearSceneQueue();
 
-	if (changeScene(scene_num, 0) == SUCCESS) {
-		_vm->_console->DebugPrintf("Scene changed.\n");
-	} else {
-		_vm->_console->DebugPrintf("Couldn't change scene!\n");
-	}
+	changeScene(scene_num, 0, kTransitionNoFade);
 }
 
 void Scene::cmdSceneInfo() {
@@ -1031,14 +946,14 @@
 	_vm->_console->DebugPrintf(fmt, "Scene number:", _sceneNumber);
 	_vm->_console->DebugPrintf(fmt, "Descriptor ResourceId:", _sceneResourceId);
 	_vm->_console->DebugPrintf("-------------------------\n");
-	_vm->_console->DebugPrintf(fmt, "Flags:", _desc.flags);
-	_vm->_console->DebugPrintf(fmt, "Resource list R#:", _desc.resListRN);
-	_vm->_console->DebugPrintf(fmt, "End slope:", _desc.endSlope);
-	_vm->_console->DebugPrintf(fmt, "Begin slope:", _desc.beginSlope);
-	_vm->_console->DebugPrintf(fmt, "scriptModuleNumber:", _desc.scriptModuleNumber);
-	_vm->_console->DebugPrintf(fmt, "sceneScriptEntrypointNumber:", _desc.sceneScriptEntrypointNumber);
-	_vm->_console->DebugPrintf(fmt, "startScriptEntrypointNumber:", _desc.startScriptEntrypointNumber);
-	_vm->_console->DebugPrintf(fmt, "Music R#", _desc.musicRN);
+	_vm->_console->DebugPrintf(fmt, "Flags:", _sceneDescription.flags);
+	_vm->_console->DebugPrintf(fmt, "Resource list R#:", _sceneDescription.resListRN);
+	_vm->_console->DebugPrintf(fmt, "End slope:", _sceneDescription.endSlope);
+	_vm->_console->DebugPrintf(fmt, "Begin slope:", _sceneDescription.beginSlope);
+	_vm->_console->DebugPrintf(fmt, "scriptModuleNumber:", _sceneDescription.scriptModuleNumber);
+	_vm->_console->DebugPrintf(fmt, "sceneScriptEntrypointNumber:", _sceneDescription.sceneScriptEntrypointNumber);
+	_vm->_console->DebugPrintf(fmt, "startScriptEntrypointNumber:", _sceneDescription.startScriptEntrypointNumber);
+	_vm->_console->DebugPrintf(fmt, "Music R#", _sceneDescription.musicRN);
 }
 
 

Index: scene.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/scene.h,v
retrieving revision 1.50
retrieving revision 1.51
diff -u -d -r1.50 -r1.51
--- scene.h	21 Apr 2005 01:30:07 -0000	1.50
+++ scene.h	8 May 2005 14:04:06 -0000	1.51
@@ -53,18 +53,8 @@
 	size_t bg_buflen;
 };
 
-struct SCENE_INFO {
-	SCENE_BGINFO bg_info;
-	TEXTLIST *text_list;
-};
+typedef int (SceneProc) (int, void *);
 
-typedef int (SCENE_PROC) (int, SCENE_INFO *, void *);
-
-enum SCENE_LOAD_FLAGS {
-	BY_RESOURCE = 0,
-	BY_SCENE,
-	BY_DESC
-};
 
 enum SCENE_PROC_PARAMS {
 	SCENE_BEGIN = 0,
@@ -166,21 +156,28 @@
 typedef SortedList<SCENE_ANIMINFO> SceneAnimInfoList;
 
 enum SceneTransitionType {
-	SCENE_NOFADE = 0,
-	SCENE_FADE = 1,
-	SCENE_FADE_NO_INTERFACE = 2
+	kTransitionNoFade,
+	kTransitionFade,
+	kTransitionFadeNoInterface
 };
 
-struct SCENE_QUEUE {
-	uint32 scene_n;
+enum SceneLoadFlags {
+	kLoadByResourceId,
+	kLoadBySceneNumber,
+	kLoadByDescription
+};
+
+struct LoadSceneParams {
+	uint32 sceneDescriptor;
+	SceneLoadFlags loadFlag;
 	SceneDescription* sceneDescription;
-	int load_flag;
-	SCENE_PROC *scene_proc;
-	int scene_skiptarget;
-	int fadeType;
+	SceneProc *sceneProc;
+	bool sceneSkipTarget;
+	SceneTransitionType transitionType;
+	int actorsEntrance;
 };
 
-typedef Common::List<SCENE_QUEUE> SceneQueueList;
+typedef Common::List<LoadSceneParams> SceneQueueList;
 
 ///// IHNM-specific stuff
 #define IHNM_PALFADE_TIME    1000
@@ -227,14 +224,17 @@
 
 	void cmdSceneChange(int argc, const char **argv);
 
-	int startScene();
-	int nextScene();
-	int skipScene();
-	int endScene();
-	int queueScene(SCENE_QUEUE *scene_queue);
+	void startScene();
+	void nextScene();
+	void skipScene();
+	void endScene();
+	void queueScene(LoadSceneParams *sceneQueue) {
+		_sceneQueue.push_back(*sceneQueue);
+	}
+
 	int draw(SURFACE *);
-	int getFlags() const { return _desc.flags; }
-	int getScriptModuleNumber() const { return _desc.scriptModuleNumber; }
+	int getFlags() const { return _sceneDescription.flags; }
+	int getScriptModuleNumber() const { return _sceneDescription.scriptModuleNumber; }
 	bool isInDemo() { return !_inGame; }
 	
 	void getBGMaskInfo(int &width, int &height, byte *&buffer, size_t &bufferLength);
@@ -250,22 +250,28 @@
 
 	int getBGInfo(SCENE_BGINFO *bginfo);
 	int getBGPal(PALENTRY **pal);
-	int getInfo(SCENE_INFO *si);
 	void getSlopes(int &beginSlope, int &endSlope);
 
-	int clearSceneQueue(void);
-	int changeScene(int sceneNumber, int actorsEntrance, int fadeIn = SCENE_NOFADE);
+	void clearSceneQueue(void) {
+		_sceneQueue.clear();
+	}
+	void changeScene(uint16 sceneNumber, int actorsEntrance, SceneTransitionType transitionType);
 
 	bool initialized() { return _initialized; }
 
 
-	int getSceneLUT(int num);
+	int getSceneResourceId(int sceneNumber) {
+		if ((sceneNumber < 0) || (sceneNumber >= _sceneMax)) {
+			error("getSceneResourceId: wrong sceneNumber");
+		}
+		return _sceneLUT[sceneNumber];
+	}
 	int currentSceneNumber() const { return _sceneNumber; }
 	int getOutsetSceneNumber() const { return _outsetSceneNumber; }
 	int currentSceneResourceId() const { return _sceneResourceId; }
 
  private:
-	int loadScene(int scene, int load_flag, SCENE_PROC scene_proc, SceneDescription *, int fadeIn, int actorsEntrance);
+	void loadScene(LoadSceneParams *loadSceneParams);
 	int loadSceneDescriptor(uint32 res_number);
 	int loadSceneResourceList(uint32 res_number);
 	void loadSceneEntryList(const byte* resourcePointer, size_t resourceLength);
@@ -286,14 +292,13 @@
 	int _outsetSceneNumber;
 	int _sceneResourceId;
 	bool _inGame;
-	bool _loadDesc;
-	SceneDescription _desc;
+	bool _loadDescription;
+	SceneDescription _sceneDescription;
 	int _resListEntries;
 	SCENE_RESLIST *_resList;
 	int _animEntries;
 	SceneAnimInfoList _animList;
-	SCENE_PROC *_sceneProc;
-	TEXTLIST *_textList;
+	SceneProc *_sceneProc;
 	SCENE_IMAGE _bg;
 	SCENE_IMAGE _bgMask;
 	
@@ -305,46 +310,47 @@
 	ObjectMap *_objectMap;
 	SceneEntryList _entryList;
 	StringsTable _sceneStrings;
+	TEXTLIST *_textList;
 
  private:
 	int IHNMStartProc();
 	int ITEStartProc();
 
  public:
-	static int SC_IHNMIntroMovieProc1(int param, SCENE_INFO *scene_info, void *refCon);
-	static int SC_IHNMIntroMovieProc2(int param, SCENE_INFO *scene_info, void *refCon);
-	static int SC_IHNMIntroMovieProc3(int param, SCENE_INFO *scene_info, void *refCon);
-	static int SC_IHNMHateProc(int param, SCENE_INFO *scene_info, void *refCon);
+	static int SC_IHNMIntroMovieProc1(int param, void *refCon);
+	static int SC_IHNMIntroMovieProc2(int param, void *refCon);
+	static int SC_IHNMIntroMovieProc3(int param, void *refCon);
+	static int SC_IHNMHateProc(int param, void *refCon);
 
  private:
-	int IHNMIntroMovieProc1(int param, SCENE_INFO *scene_info);
-	int IHNMIntroMovieProc2(int param, SCENE_INFO *scene_info);
-	int IHNMIntroMovieProc3(int param, SCENE_INFO *scene_info);
-	int IHNMHateProc(int param, SCENE_INFO *scene_info);
+	int IHNMIntroMovieProc1(int param);
+	int IHNMIntroMovieProc2(int param);
+	int IHNMIntroMovieProc3(int param);
+	int IHNMHateProc(int param);
 
  public:
-	static int SC_ITEIntroAnimProc(int param, SCENE_INFO *scene_info, void *refCon);
-	static int SC_ITEIntroCave1Proc(int param, SCENE_INFO *scene_info, void *refCon);
-	static int SC_ITEIntroCave2Proc(int param, SCENE_INFO *scene_info, void *refCon);
-	static int SC_ITEIntroCave3Proc(int param, SCENE_INFO *scene_info, void *refCon);
-	static int SC_ITEIntroCave4Proc(int param, SCENE_INFO *scene_info, void *refCon);
-	static int SC_ITEIntroValleyProc(int param, SCENE_INFO *scene_info, void *refCon);
-	static int SC_ITEIntroTreeHouseProc(int param, SCENE_INFO *scene_info, void *refCon);
-	static int SC_ITEIntroFairePathProc(int param, SCENE_INFO *scene_info, void *refCon);
-	static int SC_ITEIntroFaireTentProc(int param, SCENE_INFO *scene_info, void *refCon);
+	static int SC_ITEIntroAnimProc(int param, void *refCon);
+	static int SC_ITEIntroCave1Proc(int param, void *refCon);
+	static int SC_ITEIntroCave2Proc(int param, void *refCon);
+	static int SC_ITEIntroCave3Proc(int param, void *refCon);
+	static int SC_ITEIntroCave4Proc(int param, void *refCon);
+	static int SC_ITEIntroValleyProc(int param, void *refCon);
+	static int SC_ITEIntroTreeHouseProc(int param, void *refCon);
+	static int SC_ITEIntroFairePathProc(int param, void *refCon);
+	static int SC_ITEIntroFaireTentProc(int param, void *refCon);
 
  private:
-	EVENT *ITEQueueDialogue(EVENT *q_event, SCENE_INFO *scene_info, int n_dialogues, const INTRO_DIALOGUE dialogue[]);
-	EVENT *ITEQueueCredits(SCENE_INFO *scene_info, int delta_time, int duration, int n_credits, const INTRO_CREDIT credits[]);
-	int ITEIntroAnimProc(int param, SCENE_INFO *scene_info);
-	int ITEIntroCave1Proc(int param, SCENE_INFO *scene_info);
-	int ITEIntroCave2Proc(int param, SCENE_INFO *scene_info);
-	int ITEIntroCave3Proc(int param, SCENE_INFO *scene_info);
-	int ITEIntroCave4Proc(int param, SCENE_INFO *scene_info);
-	int ITEIntroValleyProc(int param, SCENE_INFO *scene_info);
-	int ITEIntroTreeHouseProc(int param, SCENE_INFO *scene_info);
-	int ITEIntroFairePathProc(int param, SCENE_INFO *scene_info);
-	int ITEIntroFaireTentProc(int param, SCENE_INFO *scene_info);
+	EVENT *ITEQueueDialogue(EVENT *q_event, int n_dialogues, const INTRO_DIALOGUE dialogue[]);
+	EVENT *ITEQueueCredits(int delta_time, int duration, int n_credits, const INTRO_CREDIT credits[]);
+	int ITEIntroAnimProc(int param);
+	int ITEIntroCave1Proc(int param);
+	int ITEIntroCave2Proc(int param);
+	int ITEIntroCave3Proc(int param);
+	int ITEIntroCave4Proc(int param);
+	int ITEIntroValleyProc(int param);
+	int ITEIntroTreeHouseProc(int param);
+	int ITEIntroFairePathProc(int param);
+	int ITEIntroFaireTentProc(int param);
 
 };
 

Index: sdebug.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/sdebug.cpp,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -d -r1.28 -r1.29
--- sdebug.cpp	22 Jan 2005 14:10:14 -0000	1.28
+++ sdebug.cpp	8 May 2005 14:04:06 -0000	1.29
@@ -45,14 +45,11 @@
 //	int op_offset;
 	int n_switch;
 	int i;
-	SCENE_INFO si;
-
-	_vm->_scene->getInfo(&si);
 
 	disp_buf[0] = 0;
 
 	if (_dbg_txtentry != NULL) {
-		_vm->textDeleteEntry(si.text_list, _dbg_txtentry);
+		_vm->textDeleteEntry(_vm->_scene->_textList, _dbg_txtentry);
 		_dbg_txtentry = NULL;
 	}
 
@@ -469,7 +466,7 @@
 		break;
 	}
 
-	_dbg_txtentry = _vm->textAddEntry(si.text_list, &tl_e);
+	_dbg_txtentry = _vm->textAddEntry(_vm->_scene->_textList, &tl_e);
 	_vm->textSetDisplay(_dbg_txtentry, 1);
 
 	return SUCCESS;

Index: sfuncs.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/sfuncs.cpp,v
retrieving revision 1.107
retrieving revision 1.108
diff -u -d -r1.107 -r1.108
--- sfuncs.cpp	24 Apr 2005 15:17:38 -0000	1.107
+++ sfuncs.cpp	8 May 2005 14:04:06 -0000	1.108
@@ -512,7 +512,7 @@
 		}
 	}
 
-	_vm->_scene->changeScene(sceneNumber, entrance, (sceneNumber == RID_ITE_ENDCREDIT_SCENE_1) ? SCENE_FADE : SCENE_NOFADE);
+	_vm->_scene->changeScene(sceneNumber, entrance, (sceneNumber == RID_ITE_ENDCREDIT_SCENE_1) ? kTransitionFade : kTransitionNoFade);
 
 	//TODO: placard stuff
 	_pendingVerb = kVerbNone;
@@ -718,10 +718,11 @@
 }
 
 // Script function #31 (0x21)
+// Param1: sceneNumber
 void Script::sfSceneEq(SCRIPTFUNC_PARAMS) {
-	int16 param = thread->pop();
+	int16 sceneNumber = thread->pop();
 
-	if (_vm->_scene->getSceneLUT(param) == _vm->_scene->currentSceneNumber())
+	if (_vm->_scene->getSceneResourceId(sceneNumber) == _vm->_scene->currentSceneResourceId())
 		thread->_returnValue = 1;
 	else 
 		thread->_returnValue = 0;
@@ -1199,9 +1200,6 @@
 	// but it's close enough for now at least.
 
 	TEXTLIST_ENTRY text_entry;
-	SCENE_INFO scene_info;
-
-	_vm->_scene->getInfo(&scene_info);
 
 	text_entry.color = kITEColorBrightWhite;
 	text_entry.effect_color = kITEColorBlack;
@@ -1211,7 +1209,7 @@
 	text_entry.flags = FONT_OUTLINE | FONT_CENTERED;
 	text_entry.string = thread->_strings->getString(stringId);
 
-	placardTextEntry = _vm->textAddEntry(scene_info.text_list, &text_entry);
+	placardTextEntry = _vm->textAddEntry(_vm->_scene->_textList, &text_entry);
 
 	event.type = ONESHOT_EVENT;
 	event.code = TEXT_EVENT;





More information about the Scummvm-git-logs mailing list