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.332 by root, Mon Nov 19 00:56:08 2018 UTC vs.
Revision 1.335 by root, Mon Nov 19 01:56:11 2018 UTC

77# include <netinet/tcp.h> 77# include <netinet/tcp.h>
78# include <inttypes.h> 78# include <inttypes.h>
79#endif 79#endif
80 80
81#include "ecb.h" 81#include "ecb.h"
82#include "salloc.h"
82 83
83#define OBJ_STR "\xef\xbf\xbc" /* U+FFFC, object replacement character */ 84#define OBJ_STR "\xef\xbf\xbc" /* U+FFFC, object replacement character */
84 85
85/* this is used as fow flag as well, so has to have a different value */ 86/* this is used as fow flag as well, so has to have a different value */
86/* then anything that is computed by incoming darkness */ 87/* then anything that is computed by incoming darkness */
97 98
98#define KMOD_LRAM 0x10000 // our extension 99#define KMOD_LRAM 0x10000 // our extension
99 100
100#define TEXID_SPEECH 1 101#define TEXID_SPEECH 1
101#define TEXID_NOFACE 2 102#define TEXID_NOFACE 2
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}
102 127
103static char * 128static char *
104fast_sv_grow (SV *sv, STRLEN need) 129fast_sv_grow (SV *sv, STRLEN need)
105{ 130{
106 STRLEN len = SvLEN (sv); 131 STRLEN len = SvLEN (sv);
292}; 317};
293 318
294typedef mapgrid *DC__Map; 319typedef mapgrid *DC__Map;
295 320
296template<typename T> 321template<typename T>
297static void 322ecb_cold static void
298prepend (T *&ptr, int sze, int inc) 323prepend (T *&ptr, int sze, int inc)
299{ 324{
300 T *p; 325 T *p;
301 326
302 Newx (p, inc + sze, T); 327 Newx (p, inc + sze, T);
306 331
307 ptr = p; 332 ptr = p;
308} 333}
309 334
310template<typename T> 335template<typename T>
311static void 336ecb_cold static void
312append (T *&ptr, int sze, int inc) 337append (T *&ptr, int sze, int inc)
313{ 338{
314 Renew (ptr, sze + inc, T); 339 Renew (ptr, sze + inc, T);
315 Zero (ptr + sze, inc, T); 340 Zero (ptr + sze, inc, T);
316} 341}
317 342
318static void 343static void
319need_facenum (struct mapgrid *self, faceid face) 344need_facenum (struct mapgrid *self, faceid face)
320{ 345{
321 while (self->faces <= face) 346 if (ecb_expect_true (self->faces > face))
322 { 347 return;
348
349 size_t newsize = minpot (face + 1);
323 append (self->face2tile, self->faces, self->faces); 350 append (self->face2tile, self->faces, newsize - self->faces);
324 self->faces *= 2; 351 self->faces = newsize;
325 }
326} 352}
327 353
328static void 354static void
329need_texid (struct mapgrid *self, int texid) 355need_texid (struct mapgrid *self, int texid)
330{ 356{
331 while (self->texs <= texid) 357 if (ecb_expect_true (self->texs > texid))
332 { 358 return;
359
360 size_t newsize = minpot (texid + 1);
333 append (self->tex, self->texs, self->texs); 361 append (self->tex, self->texs, newsize - self->texs);
334 self->texs *= 2; 362 self->texs = newsize;
335 }
336} 363}
337 364
338static maprow * 365static maprow *
339map_get_row (mapgrid *self, int y) 366map_get_row (mapgrid *self, int y)
340{ 367{
454 { 481 {
455 return tile == o.tile && x == o.x && y == o.y && level == o.level; 482 return tile == o.tile && x == o.x && y == o.y && level == o.level;
456 } 483 }
457}; 484};
458 485
459typedef ska::flat_hash_map<smooth_key, IV> smooth_hash; 486typedef ska::flat_hash_map<smooth_key, IV, std::hash<smooth_key>, std::equal_to<smooth_key>, slice_allocator<smooth_key>> smooth_hash;
460 487
461namespace std { 488namespace std {
462 template <> 489 template <>
463 struct hash<smooth_key> 490 struct hash<smooth_key>
464 { 491 {
502 ev.code = 1; 529 ev.code = 1;
503 ev.data1 = (void *)(long)channel; 530 ev.data1 = (void *)(long)channel;
504 ev.data2 = 0; 531 ev.data2 = 0;
505 532
506 SDL_PushEvent ((SDL_Event *)&ev); 533 SDL_PushEvent ((SDL_Event *)&ev);
507}
508
509// approximately divide by 255
510static unsigned int
511div255 (unsigned int n)
512{
513 return (n + (n >> 8)) >> 8;
514}
515
516static unsigned int
517minpot (unsigned int n)
518{
519 if (!n)
520 return 0;
521
522 --n;
523
524 n |= n >> 1;
525 n |= n >> 2;
526 n |= n >> 4;
527 n |= n >> 8;
528 n |= n >> 16;
529
530 return n + 1;
531} 534}
532 535
533/* SDL should provide this, really. */ 536/* SDL should provide this, really. */
534#define SDLK_MODIFIER_MIN 300 537#define SDLK_MODIFIER_MIN 300
535#define SDLK_MODIFIER_MAX 314 538#define SDLK_MODIFIER_MAX 314

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines