aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Kagerer2008-03-16 02:00:14 +0000
committerFlorian Kagerer2008-03-16 02:00:14 +0000
commitb75c790c7adb19ef33203a6f760133067d59ff39 (patch)
tree18b696befc7cd2bece62786f86b256769a46d153
parent707413227644b56e69b4632dc5b2a7534847d2b9 (diff)
downloadscummvm-rg350-b75c790c7adb19ef33203a6f760133067d59ff39.tar.gz
scummvm-rg350-b75c790c7adb19ef33203a6f760133067d59ff39.tar.bz2
scummvm-rg350-b75c790c7adb19ef33203a6f760133067d59ff39.zip
- add opcode 146 - resetInputColorCode()
- add updateWaterFlasks() - some fixes for mouse pointer positioning in sjis mode - bug fix for tim player svn-id: r31136
-rw-r--r--engines/kyra/items_v2.cpp22
-rw-r--r--engines/kyra/kyra.cpp8
-rw-r--r--engines/kyra/kyra.h1
-rw-r--r--engines/kyra/kyra_v2.cpp6
-rw-r--r--engines/kyra/kyra_v2.h2
-rw-r--r--engines/kyra/scene_v2.cpp2
-rw-r--r--engines/kyra/script_v2.cpp12
-rw-r--r--engines/kyra/sequences_tim.cpp2
8 files changed, 47 insertions, 8 deletions
diff --git a/engines/kyra/items_v2.cpp b/engines/kyra/items_v2.cpp
index 72e18846d4..ec2962ce5f 100644
--- a/engines/kyra/items_v2.cpp
+++ b/engines/kyra/items_v2.cpp
@@ -92,6 +92,28 @@ void KyraEngine_v2::resetItemList() {
}
}
+void KyraEngine_v2::updateWaterFlasks() {
+ for (int i = 22; i < 24; i++) {
+ if (_itemInHand == i)
+ setHandItem(i - 1);
+
+ for (int ii = 0; ii < 20; ii++) {
+ if (_mainCharacter.inventory[ii] == i) {
+ _mainCharacter.inventory[ii]--;
+ if (ii < 10) {
+ clearInventorySlot(ii, 0);
+ _screen->drawShape(0, getShapePtr(i + 63), _inventoryX[ii], _inventoryY[ii], 0, 0);
+ }
+ }
+ }
+
+ for (int ii = 0; ii < 30; ii++) {
+ if (_itemList[ii].id == i)
+ _itemList[ii].id--;
+ }
+ }
+}
+
bool KyraEngine_v2::dropItem(int unk1, uint16 item, int x, int y, int unk2) {
if (_handItemSet <= -1)
return false;
diff --git a/engines/kyra/kyra.cpp b/engines/kyra/kyra.cpp
index 0cadaa02a6..57d3c37c39 100644
--- a/engines/kyra/kyra.cpp
+++ b/engines/kyra/kyra.cpp
@@ -202,6 +202,14 @@ Common::Point KyraEngine::getMousePos() const {
return mouse;
}
+void KyraEngine::setMousePos(int x, int y) {
+ if (_flags.useHiResOverlay) {
+ x <<= 1;
+ y <<= 1;
+ }
+ _system->warpMouse(x, y);
+}
+
int KyraEngine::setGameFlag(int flag) {
_flagsTable[flag >> 3] |= (1 << (flag & 7));
return 1;
diff --git a/engines/kyra/kyra.h b/engines/kyra/kyra.h
index 4614b6537d..dbf0fdc680 100644
--- a/engines/kyra/kyra.h
+++ b/engines/kyra/kyra.h
@@ -193,6 +193,7 @@ protected:
// input
Common::Point getMousePos() const;
+ void setMousePos(int x, int y);
// pathfinder
virtual int findWay(int x, int y, int toX, int toY, int *moveTable, int moveTableSize);
diff --git a/engines/kyra/kyra_v2.cpp b/engines/kyra/kyra_v2.cpp
index 6180645368..295c917c83 100644
--- a/engines/kyra/kyra_v2.cpp
+++ b/engines/kyra/kyra_v2.cpp
@@ -1867,7 +1867,7 @@ void KyraEngine_v2::cauldronItemAnim(int item) {
else if (mouseY > mouseDstY)
mouseY -= 2;
uint32 waitEnd = _system->getMillis() + _tickLength;
- _system->warpMouse(mouseX, mouseY);
+ setMousePos(mouseX, mouseY);
_system->updateScreen();
delayUntil(waitEnd);
}
@@ -1878,7 +1878,7 @@ void KyraEngine_v2::cauldronItemAnim(int item) {
else if (mouseX > mouseDstX)
mouseX -= 2;
uint32 waitEnd = _system->getMillis() + _tickLength;
- _system->warpMouse(mouseX, mouseY);
+ setMousePos(mouseX, mouseY);
_system->updateScreen();
delayUntil(waitEnd);
}
@@ -2264,7 +2264,7 @@ void KyraEngine_v2::setupOpcodeTable() {
// 0x90
Opcode(o2_clearSpecialSceneScriptState),
Opcode(o2_querySpecialSceneScriptState),
- OpcodeUnImpl(),
+ Opcode(o2_resetInputColorCode),
Opcode(o2_setHiddenItemsEntry),
// 0x94
Opcode(o2_getHiddenItemsEntry),
diff --git a/engines/kyra/kyra_v2.h b/engines/kyra/kyra_v2.h
index b6b98ad8c2..1aad6f6160 100644
--- a/engines/kyra/kyra_v2.h
+++ b/engines/kyra/kyra_v2.h
@@ -542,6 +542,7 @@ protected:
int findItem(uint16 sceneId, uint16 id);
int checkItemCollision(int x, int y);
void resetItemList();
+ void updateWaterFlasks();
int _itemInHand;
int _handItemSet;
@@ -1024,6 +1025,7 @@ protected:
int o2_setSpecialSceneScriptState(ScriptState *script);
int o2_clearSpecialSceneScriptState(ScriptState *script);
int o2_querySpecialSceneScriptState(ScriptState *script);
+ int o2_resetInputColorCode(ScriptState *script);
int o2_setHiddenItemsEntry(ScriptState *script);
int o2_getHiddenItemsEntry(ScriptState *script);
int o2_mushroomEffect(ScriptState *script);
diff --git a/engines/kyra/scene_v2.cpp b/engines/kyra/scene_v2.cpp
index d14b2eeda3..9e1ac7e0da 100644
--- a/engines/kyra/scene_v2.cpp
+++ b/engines/kyra/scene_v2.cpp
@@ -47,7 +47,7 @@ void KyraEngine_v2::enterNewScene(uint16 newScene, int facing, int unk1, int unk
_screen->hideMouse();
if (!unk3) {
- //updateSpecialItems();
+ updateWaterFlasks();
//displayInvWsaLastFrame();
}
diff --git a/engines/kyra/script_v2.cpp b/engines/kyra/script_v2.cpp
index afaaee213d..954b887aa0 100644
--- a/engines/kyra/script_v2.cpp
+++ b/engines/kyra/script_v2.cpp
@@ -410,7 +410,7 @@ int KyraEngine_v2::o2_addSpecialExit(ScriptState *script) {
int KyraEngine_v2::o2_setMousePos(ScriptState *script) {
debugC(3, kDebugLevelScriptFuncs, "o2_setMousePos(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
- _system->warpMouse(stackPos(0), stackPos(1));
+ setMousePos(stackPos(0), stackPos(1));
return 0;
}
@@ -661,7 +661,7 @@ int KyraEngine_v2::o2_showLetter(ScriptState *script) {
_screen->copyRegion(0, 0, 0, 0, 320, 200, 2, 0);
_screen->fadePalette(_screen->getPalette(0), 0x14);
_screen->setMouseCursor(0, 0, getShapePtr(0));
- _system->warpMouse(280, 160);
+ setMousePos(280, 160);
_screen->showMouse();
@@ -786,7 +786,7 @@ int KyraEngine_v2::o2_updateSceneAnim(ScriptState *script) {
}
int KyraEngine_v2::o2_setSceneAnimPosAndUpdate(ScriptState *script) {
- debugC(3, kDebugLevelScriptFuncs, "o2_updateSceneAnim(%p) (%d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3));
+ debugC(3, kDebugLevelScriptFuncs, "o2_setSceneAnimPosAndUpdate(%p) (%d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3));
const int anim = stackPos(0);
_sceneAnims[anim].x2 = stackPos(1);
_sceneAnims[anim].y2 = stackPos(2);
@@ -1039,6 +1039,12 @@ int KyraEngine_v2::o2_querySpecialSceneScriptState(ScriptState *script) {
return _specialSceneScriptState[stackPos(0)];
}
+int KyraEngine_v2::o2_resetInputColorCode(ScriptState *script) {
+ debugC(3, kDebugLevelScriptFuncs, "o2_resetInputColorCode(%p)", (const void *)script);
+ memset(_inputColorCode, 255, 7);
+ return 0;
+}
+
int KyraEngine_v2::o2_setHiddenItemsEntry(ScriptState *script) {
debugC(3, kDebugLevelScriptFuncs, "o2_setHiddenItemsEntry(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
return (_hiddenItems[stackPos(0)] = stackPos(1));
diff --git a/engines/kyra/sequences_tim.cpp b/engines/kyra/sequences_tim.cpp
index f7f62dd42a..f403dfcfc3 100644
--- a/engines/kyra/sequences_tim.cpp
+++ b/engines/kyra/sequences_tim.cpp
@@ -258,7 +258,7 @@ int KyraEngine_v2::tim_o_resetActiveSub(uint8 *ptr) {
}
int KyraEngine_v2::tim_o_printTalkText(uint8 *ptr) {
- _chatText = _timChatText = (const char*) _TIMBuffers.TEXTChunk + (READ_LE_UINT16(ptr) << 1);
+ _chatText = _timChatText = (const char*) _TIMBuffers.TEXTChunk + READ_LE_UINT16(_TIMBuffers.TEXTChunk + (READ_LE_UINT16(ptr) << 1));
_chatObject = _timChatObject = READ_LE_UINT16(ptr + 2);
if (_flags.lang == Common::JA_JPN) {