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.315 by root, Wed Jan 18 23:34:44 2012 UTC vs.
Revision 1.316 by root, Sun Nov 4 02:13:53 2012 UTC

2032 self->y += MAP_EXTEND_Y; 2032 self->y += MAP_EXTEND_Y;
2033 } 2033 }
2034} 2034}
2035 2035
2036SV * 2036SV *
2037map1a_update (DC::Map self, SV *data_, int extmap) 2037map1a_update (DC::Map self, SV *data_)
2038 CODE: 2038 CODE:
2039{ 2039{
2040 uint8_t *data = (uint8_t *)SvPVbyte_nolen (data_); 2040 uint8_t *data = (uint8_t *)SvPVbyte_nolen (data_);
2041 uint8_t *data_end = (uint8_t *)SvEND (data_); 2041 uint8_t *data_end = (uint8_t *)SvEND (data_);
2042 mapcell *cell; 2042 mapcell *cell;
2063 2063
2064 //TODO: don't trust server data to be in-range(!) 2064 //TODO: don't trust server data to be in-range(!)
2065 2065
2066 if (flags & 8) 2066 if (flags & 8)
2067 { 2067 {
2068 uint8_t ext, cmd;
2069
2068 if (extmap) 2070 do
2069 { 2071 {
2070 uint8_t ext, cmd; 2072 ext = *data++;
2073 cmd = ext & 0x7f;
2071 2074
2072 do 2075 if (cmd < 4)
2076 cell->darkness = 255 - ext * 64 + 1; /* make sure this doesn't collide with FOW_DARKNESS */
2077 else if (cmd == 5) // health
2073 { 2078 {
2074 ext = *data++;
2075 cmd = ext & 0x7f;
2076
2077 if (cmd < 4)
2078 cell->darkness = 255 - ext * 64 + 1; /* make sure this doesn't collide with FOW_DARKNESS */
2079 else if (cmd == 5) // health
2080 {
2081 cell->stat_width = 1; 2079 cell->stat_width = 1;
2082 cell->stat_hp = *data++; 2080 cell->stat_hp = *data++;
2083 }
2084 else if (cmd == 6) // monster width
2085 cell->stat_width = *data++ + 1;
2086 else if (cmd == 0x47)
2087 {
2088 if (*data == 1) cell->player = data [1];
2089 else if (*data == 2) cell->player = data [2] + (data [1] << 8);
2090 else if (*data == 3) cell->player = data [3] + (data [2] << 8) + (data [1] << 16);
2091 else if (*data == 4) cell->player = data [4] + (data [3] << 8) + (data [2] << 16) + (data [1] << 24);
2092
2093 data += *data + 1;
2094 }
2095 else if (cmd == 8) // cell flags
2096 cell->flags = *data++;
2097 else if (ext & 0x40) // unknown, multibyte => skip
2098 data += *data + 1;
2099 else
2100 data++;
2101 } 2081 }
2102 while (ext & 0x80); 2082 else if (cmd == 6) // monster width
2083 cell->stat_width = *data++ + 1;
2084 else if (cmd == 0x47)
2085 {
2086 if (*data == 1) cell->player = data [1];
2087 else if (*data == 2) cell->player = data [2] + (data [1] << 8);
2088 else if (*data == 3) cell->player = data [3] + (data [2] << 8) + (data [1] << 16);
2089 else if (*data == 4) cell->player = data [4] + (data [3] << 8) + (data [2] << 16) + (data [1] << 24);
2090
2091 data += *data + 1;
2092 }
2093 else if (cmd == 8) // cell flags
2094 cell->flags = *data++;
2095 else if (ext & 0x40) // unknown, multibyte => skip
2096 data += *data + 1;
2097 else
2098 data++;
2103 } 2099 }
2104 else 2100 while (ext & 0x80);
2105 cell->darkness = *data++ + 1;
2106 } 2101 }
2107 2102
2108 for (z = 0; z <= 2; ++z) 2103 for (z = 0; z <= 2; ++z)
2109 if (flags & (4 >> z)) 2104 if (flags & (4 >> z))
2110 { 2105 {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines