1 /* ScummVM - Graphic Adventure Engine
2  *
3  * ScummVM is the legal property of its developers, whose names
4  * are too numerous to list here. Please refer to the COPYRIGHT
5  * file distributed with this source distribution.
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20  *
21  */
22 
23 #ifndef SUPERNOVA_ROOMS_H
24 #define SUPERNOVA_ROOMS_H
25 
26 #include "common/str.h"
27 
28 #include "supernova/msn_def.h"
29 #include "supernova/room.h"
30 
31 namespace Common {
32 class ReadStream;
33 class WriteStream;
34 }
35 
36 namespace Supernova {
37 
38 class GameManager1;
39 class SupernovaEngine;
40 
41 class Room1: public Room {
42 	public:
43 		Room1();
44 	protected:
45 		GameManager1 *_gm;
46 	int _dialogsX[6];
47 };
48 
49 // Room 0
50 class Intro : public Room1 {
51 public:
52 	Intro(SupernovaEngine *vm, GameManager1 *gm);
53 	virtual void onEntrance();
54 
55 private:
56 	bool animate(int section1, int section2, int duration);
57 	bool animate(int section1, int section2, int duration, MessagePosition position,
58 				 int text);
59 	bool animate(int section1, int section2, int section3, int section4, int duration,
60 				 MessagePosition position, int text);
61 
62 	void titleScreen();
63 	void titleFadeIn();
64 	void cutscene();
65 	void leaveCutscene();
66 
67 	bool _shouldExit;
68 	Common::String _introText;
69 };
70 
71 // Spaceship
72 class ShipCorridor : public Room1 {
73 public:
74 	ShipCorridor(SupernovaEngine *vm, GameManager1 *gm);
75 
76 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
77 
78 private:
79 };
80 
81 class ShipHall: public Room1 {
82 public:
83 	ShipHall(SupernovaEngine *vm, GameManager1 *gm);
84 
85 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
86 
87 private:
88 };
89 
90 class ShipSleepCabin: public Room1 {
91 public:
92 	ShipSleepCabin(SupernovaEngine *vm, GameManager1 *gm);
93 
94 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
95 	virtual void animation();
96 	virtual void onEntrance();
97 
98 private:
99 	byte _color;
100 };
101 
102 class ShipCockpit : public Room1 {
103 public:
104 	ShipCockpit(SupernovaEngine *vm, GameManager1 *gm);
105 
106 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
107 	virtual void animation();
108 	virtual void onEntrance();
109 
110 private:
111 	byte _color;
112 };
113 
114 class ShipCabinL1: public Room1 {
115 public:
116 	ShipCabinL1(SupernovaEngine *vm, GameManager1 *gm);
117 
118 private:
119 };
120 
121 class ShipCabinL2 : public Room1 {
122 public:
123 	ShipCabinL2(SupernovaEngine *vm, GameManager1 *gm);
124 
125 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
126 
127 private:
128 };
129 
130 class ShipCabinL3 : public Room1 {
131 public:
132 	ShipCabinL3(SupernovaEngine *vm, GameManager1 *gm);
133 
134 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
135 
136 private:
137 };
138 
139 class ShipCabinR1 : public Room1 {
140 public:
141 	ShipCabinR1(SupernovaEngine *vm, GameManager1 *gm);
142 
143 private:
144 };
145 
146 class ShipCabinR2 : public Room1 {
147 public:
148 	ShipCabinR2(SupernovaEngine *vm, GameManager1 *gm);
149 
150 private:
151 };
152 
153 class ShipCabinR3 : public Room1 {
154 public:
155 	ShipCabinR3(SupernovaEngine *vm, GameManager1 *gm);
156 
157 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
158 	virtual void onEntrance();
159 
160 private:
161 };
162 
163 class ShipCabinBathroom : public Room1  {
164 public:
165 	ShipCabinBathroom(SupernovaEngine *vm, GameManager1 *gm);
166 
167 private:
168 };
169 
170 class ShipAirlock : public Room1 {
171 public:
172 	ShipAirlock(SupernovaEngine *vm, GameManager1 *gm);
173 
174 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
175 	virtual void onEntrance();
176 
177 private:
178 };
179 
180 class ShipHold : public Room1 {
181 public:
182 	ShipHold(SupernovaEngine *vm, GameManager1 *gm);
183 
184 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
185 	virtual void onEntrance();
186 
187 private:
188 };
189 
190 class ShipLandingModule : public Room1 {
191 public:
192 	ShipLandingModule(SupernovaEngine *vm, GameManager1 *gm);
193 
194 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
195 
196 private:
197 };
198 
199 class ShipGenerator : public Room1 {
200 public:
201 	ShipGenerator(SupernovaEngine *vm, GameManager1 *gm);
202 
203 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
204 
205 private:
206 };
207 
208 class ShipOuterSpace : public Room1 {
209 public:
210 	ShipOuterSpace(SupernovaEngine *vm, GameManager1 *gm);
211 
212 private:
213 };
214 
215 
216 // Arsano
217 class ArsanoRocks : public Room1 {
218 public:
219 	ArsanoRocks(SupernovaEngine *vm, GameManager1 *gm);
220 
221 	virtual void onEntrance();
222 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
223 
224 private:
225 };
226 
227 class ArsanoCave : public Room1 {
228 public:
229 	ArsanoCave(SupernovaEngine *vm, GameManager1 *gm);
230 
231 private:
232 };
233 
234 class ArsanoMeetup : public Room1 {
235 public:
236 	ArsanoMeetup(SupernovaEngine *vm, GameManager1 *gm);
237 
238 	virtual void onEntrance();
239 	virtual void animation();
240 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
241 
242 private:
243 	byte _sign;
244 	byte _beacon;
245 };
246 
247 class ArsanoEntrance : public Room1 {
248 public:
249 	ArsanoEntrance(SupernovaEngine *vm, GameManager1 *gm);
250 
251 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
252 	virtual void animation();
253 
254 private:
255 	int _dialog1[5];
256 	int _dialog2[5];
257 	int _dialog3[5];
258 	byte _eyewitness;
259 };
260 
261 class ArsanoRemaining : public Room1 {
262 public:
263 	ArsanoRemaining(SupernovaEngine *vm, GameManager1 *gm);
264 
265 	virtual void animation();
266 
267 private:
268 	bool _chewing;
269 	int _i;
270 };
271 
272 class ArsanoRoger : public Room1 {
273 public:
274 	ArsanoRoger(SupernovaEngine *vm, GameManager1 *gm);
275 
276 	virtual void animation();
277 	virtual void onEntrance();
278 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
279 
280 private:
281 	int _dialog1[4];
282 	byte _eyewitness;
283 	byte _hands;
284 };
285 
286 class ArsanoGlider : public Room1 {
287 public:
288 	ArsanoGlider(SupernovaEngine *vm, GameManager1 *gm);
289 
290 	virtual void animation();
291 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
292 
293 private:
294 	byte _sinus;
295 };
296 
297 class ArsanoMeetup2 : public Room1 {
298 public:
299 	ArsanoMeetup2(SupernovaEngine *vm, GameManager1 *gm);
300 
301 	virtual void onEntrance();
302 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
303 
304 	void shipStart();
305 
306 private:
307 	// TODO: change to 6, fix initialization
308 	int _dialog1[2];
309 	int _dialog2[2];
310 	int _dialog3[4];
311 	int _dialog4[3];
312 };
313 
314 class ArsanoMeetup3 : public Room1 {
315 public:
316 	ArsanoMeetup3(SupernovaEngine *vm, GameManager1 *gm);
317 
318 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
319 
320 private:
321 	int _dialog2[4];
322 	int _dialog3[2];
323 };
324 
325 
326 // Axacuss
327 class AxacussCell : public Room1 {
328 public:
329 	AxacussCell(SupernovaEngine *vm, GameManager1 *gm);
330 
331 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
332 	virtual void animation();
333 	virtual void onEntrance();
334 
335 private:
336 };
337 
338 class AxacussCorridor1 : public Room1 {
339 public:
340 	AxacussCorridor1(SupernovaEngine *vm, GameManager1 *gm);
341 
342 	virtual void onEntrance();
343 
344 private:
345 };
346 
347 class AxacussCorridor2 : public Room1 {
348 public:
349 	AxacussCorridor2(SupernovaEngine *vm, GameManager1 *gm);
350 
351 	virtual void onEntrance();
352 
353 private:
354 };
355 
356 class AxacussCorridor3 : public Room1 {
357 public:
358 	AxacussCorridor3(SupernovaEngine *vm, GameManager1 *gm);
359 
360 	virtual void onEntrance();
361 
362 private:
363 };
364 
365 class AxacussCorridor4 : public Room1 {
366 public:
367 	AxacussCorridor4(SupernovaEngine *vm, GameManager1 *gm);
368 
369 	virtual void onEntrance();
370 	virtual void animation();
371 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
372 
373 private:
374 };
375 
376 class AxacussCorridor5 : public Room1 {
377 public:
378 	AxacussCorridor5(SupernovaEngine *vm, GameManager1 *gm);
379 
380 	virtual void onEntrance();
381 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
382 
383 private:
384 	void stopInteract(int sum);
385 	bool handleMoneyDialog();
386 
387 	// TODO: Change to 6, or change struct, and fix initialization
388 	int _dialog1[2];
389 	int _dialog2[2];
390 	int _dialog3[4];
391 
392 	byte _rows[6];
393 
394 };
395 
396 class AxacussCorridor6 : public Room1 {
397 public:
398 	AxacussCorridor6(SupernovaEngine *vm, GameManager1 *gm);
399 
400 	virtual void onEntrance();
401 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
402 
403 private:
404 };
405 
406 class AxacussCorridor7 : public Room1 {
407 public:
408 	AxacussCorridor7(SupernovaEngine *vm, GameManager1 *gm);
409 
410 	virtual void onEntrance();
411 
412 private:
413 };
414 
415 class AxacussCorridor8 : public Room1 {
416 public:
417 	AxacussCorridor8(SupernovaEngine *vm, GameManager1 *gm);
418 
419 	virtual void onEntrance();
420 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
421 
422 private:
423 };
424 
425 class AxacussCorridor9 : public Room1 {
426 public:
427 	AxacussCorridor9(SupernovaEngine *vm, GameManager1 *gm);
428 
429 	virtual void onEntrance();
430 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
431 
432 private:
433 };
434 
435 class AxacussBcorridor : public Room1 {
436 public:
437 	AxacussBcorridor(SupernovaEngine *vm, GameManager1 *gm);
438 
439 	virtual void onEntrance();
440 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
441 
442 private:
443 };
444 
445 class AxacussIntersection : public Room1 {
446 public:
447 	AxacussIntersection(SupernovaEngine *vm, GameManager1 *gm);
448 
449 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
450 };
451 
452 class AxacussExit : public Room1 {
453 public:
454 	AxacussExit(SupernovaEngine *vm, GameManager1 *gm);
455 
456 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
457 };
458 
459 class AxacussOffice1 : public Room1 {
460 public:
461 	AxacussOffice1(SupernovaEngine *vm, GameManager1 *gm);
462 
463 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
464 
465 private:
466 };
467 
468 class AxacussOffice2 : public Room1 {
469 public:
470 	AxacussOffice2(SupernovaEngine *vm, GameManager1 *gm);
471 
472 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
473 
474 private:
475 };
476 
477 class AxacussOffice3 : public Room1 {
478 public:
479 	AxacussOffice3(SupernovaEngine *vm, GameManager1 *gm);
480 
481 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
482 
483 private:
484 };
485 
486 class AxacussOffice4 : public Room1 {
487 public:
488 	AxacussOffice4(SupernovaEngine *vm, GameManager1 *gm);
489 
490 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
491 
492 private:
493 };
494 
495 class AxacussOffice5 : public Room1 {
496 public:
497 	AxacussOffice5(SupernovaEngine *vm, GameManager1 *gm);
498 
499 	virtual void onEntrance();
500 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
501 
502 private:
503 };
504 
505 class AxacussElevator : public Room1 {
506 public:
507 	AxacussElevator(SupernovaEngine *vm, GameManager1 *gm);
508 
509 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
510 
511 private:
512 };
513 
514 class AxacussStation : public Room1 {
515 public:
516 	AxacussStation(SupernovaEngine *vm, GameManager1 *gm);
517 
518 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
519 
520 private:
521 };
522 
523 class AxacussSign : public Room1 {
524 public:
525 	AxacussSign(SupernovaEngine *vm, GameManager1 *gm);
526 
527 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
528 
529 private:
530 };
531 
532 class Outro : public Room1 {
533 public:
534 	Outro(SupernovaEngine *vm, GameManager1 *gm);
535 
536 	virtual void onEntrance();
537 	virtual void animation();
538 
539 private:
540 	void animate(int filenumber, int section1, int section2, int duration);
541 	void animate(int filenumber, int section1, int section2, int duration, MessagePosition position,
542 				 const char *text);
543 	void animate(int filenumber, int section1, int section2, int section3, int section4, int duration,
544 				 MessagePosition position, const char *text);
545 
546 	Common::String _outroText;
547 };
548 
549 }
550 #endif // SUPERNOVA_ROOMS_H
551