aboutsummaryrefslogtreecommitdiff
path: root/contrib/extractor/loadlib/adt.cpp
diff options
context:
space:
mode:
authorXTZGZoReX <none@none>2009-04-13 16:24:19 +0200
committerXTZGZoReX <none@none>2009-04-13 16:24:19 +0200
commit83bc37cd375662dfb19aa2ae38132074ef39047c (patch)
tree072cb5c64eef1530fc082f7840d1da019b64fc62 /contrib/extractor/loadlib/adt.cpp
parent99e944f195ba6dc6bcbd0eaef08f33d127489535 (diff)
* Fixed extractor compile.
--HG-- branch : trunk
Diffstat (limited to 'contrib/extractor/loadlib/adt.cpp')
-rw-r--r--contrib/extractor/loadlib/adt.cpp131
1 files changed, 131 insertions, 0 deletions
diff --git a/contrib/extractor/loadlib/adt.cpp b/contrib/extractor/loadlib/adt.cpp
new file mode 100644
index 00000000000..fde70681113
--- /dev/null
+++ b/contrib/extractor/loadlib/adt.cpp
@@ -0,0 +1,131 @@
+#define _CRT_SECURE_NO_DEPRECATE
+
+#include "adt.h"
+
+// Helper
+int holetab_h[4] = {0x1111, 0x2222, 0x4444, 0x8888};
+int holetab_v[4] = {0x000F, 0x00F0, 0x0F00, 0xF000};
+
+bool isHole(int holes, int i, int j)
+{
+ int testi = i / 2;
+ int testj = j / 4;
+ if(testi > 3) testi = 3;
+ if(testj > 3) testj = 3;
+ return (holes & holetab_h[testi] & holetab_v[testj]) != 0;
+}
+
+//
+// Adt file loader class
+//
+ADT_file::ADT_file()
+{
+ a_grid = 0;
+}
+
+ADT_file::~ADT_file()
+{
+ free();
+}
+
+void ADT_file::free()
+{
+ a_grid = 0;
+ FileLoader::free();
+}
+
+//
+// Adt file check function
+//
+bool ADT_file::prepareLoadedData()
+{
+ // Check parent
+ if (!FileLoader::prepareLoadedData())
+ return false;
+
+ // Check and prepare MHDR
+ a_grid = (adt_MHDR *)(GetData()+8+version->size);
+ if (!a_grid->prepareLoadedData())
+ return false;
+
+ return true;
+}
+
+bool adt_MHDR::prepareLoadedData()
+{
+ if (fcc != 'MHDR')
+ return false;
+
+ if (size!=sizeof(adt_MHDR)-8)
+ return false;
+
+ // Check and prepare MCIN
+ if (offsMCIN && !getMCIN()->prepareLoadedData())
+ return false;
+
+ // Check and prepare MH2O
+ if (offsMH2O && !getMH2O()->prepareLoadedData())
+ return false;
+
+ return true;
+}
+
+bool adt_MCIN::prepareLoadedData()
+{
+ if (fcc != 'MCIN')
+ return false;
+
+ // Check cells data
+ for (int i=0; i<ADT_CELLS_PER_GRID;i++)
+ for (int j=0; j<ADT_CELLS_PER_GRID;j++)
+ if (cells[i][j].offsMCNK && !getMCNK(i,j)->prepareLoadedData())
+ return false;
+
+ return true;
+}
+
+bool adt_MH2O::prepareLoadedData()
+{
+ if (fcc != 'MH2O')
+ return false;
+
+ // Check liquid data
+// for (int i=0; i<ADT_CELLS_PER_GRID;i++)
+// for (int j=0; j<ADT_CELLS_PER_GRID;j++)
+
+ return true;
+}
+
+bool adt_MCNK::prepareLoadedData()
+{
+ if (fcc != 'MCNK')
+ return false;
+
+ // Check height map
+ if (offsMCVT && !getMCVT()->prepareLoadedData())
+ return false;
+ // Check liquid data
+ if (offsMCLQ && !getMCLQ()->prepareLoadedData())
+ return false;
+
+ return true;
+}
+
+bool adt_MCVT::prepareLoadedData()
+{
+ if (fcc != 'MCVT')
+ return false;
+
+ if (size != sizeof(adt_MCVT)-8)
+ return false;
+
+ return true;
+}
+
+bool adt_MCLQ::prepareLoadedData()
+{
+ if (fcc != 'MCLQ')
+ return false;
+
+ return true;
+} \ No newline at end of file