diff options
author | Nicola Mettifogo | 2008-07-29 10:22:50 +0000 |
---|---|---|
committer | Nicola Mettifogo | 2008-07-29 10:22:50 +0000 |
commit | f31cf5d94cb949d02a6ef42dcbadd48cc807ce40 (patch) | |
tree | 218b2295fd0947ff764d1f8cfe3dea8af82b8971 /engines/parallaction/inventory.cpp | |
parent | 0365c45b8c613eb9a84e656b5a4f0eb2be33e5e0 (diff) | |
download | scummvm-rg350-f31cf5d94cb949d02a6ef42dcbadd48cc807ce40.tar.gz scummvm-rg350-f31cf5d94cb949d02a6ef42dcbadd48cc807ce40.tar.bz2 scummvm-rg350-f31cf5d94cb949d02a6ef42dcbadd48cc807ce40.zip |
* Added flexible verb configuration for both NS and BRA.
* Objects can now be really opened and closed in BRA.
svn-id: r33405
Diffstat (limited to 'engines/parallaction/inventory.cpp')
-rw-r--r-- | engines/parallaction/inventory.cpp | 47 |
1 files changed, 29 insertions, 18 deletions
diff --git a/engines/parallaction/inventory.cpp b/engines/parallaction/inventory.cpp index fc2c9fc3eb..7b92974205 100644 --- a/engines/parallaction/inventory.cpp +++ b/engines/parallaction/inventory.cpp @@ -30,20 +30,13 @@ namespace Parallaction { -// -// inventory is a grid made of (at most) 30 cells, 24x24 pixels each, -// arranged in 6 lines -// -// inventory items are stored in cnv files in a 32x24 grid -// but only 24x24 pixels are actually copied to graphic memory -// + /* #define INVENTORYITEM_PITCH 32 #define INVENTORYITEM_WIDTH 24 #define INVENTORYITEM_HEIGHT 24 #define INVENTORY_MAX_ITEMS 30 -#define INVENTORY_FIRST_ITEM 4 // first four entries are used up by verbs #define INVENTORY_ITEMS_PER_LINE 5 #define INVENTORY_LINES 6 @@ -52,12 +45,27 @@ namespace Parallaction { #define INVENTORY_HEIGHT (INVENTORY_LINES*INVENTORYITEM_HEIGHT) */ +InventoryItem _verbs_NS[] = { + { 1, kZoneDoor }, + { 3, kZoneExamine }, + { 2, kZoneGet }, + { 4, kZoneSpeak }, + { 0, 0 } +}; + +InventoryItem _verbs_BR[] = { + { 1, kZoneBox }, + { 2, kZoneGet }, + { 3, kZoneExamine }, + { 4, kZoneSpeak }, + { 0, 0 } +}; + InventoryProperties _invProps_NS = { 32, // INVENTORYITEM_PITCH 24, // INVENTORYITEM_WIDTH 24, // INVENTORYITEM_HEIGHT 30, // INVENTORY_MAX_ITEMS - 4, // INVENTORY_FIRST_ITEM // first four entries are used up by verbs 5, // INVENTORY_ITEMS_PER_LINE 6, // INVENTORY_LINES 5 * 24, // INVENTORY_WIDTH =(INVENTORY_ITEMS_PER_LINE*INVENTORYITEM_WIDTH) @@ -69,7 +77,6 @@ InventoryProperties _invProps_BR = { 51, // INVENTORYITEM_WIDTH 51, // INVENTORYITEM_HEIGHT 48, // INVENTORY_MAX_ITEMS - 4, // INVENTORY_FIRST_ITEM // first four entries are used up by verbs 6, // INVENTORY_ITEMS_PER_LINE 8, // INVENTORY_LINES 6 * 51, // INVENTORY_WIDTH =(INVENTORY_ITEMS_PER_LINE*INVENTORYITEM_WIDTH) @@ -120,14 +127,17 @@ int16 Parallaction::getInventoryItemIndex(int16 pos) { void Parallaction::initInventory() { InventoryProperties *props; + InventoryItem *verbs; if (getGameType() == GType_Nippon) { props = &_invProps_NS; + verbs = _verbs_NS; } else { props = &_invProps_BR; + verbs = _verbs_BR; } - _inventory = new Inventory(props); + _inventory = new Inventory(props, verbs); _inventoryRenderer = new InventoryRenderer(this, props); _inventoryRenderer->bindInventory(_inventory); } @@ -255,13 +265,14 @@ void InventoryRenderer::getItemRect(ItemPosition pos, Common::Rect &r) { } -Inventory::Inventory(InventoryProperties *props) : _numItems(0), _props(props) { +Inventory::Inventory(InventoryProperties *props, InventoryItem *verbs) : _numItems(0), _props(props) { _items = (InventoryItem*)calloc(_props->_maxItems, sizeof(InventoryItem)); - addItem(1, kZoneDoor); - addItem(3, kZoneExamine); - addItem(2, kZoneGet); - addItem(4, kZoneSpeak); + int i = 0; + for ( ; verbs[i]._id; i++) { + addItem(verbs[i]._id, verbs[i]._index); + } + _numVerbs = i; } @@ -331,9 +342,9 @@ void Inventory::removeItem(ItemName name) { void Inventory::clear(bool keepVerbs) { debugC(1, kDebugInventory, "clearInventory()"); - uint first = (keepVerbs ? _props->_firstItem : 0); + uint first = (keepVerbs ? _numVerbs : 0); - for (uint16 slot = first; slot < _props->_maxItems; slot++) { + for (uint16 slot = first; slot < _numVerbs; slot++) { _items[slot]._id = 0; _items[slot]._index = 0; } |