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.261 by root, Sun Jul 13 12:17:00 2008 UTC vs.
Revision 1.270 by root, Sun Jul 20 15:05:13 2008 UTC

85 85
86#define MIN_FONT_HEIGHT 10 86#define MIN_FONT_HEIGHT 10
87 87
88/* mask out modifiers we are not interested in */ 88/* mask out modifiers we are not interested in */
89#define MOD_MASK (KMOD_CTRL | KMOD_SHIFT | KMOD_ALT | KMOD_META) 89#define MOD_MASK (KMOD_CTRL | KMOD_SHIFT | KMOD_ALT | KMOD_META)
90
91#if 1
92# define PARACHUTE SDL_INIT_NOPARACHUTE
93#else
94# define PARACHUTE 0
95#endif
96 90
97static AV *texture_av; 91static AV *texture_av;
98 92
99static struct 93static struct
100{ 94{
373 self->oy = 0; 367 self->oy = 0;
374 self->row = 0; 368 self->row = 0;
375 self->rows = 0; 369 self->rows = 0;
376} 370}
377 371
372#define CELL_CLEAR(cell) \
373 do { \
374 if ((cell)->player) \
375 (cell)->tile [2] = 0; \
376 (cell)->darkness = 0; \
377 (cell)->stat_hp = 0; \
378 (cell)->flags = 0; \
379 (cell)->player = 0; \
380 } while (0)
381
378static void 382static void
379map_blank (DC__Map self, int x0, int y0, int w, int h) 383map_blank (DC__Map self, int x0, int y0, int w, int h)
380{ 384{
381 int x, y; 385 int x, y;
382 maprow *row; 386 maprow *row;
396 if (x >= row->c1) 400 if (x >= row->c1)
397 break; 401 break;
398 402
399 cell = row->col + x - row->c0; 403 cell = row->col + x - row->c0;
400 404
401 cell->darkness = 0; 405 CELL_CLEAR (cell);
402 cell->stat_hp = 0;
403 cell->flags = 0;
404 cell->player = 0;
405 } 406 }
406 } 407 }
407} 408}
408 409
409typedef struct { 410typedef struct {
644 const_iv (KMOD_NUM), 645 const_iv (KMOD_NUM),
645 const_iv (KMOD_CAPS), 646 const_iv (KMOD_CAPS),
646 const_iv (KMOD_MODE), 647 const_iv (KMOD_MODE),
647 648
648 const_iv (MIX_DEFAULT_FORMAT), 649 const_iv (MIX_DEFAULT_FORMAT),
650
651 const_iv (SDL_INIT_TIMER),
652 const_iv (SDL_INIT_AUDIO),
653 const_iv (SDL_INIT_VIDEO),
654 const_iv (SDL_INIT_CDROM),
655 const_iv (SDL_INIT_JOYSTICK),
656 const_iv (SDL_INIT_EVERYTHING),
657 const_iv (SDL_INIT_NOPARACHUTE),
658 const_iv (SDL_INIT_EVENTTHREAD),
659
660 const_iv (SDL_GL_RED_SIZE),
661 const_iv (SDL_GL_GREEN_SIZE),
662 const_iv (SDL_GL_BLUE_SIZE),
663 const_iv (SDL_GL_ALPHA_SIZE),
664 const_iv (SDL_GL_DOUBLEBUFFER),
665 const_iv (SDL_GL_BUFFER_SIZE),
666 const_iv (SDL_GL_DEPTH_SIZE),
667 const_iv (SDL_GL_STENCIL_SIZE),
668 const_iv (SDL_GL_ACCUM_RED_SIZE),
669 const_iv (SDL_GL_ACCUM_GREEN_SIZE),
670 const_iv (SDL_GL_ACCUM_BLUE_SIZE),
671 const_iv (SDL_GL_ACCUM_ALPHA_SIZE),
672 const_iv (SDL_GL_STEREO),
673 const_iv (SDL_GL_MULTISAMPLEBUFFERS),
674 const_iv (SDL_GL_MULTISAMPLESAMPLES),
675 const_iv (SDL_GL_ACCELERATED_VISUAL),
676 const_iv (SDL_GL_SWAP_CONTROL),
677
678 const_iv (FOW_DARKNESS)
649# undef const_iv 679# undef const_iv
650 }; 680 };
651 681
652 for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ-- > const_iv; ) 682 for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ-- > const_iv; )
653 newCONSTSUB (stash, (char *)civ->name, newSViv (civ->iv)); 683 newCONSTSUB (stash, (char *)civ->name, newSViv (civ->iv));
670 RETVAL 700 RETVAL
671 701
672NV floor (NV x) 702NV floor (NV x)
673 703
674NV ceil (NV x) 704NV ceil (NV x)
705
706NV ceilabs (NV x)
707 CODE:
708 RETVAL = x < 0. ? - ceil (-x) : ceil (x);
709 OUTPUT:
710 RETVAL
675 711
676IV minpot (UV n) 712IV minpot (UV n)
677 713
678IV popcount (UV n) 714IV popcount (UV n)
679 715
689 pango_context_set_language (opengl_context, pango_language_from_string ("en")); 725 pango_context_set_language (opengl_context, pango_language_from_string ("en"));
690 /*pango_context_set_base_dir (opengl_context, PANGO_DIRECTION_WEAK_LTR);*/ 726 /*pango_context_set_base_dir (opengl_context, PANGO_DIRECTION_WEAK_LTR);*/
691#endif 727#endif
692} 728}
693 729
694char *
695SDL_GetError () 730char *SDL_GetError ()
696 731
697int 732int SDL_Init (U32 flags)
698SDL_Init (U32 flags = SDL_INIT_VIDEO | SDL_INIT_AUDIO | PARACHUTE)
699 733
700void 734int SDL_InitSubSystem (U32 flags)
735
736void SDL_QuitSubSystem (U32 flags)
737
701SDL_Quit () 738void SDL_Quit ()
739
740int SDL_GL_SetAttribute (int attr, int value)
741
742int SDL_GL_GetAttribute (int attr)
743 CODE:
744 if (SDL_GL_GetAttribute (attr, &RETVAL))
745 XSRETURN_UNDEF;
746 OUTPUT:
747 RETVAL
702 748
703void 749void
704SDL_ListModes (int rgb, int alpha) 750SDL_ListModes (int rgb, int alpha)
705 PPCODE: 751 PPCODE:
706{ 752{
718 SDL_GL_SetAttribute (SDL_GL_ACCUM_GREEN_SIZE, 0); 764 SDL_GL_SetAttribute (SDL_GL_ACCUM_GREEN_SIZE, 0);
719 SDL_GL_SetAttribute (SDL_GL_ACCUM_BLUE_SIZE , 0); 765 SDL_GL_SetAttribute (SDL_GL_ACCUM_BLUE_SIZE , 0);
720 SDL_GL_SetAttribute (SDL_GL_ACCUM_ALPHA_SIZE, 0); 766 SDL_GL_SetAttribute (SDL_GL_ACCUM_ALPHA_SIZE, 0);
721 767
722 SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER, 1); 768 SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER, 1);
723#if SDL_VERSION_ATLEAST(1,2,10)
724 SDL_GL_SetAttribute (SDL_GL_ACCELERATED_VISUAL, 1);
725 SDL_GL_SetAttribute (SDL_GL_SWAP_CONTROL, 1); 769 SDL_GL_SetAttribute (SDL_GL_SWAP_CONTROL, 1);
726#endif
727 770
728 m = SDL_ListModes (0, SDL_FULLSCREEN | SDL_OPENGL); 771 m = SDL_ListModes (0, SDL_FULLSCREEN | SDL_OPENGL);
729 772
730 if (m && m != (SDL_Rect **)-1) 773 if (m && m != (SDL_Rect **)-1)
731 while (*m) 774 while (*m)
732 { 775 {
733 if ((*m)->w >= 800 && (*m)->h >= 480) 776 if ((*m)->w >= 400 && (*m)->h >= 300)
734 { 777 {
735 AV *av = newAV (); 778 AV *av = newAV ();
736 av_push (av, newSViv ((*m)->w)); 779 av_push (av, newSViv ((*m)->w));
737 av_push (av, newSViv ((*m)->h)); 780 av_push (av, newSViv ((*m)->h));
738 av_push (av, newSViv (rgb)); 781 av_push (av, newSViv (rgb));
1752 } 1795 }
1753 } 1796 }
1754 } 1797 }
1755 } 1798 }
1756 else 1799 else
1757 cell->darkness = 0; 1800 CELL_CLEAR (cell);
1758 } 1801 }
1759} 1802}
1760 OUTPUT: 1803 OUTPUT:
1761 RETVAL 1804 RETVAL
1762 1805
1814} 1857}
1815 OUTPUT: 1858 OUTPUT:
1816 RETVAL 1859 RETVAL
1817 1860
1818void 1861void
1819draw (DC::Map self, int mx, int my, int sw, int sh, int T, U32 player = 0xffffffff, int pdx = 0, int pdy = 0) 1862draw (DC::Map self, int mx, int my, int sw, int sh, int T, U32 player = 0xffffffff, int sdx = 0, int sdy = 0)
1820 CODE: 1863 CODE:
1821{ 1864{
1822 int x, y, z; 1865 int x, y, z;
1823 1866
1824 HV *smooth = (HV *)sv_2mortal ((SV *)newHV ()); 1867 HV *smooth = (HV *)sv_2mortal ((SV *)newHV ());
1825 uint32_t smooth_level[256 / 32]; // one bit for every possible smooth level 1868 uint32_t smooth_level[256 / 32]; // one bit for every possible smooth level
1826 static uint8_t smooth_max[256][256]; // egad, fast and wasteful on memory (64k) 1869 static uint8_t smooth_max[256][256]; // egad, fast and wasteful on memory (64k)
1827 smooth_key skey; 1870 smooth_key skey;
1828 int pl_x, pl_y; 1871 int pl_x, pl_y;
1829 maptex pl_tex; 1872 maptex pl_tex;
1830
1831 pl_tex.name = 0;
1832
1833 rc_t *rc = rc_alloc (); 1873 rc_t *rc = rc_alloc ();
1834 rc_key_t key; 1874 rc_key_t key;
1835 rc_array_t *arr; 1875 rc_array_t *arr;
1876
1877 pl_tex.name = 0;
1836 1878
1837 // thats current max. sorry. 1879 // thats current max. sorry.
1838 if (sw > 255) sw = 255; 1880 if (sw > 255) sw = 255;
1839 if (sh > 255) sh = 255; 1881 if (sh > 255) sh = 255;
1840 1882
2072 } 2114 }
2073 2115
2074 if (pl_tex.name) 2116 if (pl_tex.name)
2075 { 2117 {
2076 maptex tex = pl_tex; 2118 maptex tex = pl_tex;
2077 int px = pl_x + pdx; 2119 int px = pl_x + sdx;
2078 int py = pl_y + pdy; 2120 int py = pl_y + sdy;
2079 2121
2080 key.texname = tex.name; 2122 key.texname = tex.name;
2081 arr = rc_array (rc, &key); 2123 arr = rc_array (rc, &key);
2082 2124
2083 rc_t2f_v3f (arr, 0 , 0 , px , py , 0); 2125 rc_t2f_v3f (arr, 0 , 0 , px , py , 0);
2200 SvCUR_set (darkness3_sv, sw34 * sh3); 2242 SvCUR_set (darkness3_sv, sw34 * sh3);
2201 2243
2202 mx += self->x - 1; 2244 mx += self->x - 1;
2203 my += self->y - 1; 2245 my += self->y - 1;
2204 2246
2205 memset (darkness1, 255, sw1 * sh1); 2247 memset (darkness1, 255 - FOW_DARKNESS, sw1 * sh1);
2206 2248
2207 for (y = 0; y < sh1; y++) 2249 for (y = 0; y < sh1; y++)
2208 if (0 <= y + my && y + my < self->rows) 2250 if (0 <= y + my && y + my < self->rows)
2209 { 2251 {
2210 maprow *row = self->row + (y + my); 2252 maprow *row = self->row + (y + my);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines