[Scummvm-cvs-logs] CVS: scummvm/sword2 build_display.cpp,1.59,1.60 debug.cpp,1.38,1.39 events.cpp,1.30,1.31 layers.cpp,1.28,1.29 mouse.cpp,1.57,1.58 protocol.cpp,1.26,1.27 sound.cpp,1.42,1.43 speech.cpp,1.61,1.62 sword2.h,1.57,1.58 walker.cpp,1.38,1.39

Torbj?rn Andersson eriktorbjorn at users.sourceforge.net
Sat Apr 24 05:30:07 CEST 2004


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

Modified Files:
	build_display.cpp debug.cpp events.cpp layers.cpp mouse.cpp 
	protocol.cpp sound.cpp speech.cpp sword2.h walker.cpp 
Log Message:
fetchObjectName() no longer assumes that the resource will still be in the
cache after it's been closed. (Currently it always is, but ideally I'd like
for BS to work even if resource caching is disabled.)


Index: build_display.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword2/build_display.cpp,v
retrieving revision 1.59
retrieving revision 1.60
diff -u -d -r1.59 -r1.60
--- build_display.cpp	23 Apr 2004 07:01:36 -0000	1.59
+++ build_display.cpp	24 Apr 2004 12:29:35 -0000	1.60
@@ -282,10 +282,12 @@
 	uint32 current_layer_area = layer_head->width * layer_head->height;
 
 	if (current_layer_area > _largestLayerArea) {
+		byte buf[NAME_LEN];
+
 		_largestLayerArea = current_layer_area;
 		sprintf(_largestLayerInfo,
 			"largest layer:  %s layer(%d) is %dx%d",
-			fetchObjectName(_thisScreen.background_layer_id),
+			fetchObjectName(_thisScreen.background_layer_id, buf),
 			layer_number, layer_head->width, layer_head->height);
 	}
 
@@ -366,10 +368,12 @@
 	uint32 current_sprite_area = frame_head->width * frame_head->height;
 
 	if (current_sprite_area > _largestSpriteArea) {
+		byte buf[NAME_LEN];
+
 		_largestSpriteArea = current_sprite_area;
 		sprintf(_largestSpriteInfo,
 			"largest sprite: %s frame(%d) is %dx%d",
-			fetchObjectName(build_unit->anim_resource),
+			fetchObjectName(build_unit->anim_resource, buf),
 			build_unit->anim_pc,
 			frame_head->width,
 			frame_head->height);
@@ -398,10 +402,13 @@
 	}
 
 	uint32 rv = _graphics->drawSprite(&spriteInfo);
-	if (rv)
+	if (rv) {
+		byte buf[NAME_LEN];
+
 		error("Driver Error %.8x with sprite %s (%d) in processImage",
-			rv, fetchObjectName(build_unit->anim_resource),
+			rv, fetchObjectName(build_unit->anim_resource, buf),
 			build_unit->anim_resource);
+	}
 
 	// release the anim resource
 	_resman->closeResource(build_unit->anim_resource);

