[Scummvm-cvs-logs] SF.net SVN: scummvm: [30995] scummvm/trunk/engines/drascula

aquadran at users.sourceforge.net aquadran at users.sourceforge.net
Fri Feb 29 01:04:44 CET 2008


Revision: 30995
          http://scummvm.svn.sourceforge.net/scummvm/?rev=30995&view=rev
Author:   aquadran
Date:     2008-02-28 16:04:43 -0800 (Thu, 28 Feb 2008)

Log Message:
-----------
fixed restore savegame from different part of game

Modified Paths:
--------------
    scummvm/trunk/engines/drascula/drascula.cpp
    scummvm/trunk/engines/drascula/drascula.h

Modified: scummvm/trunk/engines/drascula/drascula.cpp
===================================================================
--- scummvm/trunk/engines/drascula/drascula.cpp	2008-02-28 22:53:51 UTC (rev 30994)
+++ scummvm/trunk/engines/drascula/drascula.cpp	2008-02-29 00:04:43 UTC (rev 30995)
@@ -126,6 +126,7 @@
 
 int DrasculaEngine::go() {
 	num_ejec = 0;
+	hay_que_load = 0;
 
 	for (;;) {
 		VGA = (byte *)malloc(320 * 200);
@@ -152,7 +153,6 @@
 		cont_sv = 0;
 		term_int = 0;
 		con_voces = 1;
-		hay_que_load = 0;
 		corta_musica = 0;
 		hay_seleccion = 0;
 		Leng = 0;
@@ -166,8 +166,11 @@
 		ald = NULL;
 
 		asigna_memoria();
-		carga_info();
 
+		hay_sb = 1;
+		con_voces = 0;
+		hay_seleccion = 0;
+
 		num_ejec++;
 
 		if (num_ejec != 6) {
@@ -300,12 +303,6 @@
 	free(dir_hare_frente);
 }
 
-void DrasculaEngine::carga_info() {
-	hay_sb = 1;
-	con_voces = 0;
-	hay_que_load = 0;
-}
-
 void DrasculaEngine::lee_dibujos(const char *NamePcc) {
 	unsigned int con, x = 0;
 	unsigned int fExit = 0;
@@ -528,9 +525,11 @@
 		descomprime_dibujo(dir_dibujo2, 1);
 		sentido_hare = 1;
 		obj_saliendo = 104;
-		if (hay_que_load != 0)
-			para_cargar(nom_partida);
-		else {
+		if (hay_que_load != 0) {
+			if (!para_cargar(nom_partida)) {
+				return true;
+			}
+		} else {
 			carga_escoba("62.ald");
 			hare_x = -20;
 			hare_y = 56;
@@ -543,8 +542,11 @@
 		obj_saliendo = 162;
 		if (hay_que_load == 0)
 			carga_escoba("14.ald");
-		else
-			para_cargar(nom_partida);
+		else {
+			if (!para_cargar(nom_partida)) {
+				return true;
+			}
+		}
 	} else if (num_ejec == 3) {
 		suma_objeto(28);
 		suma_objeto(11);
@@ -559,8 +561,11 @@
 		obj_saliendo = 99;
 		if (hay_que_load == 0)
 			carga_escoba("20.ald");
-		else
-			para_cargar(nom_partida);
+		else {
+			if (!para_cargar(nom_partida)) {
+				return true;
+			}
+		}
 	} else if (num_ejec == 4) {
 		suma_objeto(28);
 		suma_objeto(9);
@@ -573,8 +578,11 @@
 			sentido_hare = 0;
 			hare_x = 235;
 			hare_y = 164;
-		} else
-			para_cargar(nom_partida);
+		} else {
+			if (!para_cargar(nom_partida)) {
+				return true;
+			}
+		}
 	} else if (num_ejec == 5) {
 		suma_objeto(28);
 		suma_objeto(7);
@@ -590,8 +598,11 @@
 		obj_saliendo = 100;
 		if (hay_que_load == 0) {
 			carga_escoba("45.ald");
-		} else
-			para_cargar(nom_partida);
+		} else {
+			if (!para_cargar(nom_partida)) {
+				return true;
+			}
+		}
 	} else if (num_ejec == 6) {
 		suma_objeto(28);
 		suma_objeto(9);
@@ -601,8 +612,11 @@
 		obj_saliendo = 104;
 		if (hay_que_load == 0)
 			carga_escoba("58.ald");
-		else
-			para_cargar(nom_partida);
+		else {
+			if (!para_cargar(nom_partida)) {
+				return true;
+			}
+		}
 		if (hay_que_load == 0)
 			animacion_1_6();
 		else {
@@ -726,7 +740,8 @@
 		if (num_ejec != 3)
 			cont_sv = 0;
 	} else if (key == Common::KEYCODE_F10) {
-		saves();
+		if (!saves())
+			return true;
 		if (num_ejec != 3)
 			cont_sv = 0;
 	} else if (key == Common::KEYCODE_F8) {
@@ -748,9 +763,9 @@
 		if (num_ejec != 3)
 			cont_sv = 0;
 	} else if (key == Common::KEYCODE_DELETE) {
-		if (num_ejec == 4)
-			carga_partida("gsave00");
-		else
+//		if (num_ejec == 4) // FIXME
+//			carga_partida("gsave00");
+//		else
 			confirma_go();
 		if (num_ejec != 3)
 			cont_sv = 0;
@@ -1395,18 +1410,21 @@
 	hay_nombre = 0;
 }
 
-void DrasculaEngine::para_cargar(char nom_game[]) {
+bool DrasculaEngine::para_cargar(char nom_game[]) {
 	musica_antes = musica_room;
 	menu_scr = 0;
 	if (num_ejec != 1)
 		borra_pantalla();
-	carga_partida(nom_game);
+	if (!carga_partida(nom_game))
+		return false;
 	if (num_ejec == 2 || num_ejec == 3 || num_ejec == 5) {
 		delete ald;
 		ald = NULL;
 	}
 	carga_escoba(datos_actuales);
 	sin_verbo();
+
+	return true;
 }
 
 static char *getLine(Common::File *fp, char *buf, int len) {
@@ -2031,7 +2049,7 @@
 	espera_soltar();
 }
 
-void DrasculaEngine::saves() {
+bool DrasculaEngine::saves() {
 	char nombres[10][23];
 	char fichero[13];
 	int n, n2, num_sav = 0, y = 27;
@@ -2126,7 +2144,8 @@
 			}
 
 			if (x_raton > 125 && y_raton > 123 && x_raton < 199 && y_raton < 149 && hay_seleccion == 1) {
-				para_cargar(fichero);
+				if (!para_cargar(fichero))
+					return false;
 				break;
 			} else if (x_raton > 208 && y_raton > 123 && x_raton < 282 && y_raton < 149 && hay_seleccion == 1) {
 				para_grabar(fichero);
@@ -2156,6 +2175,8 @@
 	descomprime_dibujo(dir_dibujo1, MEDIA);
 	buffer_teclado();
 	hay_seleccion = 0;
+
+	return true;
 }
 
 void DrasculaEngine::print_abc(const char *dicho, int x_pantalla, int y_pantalla) {
@@ -2327,7 +2348,7 @@
 
 	if (key == Common::KEYCODE_DELETE) {
 		stopmusic();
-		carga_partida("gsave00");
+//		carga_partida("gsave00"); // FIXME
 	}
 }
 
@@ -3454,7 +3475,7 @@
 	actualiza_refresco();
 }
 
-void DrasculaEngine::carga_partida(const char *nom_game) {
+bool DrasculaEngine::carga_partida(const char *nom_game) {
 	int l, n_ejec2;
 	Common::InSaveFile *sav;
 
@@ -3465,8 +3486,9 @@
 	n_ejec2 = sav->readSint32LE();
 	if (n_ejec2 != num_ejec) {
 		strcpy(nom_partida, nom_game);
-		error("TODO");
-		salir_al_dos(n_ejec2);
+		num_ejec = n_ejec2 - 1;
+		hay_que_load = 1;
+		return false;
 	}
 	sav->read(datos_actuales, 20);
 	hare_x = sav->readSint32LE();
@@ -3483,6 +3505,8 @@
 
 	lleva_objeto = sav->readSint32LE();
 	objeto_que_lleva = sav->readSint32LE();
+
+	return true;
 }
 
 void DrasculaEngine::puertas_cerradas(int l) {

Modified: scummvm/trunk/engines/drascula/drascula.h
===================================================================
--- scummvm/trunk/engines/drascula/drascula.h	2008-02-28 22:53:51 UTC (rev 30994)
+++ scummvm/trunk/engines/drascula/drascula.h	2008-02-29 00:04:43 UTC (rev 30995)
@@ -356,7 +356,6 @@
 
 	void asigna_memoria();
 	void libera_memoria();
-	void carga_info();
 	void salir_al_dos(int r);
 
 	void lee_dibujos(const char *);
@@ -568,7 +567,7 @@
 
 
 	void sin_verbo();
-	void para_cargar(char[]);
+	bool para_cargar(char[]);
 	void carga_escoba(const char *);
 	void borra_pantalla();
 	void lleva_al_hare(int, int);
@@ -582,7 +581,7 @@
 	Common::KeyCode getscan();
 	void elige_verbo(int);
 	void mesa();
-	void saves();
+	bool saves();
 	void print_abc(const char *, int, int);
 	void delay(int ms);
 	void confirma_go();
@@ -624,7 +623,7 @@
 	void stopmusic();
 	int music_status();
 	void refresca_pantalla();
-	void carga_partida(const char *);
+	bool carga_partida(const char *);
 	void puertas_cerradas(int);
 	void animafin_sound_corte();
 	void color_hare();


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list