[Scummvm-cvs-logs] CVS: scummvm/saga actor.cpp,1.120,1.121 interface.cpp,1.84,1.85 interface.h,1.45,1.46 saga.h,1.87,1.88 scene.cpp,1.99,1.100 script.h,1.79,1.80 sfuncs.cpp,1.106,1.107 sthread.cpp,1.79,1.80

Andrew Kurushin h00ligan at users.sourceforge.net
Sun Apr 24 08:18:02 CEST 2005


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

Modified Files:
	actor.cpp interface.cpp interface.h saga.h scene.cpp script.h 
	sfuncs.cpp sthread.cpp 
Log Message:
fixed object frawing
implemented sfGetObjImage, sfSetObjImage, sfSetObjName

Index: actor.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/actor.cpp,v
retrieving revision 1.120
retrieving revision 1.121
diff -u -d -r1.120 -r1.121
--- actor.cpp	24 Apr 2005 12:08:27 -0000	1.120
+++ actor.cpp	24 Apr 2005 15:17:37 -0000	1.121
@@ -1246,11 +1246,14 @@
 		frameNumber = 8;			
 		spriteList = &_vm->_sprite->_mainSprites;
 	} else {
-		frameNumber = commonObjectData->frameNumber;			
 		if (validActorId(commonObjectData->id)) {
 			spriteList = &((ActorData*)commonObjectData)->spriteList;	
+			frameNumber = commonObjectData->frameNumber;			
 		} else {
-			spriteList = &_vm->_sprite->_mainSprites;
+			if (validObjId(commonObjectData->id)) {
+				spriteList = &_vm->_sprite->_mainSprites;
+				frameNumber = commonObjectData->spriteListResourceId;			
+			}
 		}
 		
 	}
@@ -1806,8 +1809,6 @@
 
 	for (iteratorPoint.y = 0; iteratorPoint.y < _yCellCount; iteratorPoint.y++) {
 		for (iteratorPoint.x = 0; iteratorPoint.x < _xCellCount; iteratorPoint.x++) {
-			// This is almost, but not quite, the same thing as canWalk().
-			// Is that difference significant or not?
 			if (_vm->_scene->validBGMaskPoint(iteratorPoint)) {
 				maskType = _vm->_scene->getBGMaskType(iteratorPoint);
 				setPathCell(iteratorPoint, _vm->_scene->getDoorState(maskType) ? kPathCellBarrier : kPathCellEmpty);

Index: interface.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/interface.cpp,v
retrieving revision 1.84
retrieving revision 1.85
diff -u -d -r1.84 -r1.85
--- interface.cpp	23 Apr 2005 12:34:34 -0000	1.84
+++ interface.cpp	24 Apr 2005 15:17:37 -0000	1.85
@@ -412,7 +412,7 @@
 		_vm->_sprite->draw(backBuffer, _scenePortraits, _rightPortrait, rightPortraitPoint, 256);
 	}
 
-	drawInventory();
+	drawInventory(backBuffer);
 	return SUCCESS;
 }
 
@@ -692,10 +692,9 @@
 	return -1;
 }
 
