ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/Client.xs
(Generate patch)

Comparing deliantra/Deliantra-Client/Client.xs (file contents):
Revision 1.334 by root, Mon Nov 19 01:37:28 2018 UTC vs.
Revision 1.335 by root, Mon Nov 19 01:56:11 2018 UTC

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
105static unsigned int
106div255 (unsigned int n)
107{
108 return (n + (n >> 8)) >> 8;
109}
110
111static unsigned int
112minpot (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
104static char * 128static char *
105fast_sv_grow (SV *sv, STRLEN need) 129fast_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
295typedef mapgrid *DC__Map; 319typedef mapgrid *DC__Map;
296 320
297template<typename T> 321template<typename T>
298static void 322ecb_cold static void
299prepend (T *&ptr, int sze, int inc) 323prepend (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
311template<typename T> 335template<typename T>
312static void 336ecb_cold static void
313append (T *&ptr, int sze, int inc) 337append (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
319static void 343static void
320need_facenum (struct mapgrid *self, faceid face) 344need_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
329static void 354static void
330need_texid (struct mapgrid *self, int texid) 355need_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
339static maprow * 365static maprow *
340map_get_row (mapgrid *self, int y) 366map_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
511static unsigned int
512div255 (unsigned int n)
513{
514 return (n + (n >> 8)) >> 8;
515}
516
517static unsigned int
518minpot (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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines