[Scummvm-cvs-logs] CVS: scummvm/kyra kyra.cpp,1.77,1.78 screen.cpp,1.29,1.30 script_v1.cpp,1.31,1.32
Johannes Schickel
lordhoto at users.sourceforge.net
Fri Dec 9 09:38:00 CET 2005
- Previous message: [Scummvm-cvs-logs] CVS: scummvm/kyra debugger.cpp,NONE,1.1 debugger.h,NONE,1.1 kyra.cpp,1.76,1.77 kyra.h,1.38,1.39 module.mk,1.9,1.10 script_v1.cpp,1.30,1.31 sprites.cpp,1.11,1.12 staticres.cpp,1.21,1.22
- Next message: [Scummvm-cvs-logs] CVS: scummvm/kyra kyra.cpp,1.78,1.79 kyra.h,1.39,1.40 script_v1.cpp,1.32,1.33
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/scummvm/scummvm/kyra
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23867
Modified Files:
kyra.cpp screen.cpp script_v1.cpp
Log Message:
Finished item pick up code.
Changed writing of stack access in the script functions.
Also fixed typo with cmdPoisonBrandonAndRemaps.
Index: kyra.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/kyra/kyra.cpp,v
retrieving revision 1.77
retrieving revision 1.78
diff -u -d -r1.77 -r1.78
--- kyra.cpp 9 Dec 2005 14:52:31 -0000 1.77
+++ kyra.cpp 9 Dec 2005 17:36:56 -0000 1.78
@@ -2536,24 +2536,24 @@
byte KyraEngine::findItemAtPos(int x, int y) {
debug(9, "findItemAtPos(%d, %d)", x, y);
assert(_currentCharacter->sceneId < _roomTableSize);
- uint8 *itemsTable = _roomTable[_currentCharacter->sceneId].itemsTable;
- uint16 *xposOffset = _roomTable[_currentCharacter->sceneId].itemsXPos;
- uint8 *yposOffset = _roomTable[_currentCharacter->sceneId].itemsYPos;
+ const uint8 *itemsTable = _roomTable[_currentCharacter->sceneId].itemsTable;
+ const uint16 *xposOffset = _roomTable[_currentCharacter->sceneId].itemsXPos;
+ const uint8 *yposOffset = _roomTable[_currentCharacter->sceneId].itemsYPos;
int highestYPos = -1;
byte returnValue = 0xFF;
for (int i = 0; i < 12; ++i) {
if (*itemsTable != 0xFF) {
- int xpos = *xposOffset - 8;
+ int xpos = *xposOffset - 11;
int xpos2 = *xposOffset + 10;
if (x > xpos && x < xpos2) {
assert(*itemsTable < ARRAYSIZE(_itemTable));
int itemHeight = _itemTable[*itemsTable].height;
- int ypos = *yposOffset;
+ int ypos = *yposOffset + 3;
int ypos2 = ypos - itemHeight - 3;
- if (y < ypos2 && (ypos+3) > y) {
+ if (y > ypos2 && ypos > y) {
if (highestYPos <= ypos) {
returnValue = i;
highestYPos = ypos;
@@ -2561,9 +2561,9 @@
}
}
}
- xposOffset += 2;
- yposOffset += 1;
- itemsTable += 1;
+ ++xposOffset;
+ ++yposOffset;
+ ++itemsTable;
}
return returnValue;
@@ -2906,7 +2906,7 @@
assert(sceneId < _roomTableSize);
Room *currentRoom = &_roomTable[sceneId];
- uint8 item = currentRoom->itemsTable[itemIndex];
+ int item = currentRoom->itemsTable[itemIndex];
currentRoom->itemsTable[itemIndex] = _itemInHand;
_itemInHand = item;
animAddGameItem(itemIndex, sceneId);
@@ -4540,13 +4540,32 @@
handleSceneChange(xpos, ypos, 1, 1);
return;
}
- }
-
-
+ }
}
int KyraEngine::processInputHelper(int xpos, int ypos) {
debug(9, "processInputHelper(%d, %d)", xpos, ypos);
+ uint8 item = findItemAtPos(xpos, ypos);
+ if (item != 0xFF) {
+ if (_itemInHand == -1) {
+ _screen->hideMouse();
+ animRemoveGameItem(item);
+ // XXX call kyraPlaySound(53)
+ assert(_currentCharacter->sceneId < _roomTableSize);
+ Room *currentRoom = &_roomTable[_currentCharacter->sceneId];
+ int item2 = currentRoom->itemsTable[item];
+ currentRoom->itemsTable[item] = 0xFF;
+ setMouseItem(item2);
+ // XXX updateSentenceCommand
+ _itemInHand = item2;
+ _screen->showMouse();
+ clickEventHandler2();
+ return 1;
+ } else {
+ exchangeItemWithMouseItem(_currentCharacter->sceneId, item);
+ return 1;
+ }
+ }
return 0;
}
Index: screen.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/kyra/screen.cpp,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -d -r1.29 -r1.30
--- screen.cpp 8 Dec 2005 17:19:18 -0000 1.29
+++ screen.cpp 9 Dec 2005 17:36:57 -0000 1.30
@@ -567,7 +567,8 @@
void Screen::drawShape(uint8 pageNum, const uint8 *shapeData, int x, int y, int sd, int flags, ...) {
debug(9, "Screen::drawShape(%d, 0x%X, %d, %d, %d, 0x%.04X, ...)", pageNum, shapeData, x, y, sd, flags);
- assert(shapeData);
+ if (!shapeData)
+ return;
va_list args;
va_start(args, flags);
Index: script_v1.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/kyra/script_v1.cpp,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -d -r1.31 -r1.32
--- script_v1.cpp 9 Dec 2005 14:52:31 -0000 1.31
+++ script_v1.cpp 9 Dec 2005 17:36:57 -0000 1.32
@@ -74,7 +74,7 @@
void ScriptHelper::c1_popRetOrPos() {
switch (_parameter) {
case 0:
- _curScript->retValue = _curScript->stack[++_curScript->sp-1];
+ _curScript->retValue = _curScript->stack[_curScript->sp++];
break;
case 1:
@@ -82,8 +82,8 @@
_continue = false;
_curScript->ip = 0;
} else {
- _curScript->bp = _curScript->stack[++_curScript->sp-1];
- _curScript->ip = _curScript->dataPtr->data + (_curScript->stack[++_curScript->sp-1] << 1);
+ _curScript->bp = _curScript->stack[_curScript->sp++];
+ _curScript->ip = _curScript->dataPtr->data + (_curScript->stack[_curScript->sp++] << 1);
}
break;
@@ -95,15 +95,15 @@
}
void ScriptHelper::c1_popVar() {
- _curScript->variables[_parameter] = _curScript->stack[++_curScript->sp-1];
+ _curScript->variables[_parameter] = _curScript->stack[_curScript->sp++];
}
void ScriptHelper::c1_popBPNeg() {
- _curScript->stack[(-(int32)(_parameter + 2)) + _curScript->bp] = _curScript->stack[++_curScript->sp-1];
+ _curScript->stack[(-(int32)(_parameter + 2)) + _curScript->bp] = _curScript->stack[_curScript->sp++];
}
void ScriptHelper::c1_popBPAdd() {
- _curScript->stack[(_parameter - 1) + _curScript->bp] = _curScript->stack[++_curScript->sp-1];
+ _curScript->stack[(_parameter - 1) + _curScript->bp] = _curScript->stack[_curScript->sp++];
}
void ScriptHelper::c1_addSP() {
@@ -157,8 +157,8 @@
int16 ret = 0;
bool error = false;
- int16 val1 = _curScript->stack[++_curScript->sp-1];
- int16 val2 = _curScript->stack[++_curScript->sp-1];
+ int16 val1 = _curScript->stack[_curScript->sp++];
+ int16 val2 = _curScript->stack[_curScript->sp++];
switch (_parameter) {
case 0:
@@ -284,8 +284,8 @@
_continue = false;
_curScript->ip = 0;
} else {
- _curScript->retValue = _curScript->stack[++_curScript->sp-1];
- uint16 temp = _curScript->stack[++_curScript->sp-1];
+ _curScript->retValue = _curScript->stack[_curScript->sp++];
+ uint16 temp = _curScript->stack[_curScript->sp++];
_curScript->stack[60] = 0;
_curScript->ip = &_curScript->dataPtr->data[temp*2];
}
@@ -1277,7 +1277,7 @@
}
int KyraEngine::cmd_poisonBrandonAndRemaps(ScriptState *script) {
- warning("STUB: cmdPoisonBrandonAndRemaps");
+ warning("STUB: cmd_poisonBrandonAndRemaps");
return 0;
}
- Previous message: [Scummvm-cvs-logs] CVS: scummvm/kyra debugger.cpp,NONE,1.1 debugger.h,NONE,1.1 kyra.cpp,1.76,1.77 kyra.h,1.38,1.39 module.mk,1.9,1.10 script_v1.cpp,1.30,1.31 sprites.cpp,1.11,1.12 staticres.cpp,1.21,1.22
- Next message: [Scummvm-cvs-logs] CVS: scummvm/kyra kyra.cpp,1.78,1.79 kyra.h,1.39,1.40 script_v1.cpp,1.32,1.33
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Scummvm-git-logs
mailing list