[Scummvm-cvs-logs] SF.net SVN: scummvm:[53696] scummvm/trunk/engines/kyra

lordhoto at users.sourceforge.net lordhoto at users.sourceforge.net
Fri Oct 22 04:09:16 CEST 2010


Revision: 53696
          http://scummvm.svn.sourceforge.net/scummvm/?rev=53696&view=rev
Author:   lordhoto
Date:     2010-10-22 02:09:16 +0000 (Fri, 22 Oct 2010)

Log Message:
-----------
KYRA: Add a datatype for the item ids and convert Kyra1 to use it.

Modified Paths:
--------------
    scummvm/trunk/engines/kyra/gui_lok.cpp
    scummvm/trunk/engines/kyra/items_lok.cpp
    scummvm/trunk/engines/kyra/kyra_lok.cpp
    scummvm/trunk/engines/kyra/kyra_lok.h
    scummvm/trunk/engines/kyra/saveload_lok.cpp
    scummvm/trunk/engines/kyra/scene_lok.cpp
    scummvm/trunk/engines/kyra/script_lok.cpp

Added Paths:
-----------
    scummvm/trunk/engines/kyra/item.h

Modified: scummvm/trunk/engines/kyra/gui_lok.cpp
===================================================================
--- scummvm/trunk/engines/kyra/gui_lok.cpp	2010-10-22 02:08:26 UTC (rev 53695)
+++ scummvm/trunk/engines/kyra/gui_lok.cpp	2010-10-22 02:09:16 UTC (rev 53696)
@@ -32,6 +32,7 @@
 #include "kyra/gui_lok.h"
 #include "kyra/timer.h"
 #include "kyra/util.h"
+#include "kyra/item.h"
 
 #include "common/config-manager.h"
 #include "common/savefile.h"
