[Scummvm-cvs-logs] CVS: scummvm/sword2 icons.cpp,1.34,1.35 sword2.h,1.53,1.54

Torbj?rn Andersson eriktorbjorn at users.sourceforge.net
Sun Apr 4 08:29:07 CEST 2004


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

Modified Files:
	icons.cpp sword2.h 
Log Message:
Cleanup.


Index: icons.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword2/icons.cpp,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -d -r1.34 -r1.35
--- icons.cpp	17 Mar 2004 09:03:14 -0000	1.34
+++ icons.cpp	4 Apr 2004 15:16:05 -0000	1.35
@@ -30,12 +30,7 @@
 int32 Logic::fnAddMenuObject(int32 *params) {
 	// params:	0 pointer to a MenuObject structure to copy down
 
-	assert(_vm->_totalTemp < TOTAL_engine_pockets);
-
-	// copy the structure to our in-the-engine list
-	memcpy(&_vm->_tempList[_vm->_totalTemp], _vm->_memory->intToPtr(params[0]), sizeof(MenuObject));
-	_vm->_totalTemp++;
-
+	_vm->addMenuObject((MenuObject *) _vm->_memory->intToPtr(params[0]));
 	return IR_CONT;
 }
 
@@ -59,160 +54,136 @@
 	return IR_CONT;
 }
 