Index: debug.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword2/debug.cpp,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -d -r1.38 -r1.39
--- debug.cpp	23 Apr 2004 07:01:37 -0000	1.38
+++ debug.cpp	24 Apr 2004 12:29:35 -0000	1.39
@@ -158,6 +158,8 @@
 	// general debug info
 
 	if (_displayDebugText) {
+		byte name[NAME_LEN];
+
 /*
 		// CD in use
 		sprintf(buf, "CD-%d", currentCD);
@@ -171,7 +173,7 @@
 				Logic::_scriptVars[MOUSE_X],
 				Logic::_scriptVars[MOUSE_Y],
 				Logic::_scriptVars[CLICKED_ID],
-				_vm->fetchObjectName(Logic::_scriptVars[CLICKED_ID]));
+				_vm->fetchObjectName(Logic::_scriptVars[CLICKED_ID], name));
 		else
 			sprintf(buf, "last click at %d,%d (---)",
 				Logic::_scriptVars[MOUSE_X],
@@ -184,7 +186,7 @@
 				_vm->_input->_mouseX + _vm->_thisScreen.scroll_offset_x,
 				_vm->_input->_mouseY + _vm->_thisScreen.scroll_offset_y,
 				_vm->_mouseTouching,
-				_vm->fetchObjectName(_vm->_mouseTouching));
+				_vm->fetchObjectName(_vm->_mouseTouching, name));
 		else
 			sprintf(buf, "mouse %d,%d (not touching)",
 				_vm->_input->_mouseX + _vm->_thisScreen.scroll_offset_x,
@@ -199,7 +201,7 @@
 			sprintf(buf, "player %d,%d %s (%d) #%d/%d",
 				_vm->_thisScreen.player_feet_x,
 				_vm->_thisScreen.player_feet_y,
-				_vm->fetchObjectName(_playerGraphic.anim_resource),
+				_vm->fetchObjectName(_playerGraphic.anim_resource, name),
 				_playerGraphic.anim_resource,
 				_playerGraphic.anim_pc,
 				_playerGraphicNoFrames);
@@ -265,7 +267,7 @@
 
 		if (_vm->_logic->_speechScriptWaiting) {
 			sprintf(buf, "script waiting for %s (%d)",
-				_vm->fetchObjectName(_vm->_logic->_speechScriptWaiting),
+				_vm->fetchObjectName(_vm->_logic->_speechScriptWaiting, name),
 				_vm->_logic->_speechScriptWaiting);
 			makeDebugTextBlock(buf, 0, 90);
 		}

Index: events.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword2/events.cpp,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -d -r1.30 -r1.31
--- events.cpp	23 Apr 2004 07:01:37 -0000	1.30
+++ events.cpp	24 Apr 2004 12:29:35 -0000	1.31
@@ -194,11 +194,12 @@
 
 	for (uint32 i = 0; i < MAX_events; i++) {
 		if (_eventList[i].id) {
+			byte buf[NAME_LEN];
 			uint32 target = _eventList[i].id;
 			uint32 script = _eventList[i].interact_id;
 
-			Debug_Printf("slot %2d: id = %s (%d)\n", i, _vm->fetchObjectName(target), target);
-			Debug_Printf("         script = %s (%d) pos %d\n", _vm->fetchObjectName(script / 65536), script / 65536, script % 65536);
+			Debug_Printf("slot %2d: id = %s (%d)\n", i, _vm->fetchObjectName(target, buf), target);
+			Debug_Printf("         script = %s (%d) pos %d\n", _vm->fetchObjectName(script / 65536, buf), script / 65536, script % 65536);
 		}
 	}
 }

Index: layers.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword2/layers.cpp,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -d -r1.28 -r1.29
--- layers.cpp	23 Apr 2004 07:01:38 -0000	1.28
+++ layers.cpp	24 Apr 2004 12:29:35 -0000	1.29
@@ -50,10 +50,11 @@
  */
 
 int32 Sword2Engine::initBackground(int32 res, int32 new_palette) {
+	byte buf[NAME_LEN];
 	int i;
 
 	assert(res);
-	debug(1, "CHANGED TO LOCATION \"%s\"", fetchObjectName(res));
+	debug(1, "CHANGED TO LOCATION \"%s\"", fetchObjectName(res, buf));
 
 	// The resources age every time a new room is entered.
 	_resman->passTime();

Index: mouse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword2/mouse.cpp,v
retrieving revision 1.57
retrieving revision 1.58
diff -u -d -r1.57 -r1.58
--- mouse.cpp	23 Apr 2004 11:43:20 -0000	1.57
+++ mouse.cpp	24 Apr 2004 12:29:35 -0000	1.58
@@ -258,6 +258,7 @@
 }
 
 void Sword2Engine::dragMouse(void) {
+	byte buf1[NAME_LEN], buf2[NAME_LEN];
 	MouseEvent *me;
 	int hit;
 
@@ -329,8 +330,8 @@
 		_logic->setPlayerActionEvent(CUR_PLAYER_ID, _mouseTouching);
 
 		debug(2, "Used \"%s\" on \"%s\"",
-			fetchObjectName(Logic::_scriptVars[OBJECT_HELD]),
-			fetchObjectName(Logic::_scriptVars[CLICKED_ID]));
+			fetchObjectName(Logic::_scriptVars[OBJECT_HELD], buf1),
+			fetchObjectName(Logic::_scriptVars[CLICKED_ID], buf2));
 
 		// Hide menu - back to normal menu mode
 
@@ -370,8 +371,8 @@
 		noHuman();
 
 		debug(2, "Used \"%s\" on \"%s\"",
-			fetchObjectName(Logic::_scriptVars[OBJECT_HELD]),
-			fetchObjectName(Logic::_scriptVars[COMBINE_BASE]));
+			fetchObjectName(Logic::_scriptVars[OBJECT_HELD], buf1),
+			fetchObjectName(Logic::_scriptVars[COMBINE_BASE], buf2));
 	}
 
 	// Refresh the menu
@@ -380,6 +381,7 @@
 }
 
 void Sword2Engine::menuMouse(void) {
+	byte buf[NAME_LEN];
 	MouseEvent *me;
 	int hit;
 
@@ -427,7 +429,7 @@
 		noHuman();
 
 		debug(2, "Right-click on \"%s\" icon",
-			fetchObjectName(Logic::_scriptVars[OBJECT_HELD]));
+			fetchObjectName(Logic::_scriptVars[OBJECT_HELD], buf));
 
 		return;
 	}
