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