aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra/items_lok.cpp
diff options
context:
space:
mode:
authorJohannes Schickel2010-10-22 02:09:16 +0000
committerJohannes Schickel2010-10-22 02:09:16 +0000
commit3653613443d8def9ae7f552eb799d1f039fd8097 (patch)
treeb8732b6d508e53252596c61d778ac7319f755cf0 /engines/kyra/items_lok.cpp
parent38463e61619fe1e4d2b6c59313d99c40482d7411 (diff)
downloadscummvm-rg350-3653613443d8def9ae7f552eb799d1f039fd8097.tar.gz
scummvm-rg350-3653613443d8def9ae7f552eb799d1f039fd8097.tar.bz2
scummvm-rg350-3653613443d8def9ae7f552eb799d1f039fd8097.zip
KYRA: Add a datatype for the item ids and convert Kyra1 to use it.
svn-id: r53696
Diffstat (limited to 'engines/kyra/items_lok.cpp')
-rw-r--r--engines/kyra/items_lok.cpp46
1 files changed, 27 insertions, 19 deletions
diff --git a/engines/kyra/items_lok.cpp b/engines/kyra/items_lok.cpp
index daa8043bb2..ed6313496c 100644
--- a/engines/kyra/items_lok.cpp
+++ b/engines/kyra/items_lok.cpp
@@ -74,28 +74,30 @@ void KyraEngine_LoK::clearNoDropRects() {
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 @@ byte KyraEngine_LoK::findItemAtPos(int x, int y) {
}
}
}
+
++xposOffset;
++yposOffset;
++itemsTable;
@@ -173,27 +176,28 @@ void KyraEngine_LoK::placeItemInGenericMapScene(int item, int index) {
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 KyraEngine_LoK::countItemsInScene(uint16 sceneId) {
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 @@ int KyraEngine_LoK::processItemDrop(uint16 sceneId, uint8 item, int x, int y, in
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 @@ void KyraEngine_LoK::magicOutMouseItem(int animIndex, int itemPos) {
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 @@ void KyraEngine_LoK::magicOutMouseItem(int animIndex, int itemPos) {
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 @@ void KyraEngine_LoK::magicOutMouseItem(int animIndex, int itemPos) {
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 @@ void KyraEngine_LoK::redrawInventory(int page) {
_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 @@ void KyraEngine_LoK::restoreItemRect1(int xpos, int ypos) {
_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)