--- deliantra/Deliantra-Client/Client.xs 2006/08/18 02:25:12 1.144 +++ deliantra/Deliantra-Client/Client.xs 2006/08/19 02:49:53 1.146 @@ -296,6 +296,7 @@ { int x, y; maprow *row; + mapcell *cell; for (y = y0; y < y0 + h; y++) if (y >= 0) @@ -311,7 +312,10 @@ if (x >= row->c1) break; - row->col[x - row->c0].darkness = 0; + cell = row->col + x - row->c0; + + cell->darkness = 0; + cell->stat_hp = 0; } } } @@ -1288,7 +1292,6 @@ cell->face [0] = 0; cell->face [1] = 0; cell->face [2] = 0; - cell->stat_hp = 0; } //TODO: don't trust server data to be in-range(!) @@ -1333,7 +1336,10 @@ } } else - cell->darkness = 0; + { + cell->darkness = 0; + cell->stat_hp = 0; + } } } @@ -1443,7 +1449,7 @@ face = cell->face [z]; - if (face) + if (face && face < self->texs) { maptex tex = self->tex [face]; @@ -1471,6 +1477,7 @@ glDisable (GL_TEXTURE_2D); glDisable (GL_BLEND); + // top layer: overlays such as the health bar for (y = 0; y < sh; y++) if (0 <= y + vy && y + vy < self->rows) { @@ -1486,14 +1493,13 @@ if (cell->stat_hp) { + int width = sh / 28 + 1; + glColor3ub (0, 0, 0); - glRectf (px + 1, py + 1, px + 31, py + 4); + glRectf (px + 1, py, px + 31, py + width + 2); - glColor3ub (0, 255, 0); - glBegin (GL_LINES); - glVertex2f (px + 2, py + 2.5f); - glVertex2f (px + 29.f - cell->stat_hp * (28.f / 255.f), py + 2.5f); - glEnd (); + glColor3ub (cell->stat_hp, 255 - cell->stat_hp, 0); + glRectf (px + 2, py + 1, px + 30 - cell->stat_hp * 28 / 255, py + width + 1); } } }