1 #include "main.h"
2 #include "map.h"
3 #include "gfx.h"
4
5 BITMAP *tiles[TILE_NUM];
6 BITMAP *anims[CHAR_NUM];
7
8 BITMAP *title = NULL;
9 BITMAP *tileset_bmp = NULL;
10 BITMAP *charset_bmp = NULL;
11
12 int layout = 0;
13 int tileset = 0;
14 int charset = 0;
15 int scheme = 0;
16 int doublesize = 0;
17
18
19 char scheme_name[100];
20 char tileset_name[100];
21 char charset_name[100];
22 char layout_name[100];
23
24 int sprite_w, sprite_h;
25
26 static BITMAP *
load_8bit(char const * name)27 load_8bit (char const *name)
28 {
29 PALETTE pal;
30 BITMAP *bmp = load_bitmap (name, pal);
31 if (!bmp)
32 return NULL;
33 if (bitmap_color_depth (screen) == 8)
34 {
35 BITMAP *tmp = create_bitmap_ex (32, bmp->w, bmp->h);
36 select_palette (pal);
37 blit (bmp, tmp, 0, 0, 0, 0, bmp->w, bmp->h);
38 unselect_palette ();
39 generate_332_palette (pal);
40 select_palette (pal);
41 blit (tmp, bmp, 0, 0, 0, 0, bmp->w, bmp->h);
42 unselect_palette ();
43 destroy_bitmap (tmp);
44 }
45 return bmp;
46 }
47
48 static int colors[COLOR_COUNT];
49
50 int
layout_color(int n)51 layout_color (int n)
52 {
53 return colors[n];
54 }
55
56 static void
read_layout_colors(char const * name)57 read_layout_colors (char const *name)
58 {
59 char const *color_names[] =
60 {
61 "color_title",
62 "color_menu",
63 "color_selected",
64 "color_message",
65 "color_help",
66 "color_gold",
67 "color_healthy",
68 "color_health",
69 "color_hurt",
70 "color_stats",
71 "color_info",
72 "color_dungeon",
73 "color_empty",
74 "color_beacons",
75 "color_beacon",
76 "color_sacks",
77 "color_potions",
78 "color_nopotions",
79 "color_nospell",
80 "color_spell",
81 "color_cast",
82 "color_time",
83 "color_blink",
84 "color_highlight"
85 };
86 int i;
87 for (i = 0; i < COLOR_COUNT; i++)
88 {
89 char const *rgb = get_config_string (name, color_names[i], "#ffffff");
90 int v = strtol (rgb + 1, NULL, 16);
91 colors[i] = makecol (v >> 16, (v >> 8) & 255, v & 255);
92 }
93 };
94
95 int
graphics_init(void)96 graphics_init (void)
97 {
98 int i;
99 char const *name;
100 char section[256];
101
102 if (!exists ("data/sof.cfg"))
103 {
104 printf ("Cannot find data/sof.cfg.\n");
105 return 1;
106 }
107 set_config_file ("data/sof.cfg");
108
109 sprintf (section, "scheme%i", tileset);
110 strcpy (scheme_name, get_config_string (section, "name", "default"));
111
112 name = get_config_string (section, "tileset", "gfx/tiles.bmp");
113
114 strcpy (tileset_name, get_config_string (section, "name", "default"));
115 if (tileset_bmp)
116 destroy_bitmap (tileset_bmp);
117 tileset_bmp = load_8bit (name);
118 if (!tileset_bmp)
119 {
120 printf ("Could not find %s.\n", name);
121 return 1;
122 }
123 for (i = 0; i < TILE_NUM; i++)
124 {
125 if (tiles[i])
126 destroy_bitmap (tiles[i]);
127 tiles[i] = create_sub_bitmap (tileset_bmp, i * 16, 0, 16, 24);
128 }
129
130 sprintf (section, "scheme%i", charset);
131 name = get_config_string (section, "sprites", "gfx/chars.bmp");
132 strcpy (charset_name, get_config_string (section, "name", "default"));
133 if (charset_bmp)
134 destroy_bitmap (charset_bmp);
135 charset_bmp = load_8bit (name);
136 if (!charset_bmp)
137 {
138 printf ("Could not find %s.\n", name);
139 return 1;
140 }
141 if (doublesize)
142 {
143 BITMAP *bmp = create_bitmap (charset_bmp->w * 2, charset_bmp->h * 2);
144 stretch_blit (charset_bmp, bmp, 0, 0, charset_bmp->w, charset_bmp->h,
145 0, 0, charset_bmp->w * 2, charset_bmp->h * 2);
146 destroy_bitmap (charset_bmp);
147 charset_bmp = bmp;
148 }
149 sprite_w = charset_bmp->w / 21;
150 sprite_h = charset_bmp->h;
151 for (i = 0; i < CHAR_NUM; i++)
152 {
153 if (anims[i])
154 destroy_bitmap (anims[i]);
155 anims[i] = create_sub_bitmap (charset_bmp, i * sprite_w, 0, sprite_w, sprite_h);
156 }
157
158 sprintf (section, "scheme%i", layout);
159 name = get_config_string (section, "layout", "gfx/layout.bmp");
160
161 read_layout_colors (section);
162 strcpy (layout_name, get_config_string (section, "name", "default"));
163 if (title)
164 destroy_bitmap (title);
165 title = load_8bit (name);
166 if (!title)
167 {
168 printf ("Could not find %s.\n", name);
169 return 1;
170 }
171
172 return 0;
173 }
174