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 #ifdef TSAGE_SHERLOCK_ENABLED
24 #include "tsage/sherlock/sherlock_logo.h"
25 #include "tsage/scenes.h"
26 #include "tsage/tsage.h"
27 
28 namespace TsAGE {
29 
30 namespace Sherlock {
31 
start()32 void SherlockLogo::start() {
33 	GLOBALS._gfxFontNumber = -1;
34 	GLOBALS.gfxManager().setDefaults();
35 
36 	// Start the demo's single scene
37 	g_globals->_sceneManager.changeScene(1);
38 
39 	g_globals->_events.setCursor(CURSOR_NONE);
40 }
41 
createScene(int sceneNumber)42 Scene *SherlockLogo::createScene(int sceneNumber) {
43 	// The demo only has a single scene, so ignore the scene number and always return it
44 	return new SherlockLogoScene();
45 }
46 
canLoadGameStateCurrently()47 bool SherlockLogo::canLoadGameStateCurrently() {
48 	return false;
49 }
50 
canSaveGameStateCurrently()51 bool SherlockLogo::canSaveGameStateCurrently() {
52 	return false;
53 }
54 
processEvent(Event & event)55 void SherlockLogo::processEvent(Event &event) {
56 	if (event.eventType == EVENT_BUTTON_DOWN || (event.eventType == EVENT_KEYPRESS &&
57 			event.kbd.keycode == Common::KEYCODE_ESCAPE))
58 		quitGame();
59 }
60 
quitGame()61 void SherlockLogo::quitGame() {
62 	g_vm->quitGame();
63 }
64 
65 /*--------------------------------------------------------------------------*/
66 
postInit(SceneObjectList * OwnerList)67 void SherlockSceneHandler::postInit(SceneObjectList *OwnerList) {
68 	_delayTicks = 2;
69 
70 	GLOBALS._soundManager.postInit();
71 	GLOBALS._soundManager.buildDriverList(true);
72 	GLOBALS._soundManager.installConfigDrivers();
73 
74 	GLOBALS._sceneManager.setNewScene(10);
75 	GLOBALS._game->start();
76 }
77 
78 /*--------------------------------------------------------------------------*/
79 
setVisage(const Common::String & name)80 void Object::setVisage(const Common::String &name) {
81 	int visageNum = atoi(name.c_str());
82 	SceneObject::setVisage(visageNum);
83 }
84 
85 /*--------------------------------------------------------------------------*/
86 
signal()87 void SherlockLogoScene::Action1::signal() {
88 	SherlockLogoScene &scene = *(SherlockLogoScene *)GLOBALS._sceneManager._scene;
89 
90 	switch (_actionIndex++) {
91 	case 0:
92 		// Load scene palette
93 		GLOBALS._scenePalette.loadPalette(1111);
94 		GLOBALS._scenePalette.loadPalette(1);
95 		GLOBALS._scenePalette.refresh();
96 		setDelay(1);
97 		break;
98 
99 	case 1:
100 		// Fade in the spotlight background
101 		GLOBALS._scenePalette.addFader(scene._palette1._palette, 256, 6, this);
102 		break;
103 
104 	case 2:
105 		// First half of square, circle, and triangle bouncing
106 		scene._object1.postInit();
107 		scene._object1.setVisage("0016.vis");
108 		scene._object1._strip = 1;
109 		scene._object1._frame = 1;
110 		scene._object1.setPosition(Common::Point(169, 107));
111 		scene._object1.changeZoom(100);
112 		scene._object1._numFrames = 7;
113 		scene._object1.animate(ANIM_MODE_5, this);
114 		break;
115 
116 	case 3:
117 		// Remainder of bouncing square, circle, and triangle coming to rest
118 		scene._object1._strip = 2;
119 		scene._object1._frame = 1;
120 		scene._object1.changeZoom(100);
121 		scene._object1.animate(ANIM_MODE_4, 11, 1, this);
122 		break;
123 
124 	case 4:
125 		// Fade out background without fading out the shapes
126 		GLOBALS._scenePalette.addFader(scene._palette2._palette, 256, 6, this);
127 		break;
128 
129 	case 5:
130 		scene._backSurface.fillRect(scene._sceneBounds, 0);
131 		scene._gfxManager2.activate();
132 		scene._gfxManager2.fillRect(scene._sceneBounds, 0);
133 		scene._gfxManager2.deactivate();
134 		//word_2B4AA = 3;
135 		setDelay(10);
136 		break;
137 
138 	case 6:
139 		GLOBALS._scenePalette.loadPalette(12);
140 		GLOBALS._scenePalette.refresh();
141 		setDelay(1);
142 		break;
143 
144 	case 7:
145 		// Animation of shapes expanding upwards to form larger EA logo
146 		scene._object1.setVisage("0012.vis");
147 		scene._object1._strip = 1;
148 		scene._object1._frame = 1;
149 		scene._object1.changeZoom(100);
150 		scene._object1.setPosition(Common::Point(170, 142));
151 		scene._object1._numFrames = 7;
152 		scene._object1.animate(ANIM_MODE_5, (const void *)nullptr);
153 		ADD_MOVER(scene._object1, 158, 71);
154 		break;
155 
156 	case 8:
157 		GLOBALS._scenePalette.addFader(scene._palette3._palette, 256, 40, this);
158 		break;
159 
160 	case 9:
161 		// Show 'Electronic Arts' company name
162 		scene._object2.postInit(nullptr);
163 		scene._object2.setVisage("0014.vis");
164 		scene._object2._strip = 1;
165 		scene._object2._frame = 1;
166 		scene._object2.setPosition(Common::Point(152, 98));
167 		scene._object2.changeZoom(100);
168 		scene._object2.animate(ANIM_MODE_NONE, (const void *)nullptr);
169 		setDelay(120);
170 		break;
171 
172 	case 10:
173 		// Remainder of steps is positioning and sizing hand cursorin an arc
174 		scene._object3.postInit();
175 		scene._object3.setVisage("0018.vis");
176 		scene._object3._strip = 1;
177 		scene._object3._frame = 1;
178 		scene._object3.setPosition(Common::Point(33, 91));
179 		scene._object3.changeZoom(100);
180 		scene._object3.animate(ANIM_MODE_NONE, (const void *)nullptr);
181 		setDelay(5);
182 		break;
183 
184 	case 11:
185 		scene._object3._frame = 2;
186 		scene._object3.setPosition(Common::Point(44, 124));
187 		setDelay(5);
188 		break;
189 
190 	case 12:
191 		scene._object3._frame = 3;
192 		scene._object3.setPosition(Common::Point(64, 153));
193 		setDelay(5);
194 		break;
195 
196 	case 13:
197 		scene._object3._frame = 4;
198 		scene._object3.setPosition(Common::Point(87, 174));
199 		setDelay(5);
200 		break;
201 
202 	case 14:
203 		scene._object3._frame = 5;
204 		scene._object3.setPosition(Common::Point(114, 191));
205 		setDelay(5);
206 		break;
207 
208 	case 15:
209 		scene._object3._frame = 6;
210 		scene._object3.setPosition(Common::Point(125, 184));
211 		setDelay(5);
212 		break;
213 
214 	case 16:
215 		scene._object3._frame = 7;
216 		scene._object3.setPosition(Common::Point(154, 187));
217 		setDelay(5);
218 		break;
219 
220 	case 17:
221 		scene._object3._frame = 8;
222 		scene._object3.setPosition(Common::Point(181, 182));
223 		setDelay(5);
224 		break;
225 
226 	case 18:
227 		scene._object3._frame = 9;
228 		scene._object3.setPosition(Common::Point(191, 167));
229 		setDelay(5);
230 		break;
231 
232 	case 19:
233 		scene._object3._frame = 10;
234 		scene._object3.setPosition(Common::Point(190, 150));
235 		setDelay(5);
236 		break;
237 
238 	case 20:
239 		scene._object3._frame = 11;
240 		scene._object3.setPosition(Common::Point(182, 139));
241 		setDelay(5);
242 		break;
243 
244 	case 21:
245 		scene._object3._frame = 11;
246 		scene._object3.setPosition(Common::Point(170, 130));
247 		setDelay(5);
248 		break;
249 
250 	case 22:
251 		scene._object3._frame = 11;
252 		scene._object3.setPosition(Common::Point(158, 121));
253 		setDelay(8);
254 		break;
255 
256 	case 23:
257 		// Show a highlighting of the company name
258 		scene._object3.hide();
259 		scene._object4.show();
260 		scene._object4.setPosition(Common::Point(155, 94));
261 		setDelay(8);
262 		break;
263 
264 	case 24:
265 		scene._object4._frame = 2;
266 		scene._object4.setPosition(Common::Point(155, 94));
267 		setDelay(8);
268 		break;
269 
270 	case 25:
271 		scene._object2.remove();
272 		setDelay(1);
273 		break;
274 
275 	case 26:
276 		scene._object4._frame = 3;
277 		scene._object4.setPosition(Common::Point(155, 94));
278 		setDelay(8);
279 		break;
280 
281 	case 27:
282 		scene._object4._frame = 4;
283 		scene._object4.setPosition(Common::Point(155, 94));
284 		setDelay(8);
285 		break;
286 		break;
287 
288 	case 28:
289 		scene._object4._frame = 5;
290 		scene._object4.setPosition(Common::Point(155, 94));
291 		setDelay(8);
292 		break;
293 		break;
294 
295 	case 29:
296 		scene._object4._frame = 6;
297 		scene._object4.setPosition(Common::Point(155, 94));
298 		setDelay(8);
299 		break;
300 		break;
301 
302 	case 30:
303 		scene._object4._frame = 7;
304 		scene._object4.setPosition(Common::Point(155, 94));
305 		setDelay(8);
306 		break;
307 		break;
308 
309 	case 31:
310 		scene._object4._frame = 8;
311 		scene._object4.setPosition(Common::Point(155, 94));
312 		setDelay(8);
313 		break;
314 
315 	case 32:
316 		setDelay(180);
317 		break;
318 
319 	default:
320 		scene.finish();
321 		remove();
322 		break;
323 	}
324 }
325 
326 /*--------------------------------------------------------------------------*/
327 
postInit(SceneObjectList * OwnerList)328 void SherlockLogoScene::postInit(SceneObjectList *OwnerList) {
329 	loadScene(10);
330 	Scene::postInit(OwnerList);
331 
332 	_palette1.loadPalette(1111);
333 	_palette1.loadPalette(10);
334 	_palette2.loadPalette(1111);
335 	_palette2.loadPalette(1);
336 	_palette3.loadPalette(1111);
337 	_palette3.loadPalette(14);
338 
339 	_object4.postInit();
340 	_object4.setVisage("0019.vis");
341 	_object4._strip = 1;
342 	_object4._frame = 1;
343 	_object4.setPosition(Common::Point(155, 94));
344 	_object4.changeZoom(100);
345 	_object4.animate(ANIM_MODE_NONE, (const void *)nullptr);
346 	_object4.hide();
347 
348 	setAction(&_action1);
349 }
350 
finish()351 void SherlockLogoScene::finish() {
352 	g_vm->quitGame();
353 }
354 
355 } // End of namespace Sherlock
356 
357 } // End of namespace TsAGE
358 
359 #endif
360