diff options
Diffstat (limited to 'engines/kyra')
-rw-r--r-- | engines/kyra/animator_v2.cpp | 2 | ||||
-rw-r--r-- | engines/kyra/gui_hof.cpp | 56 | ||||
-rw-r--r-- | engines/kyra/gui_mr.cpp | 22 | ||||
-rw-r--r-- | engines/kyra/items_hof.cpp | 30 | ||||
-rw-r--r-- | engines/kyra/items_mr.cpp | 42 | ||||
-rw-r--r-- | engines/kyra/items_v2.cpp | 18 | ||||
-rw-r--r-- | engines/kyra/kyra_hof.cpp | 4 | ||||
-rw-r--r-- | engines/kyra/kyra_hof.h | 22 | ||||
-rw-r--r-- | engines/kyra/kyra_mr.cpp | 6 | ||||
-rw-r--r-- | engines/kyra/kyra_mr.h | 16 | ||||
-rw-r--r-- | engines/kyra/kyra_v2.h | 19 | ||||
-rw-r--r-- | engines/kyra/saveload_hof.cpp | 8 | ||||
-rw-r--r-- | engines/kyra/saveload_mr.cpp | 8 | ||||
-rw-r--r-- | engines/kyra/scene_mr.cpp | 8 | ||||
-rw-r--r-- | engines/kyra/script_hof.cpp | 8 | ||||
-rw-r--r-- | engines/kyra/script_mr.cpp | 8 | ||||
-rw-r--r-- | engines/kyra/staticres.cpp | 8 |
17 files changed, 144 insertions, 141 deletions
diff --git a/engines/kyra/animator_v2.cpp b/engines/kyra/animator_v2.cpp index 6c4fafa674..b06dffd36f 100644 --- a/engines/kyra/animator_v2.cpp +++ b/engines/kyra/animator_v2.cpp @@ -141,7 +141,7 @@ void KyraEngine_v2::flagAnimObjsSpecialRefresh() { } void KyraEngine_v2::addItemToAnimList(int item) { - assert(item < _itemListSize); + assert(item >= 0 && item < _itemListSize); restorePage3(); diff --git a/engines/kyra/gui_hof.cpp b/engines/kyra/gui_hof.cpp index 621b3199c5..92b5281fcd 100644 --- a/engines/kyra/gui_hof.cpp +++ b/engines/kyra/gui_hof.cpp @@ -122,9 +122,9 @@ int KyraEngine_HoF::buttonInventory(Button *button) { int inventorySlot = button->index - 6; - uint16 item = _mainCharacter.inventory[inventorySlot]; - if (_itemInHand == -1) { - if (item == 0xFFFF) + Item item = _mainCharacter.inventory[inventorySlot]; + if (_itemInHand == kItemNone) { + if (item == kItemNone) return 0; _screen->hideMouse(); clearInventorySlot(inventorySlot, 0); @@ -134,9 +134,9 @@ int KyraEngine_HoF::buttonInventory(Button *button) { updateCommandLineEx(item+54, string, 0xD6); _itemInHand = (int16)item; _screen->showMouse(); - _mainCharacter.inventory[inventorySlot] = 0xFFFF; + _mainCharacter.inventory[inventorySlot] = kItemNone; } else { - if (_mainCharacter.inventory[inventorySlot] != 0xFFFF) { + if (_mainCharacter.inventory[inventorySlot] != kItemNone) { if (checkInventoryItemExchange(_itemInHand, inventorySlot)) return 0; @@ -160,7 +160,7 @@ int KyraEngine_HoF::buttonInventory(Button *button) { updateCommandLineEx(_itemInHand+54, string, 0xD6); _screen->showMouse(); _mainCharacter.inventory[inventorySlot] = _itemInHand; - _itemInHand = -1; + _itemInHand = kItemNone; } } @@ -168,15 +168,15 @@ int KyraEngine_HoF::buttonInventory(Button *button) { } int KyraEngine_HoF::scrollInventory(Button *button) { - uint16 *src = _mainCharacter.inventory; - uint16 *dst = &_mainCharacter.inventory[10]; - uint16 temp[5]; - - memcpy(temp, src, sizeof(uint16)*5); - memcpy(src, src+5, sizeof(uint16)*5); - memcpy(src+5, dst, sizeof(uint16)*5); - memcpy(dst, dst+5, sizeof(uint16)*5); - memcpy(dst+5, temp, sizeof(uint16)*5); + Item *src = _mainCharacter.inventory; + Item *dst = &_mainCharacter.inventory[10]; + Item temp[5]; + + memcpy(temp, src, sizeof(Item)*5); + memcpy(src, src+5, sizeof(Item)*5); + memcpy(src+5, dst, sizeof(Item)*5); + memcpy(dst, dst+5, sizeof(Item)*5); + memcpy(dst+5, temp, sizeof(Item)*5); _screen->hideMouse(); _screen->copyRegion(0x46, 0x90, 0x46, 0x90, 0x71, 0x2E, 0, 2); _screen->showMouse(); @@ -185,7 +185,7 @@ int KyraEngine_HoF::scrollInventory(Button *button) { return 0; } -int KyraEngine_HoF::getInventoryItemSlot(uint16 item) { +int KyraEngine_HoF::getInventoryItemSlot(Item item) { for (int i = 0; i < 20; ++i) { if (_mainCharacter.inventory[i] == item) return i; @@ -195,14 +195,14 @@ int KyraEngine_HoF::getInventoryItemSlot(uint16 item) { int KyraEngine_HoF::findFreeVisibleInventorySlot() { for (int i = 0; i < 10; ++i) { - if (_mainCharacter.inventory[i] == 0xFFFF) + if (_mainCharacter.inventory[i] == kItemNone) return i; } return -1; } void KyraEngine_HoF::removeSlotFromInventory(int slot) { - _mainCharacter.inventory[slot] = 0xFFFF; + _mainCharacter.inventory[slot] = kItemNone; if (slot < 10) { _screen->hideMouse(); clearInventorySlot(slot, 0); @@ -210,21 +210,21 @@ void KyraEngine_HoF::removeSlotFromInventory(int slot) { } } -bool KyraEngine_HoF::checkInventoryItemExchange(uint16 handItem, int slot) { +bool KyraEngine_HoF::checkInventoryItemExchange(Item handItem, int slot) { bool removeItem = false; - uint16 newItem = 0xFFFF; + Item newItem = kItemNone; - uint16 invItem = _mainCharacter.inventory[slot]; + Item invItem = _mainCharacter.inventory[slot]; for (const uint16 *table = _itemMagicTable; *table != 0xFFFF; table += 4) { - if (table[0] != handItem || table[1] != invItem) + if (table[0] != handItem || table[1] != (uint16)invItem) continue; if (table[3] == 0xFFFF) continue; removeItem = (table[3] == 1); - newItem = table[2]; + newItem = (Item)table[2]; snd_playSoundEffect(0x68); _mainCharacter.inventory[slot] = newItem; @@ -246,7 +246,7 @@ bool KyraEngine_HoF::checkInventoryItemExchange(uint16 handItem, int slot) { return false; } -void KyraEngine_HoF::drawInventoryShape(int page, uint16 item, int slot) { +void KyraEngine_HoF::drawInventoryShape(int page, Item item, int slot) { _screen->drawShape(page, getShapePtr(item+64), _inventoryX[slot], _inventoryY[slot], 0, 0); _screen->updateScreen(); } @@ -260,11 +260,11 @@ void KyraEngine_HoF::redrawInventory(int page) { int pageBackUp = _screen->_curPage; _screen->_curPage = page; - const uint16 *inventory = _mainCharacter.inventory; + const Item *inventory = _mainCharacter.inventory; _screen->hideMouse(); for (int i = 0; i < 10; ++i) { clearInventorySlot(i, page); - if (inventory[i] != 0xFFFF) { + if (inventory[i] != kItemNone) { _screen->drawShape(page, getShapePtr(inventory[i]+64), _inventoryX[i], _inventoryY[i], 0, 0); drawInventoryShape(page, inventory[i], i); } @@ -734,7 +734,7 @@ int GUI_HoF::optionsButton(Button *button) { if (_loadedSave) { if (_restartGame) - _vm->_itemInHand = -1; + _vm->_itemInHand = kItemNone; } else { restorePage1(_vm->_screenBuffer); restorePalette(); @@ -820,7 +820,7 @@ void GUI_HoF::resetState(int item) { _vm->setNextIdleAnimTimer(); _isDeathMenu = false; if (!_loadedSave) { - _vm->_itemInHand = -1; + _vm->_itemInHand = kItemNone; _vm->setHandItem(item); } else { _vm->setHandItem(_vm->_itemInHand); diff --git a/engines/kyra/gui_mr.cpp b/engines/kyra/gui_mr.cpp index bcc74f5a07..03102ddfd3 100644 --- a/engines/kyra/gui_mr.cpp +++ b/engines/kyra/gui_mr.cpp @@ -130,7 +130,7 @@ void KyraEngine_MR::showMessageFromCCode(int string, uint8 c0, int) { showMessage((const char *)getTableEntry(_cCodeFile, string), c0, 0xF0); } -void KyraEngine_MR::updateItemCommand(int item, int str, uint8 c0) { +void KyraEngine_MR::updateItemCommand(Item item, int str, uint8 c0) { char buffer[100]; char *src = (char *)getTableEntry(_itemFile, item); @@ -449,7 +449,7 @@ void KyraEngine_MR::redrawInventory(int page) { for (int i = 0; i < 10; ++i) { clearInventorySlot(i, page); - if (_mainCharacter.inventory[i] != 0xFFFF) { + if (_mainCharacter.inventory[i] != kItemNone) { _screen->drawShape(page, getShapePtr(_mainCharacter.inventory[i]+248), _inventoryX[i], _inventoryY[i] + yOffset, 0, 0); drawInventorySlot(page, _mainCharacter.inventory[i], i); } @@ -472,7 +472,7 @@ void KyraEngine_MR::clearInventorySlot(int slot, int page) { _screen->drawShape(page, getShapePtr(slot+422), _inventoryX[slot], _inventoryY[slot] + yOffset, 0, 0); } -void KyraEngine_MR::drawInventorySlot(int page, int item, int slot) { +void KyraEngine_MR::drawInventorySlot(int page, Item item, int slot) { int yOffset = 0; if (page == 30) { page = 2; @@ -488,9 +488,9 @@ int KyraEngine_MR::buttonInventory(Button *button) { return 0; const int slot = button->index - 5; - const int16 slotItem = (int16)_mainCharacter.inventory[slot]; - if (_itemInHand == -1) { - if (slotItem == -1) + const Item slotItem = _mainCharacter.inventory[slot]; + if (_itemInHand == kItemNone) { + if (slotItem == kItemNone) return 0; _screen->hideMouse(); @@ -499,7 +499,7 @@ int KyraEngine_MR::buttonInventory(Button *button) { setMouseCursor(slotItem); updateItemCommand(slotItem, (_lang == 1) ? getItemCommandStringPickUp(slotItem) : 0, 0xFF); _itemInHand = slotItem; - _mainCharacter.inventory[slot] = 0xFFFF; + _mainCharacter.inventory[slot] = kItemNone; _screen->showMouse(); } else if (_itemInHand == 27) { if (_chatText) @@ -528,7 +528,7 @@ int KyraEngine_MR::buttonInventory(Button *button) { updateItemCommand(_itemInHand, (_lang == 1) ? getItemCommandStringInv(_itemInHand) : 2, 0xFF); _screen->showMouse(); _mainCharacter.inventory[slot] = _itemInHand; - _itemInHand = -1; + _itemInHand = kItemNone; } } @@ -635,7 +635,7 @@ int KyraEngine_MR::buttonJesterStaff(Button *button) { updateItemCommand(27, 2, 0xFF); setGameFlag(0x97); _screen->showMouse(); - } else if (_itemInHand == -1) { + } else if (_itemInHand == kItemNone) { if (queryGameFlag(0x97)) { _screen->hideMouse(); snd_playSoundEffect(0x0B, 0xC8); @@ -1141,7 +1141,7 @@ void GUI_MR::resetState(int item) { _vm->setNextIdleAnimTimer(); _isDeathMenu = false; if (!_loadedSave) { - _vm->_itemInHand = -1; + _vm->_itemInHand = kItemNone; _vm->setHandItem(item); } else { _vm->setHandItem(_vm->_itemInHand); @@ -1239,7 +1239,7 @@ int GUI_MR::optionsButton(Button *button) { if (_loadedSave) { if (_restartGame) - _vm->_itemInHand = -1; + _vm->_itemInHand = kItemNone; } else { restorePage1(_vm->_screenBuffer); } diff --git a/engines/kyra/items_hof.cpp b/engines/kyra/items_hof.cpp index 876db58716..2ae784b0e1 100644 --- a/engines/kyra/items_hof.cpp +++ b/engines/kyra/items_hof.cpp @@ -31,9 +31,9 @@ int KyraEngine_HoF::checkItemCollision(int x, int y) { int itemPos = -1, yPos = -1; for (int i = 0; i < 30; ++i) { - const Item &curItem = _itemList[i]; + const ItemDefinition &curItem = _itemList[i]; - if (curItem.id == 0xFFFF || curItem.sceneId != _mainCharacter.sceneId) + if (curItem.id == kItemNone || curItem.sceneId != _mainCharacter.sceneId) continue; int itemX1 = curItem.x - 8 - 3; @@ -79,7 +79,7 @@ void KyraEngine_HoF::updateWaterFlasks() { } } -bool KyraEngine_HoF::dropItem(int unk1, uint16 item, int x, int y, int unk2) { +bool KyraEngine_HoF::dropItem(int unk1, Item item, int x, int y, int unk2) { if (_mouseState <= -1) return false; @@ -93,7 +93,7 @@ bool KyraEngine_HoF::dropItem(int unk1, uint16 item, int x, int y, int unk2) { return success; } -bool KyraEngine_HoF::processItemDrop(uint16 sceneId, uint16 item, int x, int y, int unk1, int unk2) { +bool KyraEngine_HoF::processItemDrop(uint16 sceneId, Item item, int x, int y, int unk1, int unk2) { int itemPos = checkItemCollision(x, y); if (unk1) @@ -108,7 +108,7 @@ bool KyraEngine_HoF::processItemDrop(uint16 sceneId, uint16 item, int x, int y, if (unk1 != 3) { for (int i = 0; i < 30; ++i) { - if (_itemList[i].id == 0xFFFF) { + if (_itemList[i].id == kItemNone) { freeItemSlot = i; break; } @@ -200,7 +200,7 @@ bool KyraEngine_HoF::processItemDrop(uint16 sceneId, uint16 item, int x, int y, return true; } -void KyraEngine_HoF::itemDropDown(int startX, int startY, int dstX, int dstY, int itemSlot, uint16 item) { +void KyraEngine_HoF::itemDropDown(int startX, int startY, int dstX, int dstY, int itemSlot, Item item) { uint8 *itemShape = getShapePtr(item + 64); if (startX == dstX && startY == dstY) { @@ -335,7 +335,7 @@ bool KyraEngine_HoF::pickUpItem(int x, int y) { _screen->hideMouse(); deleteItemAnimEntry(itemPos); int itemId = _itemList[itemPos].id; - _itemList[itemPos].id = 0xFFFF; + _itemList[itemPos].id = kItemNone; snd_playSoundEffect(0x0b); setMouseCursor(itemId); int str2 = 7; @@ -368,8 +368,8 @@ bool KyraEngine_HoF::isDropable(int x, int y) { return true; } -int KyraEngine_HoF::getItemCommandStringDrop(uint16 item) { - assert(item < _itemStringMapSize); +int KyraEngine_HoF::getItemCommandStringDrop(Item item) { + assert(item >= 0 && item < _itemStringMapSize); int stringId = _itemStringMap[item]; static const int dropStringIds[] = { @@ -380,8 +380,8 @@ int KyraEngine_HoF::getItemCommandStringDrop(uint16 item) { return dropStringIds[stringId]; } -int KyraEngine_HoF::getItemCommandStringPickUp(uint16 item) { - assert(item < _itemStringMapSize); +int KyraEngine_HoF::getItemCommandStringPickUp(Item item) { + assert(item >= 0 && item < _itemStringMapSize); int stringId = _itemStringMap[item]; static const int pickUpStringIds[] = { @@ -392,8 +392,8 @@ int KyraEngine_HoF::getItemCommandStringPickUp(uint16 item) { return pickUpStringIds[stringId]; } -int KyraEngine_HoF::getItemCommandStringInv(uint16 item) { - assert(item < _itemStringMapSize); +int KyraEngine_HoF::getItemCommandStringInv(Item item) { + assert(item >= 0 && item < _itemStringMapSize); int stringId = _itemStringMap[item]; static const int pickUpStringIds[] = { @@ -404,8 +404,8 @@ int KyraEngine_HoF::getItemCommandStringInv(uint16 item) { return pickUpStringIds[stringId]; } -bool KyraEngine_HoF::itemIsFlask(int item) { - for (int i = 0; _flaskTable[i] != -1; ++i) { +bool KyraEngine_HoF::itemIsFlask(Item item) { + for (int i = 0; _flaskTable[i] != kItemNone; ++i) { if (_flaskTable[i] == item) return true; } diff --git a/engines/kyra/items_mr.cpp b/engines/kyra/items_mr.cpp index 256753cc69..144982335d 100644 --- a/engines/kyra/items_mr.cpp +++ b/engines/kyra/items_mr.cpp @@ -29,7 +29,7 @@ namespace Kyra { void KyraEngine_MR::removeTrashItems() { - for (int i = 0; _trashItemList[i] != 0xFF; ++i) { + for (int i = 0; _trashItemList[i] != kItemNone; ++i) { for (int item = findItem(_trashItemList[i]); item != -1; item = findItem(_trashItemList[i])) { if (_itemList[item].sceneId != _mainCharacter.sceneId) resetItem(item); @@ -41,7 +41,7 @@ void KyraEngine_MR::removeTrashItems() { int KyraEngine_MR::findFreeInventorySlot() { for (int i = 0; i < 10; ++i) { - if (_mainCharacter.inventory[i] == 0xFFFF) + if (_mainCharacter.inventory[i] == kItemNone) return i; } return -1; @@ -52,7 +52,7 @@ int KyraEngine_MR::checkItemCollision(int x, int y) { int maxItemY = -1; for (int i = 0; i < 50; ++i) { - if (_itemList[i].id == 0xFFFF || _itemList[i].sceneId != _mainCharacter.sceneId) + if (_itemList[i].id == kItemNone || _itemList[i].sceneId != _mainCharacter.sceneId) continue; const int x1 = _itemList[i].x - 11; @@ -94,13 +94,13 @@ void KyraEngine_MR::setMouseCursor(uint16 item) { void KyraEngine_MR::setItemMouseCursor() { _mouseState = _itemInHand; - if (_itemInHand == -1) + if (_itemInHand == kItemNone) _screen->setMouseCursor(0, 0, _gameShapes[0]); else _screen->setMouseCursor(12, 19, _gameShapes[_itemInHand+248]); } -bool KyraEngine_MR::dropItem(int unk1, uint16 item, int x, int y, int unk2) { +bool KyraEngine_MR::dropItem(int unk1, Item item, int x, int y, int unk2) { if (_mouseState <= -1) return false; @@ -123,7 +123,7 @@ bool KyraEngine_MR::dropItem(int unk1, uint16 item, int x, int y, int unk2) { return false; } -bool KyraEngine_MR::processItemDrop(uint16 sceneId, uint16 item, int x, int y, int unk1, int unk2) { +bool KyraEngine_MR::processItemDrop(uint16 sceneId, Item item, int x, int y, int unk1, int unk2) { int itemPos = checkItemCollision(x, y); if (unk1) @@ -138,7 +138,7 @@ bool KyraEngine_MR::processItemDrop(uint16 sceneId, uint16 item, int x, int y, i if (unk2 != 3) { for (int i = 0; i < 50; ++i) { - if (_itemList[i].id == 0xFFFF) { + if (_itemList[i].id == kItemNone) { freeItemSlot = i; break; } @@ -227,7 +227,7 @@ bool KyraEngine_MR::processItemDrop(uint16 sceneId, uint16 item, int x, int y, i return true; } -void KyraEngine_MR::itemDropDown(int startX, int startY, int dstX, int dstY, int itemSlot, uint16 item, int remove) { +void KyraEngine_MR::itemDropDown(int startX, int startY, int dstX, int dstY, int itemSlot, Item item, int remove) { if (startX == dstX && startY == dstY) { _itemList[itemSlot].x = dstX; _itemList[itemSlot].y = dstY; @@ -323,7 +323,7 @@ void KyraEngine_MR::exchangeMouseItem(int itemPos, int runScript) { _screen->hideMouse(); deleteItemAnimEntry(itemPos); - int itemId = _itemList[itemPos].id; + Item itemId = _itemList[itemPos].id; _itemList[itemPos].id = _itemInHand; _itemInHand = itemId; @@ -353,8 +353,8 @@ bool KyraEngine_MR::pickUpItem(int x, int y, int runScript) { } else { _screen->hideMouse(); deleteItemAnimEntry(itemPos); - int itemId = _itemList[itemPos].id; - _itemList[itemPos].id = 0xFFFF; + Item itemId = _itemList[itemPos].id; + _itemList[itemPos].id = kItemNone; snd_playSoundEffect(0x0B, 0xC8); setMouseCursor(itemId); int itemString = 0; @@ -387,8 +387,9 @@ bool KyraEngine_MR::isDropable(int x, int y) { return true; } -bool KyraEngine_MR::itemListMagic(int handItem, int itemSlot) { - uint16 item = _itemList[itemSlot].id; +bool KyraEngine_MR::itemListMagic(Item handItem, int itemSlot) { + Item item = _itemList[itemSlot].id; + if (_currentChapter == 1 && handItem == 3 && item == 3 && queryGameFlag(0x76)) { eelScript(); return true; @@ -410,7 +411,7 @@ bool KyraEngine_MR::itemListMagic(int handItem, int itemSlot) { } deleteItemAnimEntry(itemSlot); - _itemList[itemSlot].id = 0xFFFF; + _itemList[itemSlot].id = kItemNone; _screen->showMouse(); return true; } @@ -430,7 +431,7 @@ bool KyraEngine_MR::itemListMagic(int handItem, int itemSlot) { } for (int i = 0; _itemMagicTable[i] != 0xFF; i += 4) { - if (_itemMagicTable[i+0] != handItem || _itemMagicTable[i+1] != item) + if (_itemMagicTable[i+0] != handItem || (int8)_itemMagicTable[i+1] != item) continue; uint8 resItem = _itemMagicTable[i+2]; @@ -438,7 +439,7 @@ bool KyraEngine_MR::itemListMagic(int handItem, int itemSlot) { snd_playSoundEffect(0x0F, 0xC8); - _itemList[itemSlot].id = (resItem == 0xFF) ? 0xFFFF : resItem; + _itemList[itemSlot].id = (int8)resItem; _screen->hideMouse(); deleteItemAnimEntry(itemSlot); @@ -465,8 +466,9 @@ bool KyraEngine_MR::itemListMagic(int handItem, int itemSlot) { return false; } -bool KyraEngine_MR::itemInventoryMagic(int handItem, int invSlot) { - uint16 item = _mainCharacter.inventory[invSlot]; +bool KyraEngine_MR::itemInventoryMagic(Item handItem, int invSlot) { + Item item = _mainCharacter.inventory[invSlot]; + if (_currentChapter == 1 && handItem == 3 && item == 3 && queryGameFlag(0x76)) { eelScript(); return true; @@ -482,7 +484,7 @@ bool KyraEngine_MR::itemInventoryMagic(int handItem, int invSlot) { delay(1*_tickLength, true); } - _mainCharacter.inventory[invSlot] = 0xFFFF; + _mainCharacter.inventory[invSlot] = kItemNone; clearInventorySlot(invSlot, 0); _screen->showMouse(); return true; @@ -497,7 +499,7 @@ bool KyraEngine_MR::itemInventoryMagic(int handItem, int invSlot) { snd_playSoundEffect(0x0F, 0xC8); - _mainCharacter.inventory[invSlot] = (resItem == 0xFF) ? 0xFFFF : resItem; + _mainCharacter.inventory[invSlot] = (int8)resItem; _screen->hideMouse(); clearInventorySlot(invSlot, 0); diff --git a/engines/kyra/items_v2.cpp b/engines/kyra/items_v2.cpp index 29901b2ddb..92308d1f07 100644 --- a/engines/kyra/items_v2.cpp +++ b/engines/kyra/items_v2.cpp @@ -31,9 +31,9 @@ namespace Kyra { void KyraEngine_v2::initItemList(int size) { delete[] _itemList; - _itemList = new Item[size]; + _itemList = new ItemDefinition[size]; assert(_itemList); - memset(_itemList, 0, sizeof(Item)*size); + memset(_itemList, 0, sizeof(ItemDefinition)*size); _itemListSize = size; resetItemList(); @@ -41,7 +41,7 @@ void KyraEngine_v2::initItemList(int size) { int KyraEngine_v2::findFreeItem() { for (int i = 0; i < _itemListSize; ++i) { - if (_itemList[i].id == 0xFFFF) + if (_itemList[i].id == kItemNone) return i; } return -1; @@ -50,13 +50,13 @@ int KyraEngine_v2::findFreeItem() { int KyraEngine_v2::countAllItems() { int num = 0; for (int i = 0; i < _itemListSize; ++i) { - if (_itemList[i].id != 0xFFFF) + if (_itemList[i].id != kItemNone) ++num; } return num; } -int KyraEngine_v2::findItem(uint16 sceneId, uint16 id) { +int KyraEngine_v2::findItem(uint16 sceneId, Item id) { for (int i = 0; i < _itemListSize; ++i) { if (_itemList[i].id == id && _itemList[i].sceneId == sceneId) return i; @@ -64,7 +64,7 @@ int KyraEngine_v2::findItem(uint16 sceneId, uint16 id) { return -1; } -int KyraEngine_v2::findItem(uint16 item) { +int KyraEngine_v2::findItem(Item item) { for (int i = 0; i < _itemListSize; ++i) { if (_itemList[i].id == item) return i; @@ -78,7 +78,7 @@ void KyraEngine_v2::resetItemList() { } void KyraEngine_v2::resetItem(int index) { - _itemList[index].id = 0xFFFF; + _itemList[index].id = kItemNone; _itemList[index].sceneId = 0xFFFF; _itemList[index].x = 0; _itemList[index].y = 0; @@ -102,8 +102,8 @@ void KyraEngine_v2::removeHandItem() { Screen *scr = screen(); scr->hideMouse(); scr->setMouseCursor(0, 0, getShapePtr(0)); - _itemInHand = -1; - _mouseState = -1; + _itemInHand = kItemNone; + _mouseState = kItemNone; scr->showMouse(); } diff --git a/engines/kyra/kyra_hof.cpp b/engines/kyra/kyra_hof.cpp index 8159fc0347..8b09e9bcdd 100644 --- a/engines/kyra/kyra_hof.cpp +++ b/engines/kyra/kyra_hof.cpp @@ -74,7 +74,7 @@ KyraEngine_HoF::KyraEngine_HoF(OSystem *system, const GameFlags &flags) : KyraEn _mainCharX = _mainCharY = -1; _drawNoShapeFlag = false; _charPalEntry = 0; - _itemInHand = -1; + _itemInHand = kItemNone; _unkSceneScreenFlag1 = false; _noScriptEnter = true; _currentChapter = 0; @@ -790,7 +790,7 @@ void KyraEngine_HoF::updateMouse() { if ((mouse.y > 145) || (mouse.x > 6 && mouse.x < 312 && mouse.y > 6 && mouse.y < 135)) { _mouseState = _itemInHand; _screen->hideMouse(); - if (_itemInHand == -1) + if (_itemInHand == kItemNone) _screen->setMouseCursor(0, 0, getShapePtr(0)); else _screen->setMouseCursor(8, 15, getShapePtr(_itemInHand+64)); diff --git a/engines/kyra/kyra_hof.h b/engines/kyra/kyra_hof.h index 05d04fe993..02ac0a0fff 100644 --- a/engines/kyra/kyra_hof.h +++ b/engines/kyra/kyra_hof.h @@ -450,9 +450,9 @@ protected: int checkItemCollision(int x, int y); void updateWaterFlasks(); - bool dropItem(int unk1, uint16 item, int x, int y, int unk2); - bool processItemDrop(uint16 sceneId, uint16 item, int x, int y, int unk1, int unk2); - void itemDropDown(int startX, int startY, int dstX, int dstY, int itemSlot, uint16 item); + bool dropItem(int unk1, Item item, int x, int y, int unk2); + bool processItemDrop(uint16 sceneId, Item item, int x, int y, int unk1, int unk2); + void itemDropDown(int startX, int startY, int dstX, int dstY, int itemSlot, Item item); void exchangeMouseItem(int itemPos); bool pickUpItem(int x, int y); @@ -461,18 +461,18 @@ protected: static const byte _itemStringMap[]; static const int _itemStringMapSize; - static const int16 _flaskTable[]; - bool itemIsFlask(int item); + static const Item _flaskTable[]; + bool itemIsFlask(Item item); // inventory static const int _inventoryX[]; static const int _inventoryY[]; static const uint16 _itemMagicTable[]; - int getInventoryItemSlot(uint16 item); + int getInventoryItemSlot(Item item); void removeSlotFromInventory(int slot); - bool checkInventoryItemExchange(uint16 item, int slot); - void drawInventoryShape(int page, uint16 item, int slot); + bool checkInventoryItemExchange(Item item, int slot); + void drawInventoryShape(int page, Item item, int slot); void clearInventorySlot(int slot, int page); void redrawInventory(int page); void scrollInventoryWheel(); @@ -561,9 +561,9 @@ protected: void changeFileExtension(char *buffer); // - Just used in French version - int getItemCommandStringDrop(uint16 item); - int getItemCommandStringPickUp(uint16 item); - int getItemCommandStringInv(uint16 item); + int getItemCommandStringDrop(Item item); + int getItemCommandStringPickUp(Item item); + int getItemCommandStringInv(Item item); // - char _internStringBuf[200]; diff --git a/engines/kyra/kyra_mr.cpp b/engines/kyra/kyra_mr.cpp index d24ecff83d..99240167e7 100644 --- a/engines/kyra/kyra_mr.cpp +++ b/engines/kyra/kyra_mr.cpp @@ -99,7 +99,7 @@ KyraEngine_MR::KyraEngine_MR(OSystem *system, const GameFlags &flags) : KyraEngi _unk5 = 0; _unkSceneScreenFlag1 = false; _noScriptEnter = true; - _itemInHand = _mouseState = -1; + _itemInHand = _mouseState = kItemNone; _savedMouseState = -1; _unk4 = 0; _loadingState = false; @@ -1167,8 +1167,8 @@ void KyraEngine_MR::updateMouse() { } if (hasItemCollision && _mouseState < -1 && _itemInHand < 0) { - _mouseState = -1; - _itemInHand = -1; + _mouseState = kItemNone; + _itemInHand = kItemNone; _screen->setMouseCursor(0, 0, _gameShapes[0]); } diff --git a/engines/kyra/kyra_mr.h b/engines/kyra/kyra_mr.h index 36b937f2a8..0bf4bcc253 100644 --- a/engines/kyra/kyra_mr.h +++ b/engines/kyra/kyra_mr.h @@ -235,7 +235,7 @@ private: void showMessage(const char *string, uint8 c0, uint8 c1); void showMessageFromCCode(int string, uint8 c0, int); - void updateItemCommand(int item, int str, uint8 c0); + void updateItemCommand(Item item, int str, uint8 c0); void updateCommandLine(); void restoreCommandLine(); @@ -262,7 +262,7 @@ private: static const uint8 _inventoryY[]; void redrawInventory(int page); void clearInventorySlot(int slot, int page); - void drawInventorySlot(int page, int item, int slot); + void drawInventorySlot(int page, Item item, int slot); WSAMovie_v2 *_invWsa; int _invWsaFrame; @@ -284,24 +284,24 @@ private: int8 *_itemBuffer1; int8 *_itemBuffer2; - static const uint8 _trashItemList[]; + static const Item _trashItemList[]; void removeTrashItems(); void initItems(); int checkItemCollision(int x, int y); - bool dropItem(int unk1, uint16 item, int x, int y, int unk2); - bool processItemDrop(uint16 sceneId, uint16 item, int x, int y, int unk1, int unk2); - void itemDropDown(int startX, int startY, int dstX, int dstY, int itemSlot, uint16 item, int remove); + bool dropItem(int unk1, Item item, int x, int y, int unk2); + bool processItemDrop(uint16 sceneId, Item item, int x, int y, int unk1, int unk2); + void itemDropDown(int startX, int startY, int dstX, int dstY, int itemSlot, Item item, int remove); void exchangeMouseItem(int itemPos, int runScript); bool pickUpItem(int x, int y, int runScript); bool isDropable(int x, int y); const uint8 *_itemMagicTable; - bool itemListMagic(int handItem, int itemSlot); - bool itemInventoryMagic(int handItem, int invSlot); + bool itemListMagic(Item handItem, int itemSlot); + bool itemInventoryMagic(Item handItem, int invSlot); const uint8 *_itemStringMap; int _itemStringMapSize; diff --git a/engines/kyra/kyra_v2.h b/engines/kyra/kyra_v2.h index 697a4aa88c..d1a81fd64c 100644 --- a/engines/kyra/kyra_v2.h +++ b/engines/kyra/kyra_v2.h @@ -29,6 +29,7 @@ #include "kyra/kyra_v1.h" #include "kyra/gui.h" #include "kyra/wsamovie.h" +#include "kyra/item.h" #include "common/list.h" #include "common/hashmap.h" @@ -41,7 +42,7 @@ struct FrameControl { }; struct ItemAnimData_v2 { - int16 itemIndex; + Item itemIndex; uint8 numFrames; const FrameControl *frames; }; @@ -69,7 +70,7 @@ public: int animScriptFrameAdd; // Item specific - int maxItemId; + Item maxItemId; }; KyraEngine_v2(OSystem *system, const GameFlags &flags, const EngineDesc &desc); @@ -286,8 +287,8 @@ protected: int _pathfinderPositionIndexTable[200]; // items - struct Item { - uint16 id; + struct ItemDefinition { + Item id; uint16 sceneId; int16 x; uint8 y; @@ -295,9 +296,9 @@ protected: void initItemList(int size); - uint16 _hiddenItems[100]; + Item _hiddenItems[100]; - Item *_itemList; + ItemDefinition *_itemList; int _itemListSize; int _itemInHand; @@ -306,8 +307,8 @@ protected: int findFreeItem(); int countAllItems(); - int findItem(uint16 sceneId, uint16 id); - int findItem(uint16 item); + int findItem(uint16 sceneId, Item id); + int findItem(Item item); void resetItemList(); void resetItem(int index); @@ -325,7 +326,7 @@ protected: uint8 facing; uint16 animFrame; byte walkspeed; - uint16 inventory[20]; + Item inventory[20]; int16 x1, y1; int16 x2, y2; int16 x3, y3; diff --git a/engines/kyra/saveload_hof.cpp b/engines/kyra/saveload_hof.cpp index 2d276cc6a4..37678540b6 100644 --- a/engines/kyra/saveload_hof.cpp +++ b/engines/kyra/saveload_hof.cpp @@ -64,7 +64,7 @@ Common::Error KyraEngine_HoF::saveGameState(int slot, const char *saveName, cons for (int i = 0; i < 25; ++i) out->writeSint16BE(_cauldronTable[i]); for (int i = 0; i < 20; ++i) - out->writeUint16BE(_hiddenItems[i]); + out->writeSint16BE(_hiddenItems[i]); for (int i = 0; i < 19; ++i) out->write(_conversationState[i], 14); out->write(_newSceneDlgState, 32); @@ -83,7 +83,7 @@ Common::Error KyraEngine_HoF::saveGameState(int slot, const char *saveName, cons out->writeSint16BE(_mainCharacter.y2); for (int i = 0; i < 30; ++i) { - out->writeUint16BE(_itemList[i].id); + out->writeSint16BE(_itemList[i].id); out->writeUint16BE(_itemList[i].sceneId); out->writeSint16BE(_itemList[i].x); out->writeByte(_itemList[i].y); @@ -183,7 +183,7 @@ Common::Error KyraEngine_HoF::loadGameState(int slot) { for (int i = 0; i < 25; ++i) _cauldronTable[i] = in.readSint16(); for (int i = 0; i < 20; ++i) - _hiddenItems[i] = in.readUint16(); + _hiddenItems[i] = in.readSint16(); if (header.originalSave) { assert(sizeof(_flagsTable) >= 0x41); @@ -222,7 +222,7 @@ Common::Error KyraEngine_HoF::loadGameState(int slot) { _mainCharacter.y2 = in.readSint16(); for (int i = 0; i < 30; ++i) { - _itemList[i].id = in.readUint16(); + _itemList[i].id = in.readSint16(); _itemList[i].sceneId = in.readUint16(); _itemList[i].x = in.readSint16(); _itemList[i].y = in.readByte(); diff --git a/engines/kyra/saveload_mr.cpp b/engines/kyra/saveload_mr.cpp index 737c83c33d..26453bb274 100644 --- a/engines/kyra/saveload_mr.cpp +++ b/engines/kyra/saveload_mr.cpp @@ -55,7 +55,7 @@ Common::Error KyraEngine_MR::saveGameState(int slot, const char *saveName, const out->write(_conversationState[i], 30); out->write(_newSceneDlgState, 40); for (int i = 0; i < 100; ++i) - out->writeUint16BE(_hiddenItems[i]); + out->writeSint16BE(_hiddenItems[i]); out->write(_scoreFlagTable, 26); out->writeUint16BE(_mainCharacter.sceneId); @@ -74,7 +74,7 @@ Common::Error KyraEngine_MR::saveGameState(int slot, const char *saveName, const out->writeSint16BE(_mainCharacter.y3); for (int i = 0; i < 50; ++i) { - out->writeUint16BE(_itemList[i].id); + out->writeSint16BE(_itemList[i].id); out->writeUint16BE(_itemList[i].sceneId); out->writeSint16BE(_itemList[i].x); out->writeSint16BE(_itemList[i].y); @@ -189,7 +189,7 @@ Common::Error KyraEngine_MR::loadGameState(int slot) { } for (int i = 0; i < 100; ++i) - _hiddenItems[i] = in.readUint16(); + _hiddenItems[i] = in.readSint16(); if (header.originalSave) in.read(_flagsTable, 69); @@ -216,7 +216,7 @@ Common::Error KyraEngine_MR::loadGameState(int slot) { _mainCharacter.y3 = in.readSint16(); for (int i = 0; i < 50; ++i) { - _itemList[i].id = in.readUint16(); + _itemList[i].id = in.readSint16(); _itemList[i].sceneId = in.readUint16(); _itemList[i].x = in.readSint16(); _itemList[i].y = in.readSint16(); diff --git a/engines/kyra/scene_mr.cpp b/engines/kyra/scene_mr.cpp index 95243e9d5c..f1ea79f49b 100644 --- a/engines/kyra/scene_mr.cpp +++ b/engines/kyra/scene_mr.cpp @@ -176,8 +176,8 @@ void KyraEngine_MR::enterNewScene(uint16 sceneId, int facing, int unk1, int unk2 setNextIdleAnimTimer(); if (_itemInHand < 0) { - _itemInHand = -1; - _mouseState = -1; + _itemInHand = kItemNone; + _mouseState = kItemNone; _screen->setMouseCursor(0, 0, _gameShapes[0]); } @@ -556,8 +556,8 @@ void KyraEngine_MR::initSceneAnims(int unk1) { for (int i = 0; i < 50; ++i) { obj = &_animObjects[i+17]; - const Item &item = _itemList[i]; - if (item.id != 0xFFFF && item.sceneId == _mainCharacter.sceneId) { + const ItemDefinition &item = _itemList[i]; + if (item.id != kItemNone && item.sceneId == _mainCharacter.sceneId) { obj->xPos1 = item.x; obj->yPos1 = item.y; animSetupPaletteEntry(obj); diff --git a/engines/kyra/script_hof.cpp b/engines/kyra/script_hof.cpp index f30f5787e7..d57bb7efc5 100644 --- a/engines/kyra/script_hof.cpp +++ b/engines/kyra/script_hof.cpp @@ -410,7 +410,7 @@ int KyraEngine_HoF::o2_countItemsInScene(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "KyraEngine_HoF::o2_countItemsInScene(%p) (%d)", (const void *)script, stackPos(0)); int count = 0; for (int i = 0; i < 30; ++i) { - if (_itemList[i].sceneId == stackPos(0) && _itemList[i].id != 0xFFFF) + if (_itemList[i].sceneId == stackPos(0) && _itemList[i].id != kItemNone) ++count; } return count; @@ -1039,7 +1039,7 @@ int KyraEngine_HoF::o2_setColorCodeValue(EMCState *script) { int KyraEngine_HoF::o2_countItemInstances(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "KyraEngine_HoF::o2_countItemInstances(%p) (%d)", (const void *)script, stackPos(0)); - uint16 item = stackPos(0); + Item item = stackPos(0); int count = 0; for (int i = 0; i < 20; ++i) { @@ -1047,7 +1047,7 @@ int KyraEngine_HoF::o2_countItemInstances(EMCState *script) { ++count; } - if (_itemInHand == int16(item)) + if (_itemInHand == item) ++count; for (int i = 0; i < 30; ++i) { @@ -1075,7 +1075,7 @@ int KyraEngine_HoF::o2_removeItemFromScene(EMCState *script) { const uint16 item = stackPos(1); for (int i = 0; i < 30; ++i) { if (_itemList[i].sceneId == scene && _itemList[i].id == item) - _itemList[i].id = 0xFFFF; + _itemList[i].id = kItemNone; } return 0; } diff --git a/engines/kyra/script_mr.cpp b/engines/kyra/script_mr.cpp index ae125b5b99..fb6bd4ebe7 100644 --- a/engines/kyra/script_mr.cpp +++ b/engines/kyra/script_mr.cpp @@ -216,7 +216,7 @@ int KyraEngine_MR::o3_removeInventoryItemInstances(EMCState *script) { const int item = stackPos(0); for (int i = 0; i < 10; ++i) { if (_mainCharacter.inventory[i] == item) - _mainCharacter.inventory[i] = 0xFFFF; + _mainCharacter.inventory[i] = kItemNone; } return 0; } @@ -594,7 +594,7 @@ int KyraEngine_MR::o3_updateConversations(EMCState *script) { int KyraEngine_MR::o3_removeItemSlot(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "KyraEngine_MR::o3_removeItemSlot(%p) (%d)", (const void *)script, stackPos(0)); deleteItemAnimEntry(stackPos(0)); - _itemList[stackPos(0)].id = 0xFFFF; + _itemList[stackPos(0)].id = kItemNone; return 1; } @@ -642,7 +642,7 @@ int KyraEngine_MR::o3_removeItemInstances(EMCState *script) { for (int i = 0; i < 10; ++i) { if (_mainCharacter.inventory[i] == item) { - _mainCharacter.inventory[i] = 0xFFFF; + _mainCharacter.inventory[i] = kItemNone; ++deleted; } } @@ -654,7 +654,7 @@ int KyraEngine_MR::o3_removeItemInstances(EMCState *script) { for (int i = 0; i < 50; ++i) { if (_itemList[i].id == item) { - _itemList[i].id = 0xFFFF; + _itemList[i].id = kItemNone; ++deleted; } } diff --git a/engines/kyra/staticres.cpp b/engines/kyra/staticres.cpp index a06b488c86..7906dc07dc 100644 --- a/engines/kyra/staticres.cpp +++ b/engines/kyra/staticres.cpp @@ -1866,9 +1866,9 @@ const uint8 KyraEngine_HoF::_cauldronStateTable[] = { 3, 3, 3, 3, 3, 3, 3 }; -const int16 KyraEngine_HoF::_flaskTable[] = { +const Item KyraEngine_HoF::_flaskTable[] = { 0x19, 0x14, 0x15, 0x16, 0x17, 0x18, 0x34, - 0x1B, 0x39, 0x1A, 0x3A, 0x4D, 0x72, -1 + 0x1B, 0x39, 0x1A, 0x3A, 0x4D, 0x72, kItemNone }; const uint8 KyraEngine_HoF::_rainbowRoomData[] = { @@ -1964,10 +1964,10 @@ const uint8 KyraEngine_MR::_inventoryY[] = { 0xB2, 0xB2, 0xB2, 0xB2, 0xB2 }; -const uint8 KyraEngine_MR::_trashItemList[] = { +const Item KyraEngine_MR::_trashItemList[] = { 0x1E, 0x1D, 0x1C, 0x1F, 0x0F, 0x05, 0x04, 0x00, 0x03, 0x22, 0x0B, 0x20, 0x21, 0x10, 0x11, 0x3A, - 0x39, 0x40, 0x3E, 0x3D, 0x3C, 0x3F, 0xFF + 0x39, 0x40, 0x3E, 0x3D, 0x3C, 0x3F, kItemNone }; const uint8 KyraEngine_MR::_itemStringPickUp[] = { |