--- deliantra/Deliantra-Client/Client.xs 2006/04/13 23:11:11 1.31 +++ deliantra/Deliantra-Client/Client.xs 2006/04/13 23:31:42 1.32 @@ -566,8 +566,15 @@ void draw (CFClient::Map self, int x0, int y0, int sw, int sh) - CODE: + PPCODE: { + int sw4 = (sw + 3) & ~3; + SV *darkness_sv = sv_2mortal (newSV (sw4 * sh)); + uint8_t *darkness = SvPVX (darkness_sv); + + SvPOK_only (darkness_sv); + SvCUR_set (darkness_sv, sw4 * sh); + int vx = self->vx = self->w >= sw ? self->x + (self->w - sw) / 2 : MIN (self->x, MAX (self->x + self->w - sw + 1, self->vx)); @@ -599,6 +606,11 @@ if (row->c0 <= x + vx && x + vx < row->c1) { mapcell *cell = row->col + (x + vx - row->c0); + + darkness[y * sw4 + x] = cell->darkness < 0 + ? 224 + : 255 - cell->darkness; + uint16_t face = cell->face [z]; if (face) @@ -625,5 +637,13 @@ } glEnd (); + + EXTEND (SP, 3); + PUSHs (sv_2mortal (newSViv (sw4))); + PUSHs (sv_2mortal (newSViv (sh))); + PUSHs (darkness_sv); + + glDisable (GL_TEXTURE_2D); + glDisable (GL_BLEND); }