[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