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

lordhoto at users.sourceforge.net lordhoto at users.sourceforge.net
Mon Aug 10 19:14:22 CEST 2009


Revision: 43210
          http://scummvm.svn.sourceforge.net/scummvm/?rev=43210&view=rev
Author:   lordhoto
Date:     2009-08-10 17:14:22 +0000 (Mon, 10 Aug 2009)

Log Message:
-----------
Implement item to item name list index mapping for Kyrandia 1 Amiga.

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

Modified: scummvm/trunk/engines/kyra/gui_lok.cpp
===================================================================
--- scummvm/trunk/engines/kyra/gui_lok.cpp	2009-08-10 17:14:03 UTC (rev 43209)
+++ scummvm/trunk/engines/kyra/gui_lok.cpp	2009-08-10 17:14:22 UTC (rev 43210)
@@ -59,7 +59,7 @@
 			_screen->fillRect(_itemPosX[itemOffset], _itemPosY[itemOffset], _itemPosX[itemOffset] + 15, _itemPosY[itemOffset] + 15, _flags.platform == Common::kPlatformAmiga ? 19 : 12);
 			snd_playSoundEffect(0x35);
 			setMouseItem(inventoryItem);
-			updateSentenceCommand(_itemList[inventoryItem], _takenList[0], 179);
+			updateSentenceCommand(_itemList[getItemListIndex(inventoryItem)], _takenList[0], 179);
 			_itemInHand = inventoryItem;
 			_screen->showMouse();
 			_currentCharacter->inventoryItems[itemOffset] = 0xFF;
@@ -73,9 +73,9 @@
 			setMouseItem(inventoryItem);
 			// TODO: Proper support for both taken strings in Amiga version
 			if (_flags.platform == Common::kPlatformAmiga)
-				updateSentenceCommand(_itemList[inventoryItem], _takenList[0], 179);
+				updateSentenceCommand(_itemList[getItemListIndex(inventoryItem)], _takenList[0], 179);
 			else
-				updateSentenceCommand(_itemList[inventoryItem], _takenList[1], 179);
+				updateSentenceCommand(_itemList[getItemListIndex(inventoryItem)], _takenList[1], 179);
 			_screen->showMouse();
 			_currentCharacter->inventoryItems[itemOffset] = _itemInHand;
 			_itemInHand = inventoryItem;
@@ -84,7 +84,7 @@
 			_screen->hideMouse();
 			_screen->drawShape(0, _shapes[216+_itemInHand], _itemPosX[itemOffset], _itemPosY[itemOffset], 0, 0);
 			_screen->setMouseCursor(1, 1, _shapes[0]);
-			updateSentenceCommand(_itemList[_itemInHand], _placedList[0], 179);
+			updateSentenceCommand(_itemList[getItemListIndex(_itemInHand)], _placedList[0], 179);
 			_screen->showMouse();
 			_currentCharacter->inventoryItems[itemOffset] = _itemInHand;
 			_itemInHand = -1;

Modified: scummvm/trunk/engines/kyra/items_lok.cpp
===================================================================
--- scummvm/trunk/engines/kyra/items_lok.cpp	2009-08-10 17:14:03 UTC (rev 43209)
+++ scummvm/trunk/engines/kyra/items_lok.cpp	2009-08-10 17:14:22 UTC (rev 43210)
@@ -414,7 +414,7 @@
 
 	if (unk1 == 0 && unk2 != 0) {
 		assert(_itemList && _droppedList);
-		updateSentenceCommand(_itemList[item], _droppedList[0], 179);
+		updateSentenceCommand(_itemList[getItemListIndex(item)], _droppedList[0], 179);
 	}
 
 	return 1;
@@ -434,7 +434,7 @@
 
 	setMouseItem(_itemInHand);
 	assert(_itemList && _takenList);
-	updateSentenceCommand(_itemList[_itemInHand], _takenList[1], 179);
+	updateSentenceCommand(_itemList[getItemListIndex(_itemInHand)], _takenList[1], 179);
 	_screen->showMouse();
 	clickEventHandler2();
 }
@@ -910,5 +910,61 @@
 	_screen->copyBlockToPage(_screen->_curPage, xpos, ypos, 4<<3, 32, _itemBkgBackUp[1]);
 }
 
+int KyraEngine_LoK::getItemListIndex(uint16 item) {
+	if (_flags.platform != Common::kPlatformAmiga)
+		return item;
+
+	// "Unkown item" is at 81.
+	if (item == 0xFFFF || item == 0xFF)
+		return 81;
+	// The first item names are mapped directly
+	else if (item <= 28)
+		return item;
+	// There's only one string for all "Fireberries"
+	else if (item >= 29 && item <= 33)
+		return 29;
+	// Correct offsets
+	else if (item >= 34 && item <= 59)
+		return item - 4;
+	// There's only one string for all "Red Potion"
+	else if (item >= 60 && item <= 61)
+		return 56;
+	// There's only one string for all "Blue Potion"
+	else if (item >= 62 && item <= 63)
+		return 57;
+	// There's only one string for all "Yellow Potion"
+	else if (item >= 64 && item <= 65)
+		return 58;
+	// Correct offsets
+	else if (item >= 66 && item <= 69)
+		return item - 7;
+	// There's only one string for "Fresh Water"
+	else if (item >= 70 && item <= 71)
+		return 63;
+	// There's only one string for "Salt Water"
+	else if (item >= 72 && item <= 73)
+		return 64;
+	// There's only one string for "Mineral Water"
+	else if (item >= 74 && item <= 75)
+		return 65;
+	// There's only one string for "Magical Water"
+	else if (item >= 76 && item <= 77)
+		return 66;
+	// There's only one string for "Empty Flask"
+	else if (item >= 78 && item <= 79)
+		return 67;
+	// There's only one string for "Scroll"
+	else if (item >= 80 && item <= 89)
+		return 68;
+	// There's only one string for "Parchment scrap"
+	else if (item >= 90 && item <= 94)
+		return 69;
+	// Correct offsets
+	else if (item >= 95)
+		return item - 25;
+
+	return 81;
+}
+
 } // end of namespace Kyra
 

Modified: scummvm/trunk/engines/kyra/kyra_lok.cpp
===================================================================
--- scummvm/trunk/engines/kyra/kyra_lok.cpp	2009-08-10 17:14:03 UTC (rev 43209)
+++ scummvm/trunk/engines/kyra/kyra_lok.cpp	2009-08-10 17:14:22 UTC (rev 43210)
@@ -664,7 +664,7 @@
 			currentRoom->itemsTable[item] = 0xFF;
 			setMouseItem(item2);
 			assert(_itemList && _takenList);
-			updateSentenceCommand(_itemList[item2], _takenList[0], 179);
+			updateSentenceCommand(_itemList[getItemListIndex(item2)], _takenList[0], 179);
 			_itemInHand = item2;
 			_screen->showMouse();
 			clickEventHandler2();

Modified: scummvm/trunk/engines/kyra/kyra_lok.h
===================================================================
--- scummvm/trunk/engines/kyra/kyra_lok.h	2009-08-10 17:14:03 UTC (rev 43209)
+++ scummvm/trunk/engines/kyra/kyra_lok.h	2009-08-10 17:14:22 UTC (rev 43210)
@@ -289,6 +289,8 @@
 	void removeHandItem();
 	void setMouseItem(uint16 item);
 
+	int getItemListIndex(uint16 item);
+
 	// -> graphics effects
 	void wipeDownMouseItem(int xpos, int ypos);
 	void itemSpecialFX(int x, int y, int item);


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