Started 1050 implementation and fix ups:

* Dat now loads (new animations aren't yet functional).
* Fixed the way we reference client versions.

TODO: Write new animation functionality & find out protocol changes.
This commit is contained in:
BenDol
2014-08-03 10:02:28 +12:00
parent fe585d27d8
commit d7429c201c
31 changed files with 316 additions and 121 deletions

View File

@@ -132,7 +132,7 @@ uint16 BinaryTree::getU16()
unserialize();
if(m_pos+2 > m_buffer.size())
stdext::throw_exception("BinaryTree: getU16 failed");
uint16 v = stdext::readLE16(&m_buffer[m_pos]);
uint16 v = stdext::readULE16(&m_buffer[m_pos]);
m_pos += 2;
return v;
}
@@ -142,7 +142,7 @@ uint32 BinaryTree::getU32()
unserialize();
if(m_pos+4 > m_buffer.size())
stdext::throw_exception("BinaryTree: getU32 failed");
uint32 v = stdext::readLE32(&m_buffer[m_pos]);
uint32 v = stdext::readULE32(&m_buffer[m_pos]);
m_pos += 4;
return v;
}
@@ -152,7 +152,7 @@ uint64 BinaryTree::getU64()
unserialize();
if(m_pos+8 > m_buffer.size())
stdext::throw_exception("BinaryTree: getU64 failed");
uint64 v = stdext::readLE64(&m_buffer[m_pos]);
uint64 v = stdext::readULE64(&m_buffer[m_pos]);
m_pos += 8;
return v;
}
@@ -193,14 +193,14 @@ void OutputBinaryTree::addU8(uint8 v)
void OutputBinaryTree::addU16(uint16 v)
{
uint8 data[2];
stdext::writeLE16(data, v);
stdext::writeULE16(data, v);
write(data, 2);
}
void OutputBinaryTree::addU32(uint32 v)
{
uint8 data[4];
stdext::writeLE32(data, v);
stdext::writeULE32(data, v);
write(data, 4);
}

View File

@@ -206,7 +206,7 @@ uint16 FileStream::getU16()
if(m_pos+2 > m_data.size())
throwError("read failed");
v = stdext::readLE16(&m_data[m_pos]);
v = stdext::readULE16(&m_data[m_pos]);
m_pos += 2;
}
return v;
@@ -222,7 +222,7 @@ uint32 FileStream::getU32()
if(m_pos+4 > m_data.size())
throwError("read failed");
v = stdext::readLE32(&m_data[m_pos]);
v = stdext::readULE32(&m_data[m_pos]);
m_pos += 4;
}
return v;
@@ -237,7 +237,70 @@ uint64 FileStream::getU64()
} else {
if(m_pos+8 > m_data.size())
throwError("read failed");
v = stdext::readLE64(&m_data[m_pos]);
v = stdext::readULE64(&m_data[m_pos]);
m_pos += 8;
}
return v;
}
int8 FileStream::get8()
{
int8 v = 0;
if(!m_caching) {
if(PHYSFS_read(m_fileHandle, &v, 1, 1) != 1)
throwError("read failed", true);
} else {
if(m_pos+1 > m_data.size())
throwError("read failed");
v = m_data[m_pos];
m_pos += 1;
}
return v;
}
int16 FileStream::get16()
{
int16 v = 0;
if(!m_caching) {
if(PHYSFS_readSLE16(m_fileHandle, &v) == 0)
throwError("read failed", true);
} else {
if(m_pos+2 > m_data.size())
throwError("read failed");
v = stdext::readSLE16(&m_data[m_pos]);
m_pos += 2;
}
return v;
}
int32 FileStream::get32()
{
int32 v = 0;
if(!m_caching) {
if(PHYSFS_readSLE32(m_fileHandle, &v) == 0)
throwError("read failed", true);
} else {
if(m_pos+4 > m_data.size())
throwError("read failed");
v = stdext::readSLE32(&m_data[m_pos]);
m_pos += 4;
}
return v;
}
int64 FileStream::get64()
{
int64 v = 0;
if(!m_caching) {
if(PHYSFS_readSLE64(m_fileHandle, (PHYSFS_sint64*)&v) == 0)
throwError("read failed", true);
} else {
if(m_pos+8 > m_data.size())
throwError("read failed");
v = stdext::readSLE64(&m_data[m_pos]);
m_pos += 8;
}
return v;
@@ -306,7 +369,7 @@ void FileStream::addU16(uint16 v)
throwError("write failed", true);
} else {
m_data.grow(m_pos + 2);
stdext::writeLE16(&m_data[m_pos], v);
stdext::writeULE16(&m_data[m_pos], v);
m_pos += 2;
}
}
@@ -318,7 +381,7 @@ void FileStream::addU32(uint32 v)
throwError("write failed", true);
} else {
m_data.grow(m_pos + 4);
stdext::writeLE32(&m_data[m_pos], v);
stdext::writeULE32(&m_data[m_pos], v);
m_pos += 4;
}
}
@@ -330,7 +393,54 @@ void FileStream::addU64(uint64 v)
throwError("write failed", true);
} else {
m_data.grow(m_pos + 8);
stdext::writeLE64(&m_data[m_pos], v);
stdext::writeULE64(&m_data[m_pos], v);
m_pos += 8;
}
}
void FileStream::add8(int8 v)
{
if(!m_caching) {
if(PHYSFS_write(m_fileHandle, &v, 1, 1) != 1)
throwError("write failed", true);
} else {
m_data.add(v);
m_pos++;
}
}
void FileStream::add16(int16 v)
{
if(!m_caching) {
if(PHYSFS_writeSLE16(m_fileHandle, v) == 0)
throwError("write failed", true);
} else {
m_data.grow(m_pos + 2);
stdext::writeSLE16(&m_data[m_pos], v);
m_pos += 2;
}
}
void FileStream::add32(int32 v)
{
if(!m_caching) {
if(PHYSFS_writeSLE32(m_fileHandle, v) == 0)
throwError("write failed", true);
} else {
m_data.grow(m_pos + 4);
stdext::writeSLE32(&m_data[m_pos], v);
m_pos += 4;
}
}
void FileStream::add64(int64 v)
{
if(!m_caching) {
if(PHYSFS_writeSLE64(m_fileHandle, v) == 0)
throwError("write failed", true);
} else {
m_data.grow(m_pos + 8);
stdext::writeSLE64(&m_data[m_pos], v);
m_pos += 8;
}
}

View File

@@ -54,6 +54,10 @@ public:
uint16 getU16();
uint32 getU32();
uint64 getU64();
int8 get8();
int16 get16();
int32 get32();
int64 get64();
std::string getString();
BinaryTreePtr getBinaryTree();
@@ -63,6 +67,10 @@ public:
void addU16(uint16 v);
void addU32(uint32 v);
void addU64(uint64 v);
void add8(int8 v);
void add16(int16 v);
void add32(int32 v);
void add64(int64 v);
void addString(const std::string& v);
void addPos(uint16 x, uint16 y, uint8 z) { addU16(x); addU16(y); addU8(z); }
void addPoint(const Point& p) { addU8(p.x); addU8(p.y); }