@@ -455,7 +457,7 @@
 		setLuggage(_masterMenuList[hit].luggage_resource);
 
 		debug(2, "Left-clicked on \"%s\" icon - switch to drag mode",
-			fetchObjectName(Logic::_scriptVars[OBJECT_HELD]));
+			fetchObjectName(Logic::_scriptVars[OBJECT_HELD], buf));
 	}
 }
 
@@ -664,16 +666,18 @@
 		} else
 			_logic->setPlayerActionEvent(CUR_PLAYER_ID, _mouseTouching);
 
+		byte buf1[NAME_LEN], buf2[NAME_LEN];
+
 		if (Logic::_scriptVars[OBJECT_HELD])
 			debug(2, "Used \"%s\" on \"%s\"",
-				fetchObjectName(Logic::_scriptVars[OBJECT_HELD]),
-				fetchObjectName(Logic::_scriptVars[CLICKED_ID]));
+				fetchObjectName(Logic::_scriptVars[OBJECT_HELD], buf1),
+				fetchObjectName(Logic::_scriptVars[CLICKED_ID], buf2));
 		else if (Logic::_scriptVars[LEFT_BUTTON])
 			debug(2, "Left-clicked on \"%s\"",
-				fetchObjectName(Logic::_scriptVars[CLICKED_ID]));
+				fetchObjectName(Logic::_scriptVars[CLICKED_ID], buf1));
 		else	// RIGHT BUTTON
 			debug(2, "Right-clicked on \"%s\"",
-				fetchObjectName(Logic::_scriptVars[CLICKED_ID]));
+				fetchObjectName(Logic::_scriptVars[CLICKED_ID], buf1));
 	}
 }
 
@@ -731,8 +735,11 @@
 			if (Logic::_scriptVars[OBJECT_HELD]) {
 				setLuggage(_currentLuggageResource);
 			}
-		} else
-			error("ERROR: mouse.pointer==0 for object %d (%s) - update logic script!", _mouseTouching, fetchObjectName(_mouseTouching));
+		} else {
+			byte buf[NAME_LEN];
+
+			error("ERROR: mouse.pointer==0 for object %d (%s) - update logic script!", _mouseTouching, fetchObjectName(_mouseTouching, buf));
+		}
 	} else if (_oldMouseTouching && !_mouseTouching) {
 		// the cursor has moved off something - reset cursor to
 		// normal pointer

Index: protocol.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword2/protocol.cpp,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -d -r1.26 -r1.27
--- protocol.cpp	23 Apr 2004 07:02:02 -0000	1.26
+++ protocol.cpp	24 Apr 2004 12:29:35 -0000	1.27
@@ -208,19 +208,12 @@
 	return text_line < text_header->noOfLines;
 }
 
-byte *Sword2Engine::fetchObjectName(int32 resourceId) {
-	StandardHeader *header;
-	
-	header = (StandardHeader *) _resman->openResource(resourceId);
-	_resman->closeResource(resourceId);
-
-	// Note this pointer is no longer valid, but it should be ok until
-	// another resource is opened!
-
-	// FIXME: I don't like the sound of this at all. Though thanks to the
-	// resource caching, at least it will still point to malloced memory.
+byte *Sword2Engine::fetchObjectName(int32 resourceId, byte *buf) {
+	StandardHeader *header = (StandardHeader *) _resman->openResource(resourceId);
 
-	return header->name;
+	memcpy(buf, header->name, NAME_LEN);
+	_resman->closeResource(resourceId);
+	return buf;
 }
 
 } // End of namespace Sword2

Index: sound.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword2/sound.cpp,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -d -r1.42 -r1.43
--- sound.cpp	23 Apr 2004 07:02:06 -0000	1.42
+++ sound.cpp	24 Apr 2004 12:29:35 -0000	1.43
@@ -186,7 +186,9 @@
 			break;
 		}
 
-		debug(0, "SFX (sample=\"%s\", vol=%d, pan=%d, delay=%d, type=%s)", _vm->fetchObjectName(params[0]), params[3], params[4], params[2], type);
+		byte buf[NAME_LEN];
+
+		debug(0, "SFX (sample=\"%s\", vol=%d, pan=%d, delay=%d, type=%s)", _vm->fetchObjectName(params[0], buf), params[3], params[4], params[2], type);
 	}
 
 	while (j < FXQ_LENGTH && _vm->_fxQueue[j].resource != 0)