-void Sword2Engine::buildMenu(void) {
-	// create and start the inventory menu - NOW AT THE BOTTOM OF THE
-	// SCREEN!
+void Sword2Engine::addMenuObject(MenuObject *obj) {
+	assert(_totalTemp < TOTAL_engine_pockets);
+	memcpy(&_tempList[_totalTemp], obj, sizeof(MenuObject));
+	_totalTemp++;
+}
 
-	uint32 null_pc = 0;
-	uint32 j, k;
-	bool icon_coloured;
-	uint8 *icon;
-	uint8 *head;
-	uint32 res = 0;
+/**
+ * Create and start the inventory (bottom) menu
+ */
 
-	// reset temp list which will be totally rebuilt
-	_totalTemp = 0;
+void Sword2Engine::buildMenu(void) {
+	uint32 i, j;
 
-	debug(5, "build top menu %d", _totalMasters);
+	// Clear the temporary inventory list, since we are going to build a
+	// new one from scratch.
 
-	// clear the temp list before building a new temp list in-case list
-	// gets smaller. check each master
+	for (i = 0; i < TOTAL_engine_pockets; i++)
+		_tempList[i].icon_resource = 0;
 
-	for (j = 0; j < TOTAL_engine_pockets; j++)
-		_tempList[j].icon_resource = 0;
+	_totalTemp = 0;
 
-	// Call menu builder script which will register all carried menu
-	// objects. Run the 'build_menu' script in the 'menu_master' object
+	// Run the 'build_menu' script in the 'menu_master' object. This will
+	// register all carried menu objects.
 
-	head = _resman->openResource(MENU_MASTER_OBJECT);
-	_logic->runScript((char *) head, (char *) head, &null_pc);
+	uint32 null_pc = 0;
+	char *menuScript = (char *) _resman->openResource(MENU_MASTER_OBJECT);
+	_logic->runScript(menuScript, menuScript, &null_pc);
 	_resman->closeResource(MENU_MASTER_OBJECT);
 
+	// Create a new master list based on the old master inventory list and
+	// the new temporary inventory list. The purpose of all this is, as
+	// far as I can tell, that the new list is ordered in the same way as
+	// the old list, with new objects added to the end of it.
+
 	// Compare new with old. Anything in master thats not in new gets
 	// removed from master - if found in new too, remove from temp
 
-	if (_totalMasters) {
-		// check each master
+	for (i = 0; i < _totalMasters; i++) {
+		bool found_in_temp = false;
 
-		for (j = 0; j < _totalMasters; j++) {
-			for (k = 0; k < TOTAL_engine_pockets; k++) {
-				res = 0;
-				// if master is in temp
-				if (_masterMenuList[j].icon_resource == _tempList[k].icon_resource) {
-					// kill it in the temp
-					_tempList[k].icon_resource = 0;
-					res = 1;
-					break;
-				}
-			}
-			if (!res) {
-				// otherwise not in temp so kill in main
-				_masterMenuList[j].icon_resource = 0;
-				debug(5, "Killed menu %d", j);
+		for (j = 0; j < TOTAL_engine_pockets; j++) {
+			if (_masterMenuList[i].icon_resource == _tempList[j].icon_resource) {
+				// We alread know about this object, so kill it
+				// in the temporary list.
+				_tempList[j].icon_resource = 0;
+				found_in_temp = true;
+				break;
 			}
 		}
+
+		if (!found_in_temp) {
+			// The object is in the master list, but not in the
+			// temporary list. The player must have lost the object
+			// since the last time we checked, so kill it in the
+			// master list.
+			_masterMenuList[i].icon_resource = 0;
+		}
 	}
 
-	// merge master downwards
+	// Eliminate blank entries from the master list.
 
 	_totalMasters = 0;
 
-	//check each master slot
-
-	for (j = 0; j < TOTAL_engine_pockets; j++) {
-		// not current end - meaning out over the end so move down
-		if (_masterMenuList[j].icon_resource && j != _totalMasters) {
-			memcpy(&_masterMenuList[_totalMasters++], &_masterMenuList[j], sizeof(MenuObject));
-
-			// moved down now so kill here
-			_masterMenuList[j].icon_resource = 0;
-		} else if (_masterMenuList[j].icon_resource) {
-			// skip full slots
+	for (i = 0; i < TOTAL_engine_pockets; i++) {
+		if (_masterMenuList[i].icon_resource) {
+			if (i != _totalMasters) {
+				memcpy(&_masterMenuList[_totalMasters], &_masterMenuList[i], sizeof(MenuObject));
+				_masterMenuList[i].icon_resource = 0;
+			}
 			_totalMasters++;
 		}
 	}
 
-	// add those new to menu still in temp but not yet in master to the
-	// end of the master
-
-	// check each master slot
+	// Add the new objects - i.e. the ones still in the temporary list but
+	// not yet in the master list - to the end of the master.
 
-	for (j = 0; j < TOTAL_engine_pockets; j++) {
-		if (_tempList[j].icon_resource) {
-			// here's a new temp
-			memcpy(&_masterMenuList[_totalMasters++], &_tempList[j], sizeof(MenuObject));
+	for (i = 0; i < TOTAL_engine_pockets; i++) {
+		if (_tempList[i].icon_resource) {
+			memcpy(&_masterMenuList[_totalMasters++], &_tempList[i], sizeof(MenuObject));
 		}
 	}
 
-	// init top menu from master list
-
-	for (j = 0; j < 15; j++) {
-		if (_masterMenuList[j].icon_resource) {
-			// 'res' is now the resource id of the icon
-			res = _masterMenuList[j].icon_resource;
+	// Initialise the menu from the master list.
 
-			if (_examiningMenuIcon) {
-				// WHEN AN ICON HAS BEEN RIGHT-CLICKED FOR
-				// 'EXAMINE' - SELECTION COLOURED, THE REST
-				// GREYED OUT
+	for (i = 0; i < 15; i++) {
+		uint32 res = _masterMenuList[i].icon_resource;
+		uint8 *icon = NULL;
 
-				// If this is the icon being examined, make
-				// it coloured. If not, grey this one out.
+		if (res) {
+			bool icon_coloured;
 
-				if (res == Logic::_scriptVars[OBJECT_HELD])
-					icon_coloured = true;
-				else
-					icon_coloured = false;
+			if (_examiningMenuIcon) {
+				// When examining an object, that object is
+				// coloured. The rest are greyed out.
+				icon_coloured = (res == Logic::_scriptVars[OBJECT_HELD]);
 			} else if (Logic::_scriptVars[COMBINE_BASE]) {
-				// WHEN ONE MENU OBJECT IS BEING USED WITH
-				// ANOTHER - BOTH TO BE COLOURED, THE REST
-				// GREYED OUT
-
-				// if this if either of the icons being
-				// combined...
-
-				if (res == Logic::_scriptVars[OBJECT_HELD] || res == Logic::_scriptVars[COMBINE_BASE])
-					icon_coloured = true;
-				else
-					icon_coloured = false;
+				// When combining two menu object (i.e. using
+				// one on another), both are coloured. The rest
+				// are greyed out.
+				icon_coloured = (res == Logic::_scriptVars[OBJECT_HELD] || res == Logic::_scriptVars[COMBINE_BASE]);
 			} else {
-				// NORMAL ICON SELECTION - SELECTION GREYED
-				// OUT, THE REST COLOURED
-
-				// If this is the selction, grey it out. If
-				// not, make it coloured.
-
-  				if (res == Logic::_scriptVars[OBJECT_HELD])
-					icon_coloured = false;
-				else
-					icon_coloured = true;
+				// If an object is selected but we are not yet
+				// doing anything with it, the selected object
+				// is greyed out. The rest are coloured.
+				icon_coloured = (res != Logic::_scriptVars[OBJECT_HELD]);
 			}
 
-			icon = _resman->openResource(_masterMenuList[j].icon_resource) + sizeof(StandardHeader);
+			icon = _resman->openResource(res) + sizeof(StandardHeader);
 
 			// The coloured icon is stored directly after the
 			// greyed out one.
 
 			if (icon_coloured)
 				icon += (RDMENU_ICONWIDE * RDMENU_ICONDEEP);
+		}
 
-			_graphics->setMenuIcon(RDMENU_BOTTOM, j, icon);
+		_graphics->setMenuIcon(RDMENU_BOTTOM, i, icon);
+
+		if (res)
 			_resman->closeResource(res);
-		} else {
-			// no icon here
-			_graphics->setMenuIcon(RDMENU_BOTTOM, j, NULL);
-			debug(5, " NULL for %d", j);
-		}
 	}
 
 	_graphics->showMenu(RDMENU_BOTTOM);
 }
 
-void Sword2Engine::buildSystemMenu(void) {
-	// start a fresh top system menu
-
-	uint8 *icon;
+/**
+ * Build a fresh system (top) menu.
+ */
 
+void Sword2Engine::buildSystemMenu(void) {
 	uint32 icon_list[5] = {
 		OPTIONS_ICON,
 		QUIT_ICON,
@@ -221,11 +192,11 @@
 		RESTART_ICON
 	};
 
-	// build them all high in full colour - when one is clicked on all the
-	// rest will grey out
+	// Build them all high in full colour - when one is clicked on all the
+	// rest will grey out.
 
 	for (int i = 0; i < ARRAYSIZE(icon_list); i++) {
-		icon = _resman->openResource(icon_list[i]) + sizeof(StandardHeader);
+		uint8 *icon = _resman->openResource(icon_list[i]) + sizeof(StandardHeader);
 		
 		// The only case when an icon is grayed is when the player
 		// is dead. Then SAVE is not available.

Index: sword2.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword2/sword2.h,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -d -r1.53 -r1.54
--- sword2.h	29 Mar 2004 06:37:46 -0000	1.53
+++ sword2.h	4 Apr 2004 15:16:05 -0000	1.54
@@ -127,6 +127,12 @@
 	void pauseGame(void);
 	void unpauseGame(void);
 
+	MenuObject _tempList[TOTAL_engine_pockets];
+	uint32 _totalTemp;
+
+	MenuObject _masterMenuList[TOTAL_engine_pockets];
+	uint32 _totalMasters;
+
 public:
 	Sword2Engine(GameDetector *detector, OSystem *syst);
 	~Sword2Engine();
@@ -196,14 +202,9 @@
 	// Set by fnPassMega()
 	ObjectMega _engineMega;
 
-	MenuObject _tempList[TOTAL_engine_pockets];
-	uint32 _totalTemp;
-
-	MenuObject _masterMenuList[TOTAL_engine_pockets];
-	uint32 _totalMasters;
-
 	int menuClick(int menu_items);
 
+	void addMenuObject(MenuObject *obj);
 	void buildMenu(void);
 	void buildSystemMenu(void);
 





More information about the Scummvm-git-logs mailing list