-void Interface::drawInventory() {
+void Interface::drawInventory(SURFACE *backBuffer) {
 	if (_panelMode != kPanelMain)
 		return;
-	SURFACE *backBuffer = _vm->_gfx->getBackBuffer();
 	int i;
 	Rect rect;
 	int ci;

Index: interface.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/interface.h,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -d -r1.45 -r1.46
--- interface.h	23 Apr 2005 12:34:35 -0000	1.45
+++ interface.h	24 Apr 2005 15:17:37 -0000	1.46
@@ -163,14 +163,21 @@
 
 	bool processKeyCode(int keyCode);
 	
+private:
+	void drawInventory(SURFACE *backBuffer);
+	void updateInventory(int pos);
 	void inventoryChangePos(int chg);
 	void inventorySetPos(int key);
+
+public:
+	void refreshInventory() {
+		updateInventory(_inventoryCount);
+		draw();
+	}
 	void addToInventory(int objectId, int pos = -1);
 	void removeFromInventory(int objectId);
 	void clearInventory();
 	int inventoryItemPosition(int objectId);
-	void drawInventory();
-	void updateInventory(int pos);
 	int getInventoryContentByPanelButton(PanelButton * panelButton) {
 		int cell = _inventoryStart + panelButton->id;
 		if (cell >= _inventoryCount) {

Index: saga.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/saga.h,v
retrieving revision 1.87
retrieving revision 1.88
diff -u -d -r1.87 -r1.88
--- saga.h	22 Apr 2005 14:11:02 -0000	1.87
+++ saga.h	24 Apr 2005 15:17:37 -0000	1.88
@@ -71,6 +71,8 @@
 #define OBJECT_TYPE_SHIFT 13
 #define OBJECT_TYPE_MASK ((1 << OBJECT_TYPE_SHIFT) - 1)
 
+#define OBJ_SPRITE_BASE 9
+
 #define memoryError(Place) error("%s Memory allocation error.", Place)
 
 struct RSCFILE_CONTEXT;

Index: scene.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/scene.cpp,v
retrieving revision 1.99
retrieving revision 1.100
diff -u -d -r1.99 -r1.100
--- scene.cpp	23 Apr 2005 14:15:00 -0000	1.99
+++ scene.cpp	24 Apr 2005 15:17:37 -0000	1.100
@@ -387,7 +387,6 @@
 	Point first;
 	Point second;
 	Point third;
-	int maskType;
 
 	if (!_bgMask.loaded) {
 		return false;
@@ -404,57 +403,6 @@
 	}
 	testPoint = first;
 
-	if (testPoint.y != first.y) {
-		second.x = third.x = testPoint.x;
-		second.y = third.y = first.y;
-		for (;; second.x--, third.x++ ) {
-			if (second.x > 1) {
-				maskType = getBGMaskType(second);
-				if (getDoorState(maskType) == 0) {
-					testPoint.x = second.x - 1;
-					break;
-				}
-			} else {
-				if (third.x >= _bgMask.w) {
-					return false;
-				}
-			}
-
-			if (third.x < _bgMask.w) {
-				maskType = getBGMaskType(third);
-				if (getDoorState(maskType) == 0) {
-					testPoint.x = third.x + 1;
-					break;
-				}
-			}
-		}
-	}
-
-	if (testPoint.x != first.x) {
-		second.y = third.y = testPoint.y;
-		second.x = third.x = first.x;
-		for (;; second.y--, third.y++ ) {
-			if (second.y > 1) {
-				maskType = getBGMaskType(second);
-				if (getDoorState(maskType) == 0) {
-					testPoint.y = second.y - 1;
-					break;
-				}
-			} else {
-				if (third.y >= _bgMask.h) {
-					return false;
-				}
-			}
-
-			if (third.y < _bgMask.h) {
-				maskType = getBGMaskType(third);
-				if (getDoorState(maskType) == 0) {
-					testPoint.y = third.y + 1;
-					break;
-				}
-			}
-		}
-	}
 	return true;
 }
 

Index: script.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/script.h,v
retrieving revision 1.79
retrieving revision 1.80
diff -u -d -r1.79 -r1.80
--- script.h	23 Apr 2005 12:34:35 -0000	1.79
+++ script.h	24 Apr 2005 15:17:37 -0000	1.80
@@ -479,9 +479,9 @@
 	void sfSetFollower(SCRIPTFUNC_PARAMS);
 	void sfScriptGotoScene(SCRIPTFUNC_PARAMS);
 
-	void SF_setObjImage(SCRIPTFUNC_PARAMS);
-	void SF_setObjName(SCRIPTFUNC_PARAMS);
-	void SF_getObjImage(SCRIPTFUNC_PARAMS);
+	void sfSetObjImage(SCRIPTFUNC_PARAMS);
+	void sfSetObjName(SCRIPTFUNC_PARAMS);
+	void sfGetObjImage(SCRIPTFUNC_PARAMS);
 	void SF_getNumber(SCRIPTFUNC_PARAMS);
 	void sfScriptOpenDoor(SCRIPTFUNC_PARAMS);
 	void sfScriptCloseDoor(SCRIPTFUNC_PARAMS);

Index: sfuncs.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/sfuncs.cpp,v
retrieving revision 1.106
retrieving revision 1.107
diff -u -d -r1.106 -r1.107
--- sfuncs.cpp	23 Apr 2005 12:34:35 -0000	1.106
+++ sfuncs.cpp	24 Apr 2005 15:17:38 -0000	1.107
@@ -67,9 +67,9 @@
 		OPCODE(sfFaceTowards),
 		OPCODE(sfSetFollower),
 		OPCODE(sfScriptGotoScene),
-		OPCODE(SF_setObjImage),
-		OPCODE(SF_setObjName),
-		OPCODE(SF_getObjImage),
+		OPCODE(sfSetObjImage),
+		OPCODE(sfSetObjName),
+		OPCODE(sfGetObjImage),
 		OPCODE(SF_getNumber),
 		OPCODE(sfScriptOpenDoor),
 		OPCODE(sfScriptCloseDoor),
@@ -521,52 +521,46 @@
 }
 
 // Script function #17 (0x11)
-void Script::SF_setObjImage(SCRIPTFUNC_PARAMS) {
-	error("SF_setObjImage Not implemented");
-/*	int16 obj_param = getSWord(thread->pop());
-	int16 sprite_param = getSWord(thread->pop());
-
-
-	int index = obj_param & 0x1FFF;
+// Param1: object id
+// Param2: sprite index
+void Script::sfSetObjImage(SCRIPTFUNC_PARAMS) {
+	uint16 objectId;
+	uint16 spriteId;
+	ObjectData *obj;
 
-	if (index >= ARRAYSIZE(ObjectTable)) {
-		return FAILURE;
-	}
+	objectId = thread->pop();
+	spriteId = thread->pop();
 
-	ObjectTable[index].spritelistRn = sprite_param + 9;
-	_vm->_interface->draw();
-*/
+	obj = _vm->_actor->getObj(objectId);
+	obj->spriteListResourceId = OBJ_SPRITE_BASE + spriteId;
+	_vm->_interface->refreshInventory();
 }
 
 // Script function #18 (0x12)
-void Script::SF_setObjName(SCRIPTFUNC_PARAMS) {
-	error("SF_setObjName Not implemented");
-
-/*	int obj_param = getSWord(thread->pop());
-	int name_param = getSWord(thread->pop());
-
-	int index = obj_param & 0x1FFF;
+// Param1: object id
+// Param2: name index
+void Script::sfSetObjName(SCRIPTFUNC_PARAMS) {
+	uint16 objectId;
+	uint16 nameIdx;
+	ObjectData *obj;
 
-	if (index >= ARRAYSIZE(ObjectTable)) {
-		return FAILURE;
-	}
+	objectId = thread->pop();
+	nameIdx = thread->pop();
 
-	ObjectTable[index].nameIndex = name_param;*/
+	obj = _vm->_actor->getObj(objectId);
+	obj->nameIndex = nameIdx;
 }
 
 // Script function #19 (0x13)
-void Script::SF_getObjImage(SCRIPTFUNC_PARAMS) {
-	error("SF_getObjImage Not implemented");
-
-/*	int param = getSWord(thread->pop());
-	int index = param & 0x1FFF;
+// Param1: object id
+void Script::sfGetObjImage(SCRIPTFUNC_PARAMS) {
+	uint16 objectId;
+	ObjectData *obj;
 
-	if (index >= ARRAYSIZE(ObjectTable)) {
-		thread->retVal = 0;
-		return FAILURE;
-	}
+	objectId = thread->pop();
 
-	thread->retVal = ObjectTable[index].spritelistRn;*/
+	obj = _vm->_actor->getObj(objectId);
+	thread->_returnValue = obj->spriteListResourceId - OBJ_SPRITE_BASE;
 }
 
 // Script function #20 (0x14)
@@ -702,7 +696,6 @@
 	}
 	actor->currentAction = currentAction;
 	actor->actorFlags &= ~kActorBackwards;
-
 }
 
 // Script function #30 (0x1E) nonblocking