Index: speech.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword2/speech.cpp,v
retrieving revision 1.61
retrieving revision 1.62
diff -u -d -r1.61 -r1.62
--- speech.cpp	23 Apr 2004 07:02:06 -0000	1.61
+++ speech.cpp	24 Apr 2004 12:29:35 -0000	1.62
@@ -208,9 +208,11 @@
 
 	debug(5, "Icons available:");
 
+	byte buf[NAME_LEN];
+
 	// change icons
 	for (i = 0; i < _scriptVars[IN_SUBJECT]; i++) {
-		debug(5, "%s", _vm->fetchObjectName(_subjectList[i].res));
+		debug(5, "%s", _vm->fetchObjectName(_subjectList[i].res, buf));
 
 		// change all others to grey
 		if (i != (uint32) hit) {
@@ -220,7 +222,7 @@
 		}
 	}
 
-	debug(2, "Selected: %s", _vm->fetchObjectName(_subjectList[hit].res));
+	debug(2, "Selected: %s", _vm->fetchObjectName(_subjectList[hit].res, buf));
 
 	// this is our looping flag
 	_choosing = false;
@@ -982,8 +984,11 @@
 
 		if (_scriptVars[PLAYER_ID] != CUR_PLAYER_ID)
 			debug(5, "(%d) Nico: %s", _officialTextNumber, text + 2);
-		else
-			debug(5, "(%d) %s: %s", _officialTextNumber, _vm->fetchObjectName(_scriptVars[ID]), text + 2);
+		else {
+			byte buf[NAME_LEN];
+
+			debug(5, "(%d) %s: %s", _officialTextNumber, _vm->fetchObjectName(_scriptVars[ID], buf), text + 2);
+		}
 
 		// Set up the speech animation
 

Index: sword2.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword2/sword2.h,v
retrieving revision 1.57
retrieving revision 1.58
diff -u -d -r1.57 -r1.58
--- sword2.h	23 Apr 2004 07:02:08 -0000	1.57
+++ sword2.h	24 Apr 2004 12:29:35 -0000	1.58
@@ -275,7 +275,7 @@
 	byte *fetchTextLine(byte *file, uint32 text_line);
 	bool checkTextLine(byte *file, uint32 text_line);
 	byte *fetchPaletteMatchTable(byte *screenFile);
-	byte *fetchObjectName(int32 resourceId);
+	byte *fetchObjectName(int32 resourceId, byte *buf);
 
 	// savegame file header
 

Index: walker.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword2/walker.cpp,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -d -r1.38 -r1.39
--- walker.cpp	23 Apr 2004 07:02:08 -0000	1.38
+++ walker.cpp	24 Apr 2004 12:29:35 -0000	1.39
@@ -243,11 +243,13 @@
 		// coords (which should be set beforehand in the script).
 
 		if (pars[4] == 0 && pars[5] == 0) {
+			byte buf[NAME_LEN];
+
 			pars[4] = _standbyX;
 			pars[5] = _standbyY;
 			pars[6] = _standbyDir;
 
-			debug(3, "WARNING: fnWalkToAnim(%s) used standby coords", _vm->fetchObjectName(params[4]));
+			debug(3, "WARNING: fnWalkToAnim(%s) used standby coords", _vm->fetchObjectName(params[4], buf));
 		}
 
 		assert(pars[6] >= 0 && pars[6] <= 7);
@@ -374,11 +376,13 @@
 	// should be set beforehand in the script)
 
 	if (pars[2] == 0 && pars[3] == 0) {
+		byte buf[NAME_LEN];
+
 		pars[2] = _standbyX;
 		pars[3] = _standbyY;
 		pars[4] = _standbyDir;
 
-		debug(3, "WARNING: fnStandAfterAnim(%s) used standby coords", _vm->fetchObjectName(params[2]));
+		debug(3, "WARNING: fnStandAfterAnim(%s) used standby coords", _vm->fetchObjectName(params[2], buf));
 	}
 
 	assert(pars[4] >= 0 && pars[4] <= 7);
@@ -412,11 +416,13 @@
 	// be set beforehand in the script)
 
 	if (pars[2] == 0 && pars[3] == 0) {
+		byte buf[NAME_LEN];
+
 		pars[2] = _standbyX;
 		pars[3] = _standbyY;
 		pars[4] = _standbyDir;
 
-		debug(3, "WARNING: fnStandAtAnim(%s) used standby coords", _vm->fetchObjectName(params[2]));
+		debug(3, "WARNING: fnStandAtAnim(%s) used standby coords", _vm->fetchObjectName(params[2], buf));
 	}
 
 	assert(pars[4] >= 0 && pars[4] <= 7);





More information about the Scummvm-git-logs mailing list