Rev 5235 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5235 | alpine | 1 | #include "rs/rsplatform.h" |
2 | |||
3 | #include "rsgametext.h" |
||
4 | |||
5 | #include "rsgame.h" |
||
6 | #include "rsgentex.h" |
||
7 | |||
8 | #include "rskos.h" |
||
9 | |||
10 | |||
11 | |||
12 | #ifdef RS_USE_C_LIBS |
||
13 | #include |
||
14 | #include |
||
15 | #include |
||
16 | #endif |
||
17 | |||
18 | |||
19 | signed short pp_seg[32*8] = { |
||
20 | |||
21 | // 0 |
||
22 | 16, 6-16, |
||
23 | 16, 6+16, |
||
24 | 16, 6, |
||
25 | 13, 0, |
||
26 | |||
27 | // 1 |
||
28 | 26-16, 16, |
||
29 | 26+16, 16, |
||
30 | 26, 11, |
||
31 | 8, 0, |
||
32 | |||
33 | // 2 |
||
34 | 26-16, 16, |
||
35 | 26+16, 16, |
||
36 | 26, 21, |
||
37 | 8, 0, |
||
38 | |||
39 | // 3 |
||
40 | 16, 26-16, |
||
41 | 16, 26+16, |
||
42 | 16, 26, |
||
43 | 13, 0, |
||
44 | |||
45 | // 4 |
||
46 | 6-16, 16, |
||
47 | 6+16, 16, |
||
48 | 6, 21, |
||
49 | 8, 0, |
||
50 | |||
51 | // 5 |
||
52 | 6-16, 16, |
||
53 | 6+16, 16, |
||
54 | 6, 11, |
||
55 | 8, 0, |
||
56 | |||
57 | // 6 |
||
58 | 16, 16-16, |
||
59 | 16, 16+16, |
||
60 | 16, 16, |
||
61 | 13, 0, |
||
62 | |||
63 | // 7 |
||
64 | 16, 4-22, |
||
65 | 16, 4+22, |
||
66 | 16, 4, |
||
67 | 4, 0, |
||
68 | |||
69 | |||
70 | |||
71 | |||
72 | // 8 |
||
73 | 16-16, 16, |
||
74 | 16+16, 16, |
||
75 | 16, 11, |
||
76 | 8, 0, |
||
77 | |||
78 | // 9 |
||
79 | 16-16, 16, |
||
80 | 16+16, 16, |
||
81 | 16, 21, |
||
82 | 8, 0, |
||
83 | |||
84 | // 10 |
||
85 | 21-16, 11+16, |
||
86 | 21+16, 11-16, |
||
87 | 21, 11, |
||
88 | 9, 0, |
||
89 | |||
90 | // 11 modified |
||
91 | 16-16, 16+16, |
||
92 | 16+16, 16-16, |
||
93 | 21, 21, |
||
94 | 9, 0, |
||
95 | |||
96 | // 12 |
||
97 | 16-16, 16-16, |
||
98 | 16+16, 16+16, |
||
99 | 21, 11, |
||
100 | 9, 0, |
||
101 | |||
102 | // 13 |
||
103 | 21-16, 21-16, |
||
104 | 21+16, 21+16, |
||
105 | 21, 21, |
||
106 | 9, 0, |
||
107 | |||
108 | // 14 |
||
109 | 16, 16-16, |
||
110 | 16, 16+16, |
||
111 | 10, 16, |
||
112 | 7, 0, |
||
113 | |||
114 | // 15 |
||
115 | 16, 16-16, |
||
116 | 16, 16+16, |
||
117 | 22, 16, |
||
118 | 7, 0, |
||
119 | |||
120 | |||
121 | |||
122 | |||
123 | |||
124 | |||
125 | // 16 |
||
126 | 16-16, 16+16, |
||
127 | 16+16, 16-16, |
||
128 | 11, 11, |
||
129 | 8, 0, |
||
130 | |||
131 | // 17 |
||
132 | 11-16, 21+16, |
||
133 | 11+16, 21-16, |
||
134 | 11, 21, |
||
135 | 9, 0, |
||
136 | |||
137 | // 18 |
||
138 | 11-16, 11-16, |
||
139 | 11+16, 11+16, |
||
140 | 11, 11, |
||
141 | 9, 0, |
||
142 | |||
143 | // 19 |
||
144 | 16-16, 16-16, |
||
145 | 16+16, 16+16, |
||
146 | 11, 21, |
||
147 | 9, 0, |
||
148 | |||
149 | // 20 == copy 11 modified |
||
150 | 21-22, 21+22, |
||
151 | 21+22, 21-22, |
||
152 | 21, 21, |
||
153 | 9, 0, |
||
154 | |||
155 | // 21 - right |
||
156 | 27-12, 28-9, |
||
157 | 27+12, 28+9, |
||
158 | 27, 27, |
||
159 | 4, 0, |
||
160 | |||
161 | // 22 - left |
||
162 | 5-12, 28+9, |
||
163 | 5+12, 28-9, |
||
164 | 5, 27, |
||
165 | 4, 0, |
||
166 | |||
167 | |||
168 | // 23 |
||
169 | 6-16, 16, |
||
170 | 6+16, 16, |
||
171 | 6, 8, |
||
172 | 5, 0, |
||
173 | |||
174 | |||
175 | |||
176 | // 24 |
||
177 | 16-33, 16, |
||
178 | 16+33, 16, |
||
179 | 16, 13, |
||
180 | 4, 0, |
||
181 | |||
182 | |||
183 | // 25 |
||
184 | 16-33, 16, |
||
185 | 16+33, 16, |
||
186 | 16, 26, |
||
187 | 4, 0, |
||
188 | |||
189 | // 26 |
||
190 | 16, 6-16, |
||
191 | 16, 6+16, |
||
192 | 11, 6, |
||
193 | 7, 0, |
||
194 | |||
195 | // 27 |
||
196 | 16, 26-16, |
||
197 | 16, 26+16, |
||
198 | 11, 26, |
||
199 | 7, 0, |
||
200 | |||
201 | // 28 |
||
202 | 16, 6-16, |
||
203 | 16, 6+16, |
||
204 | 21, 6, |
||
205 | 7, 0, |
||
206 | |||
207 | // 29 |
||
208 | 16, 26-16, |
||
209 | 16, 26+16, |
||
210 | 21, 26, |
||
211 | 7, 0, |
||
212 | |||
213 | |||
214 | // 30 , |
||
215 | 11-22, 27-22, |
||
216 | 11+22, 27+22, |
||
217 | 11, 25, |
||
218 | 6, 0, |
||
219 | |||
220 | // 31 not implemented - need to create up-left DOT for percent(%) sign |
||
221 | 16, 26-16, |
||
222 | 16, 26+16, |
||
223 | 16, 26, |
||
224 | 13, 0, |
||
225 | |||
226 | |||
227 | }; |
||
228 | |||
229 | unsigned int ch_seg[64] = { |
||
230 | 0b00111111 /* | 1<<12 | 1<<19 */, // 0 or O |
||
231 | 1<<26 | 1<<8 | 1<<9 | 1<<3, // 1 |
||
232 | 0b01011011, // 2 |
||
233 | 1<<0 | 1<<12 | 1<<15 | 1<<2 | 1<<3, // 3 |
||
234 | 0b01100110, // 4 |
||
235 | 0b01101101, // 5 |
||
236 | 1<<0 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6, // 6 // old: 1<<6 | 1<<2 | 1<<3 | 1<<4 | 1<<18 | 1<<28, // 6 |
||
237 | 1<<23 | 1<<0 | 1<<1 | 1<<13 , //0b00000111 , // 7 |
||
238 | |||
239 | 0b01111111, // 8 |
||
240 | 1<<6 | 1<<5 | 1<<0 | 1<<1 | 1<<2 | 1<<3, // 9 |
||
241 | 1<<24 | 1<<25, // : |
||
242 | 1<<8 | 1<<25, // ; |
||
243 | 1<<12 | 1<<11, // < |
||
244 | 1<<6, // = (-) |
||
245 | 1<<16 | 1<<19, // > |
||
246 | 1<<23 | 1<<0 | 1<<1 | 1<<15 | 1<<25 | 1<<9, // ? |
||
247 | |||
248 | 1<<19 | 1<<12, // @ (/) |
||
249 | 1<<0 | 1<<1 | 1<<2 | 1<<6 | 1<<4 | 1<<5, // A |
||
250 | 1<<26 | 1<<10 | 1<<6 | 1<<11 | 1<<3 | 1<<4 | 1<<5, // B |
||
251 | 1<<0 | 1<<5 | 1<<4 | 1<<3, // C // corners: 1<<28 | 1<<18 | 1<<17 | 1<<29, |
||
252 | 1<<26 | 1<<27 | 1<<5 | 1<<4 | 1<<10 | 1<<13 , // D |
||
253 | 1<<0 | 1<<14 | 1<<3 | 1<<5 | 1<<4, // E |
||
254 | 1<<0 | 1<<14 | 1<<5 | 1<<4, // F |
||
255 | 1<<0 | 1<<5 | 1<<4 | 1<<3 | 1<<2 | 1<<15, // G |
||
256 | |||
257 | 1<<1 | 1<<2 | 1<<5 | 1<<4 | 1<<6, // H |
||
258 | 1<<0 | 1<<8 | 1<<9 | 1<<3, // I |
||
259 | 1<<1 | 1<<2 | 1<<3 | 1<<4, // J |
||
260 | 1<<5 | 1<<4 | 1<<14 | 1<<12 | 1<<11, // K |
||
261 | 1<<5 | 1<<4 | 1<<3, // L |
||
262 | 1<<5 | 1<<4 | 1<<1 | 1<<2 | 1<<16 | 1<<12, // M |
||
263 | 1<<5 | 1<<4 | 1<<16 | 1<<11 | 1<<1 | 1<<2, // N |
||
264 | 1<<16 | 1<<11 | 1<<19 | 1<<12 | 1<<6 | 1<<8 | 1<<9, // O - FREE SYMBOL |
||
265 | |||
266 | 1<<4 | 1<<5 | 1<<0 | 1<<1 | 1<<6, // P |
||
267 | 1<<0 | 1<<1 | 1<<13 | 1<<27 | 1<<4 | 1<<5 | 1<<11, // Q // old: 0b00111111 | 1<<11, // Q |
||
268 | 1<<0 | 1<<1 | 1<<6 | 1<<5 | 1<<4 | 1<<11, // R |
||
269 | (1 << 18 | 1 << 13) | (1 << 29 | 1 << 26) | (1 << 5 | 1 << 2) | (1 << 19 | 1 << 12), // percent(%) sign, s == 5 -> // 0b01101101, // S |
||
270 | 1<<0 | 1<<8 | 1<<9, // T |
||
271 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5, // U |
||
272 | 1<<1 | 1<<13 | 1<<17 | 1<<5, // V |
||
273 | 1<<5 | 1<<4 | 1<<19 | 1<<11 | 1<<2 | 1<<1, // W |
||
274 | |||
275 | 1<<16 | 1<<11 | 1<<19 | 1<<12, // X |
||
276 | 1<<5 | 1<<6 | 1<<1 | 1<<2 | 1<<3, // Y |
||
277 | 1<<0 | 1<<12 | 1<<19 | 1<<3, // Z |
||
278 | 1<<26 | 1<<8 | 1<<9 | 1<<29 | 1<<2 | 1<<15, // [Ъ |
||
279 | 1<<5 | 1<<4 | 1<<27 | 1<<9 | 1<<14 | 1<<1 | 1<<2, // \Ы |
||
280 | 1<<5 | 1<<4 | 1<<3 | 1<<2 | 1<<6, // ]Ь |
||
281 | 1<<7 | 1<<5 | 1<<4 | 1<<19 | 1<<12 | 1<<1 | 1<<2, // ^Й |
||
282 | 1<<30, // _ (,comma) |
||
283 | |||
284 | 1<<25, // ` dot |
||
285 | 1<<5 | 1<<0 | 1<<1 | 1<<6 | 1<<2 | 1<<19, // aЯ |
||
286 | 1<<0 | 1<<5 | 1<<4 | 1<<3 | 1<<2 | 1<<6, // bБ |
||
287 | 1<<5 | 1<<4 | 1<<3 | 1<<1 | 1<<2 | 1<<21, // cЦ |
||
288 | 0b011001000000010000011100, // dД |
||
289 | 1<<0 | 1<<1 | 1<<15 | 1<<2 | 1<<3, // eЭ // with corners: 1<<26 | 1<<10 | 1<<6 | 1<<13 | 1<<27, // eЭ |
||
290 | 1<<0 | 1<<1 | 1<<6 | 1<<5 | 1<<8 | 1<<9, // fФ |
||
291 | 1<<4 | 1<<5 | 1<<0, // gГ |
||
292 | 1<<5 | 1<<4 | 1<<3 | 1<<1 | 1<<2 | 1<<9, // hШ, |
||
293 | 1<<5 | 1<<4 | 1<<19 | 1<<12 | 1<<1 | 1<<2, // iИ |
||
294 | 1<<5 | 1<<8 | 1<<1 | 1<<6 | 1<<4 | 1<<9 | 1<<2, // old: 1<<16 | 1<<8 | 1<<12 | 1<<19 | 1<<9 | 1<<11, // jЖ |
||
295 | 1<<5 | 1<<4 | 1<<14 | 1<<8 | 1<<9 | 1<<1 | 1<<2 | 1<<28 | 1<<29, // k_Ю |
||
296 | 1<<4 | 1<<18 | 1<<28 | 1<<1 | 1<<2, // l // old symmetric: 1<<4 | 1<<18 | 1<<10 | 1<<2, // l // old: 1<<19 | 1<<12 | 1<<1 | 1<<2, // lЛ |
||
297 | 1<<5 | 1<<4 | 1<<3 | 1<<1 | 1<<2 | 1<<9 | 1<<21, // mЩ, |
||
298 | 1<<4 | 1<<5 | 1<<0 | 1<<1 | 1<<2, // n |
||
299 | (1<<8 | 1<<9) | 1<<10 | 1<<18, // 'o' for arrow up ^ |
||
300 | |||
301 | }; |
||
302 | |||
303 | |||
304 | void game_font_init() { |
||
305 | |||
306 | DEBUG30(":: font init start"); |
||
307 | |||
308 | float scale = 1.0; |
||
309 | |||
310 | int seg; |
||
311 | int ch; |
||
312 | int ch_bit; |
||
313 | |||
314 | // // FAT FONT #1 (OK) |
||
315 | // float scales[4] = { 0.4, 0.6, 0.2, 2 }; // 2,1,1,1 |
||
316 | // float pows[4] = { 15.0, 19.0, 200.0, 22.0 }; |
||
317 | // float ks1[4] = { 1.2, 1.0, 1.2, 0.90 }; // 0.75 straight |
||
318 | // float ks2[4] = { -1.0, -1.0, -1.0, -1.0 }; |
||
319 | // float pows1[4] = { 1.0, 0.79, 1.0, 1.0 }; |
||
320 | // float pows2[4] = { 1.0, 0.79, 1.0, 1.0 }; |
||
321 | // float clamp1[4] = { 0.8, 0.75, 0.65, 0.87 }; // 0.8 to 0.86 |
||
322 | // float clamp2[4] = { 0.85, 0.85, 0.85, 0.92 }; |
||
323 | // float radiuses[4] = { 1.0, 1.1, 1.2, 0.87 }; |
||
324 | |||
325 | |||
326 | float scales[4] = { 0.5, 2.0, 0.2, 2 }; // 2,1,1,1 |
||
327 | //float pows[4] = { 45.0, 100.0, 200.0, 22.0 }; |
||
328 | float pows[4] = { 3.0, 7.0, 15.0, 22.0 }; |
||
329 | float ks1[4] = { 0.01, 0.05, 1.2, 0.90 }; // 0.75 straight |
||
330 | float ks2[4] = { -3.75, -2.75, -1.0, -1.0 }; |
||
331 | float pows1[4] = { 1.0, 1.0, 1.0, 1.0 }; |
||
332 | float pows2[4] = { 0.6, 0.6, 1.0, 1.0 }; |
||
333 | float clamp1[4] = { 0.45, 0.69, 0.65, 0.87 }; // 0.8 to 0.86 |
||
334 | float clamp2[4] = { 0.90, 0.75, 0.85, 0.92 }; |
||
335 | float radiuses[4] = { 0.9667, 0.997, 1.2, 0.87 }; |
||
336 | |||
337 | float colors_r[4] = { 0.3, 0.997, 1.0, 0.9 }; |
||
5237 | alpine | 338 | float colors_g[4] = { 0.2, 0.875, 1.0, 0.5 }; |
339 | float colors_b[4] = { 0.1, 0.763, 1.0, 0.1 }; |
||
5235 | alpine | 340 | // 1: 0.5, 0.74, 0.79 |
341 | |||
342 | DEBUG20(":: font init label-a"); |
||
343 | |||
344 | int font_index = 0; |
||
345 | int font_index_color = 0; |
||
346 | |||
347 | for (font_index_color = 0; font_index_color < FONTS_COUNT; font_index_color++) { |
||
348 | |||
349 | font_index = font_index_color % 3; |
||
350 | |||
351 | DEBUG30f(":: font init label-b (font index %d) \n", font_index); |
||
352 | |||
353 | scale = scales[font_index]; |
||
354 | |||
355 | rs_gen_reg.cell_scale = scale; |
||
356 | |||
357 | int char_tex_size = scale*32; |
||
358 | |||
359 | // DEBUG10f("char_tex_size %d \n", char_tex_size); |
||
360 | |||
361 | rs_gen_init(97, char_tex_size); |
||
362 | |||
363 | for (seg = 0; seg < 32; seg++) { |
||
364 | rs_gen_func_cell(seg, 1, 2, &pp_seg[8*seg], ks1[font_index], pows1[font_index], ks2[font_index], pows2[font_index], 0.0, 0.0); |
||
365 | //rs_gen_func_cell(seg, 1, 2, &pp_seg[8*seg], 1.2, 1.0, -1.0, 1.0, 0.0, 0.0); |
||
366 | //rs_gen_func_cell(seg, 1, 2, &pp_seg[8*seg], 0.48450032, 1.0, -1.0, 2.20, 0.0, 0.0); // toon |
||
367 | rs_gen_func_normalize(seg, 0.0, 1.0); // 0.1 to 1.0 |
||
368 | |||
369 | rs_gen_func_clamp(seg, clamp1[font_index], clamp2[font_index]); // 0.8, 0.86); // toon 0.775, 0.839889 |
||
370 | rs_gen_func_normalize(seg, 0.0, 1.0); // 0.1 to 1.0 |
||
371 | |||
372 | rs_gen_func_set(96, 0.0); |
||
373 | rs_gen_func_radial(96, (float)pp_seg[8*seg + 4]/32.0, (float)pp_seg[8*seg + 5]/32.0, (float)pp_seg[8*seg + 6]/32.0*radiuses[font_index], 1.0, pows[font_index]); |
||
374 | rs_gen_func_mult(seg, seg, 96); |
||
375 | }; |
||
376 | |||
377 | |||
378 | |||
379 | for (ch = 0; ch < 64; ch++) { |
||
380 | rs_gen_func_set(32+ch, 0.0); |
||
381 | for (ch_bit = 0; ch_bit < 32; ch_bit++) { |
||
382 | if ( (1< |
||
383 | rs_gen_func_add_lerped(32+ch, 32+ch, ch_bit, 1.0, 1.0); |
||
384 | } |
||
385 | } |
||
386 | rs_gen_func_clamp(32+ch, (ch+ch/8)%2 ? 0.0 : 0.0, 1.0); |
||
387 | // rs_gen_func_set(32+ch, (ch+ch/8)%2 ? 0.5 : 0.0); |
||
388 | |||
389 | rs_gen_tex_out_rgba_set(0.0, 0.0, 0.0, 0.0); |
||
390 | rs_gen_tex_out_rgba(32+ch, 32+ch, 32+ch, 32+ch, colors_b[font_index_color], colors_g[font_index_color], colors_r[font_index_color], 1.0); |
||
391 | |||
392 | texture_init(&game.tex_font[font_index_color*64 + ch], char_tex_size, char_tex_size); |
||
393 | memcpy(game.tex_font[font_index_color*64 + ch].data, rs_gen_reg.tex_out, char_tex_size*char_tex_size*4 ); |
||
394 | |||
395 | } |
||
396 | |||
397 | |||
398 | |||
399 | /* |
||
400 | |||
401 | float *fontdata = malloc(256*scale*256*scale*4); |
||
402 | |||
403 | int i, j, k; |
||
404 | for (i = 0; i < 8; i++) { |
||
405 | for (j = 0; j < 8; j++) { |
||
406 | for (k = 0; k < 32*scale; k++) { |
||
407 | memcpy( &(fontdata[i*256*(32*scale)*scale + k*256*scale + (j)*(32*scale)]), &(rs_gen_reg.tex[k*(32*scale) + (32+j+i*8)*(32*scale)*(32*scale)] ), 32*4*scale ); |
||
408 | }; |
||
409 | }; |
||
410 | }; |
||
411 | |||
412 | rs_gen_term(); |
||
413 | |||
414 | int font_tex_size = 256*scale; |
||
415 | rs_gen_init(2, font_tex_size); |
||
416 | memcpy( rs_gen_reg.tex, fontdata, 256*256 * 4 *scale*scale); |
||
417 | rs_gen_func_set(1, 1.0); |
||
418 | rs_gen_tex_out_rgba_set(0.0, 0.0, 0.0, 0.0); |
||
419 | rs_gen_tex_out_rgba(1, 1, 1, 0, 1.0, 1.0, 1.0, 1.0); |
||
420 | |||
421 | //game.font_texture[font_index] = rs_tx_create_from_data(font_tex_size, font_tex_size, 4, 1, 0, rs_gen_reg.tex_out); |
||
422 | game_loader_create_texture( &(game.font_texture[font_index]), font_tex_size, font_tex_size, 4, 1, 0, rs_gen_reg.tex_out ); |
||
423 | |||
424 | |||
425 | save_image(0, rs_gen_reg.tex_out, 256*scale, 256*scale, 4); |
||
426 | |||
427 | */ |
||
428 | |||
429 | rs_gen_term(); |
||
430 | |||
431 | // free(fontdata); |
||
432 | // |
||
433 | // game.loader_progress = font_index+2; |
||
434 | |||
435 | }; |
||
436 | |||
437 | rs_gen_reg.cell_scale = 1; |
||
438 | |||
439 | }; |
||
440 | |||
441 | void game_font_term() { |
||
442 | |||
443 | int i; |
||
444 | for (i = 0; i < 64*FONTS_COUNT; i++) { |
||
445 | texture_free(&game.tex_font[i]); |
||
446 | }; |
||
447 | |||
448 | |||
449 | }; |
||
450 | |||
451 | |||
452 | |||
453 | //float game_colors[4*7] = { |
||
454 | // 0.0, 0.0, 0.0, 1.0, |
||
455 | // 1.0, 1.0, 1.0, 1.0, |
||
456 | // 1.0, 0.9, 0.3, 1.0, |
||
457 | // 1.0, 0.4, 0.3, 1.0, |
||
458 | // 0.6, 0.8, 1.0, 1.0, |
||
459 | // 1.0, 0.8, 0.6, 1.0, |
||
460 | // 0.6, 0.6, 0.6, 0.9, |
||
461 | //}; |
||
462 | |||
463 | |||
464 | void game_textout(int x, int y, int font_index, char* s) { |
||
465 | game_textout_adv(&game.framebuffer, x, y, font_index, DRAW_MODE_ALPHA, s); |
||
466 | }; |
||
467 | |||
468 | void game_textout_adv(rs_texture_t *dest, int x, int y, int font_index, int draw_mode, char* s) { |
||
469 | |||
470 | int i = 0; |
||
471 | while (*s) { |
||
472 | if (*s != ' ') { |
||
473 | texture_draw(dest, &game.tex_font[ 64*font_index + ((*s - 48) % 64) ], x+i*game.tex_font[64*font_index+0].w, y, draw_mode); |
||
474 | }; |
||
475 | s++; |
||
476 | i++; |
||
477 | }; |
||
478 | |||
479 | |||
480 | };>>>> |
||
481 | |||
482 |