aboutsummaryrefslogtreecommitdiff
path: root/engines/lure/res.h
blob: 79b766a06e11baefecb9494596ebb3f33385fe1f (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
/* ScummVM - Scumm Interpreter
 * Copyright (C) 2005-2006 The ScummVM project
 *
 * 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.
 *
 * $URL$
 * $Id$
 *
 */

#ifndef __lure_res_h__
#define __lure_res_h__

#include "lure/luredefs.h"
#include "lure/memory.h"
#include "common/list.h"
#include "lure/res_struct.h"
#include "lure/hotspots.h"
#include "lure/palette.h"

namespace Lure {

enum TalkState {TALK_NONE, TALK_SELECT, TALK_RESPOND, TALK_RESPONSE_WAIT,
	TALK_RESPOND_2};

#define MAX_TALK_SELECTIONS 4
typedef TalkEntryData *TalkSelections[MAX_TALK_SELECTIONS];

class Resources {
private:
	Common::RandomSource _rnd;
	Palette *_paletteSubset;
	MemoryBlock *_cursors;
	RoomDataList _roomData;
	HotspotDataList _hotspotData;
	HotspotOverrideList _hotspotOverrides;
	HotspotAnimList _animData;
	MemoryBlock *_scriptData;
	MemoryBlock *_script2Data;
	MemoryBlock *_messagesData;
	uint16 *_hotspotScriptData;
	RoomExitJoinList _exitJoins;
	HotspotList _activeHotspots;
	ValueTableData _fieldList;
	HotspotActionSet _actionsList;
	TalkHeaderList _talkHeaders;
	TalkDataList _talkData;
	SequenceDelayList _delayList;
	Action _currentAction;
	MemoryBlock *_talkDialogData;
	RoomExitCoordinatesList _coordinateList;

	TalkData *_activeTalkData;
	TalkState _talkState;
	TalkSelections _talkSelections;
	int _talkSelection;
	int _talkStartEntry;
	uint16 _talkingCharacter;

	void freeData();
public:
	Resources();
	~Resources();
	static Resources &getReference();
	void reloadData();

	byte *getResource(uint16 resId);
	RoomDataList &roomData() { return _roomData; }
	RoomData *getRoom(uint16 roomNumber);
	bool checkHotspotExtent(HotspotData *hotspot);
	void insertPaletteSubset(Palette &p);

	byte *getCursor(uint8 cursorNum) { 
		return _cursors->data() + (cursorNum * CURSOR_SIZE);
	}
	HotspotDataList &hotspotData() { return _hotspotData; }
	HotspotOverrideList &hotspotOverrides() { return _hotspotOverrides; }
	HotspotAnimList &animRecords() { return _animData; }
	MemoryBlock *scriptData() { return _scriptData; }
	MemoryBlock *hotspotScriptData() { return _script2Data; }
	MemoryBlock *messagesData() { return _messagesData; }
	uint16 getHotspotScript(uint16 index);
	HotspotList &activeHotspots() { return _activeHotspots; }
	uint16 random() { return _rnd.getRandomNumber(65536) & 0xffff; }
	HotspotData *getHotspot(uint16 hotspotId);
	Hotspot *getActiveHotspot(uint16 hotspotId);
	HotspotOverrideData *getHotspotOverride(uint16 hotspotId);
	HotspotAnimData *getAnimation(uint16 animRecordId);
	RoomExitJoinList &exitJoins() { return _exitJoins; }
	RoomExitJoinData *getExitJoin(uint16 hotspotId);
	uint16 getHotspotAction(uint16 actionsOffset, Action action);
	HotspotActionList *getHotspotActions(uint16 actionsOffset);
	TalkHeaderData *getTalkHeader(uint16 hotspotId);
	ValueTableData &fieldList() { return _fieldList; }
	SequenceDelayList &delayList() { return _delayList; }
	MemoryBlock &getTalkDialogData() { return *_talkDialogData; }
	RoomExitCoordinatesList &coordinateList() { return _coordinateList; }
	void copyCursorTo(Surface *s, uint8 cursorNum, int16 x, int16 y);

	uint16 numInventoryItems();
	void setTalkData(uint16 offset);
	TalkData *getTalkData() { return _activeTalkData; }
	void setTalkState(TalkState state) { _talkState = state; }
	TalkState getTalkState() { return _talkState; }
	TalkSelections &getTalkSelections() { return _talkSelections; }	
	void setTalkSelection(int index) { _talkSelection = index; }
	int getTalkSelection() { return _talkSelection; }
	void setTalkStartEntry(int index) { _talkStartEntry = index; }
	int getTalkStartEntry() { return _talkStartEntry; }
	uint16 getTalkingCharacter() { return _talkingCharacter; }
	void setTalkingCharacter(uint16 id);

	void setCurrentAction(Action action) { _currentAction = action; }
	Action getCurrentAction() { return _currentAction; }
	const char *getCurrentActionStr() { return actionList[_currentAction]; }

	void activateHotspot(uint16 hotspotId);
	Hotspot *addHotspot(uint16 hotspotId);
	void addHotspot(Hotspot *hotspot);
	void deactivateHotspot(uint16 hotspotId, bool isDestId = false);
};

} // End of namespace Lure

#endif