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.294 by root, Sat Dec 19 05:06:56 2009 UTC vs.
Revision 1.296 by root, Mon Dec 21 23:52:34 2009 UTC

19 19
20#ifdef _WIN32 20#ifdef _WIN32
21# undef pipe 21# undef pipe
22// microsoft vs. C 22// microsoft vs. C
23# define sqrtf(x) sqrt(x) 23# define sqrtf(x) sqrt(x)
24# define roundf(x) (int)(x)
25# define atan2f(x,y) atan2(x,y) 24# define atan2f(x,y) atan2(x,y)
26# define M_PI 3.14159265f 25# define M_PI 3.14159265f
27#endif 26#endif
28 27
29#include <assert.h> 28#include <assert.h>
81#define expect_false(expr) expect ((expr) != 0, 0) 80#define expect_false(expr) expect ((expr) != 0, 0)
82#define expect_true(expr) expect ((expr) != 0, 1) 81#define expect_true(expr) expect ((expr) != 0, 1)
83 82
84#define OBJ_STR "\xef\xbf\xbc" /* U+FFFC, object replacement character */ 83#define OBJ_STR "\xef\xbf\xbc" /* U+FFFC, object replacement character */
85 84
85/* this is used as fow flag as well, so has to have a different value */
86/* then anything that is computed by incoming darkness */
86#define FOW_DARKNESS 64 87#define FOW_DARKNESS 50
87#define DARKNESS_ADJUST(n) ((29 * (int)(n)) >> 5) /* times 0.9 */ 88#define DARKNESS_ADJUST(n) (n)
88 89
89#define MAP_EXTEND_X 32 90#define MAP_EXTEND_X 32
90#define MAP_EXTEND_Y 512 91#define MAP_EXTEND_Y 512
91 92
92#define MIN_FONT_HEIGHT 10 93#define MIN_FONT_HEIGHT 10
822 823
823IV minpot (UV n) 824IV minpot (UV n)
824 825
825IV popcount (UV n) 826IV popcount (UV n)
826 827
828NV distance (NV dx, NV dy)
829 CODE:
830 RETVAL = pow (dx * dx + dy * dy, 0.5);
831 OUTPUT:
832 RETVAL
833
827void 834void
828pango_init () 835pango_init ()
829 CODE: 836 CODE:
830{ 837{
831 opengl_fontmap = pango_opengl_font_map_new (); 838 opengl_fontmap = pango_opengl_font_map_new ();
1660 glDisable (GL_BLEND); 1667 glDisable (GL_BLEND);
1661 } 1668 }
1662} 1669}
1663 1670
1664void 1671void
1665draw_fow_texture (float intensity, int name1, float s1, float t1, float w1, float h1, float blend = 0.f, float dx = 0.f, float dy = 0.f, int name2 = 0, float s2 = 0.f, float t2 = 0.f, float w2 = 0.f, float h2 = 0.f) 1672draw_fow_texture (float intensity, int hidden_tex, int name1, uint8_t *data1, float s, float t, int w, int h, float blend = 0.f, int dx = 0, int dy = 0, int name2 = 0, uint8_t *data2 = data1)
1666 PROTOTYPE: @ 1673 PROTOTYPE: @
1667 CODE: 1674 CODE:
1668{ 1675{
1669 glEnable (GL_TEXTURE_2D); 1676 glEnable (GL_TEXTURE_2D);
1670 glEnable (GL_BLEND); 1677 glEnable (GL_BLEND);
1675 glPushMatrix (); 1682 glPushMatrix ();
1676 glScalef (1./3, 1./3, 1.); 1683 glScalef (1./3, 1./3, 1.);
1677 1684
1678 if (blend > 0.f) 1685 if (blend > 0.f)
1679 { 1686 {
1680 float S2, T2; /* 0. 0. for texture 2 */ 1687 float dx3 = dx * -3.f / w;
1681 float w = w1 > w2 ? w1 : w2; 1688 float dy3 = dy * -3.f / h;
1682 float h = h1 > h2 ? h1 : h2;
1683 GLfloat env_color[4] = { 0., 0., 0., blend }; 1689 GLfloat env_color[4] = { 0., 0., 0., blend };
1684 1690
1685 /* interpolate the two shadow textures */ 1691 /* interpolate the two shadow textures */
1686 /* stage 0 == rgb(glcolor) + alpha(t0) */ 1692 /* stage 0 == rgb(glcolor) + alpha(t0) */
1687 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); 1693 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
1708 glTexEnvi (GL_TEXTURE_ENV, GL_OPERAND1_ALPHA, GL_SRC_ALPHA); 1714 glTexEnvi (GL_TEXTURE_ENV, GL_OPERAND1_ALPHA, GL_SRC_ALPHA);
1709 1715
1710 glTexEnvi (GL_TEXTURE_ENV, GL_SOURCE2_ALPHA, GL_CONSTANT); 1716 glTexEnvi (GL_TEXTURE_ENV, GL_SOURCE2_ALPHA, GL_CONSTANT);
1711 glTexEnvi (GL_TEXTURE_ENV, GL_OPERAND2_ALPHA, GL_SRC_ALPHA); 1717 glTexEnvi (GL_TEXTURE_ENV, GL_OPERAND2_ALPHA, GL_SRC_ALPHA);
1712 1718
1713 s1 *= w / w1;
1714 t1 *= h / h1;
1715
1716 dx *= -3.f / w2;
1717 dy *= -3.f / h2;
1718 dx *= w / w2;
1719 dy *= h / h2;
1720
1721 s2 *= w / w2;
1722 t2 *= h / h2;
1723
1724 glBegin (GL_QUADS); 1719 glBegin (GL_QUADS);
1725 gl.MultiTexCoord2f (GL_TEXTURE0, 0, 0); gl.MultiTexCoord2f (GL_TEXTURE1, dx , dy ); glVertex2f ( 0, 0); 1720 gl.MultiTexCoord2f (GL_TEXTURE0, 0, 0); gl.MultiTexCoord2f (GL_TEXTURE1, dx3 , dy3 ); glVertex2i (0, 0);
1726 gl.MultiTexCoord2f (GL_TEXTURE0, 0, t1); gl.MultiTexCoord2f (GL_TEXTURE1, dx , dy + t2); glVertex2f ( 0, h1); 1721 gl.MultiTexCoord2f (GL_TEXTURE0, 0, t); gl.MultiTexCoord2f (GL_TEXTURE1, dx3 , dy3 + t); glVertex2i (0, h);
1727 gl.MultiTexCoord2f (GL_TEXTURE0, s1, t1); gl.MultiTexCoord2f (GL_TEXTURE1, dx + s2, dy + t2); glVertex2f (w1, h1); 1722 gl.MultiTexCoord2f (GL_TEXTURE0, s, t); gl.MultiTexCoord2f (GL_TEXTURE1, dx3 + s, dy3 + t); glVertex2i (w, h);
1728 gl.MultiTexCoord2f (GL_TEXTURE0, s1, 0); gl.MultiTexCoord2f (GL_TEXTURE1, dx + s2, dy ); glVertex2f (w1, 0); 1723 gl.MultiTexCoord2f (GL_TEXTURE0, s, 0); gl.MultiTexCoord2f (GL_TEXTURE1, dx3 + s, dy3 ); glVertex2i (w, 0);
1729 glEnd (); 1724 glEnd ();
1730 1725
1731 glDisable (GL_TEXTURE_2D); 1726 glDisable (GL_TEXTURE_2D);
1732 gl.ActiveTexture (GL_TEXTURE0); 1727 gl.ActiveTexture (GL_TEXTURE0);
1733 } 1728 }
1735 { 1730 {
1736 /* simple blending of one texture, also opengl <1.3 path */ 1731 /* simple blending of one texture, also opengl <1.3 path */
1737 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); 1732 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
1738 1733
1739 glBegin (GL_QUADS); 1734 glBegin (GL_QUADS);
1740 glTexCoord2f ( 0, 0); glVertex2f ( 0, 0); 1735 glTexCoord2f (0, 0); glVertex2f (0, 0);
1741 glTexCoord2f ( 0, t1); glVertex2f ( 0, h1); 1736 glTexCoord2f (0, t); glVertex2f (0, h);
1742 glTexCoord2f (s1, t1); glVertex2f (w1, h1); 1737 glTexCoord2f (s, t); glVertex2f (w, h);
1743 glTexCoord2f (s1, 0); glVertex2f (w1, 0); 1738 glTexCoord2f (s, 0); glVertex2f (w, 0);
1744 glEnd (); 1739 glEnd ();
1745 } 1740 }
1741
1742 /* draw ?-marks or equivalent, this is very clumsy code :/ */
1743 {
1744 int x, y;
1745 int dx3 = dx * 3;
1746 int dy3 = dy * 3;
1747
1748 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
1749 glBindTexture (GL_TEXTURE_2D, hidden_tex);
1750 glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
1751 glTranslatef (-1., -1., 0);
1752 glBegin (GL_QUADS);
1753
1754 for (y = 1; y < h; y += 3)
1755 {
1756 int y1 = y - dy3;
1757 int y1valid = y1 >= 0 && y1 < h;
1758
1759 for (x = 1; x < w; x += 3)
1760 {
1761 int x1 = x - dx3;
1762 uint8_t h1 = data1 [x + y * w] == DARKNESS_ADJUST (255 - FOW_DARKNESS);
1763 uint8_t h2;
1764
1765 if (y1valid && x1 >= 0 && x1 < w)
1766 h2 = data2 [x1 + y1 * w] == DARKNESS_ADJUST (255 - FOW_DARKNESS);
1767 else
1768 h2 = 1; /* out of range == invisible */
1769
1770 if (h1 || h2)
1771 {
1772 float alpha = h1 == h2 ? 1.f : h1 ? 1.f - blend : blend;
1773 glColor4f (1., 1., 1., alpha);
1774
1775 glTexCoord2f (0, 0.); glVertex2i (x , y );
1776 glTexCoord2f (0, 1.); glVertex2i (x , y + 3);
1777 glTexCoord2f (1, 1.); glVertex2i (x + 3, y + 3);
1778 glTexCoord2f (1, 0.); glVertex2i (x + 3, y );
1779 }
1780 }
1781 }
1782 }
1783
1784 glEnd ();
1746 1785
1747 glPopMatrix (); 1786 glPopMatrix ();
1748 1787
1749 glDisable (GL_TEXTURE_2D); 1788 glDisable (GL_TEXTURE_2D);
1750 glDisable (GL_BLEND); 1789 glDisable (GL_BLEND);
1971 { 2010 {
1972 ext = *data++; 2011 ext = *data++;
1973 cmd = ext & 0x7f; 2012 cmd = ext & 0x7f;
1974 2013
1975 if (cmd < 4) 2014 if (cmd < 4)
1976 cell->darkness = 255 - ext * 64 + 1; 2015 cell->darkness = 255 - ext * 64 + 1; /* make sure this doesn't collide with FOW_DARKNESS */
1977 else if (cmd == 5) // health 2016 else if (cmd == 5) // health
1978 { 2017 {
1979 cell->stat_width = 1; 2018 cell->stat_width = 1;
1980 cell->stat_hp = *data++; 2019 cell->stat_hp = *data++;
1981 } 2020 }
2241 skey.x = x ; skey.y = y ; smooth_or_bits (smooth, &skey, 0x0400); 2280 skey.x = x ; skey.y = y ; smooth_or_bits (smooth, &skey, 0x0400);
2242 skey.x = x + 2; skey.y = y ; smooth_or_bits (smooth, &skey, 0x0800); 2281 skey.x = x + 2; skey.y = y ; smooth_or_bits (smooth, &skey, 0x0800);
2243 } 2282 }
2244 } 2283 }
2245 2284
2246 if (expect_false (z == 2)) 2285 if (expect_false (z == 2) && expect_false (cell->flags))
2247 { 2286 {
2248 /* draw question marks on top of hidden spaces */ 2287 // overlays such as the speech bubble, probably more to come
2249 if (!cell->darkness) 2288 if (cell->flags & 1)
2250 { 2289 {
2251 maptex tex = self->tex [TEXID_HIDDEN];
2252 int px = (x + 1) * T - tex.w;
2253 int py = (y + 1) * T - tex.h;
2254
2255 rc_t2f_v3f (arr_hidden, 0 , 0 , px , py , 0);
2256 rc_t2f_v3f (arr_hidden, 0 , tex.t, px , py + tex.h, 0);
2257 rc_t2f_v3f (arr_hidden, tex.s, tex.t, px + tex.w, py + tex.h, 0);
2258 rc_t2f_v3f (arr_hidden, tex.s, 0 , px + tex.w, py , 0);
2259 }
2260
2261 if (expect_false (cell->flags))
2262 {
2263 // overlays such as the speech bubble, probably more to come
2264 if (cell->flags & 1)
2265 {
2266 rc_key_t key_ov = key; 2290 rc_key_t key_ov = key;
2267 maptex tex = self->tex [TEXID_SPEECH]; 2291 maptex tex = self->tex [TEXID_SPEECH];
2268 rc_array_t *arr; 2292 rc_array_t *arr;
2269 int px = x * T + T * 2 / 32; 2293 int px = x * T + T * 2 / 32;
2270 int py = y * T - T * 6 / 32; 2294 int py = y * T - T * 6 / 32;
2271 2295
2272 key_ov.texname = tex.name; 2296 key_ov.texname = tex.name;
2273 arr = rc_array (rc_ov, &key_ov); 2297 arr = rc_array (rc_ov, &key_ov);
2274 2298
2275 rc_t2f_v3f (arr, 0 , 0 , px , py , 0); 2299 rc_t2f_v3f (arr, 0 , 0 , px , py , 0);
2276 rc_t2f_v3f (arr, 0 , tex.t, px , py + T, 0); 2300 rc_t2f_v3f (arr, 0 , tex.t, px , py + T, 0);
2277 rc_t2f_v3f (arr, tex.s, tex.t, px + T, py + T, 0); 2301 rc_t2f_v3f (arr, tex.s, tex.t, px + T, py + T, 0);
2278 rc_t2f_v3f (arr, tex.s, 0 , px + T, py , 0); 2302 rc_t2f_v3f (arr, tex.s, 0 , px + T, py , 0);
2279 }
2280 } 2303 }
2281 } 2304 }
2282 } 2305 }
2283 } 2306 }
2284 2307
2427 } 2450 }
2428 } 2451 }
2429} 2452}
2430 2453
2431void 2454void
2432draw_magicmap (DC::Map self, int dx, int dy, int w, int h, unsigned char *data) 2455draw_magicmap (DC::Map self, int w, int h, unsigned char *data)
2433 CODE: 2456 CODE:
2434{ 2457{
2435 static float color[16][3] = { 2458 static float color[16][3] = {
2436 { 0.00F, 0.00F, 0.00F }, 2459 { 0.00f, 0.00f, 0.00f },
2437 { 1.00F, 1.00F, 1.00F }, 2460 { 1.00f, 1.00f, 1.00f },
2438 { 0.00F, 0.00F, 0.55F }, 2461 { 0.00f, 0.00f, 0.55f },
2439 { 1.00F, 0.00F, 0.00F }, 2462 { 1.00f, 0.00f, 0.00f },
2440 2463
2441 { 1.00F, 0.54F, 0.00F }, 2464 { 1.00f, 0.54f, 0.00f },
2442 { 0.11F, 0.56F, 1.00F }, 2465 { 0.11f, 0.56f, 1.00f },
2443 { 0.93F, 0.46F, 0.00F }, 2466 { 0.93f, 0.46f, 0.00f },
2444 { 0.18F, 0.54F, 0.34F }, 2467 { 0.18f, 0.54f, 0.34f },
2445 2468
2446 { 0.56F, 0.73F, 0.56F }, 2469 { 0.56f, 0.73f, 0.56f },
2447 { 0.80F, 0.80F, 0.80F }, 2470 { 0.80f, 0.80f, 0.80f },
2448 { 0.55F, 0.41F, 0.13F }, 2471 { 0.55f, 0.41f, 0.13f },
2449 { 0.99F, 0.77F, 0.26F }, 2472 { 0.99f, 0.77f, 0.26f },
2450 2473
2451 { 0.74F, 0.65F, 0.41F }, 2474 { 0.74f, 0.65f, 0.41f },
2452 2475
2453 { 0.00F, 1.00F, 1.00F }, 2476 { 0.00f, 1.00f, 1.00f },
2454 { 1.00F, 0.00F, 1.00F }, 2477 { 1.00f, 0.00f, 1.00f },
2455 { 1.00F, 1.00F, 0.00F }, 2478 { 1.00f, 1.00f, 0.00f },
2456 }; 2479 };
2457 2480
2458 int x, y; 2481 int x, y;
2459 2482
2460 glEnable (GL_TEXTURE_2D); 2483 glEnable (GL_TEXTURE_2D);
2461 /* GL_REPLACE would be correct, as we don't need to modulate alpha, 2484 /* GL_REPLACE would be correct, as we don't need to modulate alpha,
2462 * but the nvidia driver (185.18.14) mishandles alpha textures 2485 * but the nvidia driver (185.18.14) mishandles alpha textures
2463 * ansd takes the colour from god knows where instead of using 2486 * and takes the colour from god knows where instead of using
2464 * Cp. MODULATE results in the same colour, but slightly different 2487 * Cp. MODULATE results in the same colour, but slightly different
2465 * alpha, but atcually gives us the correct colour with nvidia. 2488 * alpha, but atcually gives us the correct colour with nvidia.
2466 */ 2489 */
2467 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 2490 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
2468 glEnable (GL_BLEND); 2491 glEnable (GL_BLEND);
2476 2499
2477 if (m) 2500 if (m)
2478 { 2501 {
2479 float *c = color [m & 15]; 2502 float *c = color [m & 15];
2480 2503
2481 float tx1 = m & 0x40 ? 0.5 : 0.; 2504 float tx1 = m & 0x40 ? 0.5f : 0.f;
2482 float tx2 = tx1 + 0.5; 2505 float tx2 = tx1 + 0.5f;
2483 2506
2484 glColor4f (c[0], c[1], c[2], 1); 2507 glColor4f (c[0], c[1], c[2], 1);
2485 glTexCoord2f (tx1, 0.); glVertex2i (x , y ); 2508 glTexCoord2f (tx1, 0.); glVertex2i (x , y );
2486 glTexCoord2f (tx1, 1.); glVertex2i (x , y + 1); 2509 glTexCoord2f (tx1, 1.); glVertex2i (x , y + 1);
2487 glTexCoord2f (tx2, 1.); glVertex2i (x + 1, y + 1); 2510 glTexCoord2f (tx2, 1.); glVertex2i (x + 1, y + 1);
2497void 2520void
2498fow_texture (DC::Map self, int mx, int my, int sw, int sh) 2521fow_texture (DC::Map self, int mx, int my, int sw, int sh)
2499 PPCODE: 2522 PPCODE:
2500{ 2523{
2501 int x, y; 2524 int x, y;
2502 int sw1 = sw + 2; 2525 int sw1 = sw + 2;
2503 int sh1 = sh + 2; 2526 int sh1 = sh + 2;
2504 int sh3 = sh * 3; 2527 int sh3 = sh * 3;
2505 int sw34 = (sw * 3 + 3) & ~3; 2528 int sw3 = sw * 3;
2506 uint8_t *darkness1 = (uint8_t *)malloc (sw1 * sh1); 2529 uint8_t *darkness1 = (uint8_t *)malloc (sw1 * sh1);
2507 SV *darkness3_sv = sv_2mortal (newSV (sw34 * sh3)); 2530 SV *darkness3_sv = sv_2mortal (newSV (sw3 * sh3));
2508 uint8_t *darkness3 = (uint8_t *)SvPVX (darkness3_sv); 2531 uint8_t *darkness3 = (uint8_t *)SvPVX (darkness3_sv);
2509 2532
2510 SvPOK_only (darkness3_sv); 2533 SvPOK_only (darkness3_sv);
2511 SvCUR_set (darkness3_sv, sw34 * sh3); 2534 SvCUR_set (darkness3_sv, sw3 * sh3);
2512 2535
2513 mx += self->x - 1; 2536 mx += self->x - 1;
2514 my += self->y - 1; 2537 my += self->y - 1;
2515
2516 memset (darkness1, DARKNESS_ADJUST (255 - FOW_DARKNESS), sw1 * sh1);
2517 2538
2518 for (y = 0; y < sh1; y++) 2539 for (y = 0; y < sh1; y++)
2519 if (0 <= y + my && y + my < self->rows) 2540 if (0 <= y + my && y + my < self->rows)
2520 { 2541 {
2521 maprow *row = self->row + (y + my); 2542 maprow *row = self->row + (y + my);
2554 2575
2555 uint8_t r13 = (d13 + d23 + d12) / 3; 2576 uint8_t r13 = (d13 + d23 + d12) / 3;
2556 uint8_t r23 = d23; 2577 uint8_t r23 = d23;
2557 uint8_t r33 = (d23 + d33 + d32) / 3; 2578 uint8_t r33 = (d23 + d33 + d32) / 3;
2558 2579
2559 darkness3 [(y * 3 ) * sw34 + (x * 3 )] = MAX (d22, r11); 2580 darkness3 [(y * 3 ) * sw3 + (x * 3 )] = MAX (d22, r11);
2560 darkness3 [(y * 3 ) * sw34 + (x * 3 + 1)] = MAX (d22, r21); 2581 darkness3 [(y * 3 ) * sw3 + (x * 3 + 1)] = MAX (d22, r21);
2561 darkness3 [(y * 3 ) * sw34 + (x * 3 + 2)] = MAX (d22, r31); 2582 darkness3 [(y * 3 ) * sw3 + (x * 3 + 2)] = MAX (d22, r31);
2562 darkness3 [(y * 3 + 1) * sw34 + (x * 3 )] = MAX (d22, r12); 2583 darkness3 [(y * 3 + 1) * sw3 + (x * 3 )] = MAX (d22, r12);
2563 darkness3 [(y * 3 + 1) * sw34 + (x * 3 + 1)] = MAX (d22, r22); 2584 darkness3 [(y * 3 + 1) * sw3 + (x * 3 + 1)] = MAX (d22, r22); /* this MUST be == d22 */
2564 darkness3 [(y * 3 + 1) * sw34 + (x * 3 + 2)] = MAX (d22, r32); 2585 darkness3 [(y * 3 + 1) * sw3 + (x * 3 + 2)] = MAX (d22, r32);
2565 darkness3 [(y * 3 + 2) * sw34 + (x * 3 )] = MAX (d22, r13); 2586 darkness3 [(y * 3 + 2) * sw3 + (x * 3 )] = MAX (d22, r13);
2566 darkness3 [(y * 3 + 2) * sw34 + (x * 3 + 1)] = MAX (d22, r23); 2587 darkness3 [(y * 3 + 2) * sw3 + (x * 3 + 1)] = MAX (d22, r23);
2567 darkness3 [(y * 3 + 2) * sw34 + (x * 3 + 2)] = MAX (d22, r33); 2588 darkness3 [(y * 3 + 2) * sw3 + (x * 3 + 2)] = MAX (d22, r33);
2568 } 2589 }
2569 2590
2570 free (darkness1); 2591 free (darkness1);
2571 2592
2572 EXTEND (SP, 3); 2593 EXTEND (SP, 3);
2573 PUSHs (sv_2mortal (newSViv (sw34))); 2594 PUSHs (sv_2mortal (newSViv (sw3)));
2574 PUSHs (sv_2mortal (newSViv (sh3))); 2595 PUSHs (sv_2mortal (newSViv (sh3)));
2575 PUSHs (darkness3_sv); 2596 PUSHs (darkness3_sv);
2576} 2597}
2577 2598
2578SV * 2599SV *
2835void 2856void
2836set_position_r (DC::Channel self, int dx, int dy, int maxdistance) 2857set_position_r (DC::Channel self, int dx, int dy, int maxdistance)
2837 CODE: 2858 CODE:
2838{ 2859{
2839 int distance = sqrtf (dx * dx + dy * dy) * (255.f / sqrtf (maxdistance * maxdistance)); 2860 int distance = sqrtf (dx * dx + dy * dy) * (255.f / sqrtf (maxdistance * maxdistance));
2840 int angle = 360 + (int)roundf (atan2f (dx, -dy) * 180.f / (float)M_PI); 2861 int angle = atan2f (dx, -dy) * 180.f / (float)M_PI + 360.f;
2841 Mix_SetPosition (self, angle, CLAMP (distance, 0, 255)); 2862 Mix_SetPosition (self, angle, CLAMP (distance, 0, 255));
2842} 2863}
2843 2864
2844void 2865void
2845set_reverse_stereo (DC::Channel self, int flip) 2866set_reverse_stereo (DC::Channel self, int flip)
3292 3313
3293void glEndList () 3314void glEndList ()
3294 3315
3295void glCallList (int list) 3316void glCallList (int list)
3296 3317
3318void c_init ()
3319 CODE:
3320 glPixelStorei (GL_PACK_ALIGNMENT , 1);
3321 glPixelStorei (GL_UNPACK_ALIGNMENT, 1);
3322
3297MODULE = Deliantra::Client PACKAGE = DC::UI::Base 3323MODULE = Deliantra::Client PACKAGE = DC::UI::Base
3298 3324
3299PROTOTYPES: DISABLE 3325PROTOTYPES: DISABLE
3300 3326
3301void 3327void

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines