[Scummvm-cvs-logs] CVS: scummvm/queen bankman.h,1.3,1.4 bankman.cpp,1.4,1.5 cutaway.cpp,1.116,1.117

Gregory Montoir cyx at users.sourceforge.net
Mon Jan 19 13:39:02 CET 2004


Update of /cvsroot/scummvm/scummvm/queen
In directory sc8-pr-cvs1:/tmp/cvs-serv4462

Modified Files:
	bankman.h bankman.cpp cutaway.cpp 
Log Message:
prevents bank re-loading (cutaways animations)

Index: bankman.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/bankman.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- bankman.h	11 Jan 2004 14:11:36 -0000	1.3
+++ bankman.h	19 Jan 2004 21:38:07 -0000	1.4
@@ -39,6 +39,7 @@
 	void unpack(uint32 srcframe, uint32 dstframe, uint32 bankslot);
 	void overpack(uint32 srcframe, uint32 dstframe, uint32 bankslot);
 	void close(uint32 bankslot);
+	void flush();
 
 	BobFrame *fetchFrame(uint32 index);
 	void eraseFrame(uint32 index);
@@ -63,6 +64,9 @@
 	 //! banked bob frames
 	PackedBank _banks[MAX_BANKS_NUMBER];
 
+	//! loaded banks names
+	char _loadedBanks[MAX_BANKS_NUMBER][20];
+
 	Resource *_res;
 };
 

Index: bankman.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/bankman.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- bankman.cpp	14 Jan 2004 14:34:04 -0000	1.4
+++ bankman.cpp	19 Jan 2004 21:38:07 -0000	1.5
@@ -28,8 +28,7 @@
 
 BankManager::BankManager(Resource *res) 
 	: _res(res) {
-	memset(_frames, 0, sizeof(_frames));
-	memset(_banks, 0, sizeof(_banks));
+	flush();
 }
 
 BankManager::~BankManager() {
@@ -40,29 +39,38 @@
 }
 
 void BankManager::load(const char *bankname, uint32 bankslot) {
-	close(bankslot);
+	debug(9, "BankManager::load(%s, %d)", bankname, bankslot);
+	assert(bankslot < MAX_BANKS_NUMBER);
+
+	if (!scumm_stricmp(bankname, _loadedBanks[bankslot])) {
+		debug(9, "BankManager::load() bank '%s' already loaded", bankname);
+		return;
+	}
 
+	close(bankslot);
 	_banks[bankslot].data = _res->loadFile(bankname);
 
-	int16 entries = (int16)READ_LE_UINT16(_banks[bankslot].data);
-	if (entries < 0 || entries >= MAX_BANK_SIZE) {
-		error("Maximum bank size exceeded or negative bank size : %d", entries);
-	}
-	debug(9, "BankManager::load(%s, %d) - entries = %d", bankname, bankslot, entries); 
+	uint16 entries = READ_LE_UINT16(_banks[bankslot].data);
+	assert(entries < MAX_BANK_SIZE);
+	debug(9, "BankManager::load() entries = %d", entries); 
 
 	uint32 offset = 2;
 	uint8 *p = _banks[bankslot].data;
-	for (int16 i = 1; i <= entries; ++i) {
+	for (uint16 i = 1; i <= entries; ++i) {
 		_banks[bankslot].indexes[i] = offset;
 		uint16 w = READ_LE_UINT16(p + offset + 0);
 		uint16 h = READ_LE_UINT16(p + offset + 2);
 		// jump to next entry, skipping data & header
 		offset += w * h + 8; 
 	}
+
+	// mark this bank as loaded
+	strcpy(_loadedBanks[bankslot], bankname);
 }
 
 void BankManager::unpack(uint32 srcframe, uint32 dstframe, uint32 bankslot) {
 	debug(9, "BankManager::unpack(%d, %d, %d)", srcframe, dstframe, bankslot);
+	assert(bankslot < MAX_BANKS_NUMBER);
 	assert(_banks[bankslot].data != NULL);
 		
 	BobFrame *pbf = &_frames[dstframe];
@@ -80,6 +88,7 @@
 
 void BankManager::overpack(uint32 srcframe, uint32 dstframe, uint32 bankslot) {
 	debug(9, "BankManager::overpack(%d, %d, %d)", srcframe, dstframe, bankslot);
+	assert(bankslot < MAX_BANKS_NUMBER);
 	assert(_banks[bankslot].data != NULL);
 
 	uint8 *p = _banks[bankslot].data + _banks[bankslot].indexes[srcframe];
@@ -97,8 +106,16 @@
 
 void BankManager::close(uint32 bankslot) {
 	debug(9, "BankManager::close(%d)", bankslot);
+	assert(bankslot < MAX_BANKS_NUMBER);
 	delete[] _banks[bankslot].data;
-	memset(&_banks[bankslot], 0, sizeof(_banks[bankslot]));
+	memset(&_banks[bankslot], 0, sizeof(PackedBank));
+	_loadedBanks[bankslot][0] = '\0';
+}
+
+void BankManager::flush() {
+	memset(_frames, 0, sizeof(_frames));
+	memset(_banks, 0, sizeof(_banks));
+	memset(_loadedBanks, 0, sizeof(_loadedBanks));
 }
 
 BobFrame *BankManager::fetchFrame(uint32 index) {
@@ -122,7 +139,7 @@
 	if (!joe) {
 		i = FRAMES_JOE + FRAMES_JOE_XTRA;
 	}
-	while (i < 256) {
+	while (i < MAX_FRAMES_NUMBER) {
 		eraseFrame(i);
 		++i;
 	}

Index: cutaway.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/cutaway.cpp,v
retrieving revision 1.116
retrieving revision 1.117
diff -u -d -r1.116 -r1.117
--- cutaway.cpp	15 Jan 2004 21:07:17 -0000	1.116
+++ cutaway.cpp	19 Jan 2004 21:38:07 -0000	1.117
@@ -535,12 +535,7 @@
 	}
 	else {
 		if (anim.bank != 13) {
-			/* XXX if (OLDBANK != T) */ {
-				//debug(6, "Loading bank '%s'", _bankNames[anim.bank-1]);
-				_vm->bankMan()->load(_bankNames[anim.bank-1], CUTAWAY_BANK);
-				// XXX OLDBANK=T;
-			}
-
+			_vm->bankMan()->load(_bankNames[anim.bank-1], CUTAWAY_BANK);
 			anim.bank = 8;
 		}
 		else {
@@ -1150,10 +1145,7 @@
 					if (0 == bank)
 						bank = 15;
 					else if (bank != 13) {
-						// XXX if(bank != oldBank) {
 						_vm->bankMan()->load(_bankNames[bank-1], CUTAWAY_BANK);
-						// XXX	oldBank = bank;
-						// XXX }
 						bank = 8;
 					}
 





More information about the Scummvm-git-logs mailing list