@@ -754,7 +747,7 @@
 	}
 
 	obj->sceneNumber = _vm->_scene->currentSceneNumber();
-	obj->spriteListResourceId = 9 + spriteId;
+	obj->spriteListResourceId = OBJ_SPRITE_BASE + spriteId;
 	obj->location.x = x;
 	obj->location.y = y;
 }

Index: sthread.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/sthread.cpp,v
retrieving revision 1.79
retrieving revision 1.80
diff -u -d -r1.79 -r1.80
--- sthread.cpp	18 Apr 2005 20:03:14 -0000	1.79
+++ sthread.cpp	24 Apr 2005 15:17:38 -0000	1.80
@@ -223,9 +223,12 @@
 		savedInstructionOffset = thread->_instructionOffset;
 		operandChar = scriptS.readByte();
 
-#define CASEOP(opName)	case opName:									\
-							if (operandChar == opName) {				\
-								operandName = #opName;					\
+
+#define CASEOP(opName)	case opName:												\
+							if (operandChar == opName) {							\
+								operandName = #opName;								\
+								debug(8, operandName);								\
+								_vm->_console->DebugPrintf("%s\n", operandName);	\
 							}
 						
 //		debug(8, "Executing thread offset: %lu (%x) stack: %d", thread->_instructionOffset, operandChar, thread->pushedSize());
@@ -254,6 +257,7 @@
 		CASEOP(opStrlit)
 			iparam1 = scriptS.readSint16LE();
 			thread->push(iparam1);
+			debug(8, "0x%X", iparam1);
 			break;
 
 // DATA INSTRUCTIONS  
@@ -269,6 +273,7 @@
 			iparam1 = scriptS.readSint16LE();
 			addr += iparam1;
 			thread->push(*((uint16*)addr));
+			debug(8, "0x%X", *((uint16*)addr));
 			break;
 		CASEOP(opPutFlag)
 			addr = thread->baseAddress(scriptS.readByte());
@@ -513,6 +518,7 @@
 			iparam2 = thread->pop();
 			iparam1 = thread->pop();
 			thread->push((iparam1 == iparam2) ? 1 : 0);
+			debug(8, "0x%X 0x%X", iparam1, iparam2);
 			break;
 		CASEOP(opNe)
 			iparam2 = thread->pop();
@@ -689,9 +695,6 @@
 			error("Script::runThread() Invalid opcode encountered 0x%X", operandChar);
 		}
 
-		debug(8, operandName);
-		_vm->_console->DebugPrintf("%s\n", operandName);
-
 		if (thread->_flags & (kTFlagFinished | kTFlagAborted)) {
 			error("Wrong flags %d in thread", thread->_flags);
 		} 





More information about the Scummvm-git-logs mailing list