Clone of PhatAC @ https://github.com/floaterxk/PhatAC

TurbineFile.cpp 6.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. #include "StdAfx.h"
  2. #include "TurbineData.h"
  3. #include "TurbineFile.h"
  4. #include "Database.h"
  5. TurbineFile::TurbineFile(DWORD dwID)
  6. {
  7. m_dwID = dwID;
  8. m_pbData = NULL;
  9. m_dwLength = 0;
  10. }
  11. TurbineFile::TurbineFile(DWORD dwID, BYTE *data, DWORD length)
  12. {
  13. m_dwID = dwID;
  14. m_pbData = data;
  15. m_dwLength = length;
  16. }
  17. TurbineFile::~TurbineFile()
  18. {
  19. SafeDeleteArray(m_pbData);
  20. m_dwLength = 0;
  21. }
  22. #if 0
  23. void TurbineFile::Initialize(BYTE* pbDataFile, DWORD dwSectorStart, DWORD dwSectorSize, DWORD dwFileLength)
  24. {
  25. //One extra sector so it doesn't overflow.
  26. BYTE *pbData = new BYTE[dwFileLength + (sizeof(DWORD) * dwSectorSize)];
  27. BYTE *pbDataPtr = pbData;
  28. DWORD dwNextSector = dwSectorStart;
  29. DWORD dwSectorData = sizeof(DWORD) * (dwSectorSize - 1);
  30. while (dwNextSector)
  31. {
  32. BYTE* pbSector = pbDataFile + dwNextSector;
  33. dwNextSector = *((DWORD *)pbSector);
  34. pbSector += sizeof(DWORD);
  35. memcpy(pbDataPtr, pbSector, dwSectorData);
  36. pbDataPtr += dwSectorData;
  37. }
  38. m_pbData = pbData;
  39. m_dwLength = dwFileLength;
  40. if (m_dwID == 0xEDEAFFFF)
  41. {
  42. WORD *pwTerrain = (WORD *)(m_pbData + 8);
  43. WORD terrain[9][9] = //'P'
  44. {
  45. { 40, 24, 24, 24, 24, 40, 40, 40, 40 },
  46. { 40, 24, 24, 24, 24, 24, 40, 40, 40 },
  47. { 40, 24, 24, 40, 24, 24, 40, 40, 40 },
  48. { 40, 24, 24, 40, 24, 24, 40, 40, 40 },
  49. { 40, 24, 24, 24, 24, 24, 40, 40, 40 },
  50. { 40, 24, 24, 24, 24, 40, 40, 40, 40 },
  51. { 40, 24, 24, 40, 40, 40, 40, 40, 40 },
  52. { 40, 24, 24, 40, 40, 40, 40, 40, 40 },
  53. { 40, 24, 24, 40, 40, 40, 40, 40, 40 }
  54. };
  55. for (int x = 0; x < 9; x++) {
  56. for (int y = 0; y < 9; y++) {
  57. *pwTerrain = terrain[8 - y][x];
  58. pwTerrain++;
  59. }
  60. }
  61. }
  62. else if (m_dwID == 0xEEEAFFFF)
  63. {
  64. WORD *pwTerrain = (WORD *)(m_pbData + 8);
  65. WORD terrain[9][9] = //'H'
  66. {
  67. { 40, 24, 24, 40, 40, 24, 24, 40, 40 },
  68. { 40, 24, 24, 40, 40, 24, 24, 40, 40 },
  69. { 40, 24, 24, 40, 40, 24, 24, 40, 40 },
  70. { 40, 24, 24, 24, 24, 24, 24, 40, 40 },
  71. { 40, 24, 24, 24, 24, 24, 24, 40, 40 },
  72. { 40, 24, 24, 40, 40, 24, 24, 40, 40 },
  73. { 40, 24, 24, 40, 40, 24, 24, 40, 40 },
  74. { 40, 24, 24, 40, 40, 24, 24, 40, 40 },
  75. { 40, 24, 24, 40, 40, 24, 24, 40, 40 }
  76. };
  77. for (int x = 0; x < 9; x++) {
  78. for (int y = 0; y < 9; y++) {
  79. *pwTerrain = terrain[8 - y][x];
  80. pwTerrain++;
  81. }
  82. }
  83. }
  84. else if (m_dwID == 0xEFEAFFFF)
  85. {
  86. WORD *pwTerrain = (WORD *)(m_pbData + 8);
  87. WORD terrain[9][9] = //'A'
  88. {
  89. { 40, 40, 40, 24, 24, 40, 40, 40, 40 },
  90. { 40, 40, 24, 24, 24, 24, 40, 40, 40 },
  91. { 40, 24, 24, 40, 40, 24, 24, 40, 40 },
  92. { 40, 24, 24, 40, 40, 24, 24, 40, 40 },
  93. { 40, 24, 24, 24, 24, 24, 24, 40, 40 },
  94. { 40, 24, 24, 24, 24, 24, 24, 40, 40 },
  95. { 40, 24, 24, 40, 40, 24, 24, 40, 40 },
  96. { 40, 24, 24, 40, 40, 24, 24, 40, 40 },
  97. { 40, 24, 24, 40, 40, 24, 24, 40, 40 }
  98. };
  99. for (int x = 0; x < 9; x++) {
  100. for (int y = 0; y < 9; y++) {
  101. *pwTerrain = terrain[8 - y][x];
  102. pwTerrain++;
  103. }
  104. }
  105. }
  106. else if (m_dwID == 0xF0EAFFFF)
  107. {
  108. WORD *pwTerrain = (WORD *)(m_pbData + 8);
  109. WORD terrain[9][9] = //'T'
  110. {
  111. { 40, 24, 24, 24, 24, 24, 24, 40, 40 },
  112. { 40, 24, 24, 24, 24, 24, 24, 40, 40 },
  113. { 40, 40, 40, 24, 24, 40, 40, 40, 40 },
  114. { 40, 40, 40, 24, 24, 40, 40, 40, 40 },
  115. { 40, 40, 40, 24, 24, 40, 40, 40, 40 },
  116. { 40, 40, 40, 24, 24, 40, 40, 40, 40 },
  117. { 40, 40, 40, 24, 24, 40, 40, 40, 40 },
  118. { 40, 40, 40, 24, 24, 40, 40, 40, 40 },
  119. { 40, 40, 40, 24, 24, 40, 40, 40, 40 }
  120. };
  121. for (int x = 0; x < 9; x++) {
  122. for (int y = 0; y < 9; y++) {
  123. *pwTerrain = terrain[8 - y][x];
  124. pwTerrain++;
  125. }
  126. }
  127. }
  128. else if (m_dwID == 0xEEE9FFFF)
  129. {
  130. WORD *pwTerrain = (WORD *)(m_pbData + 8);
  131. WORD terrain[9][9] = //'A'
  132. {
  133. { 40, 40, 40, 40, 40, 40, 40, 40, 40 },
  134. { 40, 40, 40, 24, 24, 40, 40, 40, 40 },
  135. { 40, 40, 24, 24, 24, 24, 40, 40, 40 },
  136. { 40, 24, 24, 40, 40, 24, 24, 40, 40 },
  137. { 40, 24, 24, 40, 40, 24, 24, 40, 40 },
  138. { 40, 24, 24, 24, 24, 24, 24, 40, 40 },
  139. { 40, 24, 24, 24, 24, 24, 24, 40, 40 },
  140. { 40, 24, 24, 40, 40, 24, 24, 40, 40 },
  141. { 40, 24, 24, 40, 40, 24, 24, 40, 40 }
  142. };
  143. for (int x = 0; x < 9; x++) {
  144. for (int y = 0; y < 9; y++) {
  145. *pwTerrain = terrain[8 - y][x];
  146. pwTerrain++;
  147. }
  148. }
  149. }
  150. else if (m_dwID == 0xEFE9FFFF)
  151. {
  152. WORD *pwTerrain = (WORD *)(m_pbData + 8);
  153. WORD terrain[9][9] = //'C'
  154. {
  155. { 40, 40, 40, 40, 40, 40, 40, 40, 40 },
  156. { 40, 40, 40, 24, 24, 24, 40, 40, 40 },
  157. { 40, 40, 24, 24, 24, 24, 40, 40, 40 },
  158. { 40, 40, 24, 24, 40, 40, 40, 40, 40 },
  159. { 40, 40, 24, 24, 40, 40, 40, 40, 40 },
  160. { 40, 40, 24, 24, 40, 40, 40, 40, 40 },
  161. { 40, 40, 24, 24, 40, 40, 40, 40, 40 },
  162. { 40, 40, 24, 24, 24, 24, 40, 40, 40 },
  163. { 40, 40, 40, 24, 24, 24, 40, 40, 40 }
  164. };
  165. for (int x = 0; x < 9; x++) {
  166. for (int y = 0; y < 9; y++) {
  167. *pwTerrain = terrain[8 - y][x];
  168. pwTerrain++;
  169. }
  170. }
  171. }
  172. else
  173. {
  174. /*FILE* cellFile = g_pDB->DataFileOpen(csprintf("land\\cell-%08X", m_dwID));
  175. if ( cellFile ) {
  176. delete [] pbData;
  177. m_dwLength = fsize( cellFile );
  178. m_pbData = new BYTE[ m_dwLength ];
  179. fread( m_pbData, sizeof(BYTE), m_dwLength, cellFile );
  180. fclose( cellFile );
  181. } */
  182. }
  183. /*
  184. BYTE *pbHeight = m_pbData + 8 + (81 * 2);
  185. BYTE heights[9][9] =
  186. {
  187. { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  188. { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  189. { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  190. { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  191. { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  192. { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  193. { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  194. { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  195. { 0, 0, 0, 0, 0, 0, 0, 0, 0 }
  196. };
  197. for ( int x = 0; x < 9; x++ ) {
  198. for ( int y = 0; y < 9; y++ ) {
  199. *pbHeight = heights[y][x];
  200. pbHeight++;
  201. }
  202. }
  203. */
  204. }
  205. #endif
  206. BYTE *TurbineFile::GetData()
  207. {
  208. return m_pbData + sizeof(DWORD);
  209. }
  210. DWORD TurbineFile::GetLength()
  211. {
  212. return m_dwLength;
  213. }