aboutsummaryrefslogtreecommitdiff
path: root/engines/tsage/scene_logic.h
blob: 512e3bd8339dd6490f8ff86dfde4417dbc8afae3 (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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
/* 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.
 *
 * $URL: https://scummvm-misc.svn.sourceforge.net/svnroot/scummvm-misc/trunk/engines/tsage/scene_logic.h $
 * $Id: scene_logic.h 232 2011-02-12 11:56:38Z dreammaster $
 *
 */

#ifndef TSAGE_SCENE_LOGIC_H
#define TSAGE_SCENE_LOGIC_H

#include "common/scummsys.h"
#include "tsage/events.h"
#include "tsage/core.h"
#include "tsage/scenes.h"
#include "tsage/globals.h"

namespace tSage {

class SceneFactory {
public:
	static Scene *createScene(int sceneNumber);
};

class DisplayHotspot: public SceneHotspot {
private:
	Common::Array<int> _actions;
	bool performAction(int action);
public:
	DisplayHotspot(int regionId, ...);

	virtual void doAction(int action) { 
		if (!performAction(action))
			SceneHotspot::doAction(action);
	}
};

/*--------------------------------------------------------------------------*/

class Scene10: public Scene {
	/* Actions */
	class Scene10_Action1: public Action {
	public:
		virtual void signal();
	};
	class Scene10_Action2: public Action {
	public:
		virtual void signal();
	};
public:
	Speaker _speakerSText;
	Speaker _speakerQText;
	Scene10_Action1 _action1;
	Scene10_Action2 _action2;
	SceneObject _object1, _object2, _object3;
	SceneObject _object4, _object5, _object6;

	virtual void stripCallback(int v);
	virtual void postInit(SceneObjectList *OwnerList = NULL);
};

class Scene15: public Scene {
	/* Actions */
	class Scene15_Action1: public Action {
	public:
		virtual void signal();
		virtual void dispatch();
	};
public:
	Scene15_Action1 _action1;
	SceneObject _object1;
	SoundHandler _soundHandler;

	virtual void postInit(SceneObjectList *OwnerList = NULL);
};

class Scene20: public Scene {
	/* Actions */
	class Scene20_Action1: public Action {
	public:
		virtual void signal();
	};
	class Scene20_Action2: public Action {
	public:
		virtual void signal();
	};
	class Scene20_Action3: public Action {
	public:
		virtual void signal();
	};
	class Scene20_Action4: public Action {
	public:
		virtual void signal();
	};
public:
	SequenceManager _sequenceManager;
	SpeakerQText _speakerQText;
	SpeakerGameText _speakerGameText;
	Scene20_Action1 _action1;
	Scene20_Action2 _action2;
	Scene20_Action3 _action3;
	Scene20_Action4 _action4;
	SceneObject _sceneObject1, _sceneObject2, _sceneObject3, _sceneObject4, _sceneObject5;
	SoundHandler _sound;
public:
	Scene20();
	virtual ~Scene20() {}

	virtual void postInit(SceneObjectList *OwnerList = NULL);
	virtual void signal();
};

class Scene30: public Scene {
	/* Scene objects */
	// Doorway beam sensor
	class Scene30_beam: public SceneObject {
	public:
		virtual void doAction(int action) {
			if (action == OBJECT_SCANNER)
				display(30, 14, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END);
			else if (action == CURSOR_LOOK)
				display(30, 2, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END);
			else if (action == CURSOR_USE) {
				Scene30 *parent = (Scene30 *)_globals->_sceneManager._scene;
				parent->setAction(&parent->_beamAction);
			} else
				SceneObject::doAction(action);
		}
	};

	// Doorway object
	class Scene30_door: public SceneObject {
	public:
		virtual void doAction(int action) {
			if (action == OBJECT_SCANNER)
				display(30, 13, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END);
			else if (action == CURSOR_LOOK)
				display(30, 1, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END);
			else if (action == CURSOR_USE)
				display(30, 7, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END);
			else
				SceneObject::doAction(action);
		}
	};

	// Kzin object
	class Scene30_kzin: public SceneObject {
	public:
		virtual void doAction(int action);
	};

	/* Actions */
	class Scene30_beamAction: public Action {
	public:
		virtual void signal();
	};
	class Scene30_kzinAction: public Action {
	public:
		virtual void signal();
	};
	class Scene30_ringAction: public Action {
	public:
		virtual void signal();
	};
	class Scene30_talkAction: public Action {
	public:
		virtual void signal();
	};

public:
	SoundHandler _sound;
	DisplayHotspot _groundHotspot, _wallsHotspot, _courtyardHotspot, _treeHotspot;
	Scene30_beam _beam;
	Scene30_door _door;
	Scene30_kzin _kzin;

	Scene30_beamAction _beamAction;
	Scene30_kzinAction _kzinAction;
	Scene30_ringAction _ringAction;
	Scene30_talkAction _talkAction;
	SequenceManager _sequenceManager;

	SpeakerSR _speakerSR;
	SpeakerQL _speakerQL;
	SpeakerSText _speakerSText;
	SpeakerQText _speakerQText;
public:
	Scene30();
	virtual ~Scene30() {}

	virtual void postInit(SceneObjectList *OwnerList = NULL);
	virtual void signal();
};

class Scene40: public Scene {
	/* Actions */
	class Scene40_Action1: public Action {
	public:
		virtual void signal();
	};
	class Scene40_Action2: public Action {
	public:
		virtual void signal();
	};
	class Scene40_Action3: public Action {
	public:
		virtual void signal();
	};
	class Scene40_Action4: public Action {
	public:
		virtual void signal();
	};
	class Scene40_Action5: public Action {
	public:
		virtual void signal();
	};
	class Scene40_Action6: public Action {
	public:
		virtual void signal();
	};
	class Scene40_Action7: public Action {
	public:
		virtual void signal();
	};
	class Scene40_Action8: public Action {
	public:
		virtual void signal();
	};

	/* Objects */
	class Scene40_DyingKzin: public SceneObject {
	public:
		virtual void doAction(int action);
	};
	class Scene40_Assassin: public SceneObject {
	public:
		virtual void doAction(int action);
	};

	/* Items */
	class Scene40_Item2: public SceneItem {
	public:
		virtual void doAction(int action);
	};
	class Scene40_Item6: public SceneItem {
	public:
		virtual void doAction(int action);
	};
	class Scene40_Item8: public SceneItem {
	public:
		virtual void doAction(int action);
	};
public:
	SequenceManager _sequenceManager;
	SpeakerSL _speakerSL;
	SpeakerQR _speakerQR;
	SpeakerQText _speakerQText;
	SpeakerSText _speakerSText;
	SpeakerGameText _speakerGameText;
	SoundHandler _soundHandler;
	Scene40_Action1 _action1;
	Scene40_Action2 _action2;
	Scene40_Action3 _action3;
	Scene40_Action4 _action4;
	Scene40_Action5 _action5;
	Scene40_Action6 _action6;
	Scene40_Action7 _action7;
	Scene40_Action8 _action8;
	SceneObject _object1, _object2, _object3;
	Scene40_DyingKzin _dyingKzin;
	Scene40_Assassin _assassin;
	SceneObject _doorway, _object7, _object8;
	DisplayHotspot _item1;
	Scene40_Item2 _item2;
	DisplayHotspot _item3, _item4, _item5;
	Scene40_Item6 _item6;
	DisplayHotspot _item7, _item8;

	Scene40();
	virtual void postInit(SceneObjectList *OwnerList = NULL);
	virtual void signal();
	virtual void dispatch();
};

class Scene50: public Scene {
	/* Actions */
	class Scene50_Action1: public Action {
	public:
		virtual void signal();
	};
	class Scene50_Action2: public Action {
	public:
		virtual void signal();
	};
	class Scene50_Action3: public Action {
	public:
		virtual void signal();
	};
	
	/* Objects */
	class Scene50_Object1: public SceneObject {
	public:
		virtual void doAction(int action);
	};
	class Scene50_Object2: public SceneObject {
	public:
		virtual void doAction(int action);
	};
	class Scene50_Object3: public SceneObject {
	public:
		virtual void doAction(int action);
	};
	class Scene50_Object4: public SceneObject {
	public:
		virtual void doAction(int action);
	};

public:
	SequenceManager _sequenceManager;
	Scene50_Action1 _action1;
	Scene50_Action2 _action2;
	Scene50_Action3 _action3;
	Scene50_Object1 _object1;
	Scene50_Object2 _object2;
	Scene50_Object3 _object3;
	Scene50_Object4 _object4;
	Rect _doorwayRect;
	SpeakerSText _speakerSText;
	SpeakerQText _speakerQText;
	DisplayHotspot _item0, _item1, _item2;
	DisplayHotspot _item3, _item4, _item5;

	Scene50();
	virtual void postInit(SceneObjectList *OwnerList = NULL);
	virtual void signal();
	virtual void dispatch();
};

class Scene1000: public Scene {
	/* Actions */
	class Scene1000_Action1: public Action {
	public:
		virtual void signal();
	};
	class Scene1000_Action2: public Action {
	public:
		virtual void signal();
	};
	class Scene1000_Action3: public Action {
	private:
		void zoom(bool up);
	public:
		virtual void signal();
	};

public:
	SceneObject _object1, _object2, _object3, _object4;
	Scene1000_Action1 _action1;
	Scene1000_Action2 _action2;
	Scene1000_Action3 _action3;

	virtual void postInit(SceneObjectList *OwnerList = NULL);
};

} // End of namespace tSage

#endif