… | |
… | |
99 | #define KMOD_LRAM 0x10000 // our extension |
99 | #define KMOD_LRAM 0x10000 // our extension |
100 | |
100 | |
101 | #define TEXID_SPEECH 1 |
101 | #define TEXID_SPEECH 1 |
102 | #define TEXID_NOFACE 2 |
102 | #define TEXID_NOFACE 2 |
103 | |
103 | |
|
|
104 | // approximately divide by 255 |
|
|
105 | static unsigned int |
|
|
106 | div255 (unsigned int n) |
|
|
107 | { |
|
|
108 | return (n + (n >> 8)) >> 8; |
|
|
109 | } |
|
|
110 | |
|
|
111 | static unsigned int |
|
|
112 | minpot (unsigned int n) |
|
|
113 | { |
|
|
114 | if (!n) |
|
|
115 | return 0; |
|
|
116 | |
|
|
117 | --n; |
|
|
118 | |
|
|
119 | n |= n >> 1; |
|
|
120 | n |= n >> 2; |
|
|
121 | n |= n >> 4; |
|
|
122 | n |= n >> 8; |
|
|
123 | n |= n >> 16; |
|
|
124 | |
|
|
125 | return n + 1; |
|
|
126 | } |
|
|
127 | |
104 | static char * |
128 | static char * |
105 | fast_sv_grow (SV *sv, STRLEN need) |
129 | fast_sv_grow (SV *sv, STRLEN need) |
106 | { |
130 | { |
107 | STRLEN len = SvLEN (sv); |
131 | STRLEN len = SvLEN (sv); |
108 | STRLEN want = SvCUR (sv) + need; |
132 | STRLEN want = SvCUR (sv) + need; |
… | |
… | |
293 | }; |
317 | }; |
294 | |
318 | |
295 | typedef mapgrid *DC__Map; |
319 | typedef mapgrid *DC__Map; |
296 | |
320 | |
297 | template<typename T> |
321 | template<typename T> |
298 | static void |
322 | ecb_cold static void |
299 | prepend (T *&ptr, int sze, int inc) |
323 | prepend (T *&ptr, int sze, int inc) |
300 | { |
324 | { |
301 | T *p; |
325 | T *p; |
302 | |
326 | |
303 | Newx (p, inc + sze, T); |
327 | Newx (p, inc + sze, T); |
… | |
… | |
307 | |
331 | |
308 | ptr = p; |
332 | ptr = p; |
309 | } |
333 | } |
310 | |
334 | |
311 | template<typename T> |
335 | template<typename T> |
312 | static void |
336 | ecb_cold static void |
313 | append (T *&ptr, int sze, int inc) |
337 | append (T *&ptr, int sze, int inc) |
314 | { |
338 | { |
315 | Renew (ptr, sze + inc, T); |
339 | Renew (ptr, sze + inc, T); |
316 | Zero (ptr + sze, inc, T); |
340 | Zero (ptr + sze, inc, T); |
317 | } |
341 | } |
318 | |
342 | |
319 | static void |
343 | static void |
320 | need_facenum (struct mapgrid *self, faceid face) |
344 | need_facenum (struct mapgrid *self, faceid face) |
321 | { |
345 | { |
322 | while (self->faces <= face) |
346 | if (ecb_expect_true (self->faces > face)) |
323 | { |
347 | return; |
|
|
348 | |
|
|
349 | size_t newsize = minpot (face + 1); |
324 | append (self->face2tile, self->faces, self->faces); |
350 | append (self->face2tile, self->faces, newsize - self->faces); |
325 | self->faces *= 2; |
351 | self->faces = newsize; |
326 | } |
|
|
327 | } |
352 | } |
328 | |
353 | |
329 | static void |
354 | static void |
330 | need_texid (struct mapgrid *self, int texid) |
355 | need_texid (struct mapgrid *self, int texid) |
331 | { |
356 | { |
332 | while (self->texs <= texid) |
357 | if (ecb_expect_true (self->texs > texid)) |
333 | { |
358 | return; |
|
|
359 | |
|
|
360 | size_t newsize = minpot (texid + 1); |
334 | append (self->tex, self->texs, self->texs); |
361 | append (self->tex, self->texs, newsize - self->texs); |
335 | self->texs *= 2; |
362 | self->texs = newsize; |
336 | } |
|
|
337 | } |
363 | } |
338 | |
364 | |
339 | static maprow * |
365 | static maprow * |
340 | map_get_row (mapgrid *self, int y) |
366 | map_get_row (mapgrid *self, int y) |
341 | { |
367 | { |
… | |
… | |
503 | ev.code = 1; |
529 | ev.code = 1; |
504 | ev.data1 = (void *)(long)channel; |
530 | ev.data1 = (void *)(long)channel; |
505 | ev.data2 = 0; |
531 | ev.data2 = 0; |
506 | |
532 | |
507 | SDL_PushEvent ((SDL_Event *)&ev); |
533 | SDL_PushEvent ((SDL_Event *)&ev); |
508 | } |
|
|
509 | |
|
|
510 | // approximately divide by 255 |
|
|
511 | static unsigned int |
|
|
512 | div255 (unsigned int n) |
|
|
513 | { |
|
|
514 | return (n + (n >> 8)) >> 8; |
|
|
515 | } |
|
|
516 | |
|
|
517 | static unsigned int |
|
|
518 | minpot (unsigned int n) |
|
|
519 | { |
|
|
520 | if (!n) |
|
|
521 | return 0; |
|
|
522 | |
|
|
523 | --n; |
|
|
524 | |
|
|
525 | n |= n >> 1; |
|
|
526 | n |= n >> 2; |
|
|
527 | n |= n >> 4; |
|
|
528 | n |= n >> 8; |
|
|
529 | n |= n >> 16; |
|
|
530 | |
|
|
531 | return n + 1; |
|
|
532 | } |
534 | } |
533 | |
535 | |
534 | /* SDL should provide this, really. */ |
536 | /* SDL should provide this, really. */ |
535 | #define SDLK_MODIFIER_MIN 300 |
537 | #define SDLK_MODIFIER_MIN 300 |
536 | #define SDLK_MODIFIER_MAX 314 |
538 | #define SDLK_MODIFIER_MAX 314 |