[Scummvm-cvs-logs] SF.net SVN: scummvm:[54389] scummvm/trunk/engines/hugo

strangerke at users.sourceforge.net strangerke at users.sourceforge.net
Sat Nov 20 00:49:06 CET 2010


Revision: 54389
          http://scummvm.svn.sourceforge.net/scummvm/?rev=54389&view=rev
Author:   strangerke
Date:     2010-11-19 23:49:04 +0000 (Fri, 19 Nov 2010)

Log Message:
-----------
HUGO: Start using endianness-safe read/write functions

Modified Paths:
--------------
    scummvm/trunk/engines/hugo/display.cpp
    scummvm/trunk/engines/hugo/file.cpp
    scummvm/trunk/engines/hugo/file.h
    scummvm/trunk/engines/hugo/game.h
    scummvm/trunk/engines/hugo/schedule_v1d.cpp
    scummvm/trunk/engines/hugo/schedule_v1w.cpp

Modified: scummvm/trunk/engines/hugo/display.cpp
===================================================================
--- scummvm/trunk/engines/hugo/display.cpp	2010-11-19 21:25:36 UTC (rev 54388)
+++ scummvm/trunk/engines/hugo/display.cpp	2010-11-19 23:49:04 UTC (rev 54389)
@@ -40,7 +40,6 @@
 
 namespace Hugo {
 
-#define NUM_COLORS  16              // Num colors to save in palette
 #define DMAX            16              // Size of add/restore rect lists
 #define BMAX                (DMAX * 2)  // Size of dirty rect blit list
 
@@ -126,15 +125,15 @@
 void Screen::savePal(Common::WriteStream *f) {
 	debugC(1, kDebugDisplay, "savePal");
 
-	warning("STUB: savePal()");
-	//fwrite(bminfo.bmiColors, sizeof(bminfo.bmiColors), 1, f);
+	for (int i = 0; i < _paletteSize; i++)
+		f->writeByte(_palette[i]);
 }
 
 void Screen::restorePal(Common::SeekableReadStream *f) {
 	debugC(1, kDebugDisplay, "restorePal");
 
-	warning("STUB: restorePal()");
-	//fread(bminfo.bmiColors, sizeof(bminfo.bmiColors), 1, f);
+	for (int i = 0; i < _paletteSize; i++)
+		_palette[i] = f->readByte();
 }
 
 

Modified: scummvm/trunk/engines/hugo/file.cpp
===================================================================
--- scummvm/trunk/engines/hugo/file.cpp	2010-11-19 21:25:36 UTC (rev 54388)
+++ scummvm/trunk/engines/hugo/file.cpp	2010-11-19 23:49:04 UTC (rev 54389)
@@ -285,11 +285,7 @@
 */
 bool FileManager::fileExists(char *filename) {
 	Common::File f;
-	if (f.open(filename)) {
-		f.close();
-		return true;
-	}
-	return false;
+	return(f.exists(filename));
 }
 
 /**
@@ -313,7 +309,7 @@
 	}
 
 	// Write version.  We can't restore from obsolete versions
-	out->write(&kSavegameVersion, sizeof(kSavegameVersion));
+	out->writeByte(kSavegameVersion);
 
 	// Save description of saved game
 	out->write(descrip, DESCRIPLEN);
@@ -323,26 +319,29 @@
 	const status_t &gameStatus = _vm->getGameStatus();
 
 	// Save whether hero image is swapped
-	out->write(&_vm->_heroImage, sizeof(_vm->_heroImage));
+	out->writeByte(_vm->_heroImage);
 
 	// Save score
-	int score = _vm->getScore();
-	out->write(&score, sizeof(score));
+	out->writeSint16BE(_vm->getScore());
 
 	// Save story mode
-	out->write(&gameStatus.storyModeFl, sizeof(gameStatus.storyModeFl));
+	out->writeByte((gameStatus.storyModeFl) ? 1 : 0);
 
 	// Save jumpexit mode
-	out->write(&gameStatus.jumpExitFl, sizeof(gameStatus.jumpExitFl));
+	out->writeByte((gameStatus.jumpExitFl) ? 1 : 0);
 
 	// Save gameover status
-	out->write(&gameStatus.gameOverFl, sizeof(gameStatus.gameOverFl));
+	out->writeByte((gameStatus.gameOverFl) ? 1 : 0);
 
 	// Save screen states
-	out->write(_vm->_screenStates, sizeof(*_vm->_screenStates) * _vm->_numScreens);
+	for (int i = 0; i < _vm->_numScreens; i++)
+		out->writeByte(_vm->_screenStates[i]);
 
 	// Save points table
-	out->write(_vm->_points, sizeof(point_t) * _vm->_numBonuses);
+	for (int i = 0; i < _vm->_numBonuses; i++) {
+		out->writeByte(_vm->_points[i].score);
+		out->writeByte((_vm->_points[i].scoredFl) ? 1 : 0);
+	}
 
 	// Now save current time and all current events in event queue
 	_vm->_scheduler->saveEvents(out);
@@ -351,7 +350,15 @@
 	_vm->_screen->savePal(out);
 
 	// Save maze status
-	out->write(&_maze, sizeof(maze_t));
+	out->writeByte((_maze.enabledFl) ? 1 : 0);
+	out->writeByte(_maze.size);
+	out->writeSint16BE(_maze.x1);
+	out->writeSint16BE(_maze.y1);
+	out->writeSint16BE(_maze.x2);
+	out->writeSint16BE(_maze.y2);
+	out->writeSint16BE(_maze.x3);
+	out->writeSint16BE(_maze.x4);
+	out->writeByte(_maze.firstScreenIndex);
 
 	out->finalize();
 
@@ -380,8 +387,7 @@
 		return;
 
 	// Check version, can't restore from different versions
-	int saveVersion;
-	in->read(&saveVersion, sizeof(saveVersion));
+	int saveVersion = in->readByte();
 	if (saveVersion != kSavegameVersion) {
 		error("Savegame of incompatible version");
 		return;
@@ -396,27 +402,30 @@
 
 	_vm->_object->restoreObjects(in);
 
-	in->read(&_vm->_heroImage, sizeof(_vm->_heroImage));
+	_vm->_heroImage = in->readByte();
 
 	// If hero swapped in saved game, swap it
-	int heroImg = _vm->_heroImage;
+	byte heroImg = _vm->_heroImage;
 	if (heroImg != HERO)
 		_vm->_object->swapImages(HERO, _vm->_heroImage);
 	_vm->_heroImage = heroImg;
 
 	status_t &gameStatus = _vm->getGameStatus();
 
-	int score;
-	in->read(&score, sizeof(score));
+	int score = in->readSint16LE();
 	_vm->setScore(score);
 
-	in->read(&gameStatus.storyModeFl, sizeof(gameStatus.storyModeFl));
-	in->read(&gameStatus.jumpExitFl, sizeof(gameStatus.jumpExitFl));
-	in->read(&gameStatus.gameOverFl, sizeof(gameStatus.gameOverFl));
-	in->read(_vm->_screenStates, sizeof(*_vm->_screenStates) * _vm->_numScreens);
+	gameStatus.storyModeFl = (in->readByte() == 1);
+	gameStatus.jumpExitFl = (in->readByte() == 1);
+	gameStatus.gameOverFl = (in->readByte() == 1);
+	for (int i = 0; i < _vm->_numScreens; i++)
+		_vm->_screenStates[i] = in->readByte();
 
 	// Restore points table
-	in->read(_vm->_points, sizeof(point_t) * _vm->_numBonuses);
+	for (int i = 0; i < _vm->_numBonuses; i++) {
+		_vm->_points[i].score = in->readByte();
+		_vm->_points[i].scoredFl = (in->readByte() == 1);
+	}
 
 	_vm->_object->restoreAllSeq();
 
@@ -427,7 +436,15 @@
 	_vm->_screen->restorePal(in);
 
 	// Restore maze status
-	in->read(&_maze, sizeof(maze_t));
+	_maze.enabledFl = (in->readByte() == 1);
+	_maze.size = in->readByte();
+	_maze.x1 = in->readSint16BE();
+	_maze.y1 = in->readSint16BE();
+	_maze.x2 = in->readSint16BE();
+	_maze.y2 = in->readSint16BE();
+	_maze.x3 = in->readSint16BE();
+	_maze.x4 = in->readSint16BE();
+	_maze.firstScreenIndex = in->readByte();
 
 	delete in;
 }

Modified: scummvm/trunk/engines/hugo/file.h
===================================================================
--- scummvm/trunk/engines/hugo/file.h	2010-11-19 21:25:36 UTC (rev 54388)
+++ scummvm/trunk/engines/hugo/file.h	2010-11-19 23:49:04 UTC (rev 54389)
@@ -41,7 +41,7 @@
 	byte   mfctr, vers, enc, bpx;
 	uint16  x1, y1, x2, y2;                         // bounding box
 	uint16  xres, yres;
-	byte   palette[48];                             // EGA color palette
+	byte   palette[3 * NUM_COLORS];                 // EGA color palette
 	byte   vmode, planes;
 	uint16 bytesPerLine;                            // Bytes per line
 	byte   fill2[60];

Modified: scummvm/trunk/engines/hugo/game.h
===================================================================
--- scummvm/trunk/engines/hugo/game.h	2010-11-19 21:25:36 UTC (rev 54388)
+++ scummvm/trunk/engines/hugo/game.h	2010-11-19 23:49:04 UTC (rev 54389)
@@ -106,6 +106,7 @@
 // Macros:
 #define TPS           ((_config.turboFl) ? TURBO_TPS : NORMAL_TPS)
 
+#define NUM_COLORS  16                              // Num colors to save in palette
 #define MAX_UIFS   32                               // Max possible uif items in hdr
 #define NUM_FONTS  3                                // Number of dib fonts
 #define FIRST_FONT U_FONT5

Modified: scummvm/trunk/engines/hugo/schedule_v1d.cpp
===================================================================
--- scummvm/trunk/engines/hugo/schedule_v1d.cpp	2010-11-19 21:25:36 UTC (rev 54388)
+++ scummvm/trunk/engines/hugo/schedule_v1d.cpp	2010-11-19 23:49:04 UTC (rev 54389)
@@ -157,10 +157,11 @@
 		break;
 	case PROMPT: {                                  // act3: Prompt user for key phrase
 		response = Utils::Box(BOX_PROMPT, "%s", _vm->_file->fetchString(action->a3.promptIndex));
+		strcpy(response, _vm->_file->fetchString(action->a3.promptIndex));
 		if (action->a3.encodedFl)
 			decodeString(response);
 
-		warning("STUB: doAction(act3), expecting answer %s", _vm->_file->fetchString(action->a3.responsePtr[0]));
+		warning("STUB: doAction(act3), expecting answer %s", response);
 
 		// TODO: The answer of the player is not handled currently! Once it'll be read in the messageBox, uncomment this block
 #if 0
@@ -350,11 +351,12 @@
 	int16 headIndex = (_headEvent == 0) ? -1 : _headEvent - _events;
 	int16 tailIndex = (_tailEvent == 0) ? -1 : _tailEvent - _events;
 
-	f->write(&curTime,   sizeof(curTime));
-	f->write(&freeIndex, sizeof(freeIndex));
-	f->write(&headIndex, sizeof(headIndex));
-	f->write(&tailIndex, sizeof(tailIndex));
+	f->writeUint32BE(curTime);
+	f->writeSint16BE(freeIndex);
+	f->writeSint16BE(headIndex);
+	f->writeSint16BE(tailIndex);
 	f->write(saveEventArr, sizeof(saveEventArr));
+	warning("TODO: serialize saveEventArr");
 }
 
 /**
@@ -369,10 +371,10 @@
 	int16    tailIndex;                             // Tail of list index
 	event_t  savedEvents[kMaxEvents];               // Convert event ptrs to indexes
 
-	f->read(&saveTime,  sizeof(saveTime));          // time of save
-	f->read(&freeIndex, sizeof(freeIndex));
-	f->read(&headIndex, sizeof(headIndex));
-	f->read(&tailIndex, sizeof(tailIndex));
+	saveTime = f->readUint32BE();                   // time of save
+	freeIndex = f->readSint16BE();
+	headIndex = f->readSint16BE();
+	tailIndex = f->readSint16BE();
 	f->read(savedEvents, sizeof(savedEvents));
 
 	event_t *wrkEvent;

Modified: scummvm/trunk/engines/hugo/schedule_v1w.cpp
===================================================================
--- scummvm/trunk/engines/hugo/schedule_v1w.cpp	2010-11-19 21:25:36 UTC (rev 54388)
+++ scummvm/trunk/engines/hugo/schedule_v1w.cpp	2010-11-19 23:49:04 UTC (rev 54389)
@@ -377,11 +377,12 @@
 	int16 headIndex = (_headEvent == 0) ? -1 : _headEvent - _events;
 	int16 tailIndex = (_tailEvent == 0) ? -1 : _tailEvent - _events;
 
-	f->write(&curTime,   sizeof(curTime));
-	f->write(&freeIndex, sizeof(freeIndex));
-	f->write(&headIndex, sizeof(headIndex));
-	f->write(&tailIndex, sizeof(tailIndex));
+	f->writeUint32BE(curTime);
+	f->writeSint16BE(freeIndex);
+	f->writeSint16BE(headIndex);
+	f->writeSint16BE(tailIndex);
 	f->write(saveEventArr, sizeof(saveEventArr));
+	warning("TODO: serialize saveEventArr");
 }
 
 /**
@@ -396,10 +397,11 @@
 	int16    tailIndex;                             // Tail of list index
 	event_t  savedEvents[kMaxEvents];               // Convert event ptrs to indexes
 
-	f->read(&saveTime,  sizeof(saveTime));          // time of save
-	f->read(&freeIndex, sizeof(freeIndex));
-	f->read(&headIndex, sizeof(headIndex));
-	f->read(&tailIndex, sizeof(tailIndex));
+	saveTime = f->readUint32BE();                   // time of save
+	freeIndex = f->readSint16BE();
+	headIndex = f->readSint16BE();
+	tailIndex = f->readSint16BE();
+
 	f->read(savedEvents, sizeof(savedEvents));
 
 	event_t *wrkEvent;


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