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.114 by root, Wed Jun 14 18:02:00 2006 UTC vs.
Revision 1.118 by root, Thu Jun 15 15:47:35 2006 UTC

436 436
437 for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ-- > const_iv; ) 437 for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ-- > const_iv; )
438 newCONSTSUB (stash, (char *)civ->name, newSViv (civ->iv)); 438 newCONSTSUB (stash, (char *)civ->name, newSViv (civ->iv));
439} 439}
440 440
441NV floor (NV x)
442
443NV ceil (NV x)
444
441void 445void
442pango_init () 446pango_init ()
443 CODE: 447 CODE:
444 // delayed, so it can pick up new fonts added by AddFontResourceEx 448 // delayed, so it can pick up new fonts added by AddFontResourceEx
445{ 449{
481 SDL_GL_SetAttribute (SDL_GL_GREEN_SIZE, 5); 485 SDL_GL_SetAttribute (SDL_GL_GREEN_SIZE, 5);
482 SDL_GL_SetAttribute (SDL_GL_BLUE_SIZE, 5); 486 SDL_GL_SetAttribute (SDL_GL_BLUE_SIZE, 5);
483 SDL_GL_SetAttribute (SDL_GL_ALPHA_SIZE, 1); 487 SDL_GL_SetAttribute (SDL_GL_ALPHA_SIZE, 1);
484 488
485 SDL_GL_SetAttribute (SDL_GL_BUFFER_SIZE, 15); 489 SDL_GL_SetAttribute (SDL_GL_BUFFER_SIZE, 15);
486 SDL_GL_SetAttribute (SDL_GL_DEPTH_SIZE, 16); 490 SDL_GL_SetAttribute (SDL_GL_DEPTH_SIZE, 0);
487 491
488 SDL_GL_SetAttribute (SDL_GL_ACCUM_RED_SIZE, 0); 492 SDL_GL_SetAttribute (SDL_GL_ACCUM_RED_SIZE, 0);
489 SDL_GL_SetAttribute (SDL_GL_ACCUM_GREEN_SIZE, 0); 493 SDL_GL_SetAttribute (SDL_GL_ACCUM_GREEN_SIZE, 0);
490 SDL_GL_SetAttribute (SDL_GL_ACCUM_BLUE_SIZE, 0); 494 SDL_GL_SetAttribute (SDL_GL_ACCUM_BLUE_SIZE, 0);
491 SDL_GL_SetAttribute (SDL_GL_ACCUM_ALPHA_SIZE, 0); 495 SDL_GL_SetAttribute (SDL_GL_ACCUM_ALPHA_SIZE, 0);
1330 OUTPUT: 1334 OUTPUT:
1331 RETVAL 1335 RETVAL
1332 1336
1333void 1337void
1334draw (CFClient::Map self, int shift_x, int shift_y, int x0, int y0, int sw, int sh) 1338draw (CFClient::Map self, int shift_x, int shift_y, int x0, int y0, int sw, int sh)
1335 PPCODE: 1339 CODE:
1336{ 1340{
1337 int vx, vy; 1341 int vx, vy;
1338 int x, y, z; 1342 int x, y, z;
1339 int last_name; 1343 int last_name;
1340 mapface face; 1344 mapface face;
1341 int sw4 = (sw + 3) & ~3;
1342 SV *darkness_sv = sv_2mortal (newSV (sw4 * sh));
1343 uint8_t *darkness = (uint8_t *)SvPVX (darkness_sv);
1344 1345
1345 memset (darkness, 255, sw4 * sh);
1346 SvPOK_only (darkness_sv);
1347 SvCUR_set (darkness_sv, sw4 * sh);
1348
1349 vx = self->x + (self->w - sw) / 2 - shift_x; 1346 vx = self->x + (self->w - sw + 1) / 2 - shift_x;
1350 vy = self->y + (self->h - sh) / 2 - shift_y; 1347 vy = self->y + (self->h - sh + 1) / 2 - shift_y;
1351 1348
1352 /* 1349 /*
1353 int vx = self->vx = self->w >= sw 1350 int vx = self->vx = self->w >= sw
1354 ? self->x + (self->w - sw) / 2 1351 ? self->x + (self->w - sw) / 2
1355 : MIN (self->x, MAX (self->x + self->w - sw + 1, self->vx)); 1352 : MIN (self->x, MAX (self->x + self->w - sw + 1, self->vx));
1359 : MIN (self->y, MAX (self->y + self->h - sh + 1, self->vy)); 1356 : MIN (self->y, MAX (self->y + self->h - sh + 1, self->vy));
1360 */ 1357 */
1361 1358
1362 glColor4ub (255, 255, 255, 255); 1359 glColor4ub (255, 255, 255, 255);
1363 1360
1361 glEnable (GL_BLEND);
1364 glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 1362 glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
1365 glEnable (GL_BLEND);
1366 glEnable (GL_TEXTURE_2D); 1363 glEnable (GL_TEXTURE_2D);
1367 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); 1364 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
1368 1365
1369 glBegin (GL_QUADS); 1366 glBegin (GL_QUADS);
1370 1367
1378 1375
1379 for (x = 0; x < sw; x++) 1376 for (x = 0; x < sw; x++)
1380 if (row->c0 <= x + vx && x + vx < row->c1) 1377 if (row->c0 <= x + vx && x + vx < row->c1)
1381 { 1378 {
1382 mapcell *cell = row->col + (x + vx - row->c0); 1379 mapcell *cell = row->col + (x + vx - row->c0);
1383
1384 darkness[y * sw4 + x] = cell->darkness < 0
1385 ? 255 - FOW_DARKNESS
1386 : 255 - cell->darkness;
1387 1380
1388 face = cell->face [z]; 1381 face = cell->face [z];
1389 1382
1390 if (face) 1383 if (face)
1391 { 1384 {
1412 1405
1413 glEnd (); 1406 glEnd ();
1414 1407
1415 glDisable (GL_TEXTURE_2D); 1408 glDisable (GL_TEXTURE_2D);
1416 glDisable (GL_BLEND); 1409 glDisable (GL_BLEND);
1410}
1411
1412void
1413draw_magicmap (CFClient::Map self, int dx, int dy, int w, int h, unsigned char *data)
1414 CODE:
1415{
1416 static float color[16][3] = {
1417 { 0.00, 0.00, 0.00 },
1418 { 1.00, 1.00, 1.00 },
1419 { 0.00, 0.00, 0.55 },
1420 { 1.00, 0.00, 0.00 },
1421
1422 { 1.00, 0.54, 0.00 },
1423 { 0.11, 0.56, 1.00 },
1424 { 0.93, 0.46, 0.00 },
1425 { 0.18, 0.54, 0.34 },
1426
1427 { 0.56, 0.73, 0.56 },
1428 { 0.80, 0.80, 0.80 },
1429 { 0.55, 0.41, 0.13 },
1430 { 0.99, 0.77, 0.26 },
1431
1432 { 0.74, 0.65, 0.41 },
1433
1434 { 0.00, 1.00, 1.00 },
1435 { 1.00, 0.00, 1.00 },
1436 { 1.00, 1.00, 0.00 },
1437 };
1438
1439 int x, y;
1440
1441 glEnable (GL_TEXTURE_2D);
1442 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
1443 glEnable (GL_BLEND);
1444 glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
1445 glBegin (GL_QUADS);
1446
1447 for (y = 0; y < h; y++)
1448 for (x = 0; x < w; x++)
1449 {
1450 unsigned char m = data [x + y * w];
1451
1452 if (m)
1453 {
1454 float *c = color [m & 15];
1455
1456 float tx1 = m & 0x40 ? 0.5 : 0.;
1457 float tx2 = tx1 + 0.5;
1458
1459 glColor4f (c[0], c[1], c[2], 0.75);
1460 glTexCoord2f (tx1, 0.); glVertex2i (x , y );
1461 glTexCoord2f (tx1, 1.); glVertex2i (x , y + 1);
1462 glTexCoord2f (tx2, 1.); glVertex2i (x + 1, y + 1);
1463 glTexCoord2f (tx2, 0.); glVertex2i (x + 1, y );
1464 }
1465 }
1466
1467 glEnd ();
1468 glDisable (GL_BLEND);
1469 glDisable (GL_TEXTURE_2D);
1470}
1471
1472void
1473fow_texture (CFClient::Map self, int shift_x, int shift_y, int x0, int y0, int sw, int sh)
1474 PPCODE:
1475{
1476 int vx, vy;
1477 int x, y;
1478 int sw4 = (sw + 3) & ~3;
1479 SV *darkness_sv = sv_2mortal (newSV (sw4 * sh));
1480 uint8_t *darkness = (uint8_t *)SvPVX (darkness_sv);
1481
1482 memset (darkness, 255, sw4 * sh);
1483 SvPOK_only (darkness_sv);
1484 SvCUR_set (darkness_sv, sw4 * sh);
1485
1486 vx = self->x + (self->w - sw + 1) / 2 - shift_x;
1487 vy = self->y + (self->h - sh + 1) / 2 - shift_y;
1488
1489 for (y = 0; y < sh; y++)
1490 if (0 <= y + vy && y + vy < self->rows)
1491 {
1492 maprow *row = self->row + (y + vy);
1493
1494 for (x = 0; x < sw; x++)
1495 if (row->c0 <= x + vx && x + vx < row->c1)
1496 {
1497 mapcell *cell = row->col + (x + vx - row->c0);
1498
1499 darkness[y * sw4 + x] = cell->darkness < 0
1500 ? 255 - FOW_DARKNESS
1501 : 255 - cell->darkness;
1502 }
1503 }
1417 1504
1418 EXTEND (SP, 3); 1505 EXTEND (SP, 3);
1419 PUSHs (sv_2mortal (newSViv (sw4))); 1506 PUSHs (sv_2mortal (newSViv (sw4)));
1420 PUSHs (sv_2mortal (newSViv (sh))); 1507 PUSHs (sv_2mortal (newSViv (sh)));
1421 PUSHs (darkness_sv); 1508 PUSHs (darkness_sv);
1638 const_iv (GL_ONE_MINUS_SRC_ALPHA), 1725 const_iv (GL_ONE_MINUS_SRC_ALPHA),
1639 const_iv (GL_ONE_MINUS_DST_ALPHA), 1726 const_iv (GL_ONE_MINUS_DST_ALPHA),
1640 const_iv (GL_SRC_ALPHA_SATURATE), 1727 const_iv (GL_SRC_ALPHA_SATURATE),
1641 const_iv (GL_RGB), 1728 const_iv (GL_RGB),
1642 const_iv (GL_RGBA), 1729 const_iv (GL_RGBA),
1730 const_iv (GL_RGBA4),
1731 const_iv (GL_RGBA8),
1732 const_iv (GL_RGB5_A1),
1643 const_iv (GL_UNSIGNED_BYTE), 1733 const_iv (GL_UNSIGNED_BYTE),
1644 const_iv (GL_UNSIGNED_SHORT), 1734 const_iv (GL_UNSIGNED_SHORT),
1645 const_iv (GL_UNSIGNED_INT), 1735 const_iv (GL_UNSIGNED_INT),
1646 const_iv (GL_ALPHA), 1736 const_iv (GL_ALPHA),
1647 const_iv (GL_INTENSITY), 1737 const_iv (GL_INTENSITY),

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines