[Scummvm-cvs-logs] scummvm master -> dee719390c0bf6c966b99126f122c7a21e3b33a7

dreammaster dreammaster at scummvm.org
Sat Jul 27 03:58:09 CEST 2013


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
dee719390c HOPKINS: Move breakout highscore table to savegames, and fixes to display


Commit: dee719390c0bf6c966b99126f122c7a21e3b33a7
    https://github.com/scummvm/scummvm/commit/dee719390c0bf6c966b99126f122c7a21e3b33a7
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2013-07-26T18:57:02-07:00

Commit Message:
HOPKINS: Move breakout highscore table to savegames, and fixes to display

Changed paths:
    engines/hopkins/computer.cpp
    engines/hopkins/computer.h
    engines/hopkins/globals.cpp
    engines/hopkins/globals.h
    engines/hopkins/hopkins.cpp
    engines/hopkins/saveload.cpp
    engines/hopkins/saveload.h



diff --git a/engines/hopkins/computer.cpp b/engines/hopkins/computer.cpp
index f7b923b..82e0dd0 100644
--- a/engines/hopkins/computer.cpp
+++ b/engines/hopkins/computer.cpp
@@ -58,7 +58,7 @@ ComputerManager::ComputerManager(HopkinsEngine *vm) {
 	_minBreakoutMoveSpeed = 0;
 	_maxBreakoutMoveSpeed = 0;
 	_lastBreakoutMoveSpeed = 0;
-	_breakoutHiscore = 0;
+	_lowestHiScore = 0;
 }
 
 /**
@@ -578,27 +578,28 @@ void ComputerManager::displayGamesSubMenu() {
  * Load Highscore from file
  */
 void ComputerManager::loadHiscore() {
-	byte *ptr = _vm->_globals->allocMemory(100);
-	_vm->_saveLoad->load("HISCORE.DAT", ptr);
+	const byte *ptr = _vm->_globals->_highScoreData;
 
 	for (int scoreIndex = 0; scoreIndex < 6; ++scoreIndex) {
-		for (int i = 0; i < 5; ++i) {
+		_score[scoreIndex]._name = "      ";
+		_score[scoreIndex]._score = "         ";
+
+		for (int i = 0; i < 6; ++i) {
 			char nextChar = ptr[(16 * scoreIndex) + i];
 			if (!nextChar)
 				nextChar = ' ';
-			_score[scoreIndex]._name += nextChar;
+			_score[scoreIndex]._name.setChar(nextChar, i);
 		}
 
 		for (int i = 0; i < 9; ++i) {
 			char nextChar = ptr[(scoreIndex * 16) + 6 + i];
 			if (!nextChar)
 				nextChar = '0';
-			_score[scoreIndex]._score += nextChar;
+			_score[scoreIndex]._score.setChar(nextChar, i);
 		}
 	}
 
-	_vm->_globals->freeMemory(ptr);
-	_breakoutHiscore = atol(_score[5]._score.c_str());
+	_lowestHiScore = atol(_score[5]._score.c_str());
 }
 
 /**
@@ -779,7 +780,7 @@ void ComputerManager::playBreakout() {
 			_vm->_events->mouseOn();
 			_vm->_objectsMan->removeSprite(0);
 			_vm->_objectsMan->removeSprite(1);
-			if (_breakoutScore > _breakoutHiscore)
+			if (_breakoutScore > _lowestHiScore)
 				getScoreName();
 			if (displayHiscores() != 1)
 				break;
@@ -823,11 +824,11 @@ int ComputerManager::displayHiscores() {
 		yp += 46;
 
 		// Display the characters of the name
-		for (int i = 0; i <= 5; i++)
+		for (int i = 0; i < 6; i++)
 			displayHiscoreLine(ptr, 9 * i + 69, yp, _score[scoreIndex]._name[i]);
 
 		// Display the digits of the score
-		for (int i = 0; i <= 8; i++)
+		for (int i = 0; i < 9; i++)
 			displayHiscoreLine(ptr, 9 * i + 199, yp, _score[scoreIndex]._score[i]);
 	}
 
@@ -864,6 +865,19 @@ void ComputerManager::getScoreName() {
 	_vm->_graphicsMan->setColorPercentage(254, 0, 0, 0);
 	byte *ptr = _vm->_fileIO->loadFile("ALPHA.SPR");
 	_vm->_graphicsMan->fadeInBreakout();
+	
+	// Figure out the line to put the new high score on
+	int scoreLine = 0;
+	while (scoreLine < 5 && _breakoutScore < atol(_score[scoreLine]._score.c_str()))
+		++scoreLine;
+
+	// If it's not the lasat line, move the lines down
+	for (int line = 5; line > scoreLine; --line) {
+		_score[line]._name = _score[line - 1]._name;
+		_score[line]._score = _score[line - 1]._score;
+	}
+
+	// Get the name for the new high score
 	for (int strPos = 0; strPos <= 4; strPos++) {
 		displayHiscoreLine(ptr, 9 * strPos + 140, 78, 1);
 
@@ -873,13 +887,15 @@ void ComputerManager::getScoreName() {
 		if ((curChar > '9') && (curChar < 'A'))
 			curChar = ' ';
 
-		_score[5]._name.setChar(curChar, strPos);
+		_score[scoreLine]._name.setChar(curChar, strPos);
 		displayHiscoreLine(ptr, 9 * strPos + 140, 78, curChar);
 
 		for (int idx = 0; idx < 12; ++idx)
 			_vm->_events->refreshScreenAndEvents();
 	}
-	_score[5]._score = "         ";
+
+	// Set up the new score
+	_score[scoreLine]._score = "         ";
 
 	char score[16];
 	sprintf(score, "%d", _breakoutScore);
@@ -888,8 +904,8 @@ void ComputerManager::getScoreName() {
 		++scoreLen;
 	while (score[scoreLen]);
 
-	for (int i = scoreLen, scorePos = 8; i >= 0; i--) {
-		_score[5]._score.setChar(score[i], scorePos--);
+	for (int i = scoreLen - 1, scorePos = 8; i >= 0; i--) {
+		_score[scoreLine]._score.setChar(score[i], scorePos--);
 	}
 	_vm->_graphicsMan->fadeOutBreakout();
 	_vm->_globals->freeMemory(ptr);
@@ -969,11 +985,11 @@ void ComputerManager::saveScore() {
 		}
 	}
 
-	byte *ptr = _vm->_globals->allocMemory(100);
+	byte *ptr = _vm->_globals->_highScoreData;
 	memset(ptr, 0, 99);
 	for (int scorePlaceIdx = 0; scorePlaceIdx <= 5; scorePlaceIdx++) {
 		int curBufPtr = 16 * scorePlaceIdx;
-		for (int namePos = 0; namePos <= 4; namePos++) {
+		for (int namePos = 0; namePos < 6; namePos++) {
 			char curChar = _score[scorePlace[scorePlaceIdx]]._name[namePos];
 			if (!curChar)
 				curChar = ' ';
@@ -990,9 +1006,6 @@ void ComputerManager::saveScore() {
 		};
 		ptr[curBufPtr + 15] = 0;
 	}
-
-	_vm->_saveLoad->saveFile("HISCORE.DAT", ptr, 100);
-	_vm->_globals->freeMemory(ptr);
 }
 
 /**
diff --git a/engines/hopkins/computer.h b/engines/hopkins/computer.h
index cdd653f..1771bba 100644
--- a/engines/hopkins/computer.h
+++ b/engines/hopkins/computer.h
@@ -63,7 +63,7 @@ private:
 	bool _ballUpFl;
 	int _breakoutLevelNbr;
 	int _padPositionX;
-	int _breakoutHiscore;
+	int _lowestHiScore;
 	int _minBreakoutMoveSpeed;
 	int _maxBreakoutMoveSpeed;
 	int _lastBreakoutMoveSpeed;
diff --git a/engines/hopkins/globals.cpp b/engines/hopkins/globals.cpp
index a9a0a81..97d6c40 100644
--- a/engines/hopkins/globals.cpp
+++ b/engines/hopkins/globals.cpp
@@ -70,6 +70,8 @@ Globals::Globals(HopkinsEngine *vm) {
 	for (int i = 0; i < 36; ++i)
 		_inventory[i] = 0;
 
+	Common::fill(&_highScoreData[0], &_highScoreData[100], 0);
+
 	// Initialize fields
 	_language = LANG_EN;
 
diff --git a/engines/hopkins/globals.h b/engines/hopkins/globals.h
index 94512c3d..a76323b 100644
--- a/engines/hopkins/globals.h
+++ b/engines/hopkins/globals.h
@@ -206,6 +206,7 @@ public:
 	Common::String _zoneFilename;
 	Common::String _textFilename;
 	byte *_levelSpriteBuf;
+	byte _highScoreData[100];
 
 	EventMode _eventMode;
 
diff --git a/engines/hopkins/hopkins.cpp b/engines/hopkins/hopkins.cpp
index 6d93019..96131f2 100644
--- a/engines/hopkins/hopkins.cpp
+++ b/engines/hopkins/hopkins.cpp
@@ -111,8 +111,6 @@ Common::Error HopkinsEngine::saveGameState(int slot, const Common::String &desc)
 }
 
 Common::Error HopkinsEngine::run() {
-	_saveLoad->initSaves();
-
 	_globals->setConfig();
 	_fileIO->initCensorship();
 	initializeSystem();
diff --git a/engines/hopkins/saveload.cpp b/engines/hopkins/saveload.cpp
index 98fb150..14b1662 100644
--- a/engines/hopkins/saveload.cpp
+++ b/engines/hopkins/saveload.cpp
@@ -60,14 +60,6 @@ bool SaveLoadManager::saveFile(const Common::String &file, const void *buf, size
 	return save(file, buf, n);
 }
 
-void SaveLoadManager::initSaves() {
-	Common::String dataFilename = "HISCORE.DAT";
-	byte data[100];
-	Common::fill(&data[0], &data[100], 0);
-
-	saveFile(dataFilename, data, 100);
-}
-
 void SaveLoadManager::load(const Common::String &file, byte *buf) {
 	Common::InSaveFile *savefile = g_system->getSavefileManager()->openForLoading(file);
 	if (savefile == NULL)
@@ -259,6 +251,10 @@ void SaveLoadManager::createThumbnail(Graphics::Surface *s) {
 }
 
 void SaveLoadManager::syncSavegameData(Common::Serializer &s, int version) {
+	if (version >= 3)
+		// Sync embedded Breakout game high score data
+		s.syncBytes(&_vm->_globals->_highScoreData[0], 100);
+
 	s.syncBytes(&_vm->_globals->_saveData->_data[0], 2050);
 	syncCharacterLocation(s, _vm->_globals->_saveData->_cloneHopkins);
 	syncCharacterLocation(s, _vm->_globals->_saveData->_realHopkins);
diff --git a/engines/hopkins/saveload.h b/engines/hopkins/saveload.h
index 6fee814..e4ee3aa 100644
--- a/engines/hopkins/saveload.h
+++ b/engines/hopkins/saveload.h
@@ -35,7 +35,7 @@ namespace Hopkins {
 
 class HopkinsEngine;
 
-#define HOPKINS_SAVEGAME_VERSION 2
+#define HOPKINS_SAVEGAME_VERSION 3
 
 struct hopkinsSavegameHeader {
 	uint8 _version;
@@ -56,7 +56,6 @@ private:
 public:
 	SaveLoadManager(HopkinsEngine *vm);
 
-	void initSaves();
 	bool save(const Common::String &file, const void *buf, size_t n);
 	bool saveFile(const Common::String &file, const void *buf, size_t n);
 	void load(const Common::String &file, byte *buf);






More information about the Scummvm-git-logs mailing list