testing stuff
[retrocrawl] / src / game.c
1 #include <string.h>
2 #include "game.h"
3 #include "data_test.h"
4 #include "gfx.h"
5
6 #define TILE_W  32
7 #define TILE_H  16
8
9 void draw_tile(int tid, int x, int y, int light);
10 void convert_tile_data(unsigned char *dest, const char *src);
11
12 static unsigned char test_tiles[2][TILE_W * TILE_H / 8 * NBPL];
13
14 int game_init(void)
15 {
16         int i;
17
18         for(i=0; i<2; i++) {
19                 convert_tile_data(test_tiles[i], test_tiles_cpix[i][0]);
20         }
21         return 0;
22 }
23
24 void game_draw(void)
25 {
26         draw_tile(0, 32, 16, 0);
27 }
28
29
30 void draw_tile(int tid, int x, int y, int light)
31 {
32         int i;
33
34         unsigned char *dest = bplptr[0] + (y * SCANSZ * NBPL) + x / 8;
35         unsigned char *src = test_tiles[tid];
36
37         for(i=0; i<TILE_H * NBPL; i++) {
38                 memcpy(dest, src, TILE_W / 8);
39                 dest += SCANSZ;
40                 src += TILE_W / 8;
41         }
42 }
43
44 static inline int charpix_color(char c)
45 {
46         switch(c) {
47         case '#':
48                 return 1;
49         case 'x':
50                 return 2;
51         case '@':
52                 return 3;
53         case 'o':
54                 return 4;
55         default:
56         case '.':
57                 break;
58         }
59         return 0;
60 }
61
62 #define TILE_SCANSZ     (TILE_W / 8)
63 void convert_tile_data(unsigned char *dest, const char *src)
64 {
65         int i, j, k;
66         unsigned char *bptr[NBPL];
67
68         for(i=0; i<NBPL; i++) {
69                 bptr[i] = dest + TILE_SCANSZ * i;
70         }
71
72         for(i=0; i<TILE_H; i++) {
73                 for(j=0; j<TILE_W; j++) {
74                         int col = charpix_color(*src++);
75
76                         for(k=0; k<NBPL; k++) {
77                                 *bptr[k] = (*bptr[k] << 1) | (col & 1);
78                                 col >>= 1;
79
80                                 if((j & 7) == 7) {
81                                         bptr[k]++;
82                                 }
83                         }
84                 }
85
86                 for(j=0; j<NBPL; j++) {
87                         bptr[j] += TILE_SCANSZ * (NBPL - 1);
88                 }
89         }
90 }