0
|
1 #include "dmengine.h"
|
|
2 #include "dmtext.h"
|
|
3 #include "dmfft.h"
|
|
4 #include "dmvecmat.h"
|
|
5 #include <math.h>
|
|
6
|
|
7 static int demoInit(DMEngineData *engine);
|
|
8 static void demoShutdown(DMEngineData *engine);
|
|
9 static int demoRender(DMEngineData *engine);
|
|
10
|
|
11
|
|
12 int demoPreInit(DMEngineData *engine)
|
|
13 {
|
|
14 dmInitProg("bussi",
|
|
15 "Bussi by AnCiat ProDz",
|
|
16 "0", "ENGINE INITTIALISSSIZING!!!!!", NULL);
|
|
17
|
|
18 engine->optPackFilename = "bussi.dat";
|
|
19 engine->optDataPath = NULL;
|
|
20 engine->optResFlags = DRF_USE_PACK | DRF_PRELOAD_RES | DRF_USE_STDIO;
|
|
21
|
|
22 engine->optAudioSetup = DM_ASETUP_JSS;
|
|
23
|
|
24 engine->optVidSetup = DM_VSETUP_ASPECT;
|
|
25 engine->optVidWidth = 640;
|
|
26 engine->optVidHeight = 480;
|
|
27 engine->optVidDepth = 32;
|
|
28 engine->optVFlags = SDL_SWSURFACE;
|
|
29
|
|
30 engine->demoInit = demoInit;
|
|
31 engine->demoRender = demoRender;
|
|
32 engine->demoShutdown = demoShutdown;
|
|
33
|
|
34 return DMERR_OK;
|
|
35 }
|
|
36
|
|
37
|
|
38 #define FFT_SIZE 128
|
|
39 DMFFTContext fft;
|
|
40
|
|
41
|
|
42 static int demoInit(DMEngineData *engine)
|
|
43 {
|
|
44 int i;
|
|
45 JSSModule *mod = NULL;
|
|
46
|
|
47 dmInitializeFFT(&fft, FFT_SIZE);
|
|
48
|
|
49 engineGetResModule(engine, mod, "pas2.xm");
|
|
50
|
|
51 if ((i = jssConvertModuleForPlaying(mod)) != DMERR_OK)
|
|
52 {
|
|
53 dmErrorMsg("Could not convert module for playing, %d: %s\n",
|
|
54 i, dmErrorStr(i));
|
|
55 return DMERR_INIT_FAIL;
|
|
56 }
|
|
57
|
|
58 jvmSetCallback(engine->jssDev, jmpExec, engine->jssPlr);
|
|
59 jmpSetModule(engine->jssPlr, mod);
|
|
60 jmpPlayOrder(engine->jssPlr, 0);
|
|
61 jvmSetGlobalVol(engine->jssDev, 55);
|
|
62
|
|
63 // Jne
|
|
64 srand(15);
|
|
65
|
|
66 return DMERR_OK;
|
|
67 }
|
|
68
|
|
69
|
|
70 static void demoShutdown(DMEngineData *engine)
|
|
71 {
|
|
72 (void) engine;
|
|
73 dmEndFFT(&fft);
|
|
74 }
|
|
75
|
|
76
|
|
77 static inline float dmCX(DMEngineData *engine, const float x)
|
|
78 {
|
|
79 return (x * engine->screen->w);
|
|
80 }
|
|
81
|
|
82
|
|
83 static inline float dmCY(DMEngineData *engine, const float y)
|
|
84 {
|
|
85 return (y * engine->screen->h);
|
|
86 }
|
|
87
|
|
88
|
|
89 static inline float dmQX(DMEngineData *engine, SDL_Surface *img, const float x)
|
|
90 {
|
|
91 return engine->optVidNative ? (img->w * x) : (img->w * engine->screen->w * x) / 640.0f;
|
|
92 }
|
|
93
|
|
94
|
|
95 static inline float dmQY(DMEngineData *engine, SDL_Surface *img, const float y)
|
|
96 {
|
|
97 return engine->optVidNative ? (img->h * y) : (img->h * engine->screen->h * y) / 480.0f;
|
|
98 }
|
|
99
|
|
100
|
|
101 typedef struct
|
|
102 {
|
|
103 char *filename;
|
|
104 float xc, yc;
|
|
105 SDL_Surface *img;
|
|
106 } DMTextItem;
|
|
107
|
|
108
|
|
109 static DMTextItem textItems[] =
|
|
110 {
|
|
111 { "text01.png", 0.05, 0.10, NULL },
|
|
112 { "text02.png", 0.10, 0.30, NULL },
|
|
113 { "text03.png", 0.60, 0.30, NULL },
|
|
114 { "text04.png", 0.20, 0.60, NULL },
|
|
115 { "text05.png", 0.30, 0.70, NULL },
|
|
116 };
|
|
117
|
|
118 static const int ntextItems = sizeof(textItems) / sizeof(textItems[0]);
|
|
119
|
|
120
|
|
121 static DMTextItem textItems2[] =
|
|
122 {
|
|
123 { "text11.png", 0.05, 0.10, NULL },
|
|
124 { "text02.png", 0.30, 0.25, NULL },
|
|
125 { "text12.png", 0.10, 0.40, NULL },
|
|
126 { "text13.png", 0.20, 0.60, NULL },
|
|
127 { "text14.png", 0.30, 0.70, NULL },
|
|
128 };
|
|
129
|
|
130 static const int ntextItems2 = sizeof(textItems2) / sizeof(textItems2[0]);
|
|
131
|
|
132
|
|
133 static DMTextItem textItems3[] =
|
|
134 {
|
|
135 { "teki.png" , 0.25, 0.20, NULL },
|
|
136 { "mitvit.png" , 0.05, 0.40, NULL },
|
|
137 { "ja.png" , 0.05, 0.65, NULL },
|
|
138 { "kemisti.png", 0.15, 0.65, NULL },
|
|
139 };
|
|
140
|
|
141 static const int ntextItems3 = sizeof(textItems3) / sizeof(textItems3[0]);
|
|
142
|
|
143
|
|
144
|
|
145
|
|
146 #define DM_RADIAL_BLUR(YC, XC) \
|
|
147 DMVector p1 = { xc, yc, 0, 0 }, p2 = { cx, cy, 0, 0 }, v; \
|
|
148 dm_vector_sub_r(&v, &p2, &p1); \
|
|
149 dm_vector_scale(&v, scale); \
|
|
150 dm_vector_add(&v, &p1); \
|
|
151 if (v.y YC || v.x XC) continue; \
|
|
152 DMColor *dp = pix + xc, \
|
|
153 *q = ((DMColor *)img->pixels) + ((int)(v.y) * pitch) + (int)v.x; \
|
|
154 dp->r = (q->r + dp->r) / 2; \
|
|
155 dp->g = (q->g + dp->g) / 2; \
|
|
156 dp->b = (q->b + dp->b) / 2;
|
|
157
|
|
158
|
|
159
|
|
160 void dmRadialBlur(SDL_Surface *img, const int cx, const int cy, const DMFloat scale)
|
|
161 {
|
|
162 const int pitch = img->pitch / sizeof(DMColor);
|
|
163 int xc, yc;
|
|
164
|
|
165 #pragma omp parallel private(yc, xc) shared(img)
|
|
166 {
|
|
167 #pragma omp sections nowait
|
|
168 {
|
|
169 #pragma omp section
|
|
170 for (yc = cy; yc >= 0; yc--)
|
|
171 {
|
|
172 DMColor *pix = ((DMColor *)img->pixels) + yc * pitch;
|
|
173 for (xc = cx + 1; xc < img->w; xc++)
|
|
174 {
|
|
175 DM_RADIAL_BLUR(< 0, >= img->w)
|
|
176 }
|
|
177 }
|
|
178
|
|
179 #pragma omp section
|
|
180 for (yc = cy; yc >= 0; yc--)
|
|
181 {
|
|
182 DMColor *pix = ((DMColor *)img->pixels) + yc * pitch;
|
|
183 for (xc = cx; xc > 0; xc--)
|
|
184 {
|
|
185 DM_RADIAL_BLUR(< 0, < 0)
|
|
186 }
|
|
187 }
|
|
188
|
|
189 #pragma omp section
|
|
190 for (yc = cy + 1; yc < img->h; yc++)
|
|
191 {
|
|
192 DMColor *pix = ((DMColor *)img->pixels) + yc * pitch;
|
|
193 for (xc = cx; xc > 0; xc--)
|
|
194 {
|
|
195 DM_RADIAL_BLUR(>= img->h, < 0)
|
|
196 }
|
|
197 }
|
|
198
|
|
199 #pragma omp section
|
|
200 for (yc = cy + 1; yc < img->h; yc++)
|
|
201 {
|
|
202 DMColor *pix = ((DMColor *)img->pixels) + yc * pitch;
|
|
203 for (xc = cx + 1; xc < img->w; xc++)
|
|
204 {
|
|
205 DM_RADIAL_BLUR(>= img->h, >= img->w)
|
|
206 }
|
|
207 }
|
|
208 }
|
|
209 }
|
|
210 }
|
|
211
|
|
212
|
|
213 static int hitlerText(DMEngineData *engine, const int dt, float fftPow, DMTextItem *items, const int nitems, BOOL *nollattu)
|
|
214 {
|
|
215 int i, vis;
|
|
216 if (!(*nollattu))
|
|
217 {
|
|
218 for (i = 0; i < nitems; i++)
|
|
219 engineGetResImage(engine, items[i].img, items[i].filename);
|
|
220
|
|
221 *nollattu = TRUE;
|
|
222 }
|
|
223
|
|
224 float q = fftPow * 0.05f;
|
|
225 vis = dt / 1000;
|
|
226 for (i = 0; i < nitems; i++)
|
|
227 {
|
|
228 DMTextItem *item = &items[i];
|
|
229 if (i < vis)
|
|
230 {
|
|
231 dmScaledBlitSurface32to32TransparentGA(
|
|
232 item->img,
|
|
233 dmCX(engine, item->xc - q),
|
|
234 dmCY(engine, item->yc - q),
|
|
235
|
|
236 dmQX(engine, item->img, 1.0f + q * 2.0f),
|
|
237 dmQY(engine, item->img, 1.0f + q * 2.0f),
|
|
238
|
|
239 engine->screen,
|
|
240
|
|
241 100 + 80 * fftPow);
|
|
242 }
|
|
243 }
|
|
244
|
|
245 return DMERR_OK;
|
|
246 }
|
|
247
|
|
248
|
|
249 static int demoRender(DMEngineData *engine)
|
|
250 {
|
|
251 float t = engineGetTimeDT(engine);
|
|
252 static DMScaledBlitFunc cblit = NULL;
|
|
253
|
|
254 // Do FFT
|
|
255 DMFFTType fftPow = 0;
|
|
256 BOOL fftOK = FALSE;
|
|
257 static DMFFTType fftAmp[FFT_SIZE / 2];
|
|
258 static DMFFTType fftData[FFT_SIZE];
|
|
259
|
|
260 dmMutexLock(engine->audioStreamMutex);
|
|
261 if (engine->audioStreamBuf != 0 && engine->audioStreamLen > FFT_SIZE)
|
|
262 {
|
|
263 int i;
|
|
264 Sint16 *buf = (Sint16 *) engine->audioStreamBuf;
|
|
265 for (i = 0; i < FFT_SIZE; i++)
|
|
266 {
|
|
267 fftData[i] = *buf;
|
|
268 buf += 2;
|
|
269 }
|
|
270 fftOK = TRUE;
|
|
271 }
|
|
272 dmMutexUnlock(engine->audioStreamMutex);
|
|
273
|
|
274 if (fftOK)
|
|
275 {
|
|
276 dmRealFFT(&fft, fftData);
|
|
277 dmConvertFFTtoPowerAndSum(&fft, fftData, fftAmp, 1.0, &fftPow, 0.00004f);
|
|
278 }
|
|
279
|
|
280
|
|
281 #if 1
|
|
282 // Demokoodi
|
|
283 if (t < 5)
|
|
284 {
|
|
285 // Alkufeidi sisään
|
|
286 int dt = engineGetTime(engine, 0);
|
|
287 static DMLerpContext fadeLerp;
|
|
288 static SDL_Surface *tausta = NULL;
|
|
289 static BOOL nollattu = FALSE;
|
|
290 if (!nollattu)
|
|
291 {
|
|
292 engineGetResImage(engine, tausta, "tausta.jpg");
|
|
293 cblit = dmGetScaledBlitFunc(tausta->format, engine->screen->format, DMD_NONE);
|
|
294
|
|
295 dmLerpInit(&fadeLerp, 0, 255, 5000);
|
|
296 nollattu = TRUE;
|
|
297 }
|
|
298
|
|
299 dmClearSurface(engine->screen, dmMapRGB(engine->screen, 0,0,0));
|
|
300
|
|
301 dmScaledBlitSurface32to32TransparentGA(tausta,
|
|
302 0,
|
|
303 0,
|
|
304
|
|
305 dmQX(engine, tausta, 1.0f),
|
|
306 dmQX(engine, tausta, 1.0f),
|
|
307
|
|
308 engine->screen,
|
|
309 dmLerpSCurveClamp(&fadeLerp, dt + 150500 * fftPow));
|
|
310 }
|
|
311 #endif
|
|
312 #if 0
|
|
313 else
|
|
314 if (t < 25)
|
|
315 {
|
|
316 static BOOL nollattu = FALSE;
|
|
317 static SDL_Surface *tausta = NULL;
|
|
318 if (!nollattu)
|
|
319 {
|
|
320 engineGetResImage(engine, tausta, "tausta.jpg");
|
|
321 }
|
|
322
|
|
323 cblit(tausta,
|
|
324 0,
|
|
325 0,
|
|
326
|
|
327 dmQX(engine, tausta, 1.0f),
|
|
328 dmQX(engine, tausta, 1.0f),
|
|
329
|
|
330 engine->screen);
|
|
331 }
|
|
332
|
|
333 if (t <= 7)
|
|
334 {
|
|
335 int dt = engineGetTime(engine, 2);
|
|
336 static DMLerpContext fadeLerp;
|
|
337 static SDL_Surface *logo1 = NULL, *logo2 = NULL;
|
|
338 static BOOL nollattu = FALSE;
|
|
339 if (!nollattu)
|
|
340 {
|
|
341 engineGetResImage(engine, logo1, "iso.png");
|
|
342 engineGetResImage(engine, logo2, "forevisar.png");
|
|
343
|
|
344 dmLerpInit(&fadeLerp, 0, 255, 2500);
|
|
345 nollattu = TRUE;
|
|
346 }
|
|
347
|
|
348 int fade;
|
|
349 if (dt < 2500)
|
|
350 {
|
|
351 fade = dmLerpSCurveClamp(&fadeLerp, dt + fftPow * 1000);
|
|
352 }
|
|
353 else
|
|
354 if (dt > 4500)
|
|
355 {
|
|
356 fade = 255 - dmLerpSCurveClamp(&fadeLerp, dt - 4500 + fftPow * 1000);
|
|
357 }
|
|
358 else
|
|
359 {
|
|
360 fade = 255;
|
|
361 }
|
|
362
|
|
363 float d = fftPow * 0.1f;
|
|
364
|
|
365 dmScaledBlitSurface32to32TransparentGA(logo1,
|
|
366 dmCX(engine, 0.1f),
|
|
367 dmCY(engine, 0.22f),
|
|
368
|
|
369 dmQX(engine, logo1, 1.0f),
|
|
370 dmQY(engine, logo1, 1.0f),
|
|
371
|
|
372 engine->screen,
|
|
373 fade);
|
|
374
|
|
375 dmScaledBlitSurface32to32TransparentGA(logo2,
|
|
376 dmCX(engine, 0.2f - d),
|
|
377 dmCY(engine, 0.72f - d),
|
|
378
|
|
379 dmQX(engine, logo2, 1.0f + d * 2.0f),
|
|
380 dmQY(engine, logo2, 1.0f + d * 2.0f),
|
|
381
|
|
382 engine->screen,
|
|
383 fade);
|
|
384 }
|
|
385 else
|
|
386 if (t <= 15)
|
|
387 {
|
|
388 int dt = engineGetTime(engine, 7);
|
|
389 static DMLerpContext fadeLerp;
|
|
390 static SDL_Surface *logo1 = NULL, *logo2 = NULL;
|
|
391 static BOOL nollattu = FALSE;
|
|
392 if (!nollattu)
|
|
393 {
|
|
394 engineGetResImage(engine, logo1, "hitler_on_kiva.png");
|
|
395 engineGetResImage(engine, logo2, "hitler.png");
|
|
396
|
|
397 dmLerpInit(&fadeLerp, 0, 255, 2500);
|
|
398 nollattu = TRUE;
|
|
399 }
|
|
400
|
|
401 int fade;
|
|
402 if (dt < 2500)
|
|
403 {
|
|
404 fade = dmLerpSCurveClamp(&fadeLerp, dt + fftPow * 1000);
|
|
405 }
|
|
406 else
|
|
407 if (dt > 4500)
|
|
408 {
|
|
409 fade = 255 - dmLerpSCurveClamp(&fadeLerp, dt - 4500 + fftPow * 1000);
|
|
410 }
|
|
411 else
|
|
412 {
|
|
413 fade = 255;
|
|
414 }
|
|
415
|
|
416 dmScaledBlitSurface32to32TransparentGA(logo1,
|
|
417 dmCX(engine, 0.1f),
|
|
418 dmCY(engine, 0.22f),
|
|
419
|
|
420 dmQX(engine, logo1, 1.0f),
|
|
421 dmQY(engine, logo1, 1.0f),
|
|
422
|
|
423 engine->screen,
|
|
424 fade);
|
|
425
|
|
426 float q = fftPow * 0.2;
|
|
427 dmScaledBlitSurface32to32TransparentGA(logo2,
|
|
428 dmCX(engine, 0.15f),
|
|
429 dmCY(engine, 0.47f - q),
|
|
430
|
|
431 dmQX(engine, logo2, 1.0f + q),
|
|
432 dmQY(engine, logo2, 1.0f + q),
|
|
433
|
|
434 engine->screen,
|
|
435 fade);
|
|
436 }
|
|
437
|
|
438 if (t <= 15)
|
|
439 {
|
|
440 int dt = engineGetTime(engine, 0);
|
|
441 static DMLerpContext posLerp, posLerp2;
|
|
442 static SDL_Surface *mainos = NULL;
|
|
443 static BOOL nollattu = FALSE;
|
|
444 if (!nollattu)
|
|
445 {
|
|
446 engineGetResImage(engine, mainos, "radio.png");
|
|
447
|
|
448 dmLerpInit(&posLerp, 1, -1, 15000);
|
|
449 dmLerpInit(&posLerp2, 0.3, 0.7, 15000);
|
|
450 nollattu = TRUE;
|
|
451 }
|
|
452
|
|
453 dmScaledBlitSurface32to32TransparentGA(mainos,
|
|
454 dmCX(engine, dmLerpSCurveClamp(&posLerp2, dt)),
|
|
455 dmCY(engine, dmLerpSCurveClamp(&posLerp, dt)),
|
|
456
|
|
457 dmQX(engine, mainos, 1.0f),
|
|
458 dmQY(engine, mainos, 1.0f),
|
|
459
|
|
460 engine->screen,
|
|
461 50);
|
|
462 }
|
|
463 else
|
|
464 if (t <= 25)
|
|
465 {
|
|
466 int dt = engineGetTime(engine, 15);
|
|
467 static DMLerpContext posLerp, posLerp2;
|
|
468 static DMScaledBlitFunc qblit = NULL;
|
|
469 static SDL_Surface *mainos = NULL, *mainos2 = NULL, *hitler = NULL, *sydan = NULL;
|
|
470 static BOOL nollattu = FALSE;
|
|
471 if (!nollattu)
|
|
472 {
|
|
473 engineGetResImage(engine, mainos, "lasi.jpg");
|
|
474 engineGetResImage(engine, mainos2, "nigrolin.jpg");
|
|
475 engineGetResImage(engine, hitler, "hitler2.png");
|
|
476 engineGetResImage(engine, sydan, "sydan.png");
|
|
477
|
|
478 qblit = dmGetScaledBlitFunc(hitler->format, engine->screen->format, DMD_TRANSPARENT);
|
|
479
|
|
480 dmLerpInit(&posLerp, 1, -1, 20000);
|
|
481 dmLerpInit(&posLerp2, -0.5, -0.2, 20000);
|
|
482
|
|
483 nollattu = TRUE;
|
|
484 }
|
|
485
|
|
486 dmScaledBlitSurface32to32TransparentGA(mainos,
|
|
487 dmCX(engine, dmLerpSCurveClamp(&posLerp2, dt)),
|
|
488 dmCY(engine, dmLerpSCurveClamp(&posLerp, dt + fftPow * 250)),
|
|
489
|
|
490 dmQX(engine, mainos, 1.0f),
|
|
491 dmQY(engine, mainos, 1.0f),
|
|
492
|
|
493 engine->screen,
|
|
494 50);
|
|
495
|
|
496 dmScaledBlitSurface32to32TransparentGA(mainos2,
|
|
497 dmCX(engine, dmLerpSCurveClamp(&posLerp, dt)),
|
|
498 dmCY(engine, dmLerpSCurveClamp(&posLerp2, dt + fftPow * 250)),
|
|
499
|
|
500 dmQX(engine, mainos2, 1.0f),
|
|
501 dmQY(engine, mainos2, 1.0f),
|
|
502
|
|
503 engine->screen,
|
|
504 50);
|
|
505
|
|
506 float d = fftPow * 0.1f;
|
|
507
|
|
508 qblit(hitler,
|
|
509 dmCX(engine, 0.4 - d),
|
|
510 dmCY(engine, 0.3 - d),
|
|
511
|
|
512 dmQX(engine, hitler, 1.0f + d * 2.0f),
|
|
513 dmQY(engine, hitler, 1.0f + d * 2.0f),
|
|
514
|
|
515 engine->screen);
|
|
516
|
|
517
|
|
518
|
|
519 if (t > 17)
|
|
520 {
|
|
521 static BOOL xnollattu = FALSE;
|
|
522
|
|
523 if (t > 19)
|
|
524 {
|
|
525 float z = sin(t * 2.0f + fftPow) * 0.1f;
|
|
526 qblit(sydan,
|
|
527 dmCX(engine, 0.7) + dmQX(engine, sydan, 0.5f - z),
|
|
528 dmCY(engine, 0.55) + dmQX(engine, sydan, 0.5f - z),
|
|
529
|
|
530 dmQX(engine, sydan, 1.0f + z * 2.0f),
|
|
531 dmQY(engine, sydan, 1.0f + z * 2.0f),
|
|
532
|
|
533 engine->screen);
|
|
534 }
|
|
535
|
|
536 hitlerText(engine, engineGetTime(engine, 17), fftPow, textItems, ntextItems, &xnollattu);
|
|
537 }
|
|
538 }
|
|
539 else
|
|
540 if (t <= 60)
|
|
541 {
|
|
542 int dt = engineGetTime(engine, 25);
|
|
543 static SDL_Surface *tekstur, *poni1, *poni2;
|
|
544 static BOOL nollattu = FALSE;
|
|
545 static DMScaledBlitFunc qblit = NULL;
|
|
546 if (!nollattu)
|
|
547 {
|
|
548 engineGetResImage(engine, tekstur, "disco.jpg");
|
|
549 engineGetResImage(engine, poni1, "poni1.png");
|
|
550 engineGetResImage(engine, poni2, "poni2.png");
|
|
551
|
|
552 qblit = dmGetScaledBlitFunc(poni1->format, engine->screen->format, DMD_TRANSPARENT);
|
|
553
|
|
554 nollattu = TRUE;
|
|
555 }
|
|
556
|
|
557 float m = t*2.0f;
|
|
558 float q = sin(m) * 0.3f,
|
|
559 q2 = sin(m + 0.2) * 0.4f,
|
|
560 z = sin(m) * 0.3f + 2.0f,
|
|
561 z2 = sin(m + 0.1f) * 0.3f + 2.0f;
|
|
562
|
|
563 dmScaledBlitSurface32to32TransparentGA(tekstur,
|
|
564 dmCX(engine, sin(q) * 0.1f - 0.2f),
|
|
565 dmCY(engine, cos(q) * 0.1f - 0.2f),
|
|
566
|
|
567 dmQX(engine, tekstur, z),
|
|
568 dmQY(engine, tekstur, z),
|
|
569
|
|
570 engine->screen,
|
|
571 130);
|
|
572
|
|
573 dmScaledBlitSurface32to32TransparentGA(tekstur,
|
|
574 dmCX(engine, sin(q2) * 0.1f - 0.2f),
|
|
575 dmCY(engine, cos(q2) * 0.1f - 0.2f),
|
|
576
|
|
577 dmQX(engine, tekstur, z2),
|
|
578 dmQY(engine, tekstur, z2),
|
|
579
|
|
580 engine->screen,
|
|
581 130);
|
|
582
|
|
583
|
|
584 qblit(poni1,
|
|
585 dmCX(engine, 0.2f),
|
|
586 dmCY(engine, 0.07f),
|
|
587
|
|
588 dmQX(engine, poni1, 1.0f),
|
|
589 dmQY(engine, poni1, 1.0f),
|
|
590
|
|
591 engine->screen);
|
|
592
|
|
593
|
|
594 dmScaledBlitSurface32to32TransparentGA(poni2,
|
|
595 dmCX(engine, 0.2f),
|
|
596 dmCY(engine, 0.07f),
|
|
597
|
|
598 dmQX(engine, poni2, 1.0f),
|
|
599 dmQY(engine, poni2, 1.0f),
|
|
600
|
|
601 engine->screen,
|
|
602 50 + fftPow * 400);
|
|
603
|
|
604 dmRadialBlur(engine->screen,
|
|
605 dmCX(engine, 0.5f + sin(m) * 0.1f),
|
|
606 dmCY(engine, 0.5f + cos(m) * 0.1f),
|
|
607 0.035f);
|
|
608
|
|
609 if (t >= 30 && t <= 37)
|
|
610 {
|
|
611 static BOOL xnollattu = FALSE;
|
|
612 hitlerText(engine, engineGetTime(engine, 30), fftPow + 0.2, textItems2, ntextItems2, &xnollattu);
|
|
613 }
|
|
614 else
|
|
615 if (t >= 38 && t <= 47)
|
|
616 {
|
|
617 static BOOL xnollattu = FALSE;
|
|
618 hitlerText(engine, engineGetTime(engine, 38), fftPow + 0.2, textItems3, ntextItems3, &xnollattu);
|
|
619 }
|
|
620 else
|
|
621 if (t > 50)
|
|
622 return 1;
|
|
623 }
|
|
624
|
|
625 #endif
|
|
626
|
|
627 return DMERR_OK;
|
|
628 }
|