@@ -49,9 +50,9 @@
 
 int KyraEngine_LoK::buttonInventoryCallback(Button *caller) {
 	int itemOffset = caller->index - 2;
-	uint8 inventoryItem = _currentCharacter->inventoryItems[itemOffset];
-	if (_itemInHand == -1) {
-		if (inventoryItem == 0xFF) {
+	Item inventoryItem = (int8)_currentCharacter->inventoryItems[itemOffset];
+	if (_itemInHand == kItemNone) {
+		if (inventoryItem == kItemNone) {
 			snd_playSoundEffect(0x36);
 			return 0;
 		} else {
@@ -62,10 +63,10 @@
 			updateSentenceCommand(_itemList[getItemListIndex(inventoryItem)], _takenList[0], 179);
 			_itemInHand = inventoryItem;
 			_screen->showMouse();
-			_currentCharacter->inventoryItems[itemOffset] = 0xFF;
+			_currentCharacter->inventoryItems[itemOffset] = kItemNone;
 		}
 	} else {
-		if (inventoryItem != 0xFF) {
+		if (inventoryItem != kItemNone) {
 			snd_playSoundEffect(0x35);
 			_screen->hideMouse();
 			_screen->fillRect(_itemPosX[itemOffset], _itemPosY[itemOffset], _itemPosX[itemOffset] + 15, _itemPosY[itemOffset] + 15, _flags.platform == Common::kPlatformAmiga ? 19 : 12);
@@ -87,7 +88,7 @@
 			updateSentenceCommand(_itemList[getItemListIndex(_itemInHand)], _placedList[0], 179);
 			_screen->showMouse();
 			_currentCharacter->inventoryItems[itemOffset] = _itemInHand;
-			_itemInHand = -1;
+			_itemInHand = kItemNone;
 		}
 	}
 	_screen->updateScreen();
@@ -104,7 +105,7 @@
 	}
 	if (!queryGameFlag(0x2D))
 		return 1;
-	if (_itemInHand != -1) {
+	if (_itemInHand != kItemNone) {
 		assert(_putDownFirst);
 		characterSays(2000, _putDownFirst[0], 0, -2);
 		return 1;

Added: scummvm/trunk/engines/kyra/item.h
===================================================================
--- scummvm/trunk/engines/kyra/item.h	                        (rev 0)
+++ scummvm/trunk/engines/kyra/item.h	2010-10-22 02:09:16 UTC (rev 53696)
@@ -0,0 +1,45 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#ifndef KYRA_ITEM_H
+#define KYRA_ITEM_H
+
+#include "common/scummsys.h"
+
+namespace Kyra {
+
+typedef int16 Item;
+
+enum {
+	/**
+	 * Constant for invalid item.
+	 */
+	kItemNone = -1
+};
+
+} // End of namespace Kyra
+
+#endif
+


Property changes on: scummvm/trunk/engines/kyra/item.h
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:keywords
   + Date Rev Author URL Id
Added: svn:eol-style
   + native

Modified: scummvm/trunk/engines/kyra/items_lok.cpp
===================================================================
--- scummvm/trunk/engines/kyra/items_lok.cpp	2010-10-22 02:08:26 UTC (rev 53695)
+++ scummvm/trunk/engines/kyra/items_lok.cpp	2010-10-22 02:09:16 UTC (rev 53696)
@@ -74,28 +74,30 @@
 byte KyraEngine_LoK::findFreeItemInScene(int scene) {
 	assert(scene < _roomTableSize);
 	Room *room = &_roomTable[scene];
+
 	for (int i = 0; i < 12; ++i) {
-		if (room->itemsTable[i] == 0xFF)
+		if (room->itemsTable[i] == kItemNone)
 			return i;
 	}
+
 	return 0xFF;
 }
 
 byte KyraEngine_LoK::findItemAtPos(int x, int y) {
 	assert(_currentCharacter->sceneId < _roomTableSize);
-	const uint8 *itemsTable = _roomTable[_currentCharacter->sceneId].itemsTable;
+	const int8 *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;
+	Item returnValue = kItemNone;
 
 	for (int i = 0; i < 12; ++i) {
-		if (*itemsTable != 0xFF) {
+		if (*itemsTable != kItemNone) {
 			int xpos = *xposOffset - 11;
 			int xpos2 = *xposOffset + 10;
 			if (x > xpos && x < xpos2) {
-				assert(*itemsTable < ARRAYSIZE(_itemTable));
+				assert(*itemsTable >= 0);
 				int itemHeight = _itemTable[*itemsTable].height;
 				int ypos = *yposOffset + 3;
 				int ypos2 = ypos - itemHeight - 3;
@@ -108,6 +110,7 @@
 				}
 			}
 		}
+
 		++xposOffset;
 		++yposOffset;
 		++itemsTable;
@@ -173,27 +176,28 @@
 void KyraEngine_LoK::setHandItem(uint16 item) {
 	_screen->hideMouse();
 	setMouseItem(item);
-	_itemInHand = item;
+	_itemInHand = (Item)item;
 	_screen->showMouse();
 }
 
 void KyraEngine_LoK::removeHandItem() {
 	_screen->hideMouse();
 	_screen->setMouseCursor(1, 1, _shapes[0]);
-	_itemInHand = -1;
+	_itemInHand = kItemNone;
 	_screen->showMouse();
 }
 
-void KyraEngine_LoK::setMouseItem(uint16 item) {
-	if (item == 0xFFFF)
+void KyraEngine_LoK::setMouseItem(Item item) {
+	if (item == kItemNone)
 		_screen->setMouseCursor(1, 1, _shapes[6]);
 	else
 		_screen->setMouseCursor(8, 15, _shapes[216+item]);
 }
 
 void KyraEngine_LoK::wipeDownMouseItem(int xpos, int ypos) {
-	if (_itemInHand == -1)
+	if (_itemInHand == kItemNone)
 		return;
+
 	xpos -= 8;
 	ypos -= 15;
 	_screen->hideMouse();
@@ -261,7 +265,7 @@
 	int items = 0;
 
 	for (int i = 0; i < 12; ++i) {
-		if (currentRoom->itemsTable[i] != 0xFF)
+		if (currentRoom->itemsTable[i] != kItemNone)
 			++items;
 	}
 
@@ -284,7 +288,7 @@
 
 	if (unk1 != 3) {
 		for (int i = 0; i < 12; ++i) {
-			if (currentRoom->itemsTable[i] == 0xFF) {
+			if (currentRoom->itemsTable[i] == kItemNone) {
 				freeItem = i;
 				break;
 			}
@@ -647,7 +651,8 @@
 	int videoPageBackUp = _screen->_curPage;
 	_screen->_curPage = 0;
 	int x = 0, y = 0;
-	if (itemPos == -1) {
+
+	if (itemPos == kItemNone) {
 		Common::Point mouse = getMousePos();
 		x = mouse.x - 12;
 		y = mouse.y - 18;
@@ -656,7 +661,7 @@
 		y = _itemPosY[itemPos] - 3;
 	}
 
-	if (_itemInHand == -1 && itemPos == -1)
+	if (_itemInHand == kItemNone && itemPos == -1)
 		return;
 
 	int tableIndex = 0, loopStart = 0, maxLoops = 0;
@@ -713,15 +718,17 @@
 		delayUntil(nextTime);
 	}
 	restoreItemRect1(x, y);
+
 	if (itemPos == -1) {
 		_screen->setMouseCursor(1, 1, _shapes[0]);
-		_itemInHand = -1;
+		_itemInHand = kItemNone;
 	} else {
-		_characterList[0].inventoryItems[itemPos] = 0xFF;
+		_characterList[0].inventoryItems[itemPos] = kItemNone;
 		_screen->hideMouse();
 		_screen->fillRect(_itemPosX[itemPos], _itemPosY[itemPos], _itemPosX[itemPos] + 15, _itemPosY[itemPos] + 15, _flags.platform == Common::kPlatformAmiga ? 19 : 12, 0);
 		_screen->showMouse();
 	}
+
 	_screen->showMouse();
 	_screen->_curPage = videoPageBackUp;
 }
@@ -884,7 +891,8 @@
 	_screen->hideMouse();
 	for (int i = 0; i < 10; ++i) {
 		_screen->fillRect(_itemPosX[i], _itemPosY[i], _itemPosX[i] + 15, _itemPosY[i] + 15, _flags.platform == Common::kPlatformAmiga ? 19 : 12, page);
-		if (_currentCharacter->inventoryItems[i] != 0xFF) {
+
+		if (_currentCharacter->inventoryItems[i] != kItemNone) {
 			uint8 item = _currentCharacter->inventoryItems[i];
 			_screen->drawShape(page, _shapes[216+item], _itemPosX[i], _itemPosY[i], 0, 0);
 		}
@@ -914,12 +922,12 @@
 	_screen->copyBlockToPage(_screen->_curPage, xpos, ypos, 4<<3, 32, _itemBkgBackUp[1]);
 }
 
-int KyraEngine_LoK::getItemListIndex(uint16 item) {
+int KyraEngine_LoK::getItemListIndex(Item item) {
 	if (_flags.platform != Common::kPlatformAmiga)
 		return item;
 
 	// "Unknown item" is at 81.
-	if (item == 0xFFFF || item == 0xFF)
+	if (item == kItemNone)
 		return 81;
 	// The first item names are mapped directly
 	else if (item <= 28)

Modified: scummvm/trunk/engines/kyra/kyra_lok.cpp
===================================================================
--- scummvm/trunk/engines/kyra/kyra_lok.cpp	2010-10-22 02:08:26 UTC (rev 53695)
+++ scummvm/trunk/engines/kyra/kyra_lok.cpp	2010-10-22 02:09:16 UTC (rev 53696)
@@ -260,7 +260,7 @@
 
 	_marbleVaseItem = -1;
 	memset(_foyerItemTable, -1, sizeof(_foyerItemTable));
-	_itemInHand = -1;
+	_itemInHand = kItemNone;
 
 	_currentRoom = 0xFFFF;
 	_scenePhasingFlag = 0;
@@ -373,7 +373,7 @@
 
 	for (int i = 0; i < _roomTableSize; ++i) {
 		for (int item = 0; item < 12; ++item) {
-			_roomTable[i].itemsTable[item] = 0xFF;
+			_roomTable[i].itemsTable[item] = kItemNone;
 			_roomTable[i].itemsXPos[item] = 0xFFFF;
 			_roomTable[i].itemsYPos[item] = 0xFF;
 			_roomTable[i].needInit[item] = 0;
@@ -672,12 +672,13 @@
 				runNpcScript(script);
 				return;
 			}
-			if (_itemInHand != -1) {
+			if (_itemInHand != kItemNone) {
 				if (ypos < 155) {
 					if (hasClickedOnExit(xpos, ypos)) {
 						handleSceneChange(xpos, ypos, 1, 1);
 						return;
 					}
+
 					dropItem(0, _itemInHand, xpos, ypos, 1);
 				}
 			} else {
@@ -691,14 +692,14 @@
 int KyraEngine_LoK::processInputHelper(int xpos, int ypos) {
 	uint8 item = findItemAtPos(xpos, ypos);
 	if (item != 0xFF) {
-		if (_itemInHand == -1) {
+		if (_itemInHand == kItemNone) {
 			_screen->hideMouse();
 			_animator->animRemoveGameItem(item);
 			snd_playSoundEffect(53);
 			assert(_currentCharacter->sceneId < _roomTableSize);
 			Room *currentRoom = &_roomTable[_currentCharacter->sceneId];
 			int item2 = currentRoom->itemsTable[item];
-			currentRoom->itemsTable[item] = 0xFF;
+			currentRoom->itemsTable[item] = kItemNone;
 			setMouseItem(item2);
 			assert(_itemList && _takenList);
 			updateSentenceCommand(_itemList[getItemListIndex(item2)], _takenList[0], 179);
@@ -830,7 +831,7 @@
 			if (mouse.y > 158 || (mouse.x >= 12 && mouse.x < 308 && mouse.y < 136 && mouse.y >= 12) || forceUpdate) {
 				_mouseState = _itemInHand;
 				_screen->hideMouse();
-				if (_itemInHand == -1)
+				if (_itemInHand == kItemNone)
 					_screen->setMouseCursor(1, 1, _shapes[0]);
 				else
 					_screen->setMouseCursor(8, 15, _shapes[216+_itemInHand]);

Modified: scummvm/trunk/engines/kyra/kyra_lok.h
===================================================================
--- scummvm/trunk/engines/kyra/kyra_lok.h	2010-10-22 02:08:26 UTC (rev 53695)
+++ scummvm/trunk/engines/kyra/kyra_lok.h	2010-10-22 02:09:16 UTC (rev 53696)
@@ -30,6 +30,7 @@
 #include "kyra/script.h"
 #include "kyra/screen_lok.h"
 #include "kyra/gui_lok.h"
+#include "kyra/item.h"
 
 namespace Kyra {
 
@@ -46,7 +47,7 @@
 	uint8 height;
 	uint8 facing;
 	uint16 currentAnimFrame;
-	uint8 inventoryItems[10];
+	int8 inventoryItems[10];
 	int16 x1, y1, x2, y2;
 };
 
@@ -62,13 +63,13 @@
 	uint16 eastExit;
 	uint16 southExit;
 	uint16 westExit;
-	uint8 itemsTable[12];
+	int8 itemsTable[12];
 	uint16 itemsXPos[12];
 	uint8 itemsYPos[12];
 	uint8 needInit[12];
 };
 
-struct Item {
+struct ItemDescription {
 	uint8 unk1;
 	uint8 height;
 	uint8 unk2;
@@ -290,9 +291,9 @@
 	// -> mouse item
 	void setHandItem(uint16 item);
 	void removeHandItem();
-	void setMouseItem(uint16 item);
+	void setMouseItem(Item item);
 
-	int getItemListIndex(uint16 item);
+	int getItemListIndex(Item item);
 
 	// -> graphics effects
 	void wipeDownMouseItem(int xpos, int ypos);
@@ -402,7 +403,7 @@
 	bool _menuDirectlyToLoad;
 	uint8 *_itemBkgBackUp[2];
 	uint8 *_shapes[373];
-	int8 _itemInHand;
+	Item _itemInHand;
 	bool _changedScene;
 	int _unkScreenVar1, _unkScreenVar2, _unkScreenVar3;
 	int _beadStateVar;
@@ -455,7 +456,7 @@
 
 	int8 *_sceneAnimTable[50];
 
-	Item _itemTable[145];
+	ItemDescription _itemTable[145];
 	int _lastProcessedItem;
 	int _lastProcessedItemHeight;
 

Modified: scummvm/trunk/engines/kyra/saveload_lok.cpp
===================================================================
--- scummvm/trunk/engines/kyra/saveload_lok.cpp	2010-10-22 02:08:26 UTC (rev 53695)
+++ scummvm/trunk/engines/kyra/saveload_lok.cpp	2010-10-22 02:09:16 UTC (rev 53696)
@@ -80,7 +80,7 @@
 	}
 
 	_marbleVaseItem = in->readSint16BE();
-	_itemInHand = in->readByte();
+	_itemInHand = (int8)in->readByte();
 
 	for (int i = 0; i < 4; ++i)
 		_birthstoneGemTable[i] = in->readByte();
@@ -109,7 +109,7 @@
 
 	for (int i = 0; i < _roomTableSize; ++i) {
 		for (int item = 0; item < 12; ++item) {
-			_roomTable[i].itemsTable[item] = 0xFF;
+			_roomTable[i].itemsTable[item] = kItemNone;
 			_roomTable[i].itemsXPos[item] = 0xFFFF;
 			_roomTable[i].itemsYPos[item] = 0xFF;
 			_roomTable[i].needInit[item] = 0;

Modified: scummvm/trunk/engines/kyra/scene_lok.cpp
===================================================================
--- scummvm/trunk/engines/kyra/scene_lok.cpp	2010-10-22 02:08:26 UTC (rev 53695)
+++ scummvm/trunk/engines/kyra/scene_lok.cpp	2010-10-22 02:09:16 UTC (rev 53696)
@@ -824,13 +824,14 @@
 		_emc->run(&_scriptClick);
 
 	setTextFadeTimerCountdown(-1);
+
 	if (_currentCharacter->sceneId == 210) {
-		if (_itemInHand != -1)
+		if (_itemInHand != kItemNone)
 			magicOutMouseItem(2, -1);
 
 		_screen->hideMouse();
 		for (int i = 0; i < 10; ++i) {
-			if (_currentCharacter->inventoryItems[i] != 0xFF)
+			if (_currentCharacter->inventoryItems[i] != kItemNone)
 				magicOutMouseItem(2, i);
 		}
 		_screen->showMouse();

Modified: scummvm/trunk/engines/kyra/script_lok.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_lok.cpp	2010-10-22 02:08:26 UTC (rev 53695)
+++ scummvm/trunk/engines/kyra/script_lok.cpp	2010-10-22 02:09:16 UTC (rev 53696)
@@ -37,6 +37,7 @@
 #include "kyra/sound.h"
 
 namespace Kyra {
+
 int KyraEngine_LoK::o1_magicInMouseItem(EMCState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "KyraEngine_LoK::o1_magicInMouseItem(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
 	magicInMouseItem(stackPos(0), stackPos(1), -1);
@@ -203,9 +204,7 @@
 
 int KyraEngine_LoK::o1_mouseIsPointer(EMCState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "KyraEngine_LoK::o1_mouseIsPointer(%p) ()", (const void *)script);
-	if (_itemInHand == -1)
-		return 1;
-	return 0;
+	return (_itemInHand == kItemNone);
 }
 
 int KyraEngine_LoK::o1_runSceneAnimUntilDone(EMCState *script) {


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list