--- deliantra/Deliantra-Client/Client.xs 2006/08/19 17:24:39 1.150 +++ deliantra/Deliantra-Client/Client.xs 2006/09/19 22:02:38 1.153 @@ -171,9 +171,10 @@ } maptex; typedef struct { - uint16_t darkness; + uint32_t player; mapface face[3]; - uint8_t stat_width, stat_hp; + uint16_t darkness; + uint8_t stat_width, stat_hp, flags; } mapcell; typedef struct { @@ -1316,6 +1317,15 @@ } else if (cmd == 6) // monster width cell->stat_width = *data++ + 1; + else if (cmd == 0x47) // monster width + { + if (*data == 4) + ; // decode player tag + + data += *data + 1; + } + else if (cmd == 8) // cell flags + cell->flags = *data++; else if (ext & 0x40) // unknown, multibyte => skip data += *data + 1; else @@ -1459,15 +1469,13 @@ if (face && face < self->texs) { maptex tex = self->tex [face]; - int px = (x + 1) * 32 - tex.w; int py = (y + 1) * 32 - tex.h; if (last_name != tex.name) { glEnd (); - last_name = tex.name; - glBindTexture (GL_TEXTURE_2D, last_name); + glBindTexture (GL_TEXTURE_2D, last_name = tex.name); glBegin (GL_QUADS); } @@ -1476,12 +1484,32 @@ glTexCoord2f (tex.s, tex.t); glVertex2f (px + tex.w, py + tex.h); glTexCoord2f (tex.s, 0 ); glVertex2f (px + tex.w, py ); } + + if (cell->flags && z == 2) + { + if (cell->flags & 1) + { + maptex tex = self->tex [1]; + int px = (x + 1) * 32 - tex.w + 2; + int py = (y + 1) * 32 - tex.h - 6; + + glEnd (); + glBindTexture (GL_TEXTURE_2D, last_name = tex.name); + glBegin (GL_QUADS); + + glTexCoord2f (0 , 0 ); glVertex2f (px , py ); + glTexCoord2f (0 , tex.t); glVertex2f (px , py + tex.h); + glTexCoord2f (tex.s, tex.t); glVertex2f (px + tex.w, py + tex.h); + glTexCoord2f (tex.s, 0 ); glVertex2f (px + tex.w, py ); + } + } } } glEnd (); glDisable (GL_TEXTURE_2D); + glDisable (GL_BLEND); // top layer: overlays such as the health bar for (y = 0; y < sh; y++) @@ -1502,19 +1530,17 @@ int width = cell->stat_width * 32; int thick = sh / 28 + 1 + cell->stat_width; - glColor4ub (0, 0, 0, 223); - glRectf (px + 1, py, - px + width - 1, py + thick + 2); + glColor3ub (0, 0, 0); + glRectf (px + 1, py - thick - 2, + px + width - 1, py); - glColor4ub (cell->stat_hp, 255 - cell->stat_hp, 0, 223); + glColor3ub (cell->stat_hp, 255 - cell->stat_hp, 0); glRectf (px + 2, - py + 1, - px + width - 2 - cell->stat_hp * (width - 4) / 255, py + thick + 1); + py - thick - 1, + px + width - 2 - cell->stat_hp * (width - 4) / 255, py - 1); } } } - - glDisable (GL_BLEND); } void