16567ffd6de891df5c80dc86416534959b37286b
[eradicate] / src / introscr.c
1 #include <stdio.h>
2 #include "screens.h"
3 #include "imago2.h"
4 #include "gfx.h"
5 #include "gfxutil.h"
6 #include "game.h"
7
8 #define FADE_DUR        1024
9
10 static void *logo;
11 static int logo_width, logo_height;
12 static long start_time;
13
14 int intro_init(void)
15 {
16         if(!(logo = img_load_pixels("data/msglogo.jpg", &logo_width, &logo_height, IMG_FMT_RGB24))) {
17                 fprintf(stderr, "failed to load logo image\n");
18                 return -1;
19         }
20         return 0;
21 }
22
23 void intro_cleanup(void)
24 {
25         img_free_pixels(logo);
26 }
27
28 void intro_start(void)
29 {
30         start_time = time_msec;
31 }
32
33 void intro_stop(void)
34 {
35 }
36
37 void intro_draw(void)
38 {
39         int i, j;
40         uint16_t fade;
41         unsigned char *src = logo;
42         uint16_t *dest = fb_pixels;
43
44         fade = (time_msec - start_time) * 256 / FADE_DUR;
45         if(fade > 256) fade = 256;
46
47         for(i=0; i<fb_height; i++) {
48                 for(j=0; j<fb_width; j++) {
49                         uint16_t r = (uint16_t)*src++ * fade / 256;
50                         uint16_t g = (uint16_t)*src++ * fade / 256;
51                         uint16_t b = (uint16_t)*src++ * fade / 256;
52                         *dest++ = PACK_RGB16(r, g, b);
53                         src += 3;
54                 }
55         }
56 }
57
58 void intro_keyb(int key, int pressed)
59 {
60 }