aboutsummaryrefslogtreecommitdiff
path: root/engines/mads/inventory.h
blob: 2897f950e443255d1c3fbac47680da168e232de6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
/* 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.
 *
 */

#ifndef MADS_INVENTORY_H
#define MADS_INVENTORY_H

#include "common/scummsys.h"
#include "common/array.h"
#include "common/serializer.h"

namespace MADS {

enum {
	PLAYER_INVENTORY = 2, NOWHERE = 1
};

class MADSEngine;

#define MAX_VOCAB 5
#define MAX_QUALITIES 4

class InventoryObject {
public:
	int _descId;
	int _roomNumber;
	int _article;
	int _vocabCount;
	int _qualitiesCount;
	int syntax;

	struct {
		int _vocabId;
		VerbType _verbType;
		PrepType _prepType;
	} _vocabList[MAX_VOCAB];

	int _qualityId[MAX_QUALITIES];
	int _qualityValue[MAX_QUALITIES];

	/**
	 * Synchronizes the data for a given object
	 */
	void synchronize(Common::Serializer &s);

	/**
	 * Returns true if the given object has the specified quality
	 */
	bool hasQuality(int qualityId) const;

	/**
	 * Sets the quality value for a given quality Id
	 */
	void setQuality(int qualityId, int qualityValue);

	/**
	 * Gets the quality value for a given quality Id
	 */
	int getQuality(int qualityId) const;
};

class InventoryObjects : public Common::Array<InventoryObject> {
private:
	MADSEngine *_vm;

public:
	SynchronizedList _inventoryList;

	/**
	 * Constructor
	 */
	InventoryObjects(MADSEngine *vm) : _vm(vm) {}

	/**
	 * Loads the game's object list
	 */
	void load();

	/**
	* Synchronize the objects list in a savegame
	*/
	void synchronize(Common::Serializer &s);

	/**
	 * Returns the inventory item from the player's inventory
	 */
	InventoryObject &getItem(int itemIndex) {
		return (*this)[_inventoryList[itemIndex]];
	}

	/**
	 * Sets an item's scene number
	 */
	void setRoom(int objectId, int sceneNumber);

	/**
	 * Returns true if a given object is in the player's current scene
	 */
	bool isInRoom(int objectId) const;

	/**
	 * Returns true if a given object is in the player's inventory
	 */
	bool isInInventory(int objectId) const;

	/**
	* Removes the specified object from the player's inventory
	*/
	void addToInventory(int objectId);

	/**
	 * Removes the specified object to the player's inventory
	 * @param objectId	Object to remove
	 * @param newScene	Specifies the new scene to set the item to
	 */
	void removeFromInventory(int objectId, int newScene);

	int getIdFromDesc(int objectId);
};

} // End of namespace MADS

#endif /* MADS_INVENTORY_H */