chunk_d.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. /*
  2. ** Command & Conquer Renegade(tm)
  3. ** Copyright 2025 Electronic Arts Inc.
  4. **
  5. ** This program is free software: you can redistribute it and/or modify
  6. ** it under the terms of the GNU General Public License as published by
  7. ** the Free Software Foundation, either version 3 of the License, or
  8. ** (at your option) any later version.
  9. **
  10. ** This program is distributed in the hope that it will be useful,
  11. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. ** GNU General Public License for more details.
  14. **
  15. ** You should have received a copy of the GNU General Public License
  16. ** along with this program. If not, see <http://www.gnu.org/licenses/>.
  17. */
  18. // Chunk_D.h: interface for the ChunkData class.
  19. //
  20. //////////////////////////////////////////////////////////////////////
  21. #if !defined(AFX_CHUNK_D_H__41C157F9_5631_11D1_8CDB_006097C6A583__INCLUDED_)
  22. #define AFX_CHUNK_D_H__41C157F9_5631_11D1_8CDB_006097C6A583__INCLUDED_
  23. #if _MSC_VER >= 1000
  24. #pragma once
  25. #endif // _MSC_VER >= 1000
  26. class ChunkItem;
  27. class ChunkType {
  28. public:
  29. ChunkType(const char *name, void (*callback)(ChunkItem *item, CListCtrl *List), bool wrapper = false) {Name = name;Callback = callback; Wrapper = wrapper;};
  30. const char *Name;
  31. bool Wrapper;
  32. void (*Callback)(ChunkItem *, CListCtrl *list);
  33. };
  34. class ChunkTableClass {
  35. public:
  36. ChunkTableClass();
  37. ~ChunkTableClass();
  38. ChunkType *Lookup(int ID);
  39. void NewType(int ID, const char *name, void (*callback)(ChunkItem *item, CListCtrl *list) = 0, bool wrapper = false);
  40. protected:
  41. CMapPtrToPtr Types;
  42. static void AddItem(CListCtrl *List, int &Counter, const char *Name, const char *Value, const char *Type="string");
  43. static void AddItem(CListCtrl *List, int &Counter, const char *Name, uint32 Value);
  44. static void AddItem(CListCtrl *List, int &Counter, const char *Name, uint16 Value);
  45. static void AddItem(CListCtrl *List, int &Counter, const char *Name, uint8 Value);
  46. static void AddItem(CListCtrl *List, int &Counter, const char *Name, uint8 *Value, int Count);
  47. static void AddItem(CListCtrl *List, int &Counter, const char *Name, float32 Value);
  48. static void AddItem(CListCtrl *List, int &Counter, const char *Name, uint32 *Value, int Count);
  49. static void AddItem(CListCtrl *List, int &Counter, const char *Name, float32 *Value, int Count);
  50. static void AddItem(CListCtrl *List, int &Counter, const char *Name, IOVector3Struct *Value);
  51. static void AddItem(CListCtrl *List, int &Counter, const char *Name, IOVector4Struct *Value);
  52. static void AddItem(CListCtrl *List, int &Counter, const char *Name, W3dQuaternionStruct *Value);
  53. static void AddItem(CListCtrl *List, int &Counter, const char *Name, W3dRGBStruct *Value);
  54. static void AddItem(CListCtrl *List, int &Counter, const char *Name, W3dRGBStruct *Value, int count);
  55. static void AddItem(CListCtrl *List, int &Counter, const char *Name, W3dRGBAStruct *Value);
  56. static void AddItem(CListCtrl *List, int &Counter, const char *Name, W3dTexCoordStruct *Value, int Count);
  57. static void AddItem(CListCtrl *List, int &Counter, const char *Name, W3dTexCoordStruct *Value);
  58. static void AddItem(CListCtrl *List, int &Counter, const char *Name, Vector3i *Value);
  59. static void AddItem(CListCtrl *List, int &Counter, const char *name, W3dShaderStruct * shader);
  60. static void AddItem(CListCtrl *List, int &Counter, const char *name, W3dPS2ShaderStruct * shader);
  61. static void AddItemVersion(CListCtrl *List,int &Counter,uint32 version);
  62. static void List_Subitems(ChunkItem *Item, CListCtrl *List);
  63. static void List_W3D_CHUNK_MESH(ChunkItem *Item, CListCtrl *List);
  64. static void List_W3D_CHUNK_MESH_HEADER(ChunkItem *Item, CListCtrl *List);
  65. static void List_W3D_CHUNK_VERTICES(ChunkItem *Item, CListCtrl *List);
  66. static void List_W3D_CHUNK_VERTEX_NORMALS(ChunkItem *Item, CListCtrl *List);
  67. static void List_W3D_CHUNK_SURRENDER_NORMALS(ChunkItem *Item, CListCtrl *List);
  68. static void List_W3D_CHUNK_TEXCOORDS(ChunkItem *Item, CListCtrl *List);
  69. static void List_O_W3D_CHUNK_MATERIALS(ChunkItem *Item, CListCtrl *List);
  70. static void List_O_W3D_CHUNK_TRIANGLES(ChunkItem *Item, CListCtrl *List);
  71. static void List_O_W3D_CHUNK_QUADRANGLES(ChunkItem *Item, CListCtrl *List);
  72. static void List_O_W3D_CHUNK_SURRENDER_TRIANGLES(ChunkItem *Item, CListCtrl *List);
  73. static void List_O_W3D_CHUNK_POV_TRIANGLES(ChunkItem *Item, CListCtrl *List);
  74. static void List_O_W3D_CHUNK_POV_QUADRANGLES(ChunkItem *Item, CListCtrl *List);
  75. static void List_W3D_CHUNK_MESH_USER_TEXT(ChunkItem *Item, CListCtrl *List);
  76. static void List_W3D_CHUNK_VERTEX_COLORS(ChunkItem *Item, CListCtrl *List);
  77. static void List_W3D_CHUNK_VERTEX_INFLUENCES(ChunkItem *Item, CListCtrl *List);
  78. static void List_W3D_CHUNK_DAMAGE(ChunkItem *Item, CListCtrl *List);
  79. static void List_W3D_CHUNK_DAMAGE_HEADER(ChunkItem *Item, CListCtrl *List);
  80. static void List_W3D_CHUNK_DAMAGE_VERTICES(ChunkItem *Item, CListCtrl *List);
  81. static void List_W3D_CHUNK_DAMAGE_COLORS(ChunkItem *Item, CListCtrl *List);
  82. static void List_O_W3D_CHUNK_MATERIALS2(ChunkItem *Item, CListCtrl *List);
  83. static void List_W3D_CHUNK_MATERIALS3(ChunkItem *Item, CListCtrl *List);
  84. static void List_W3D_CHUNK_MATERIAL3(ChunkItem *Item, CListCtrl *List);
  85. static void List_W3D_CHUNK_MATERIAL3_NAME(ChunkItem *Item, CListCtrl *List);
  86. static void List_W3D_CHUNK_MATERIAL3_INFO(ChunkItem *Item, CListCtrl *List);
  87. static void List_W3D_CHUNK_MATERIAL3_DC_MAP(ChunkItem *Item, CListCtrl *List);
  88. static void List_W3D_CHUNK_MAP3_FILENAME(ChunkItem *Item, CListCtrl *List);
  89. static void List_W3D_CHUNK_MAP3_INFO(ChunkItem *Item, CListCtrl *List);
  90. static void List_W3D_CHUNK_MATERIAL3_DI_MAP(ChunkItem *Item, CListCtrl *List);
  91. static void List_W3D_CHUNK_MATERIAL3_SC_MAP(ChunkItem *Item, CListCtrl *List);
  92. static void List_W3D_CHUNK_MATERIAL3_SI_MAP(ChunkItem *Item, CListCtrl *List);
  93. static void List_W3D_CHUNK_MESH_HEADER3(ChunkItem *Item, CListCtrl *List);
  94. static void List_W3D_CHUNK_TRIANGLES(ChunkItem * Item, CListCtrl *List);
  95. static void List_W3D_CHUNK_PER_TRI_MATERIALS(ChunkItem * Item,CListCtrl *List);
  96. static void List_W3D_CHUNK_VERTEX_SHADE_INDICES(ChunkItem * Item,CListCtrl *List);
  97. static void List_W3D_CHUNK_MATERIAL_INFO(ChunkItem * Item,CListCtrl *List);
  98. static void List_W3D_CHUNK_SHADERS(ChunkItem * Item,CListCtrl *List);
  99. static void List_W3D_CHUNK_PS2_SHADERS(ChunkItem * Item,CListCtrl *List);
  100. static void List_W3D_CHUNK_VERTEX_MATERIALS(ChunkItem * Item,CListCtrl *List);
  101. static void List_W3D_CHUNK_VERTEX_MATERIAL(ChunkItem * Item,CListCtrl *List);
  102. static void List_W3D_CHUNK_VERTEX_MATERIAL_NAME(ChunkItem *Item,CListCtrl *List);
  103. static void List_W3D_CHUNK_VERTEX_MATERIAL_INFO(ChunkItem *Item,CListCtrl *List);
  104. static void List_W3D_CHUNK_VERTEX_MAPPER_ARGS0(ChunkItem *Item,CListCtrl *List);
  105. static void List_W3D_CHUNK_VERTEX_MAPPER_ARGS1(ChunkItem *Item,CListCtrl *List);
  106. static void List_W3D_CHUNK_TEXTURES(ChunkItem * Item,CListCtrl *List);
  107. static void List_W3D_CHUNK_TEXTURE(ChunkItem * Item,CListCtrl *List);
  108. static void List_W3D_CHUNK_TEXTURE_NAME(ChunkItem * Item,CListCtrl *List);
  109. static void List_W3D_CHUNK_TEXTURE_INFO(ChunkItem * Item,CListCtrl *List);
  110. static void List_W3D_CHUNK_MATERIAL_PASS(ChunkItem * Item,CListCtrl *List);
  111. static void List_W3D_CHUNK_VERTEX_MATERIAL_IDS(ChunkItem * Item,CListCtrl *List);
  112. static void List_W3D_CHUNK_SHADER_IDS(ChunkItem * Item,CListCtrl *List);
  113. static void List_W3D_CHUNK_DCG(ChunkItem * Item,CListCtrl *List);
  114. static void List_W3D_CHUNK_DIG(ChunkItem * Item,CListCtrl *List);
  115. static void List_W3D_CHUNK_SCG(ChunkItem * Item,CListCtrl *List);
  116. static void List_W3D_CHUNK_TEXTURE_STAGE(ChunkItem * Item,CListCtrl *List);
  117. static void List_W3D_CHUNK_TEXTURE_IDS(ChunkItem * Item,CListCtrl *List);
  118. static void List_W3D_CHUNK_STAGE_TEXCOORDS(ChunkItem * Item,CListCtrl *List);
  119. static void List_W3D_CHUNK_PER_FACE_TEXCOORD_IDS(ChunkItem * Item,CListCtrl *List);
  120. static void List_W3D_CHUNK_AABTREE(ChunkItem * Item,CListCtrl *List);
  121. static void List_W3D_CHUNK_AABTREE_HEADER(ChunkItem * Item,CListCtrl *List);
  122. static void List_W3D_CHUNK_AABTREE_POLYINDICES(ChunkItem * Item,CListCtrl *List);
  123. static void List_W3D_CHUNK_AABTREE_NODES(ChunkItem * Item,CListCtrl *List);
  124. static void List_W3D_CHUNK_HIERARCHY(ChunkItem *Item, CListCtrl *List);
  125. static void List_W3D_CHUNK_HIERARCHY_HEADER(ChunkItem *Item, CListCtrl *List);
  126. static void List_W3D_CHUNK_PIVOTS(ChunkItem *Item, CListCtrl *List);
  127. static void List_W3D_CHUNK_PIVOT_FIXUPS(ChunkItem *Item, CListCtrl *List);
  128. static void List_W3D_CHUNK_ANIMATION(ChunkItem *Item, CListCtrl *List);
  129. static void List_W3D_CHUNK_ANIMATION_HEADER(ChunkItem *Item, CListCtrl *List);
  130. static void List_W3D_CHUNK_ANIMATION_CHANNEL(ChunkItem *Item, CListCtrl *List);
  131. static void List_W3D_CHUNK_BIT_CHANNEL(ChunkItem *Item, CListCtrl *List);
  132. static void List_W3D_CHUNK_HMODEL(ChunkItem *Item, CListCtrl *List);
  133. static void List_W3D_CHUNK_HMODEL_HEADER(ChunkItem *Item, CListCtrl *List);
  134. static void List_W3D_CHUNK_NODE(ChunkItem *Item, CListCtrl *List);
  135. static void List_W3D_CHUNK_COLLISION_NODE(ChunkItem *Item, CListCtrl *List);
  136. static void List_W3D_CHUNK_SKIN_NODE(ChunkItem *Item, CListCtrl *List);
  137. static void List_W3D_CHUNK_HMODEL_AUX_DATA(ChunkItem *Item, CListCtrl *List);
  138. static void List_W3D_CHUNK_SHADOW_NODE(ChunkItem *Item, CListCtrl *List);
  139. static void List_W3D_CHUNK_LODMODEL(ChunkItem *Item, CListCtrl *List);
  140. static void List_W3D_CHUNK_LODMODEL_HEADER(ChunkItem *Item, CListCtrl *List);
  141. static void List_W3D_CHUNK_LOD(ChunkItem * Item,CListCtrl * List);
  142. static void List_W3D_CHUNK_COLLECTION(ChunkItem * Item,CListCtrl * List);
  143. static void List_W3D_CHUNK_COLLECTION_HEADER(ChunkItem * Item,CListCtrl * List);
  144. static void List_W3D_CHUNK_COLLECTION_OBJ_NAME(ChunkItem * Item,CListCtrl * List);
  145. static void List_W3D_CHUNK_PLACEHOLDER(ChunkItem * Item,CListCtrl * List);
  146. static void List_W3D_CHUNK_TRANSFORM_NODE(ChunkItem * Item,CListCtrl * List);
  147. static void List_W3D_CHUNK_POINTS(ChunkItem * Item,CListCtrl * List);
  148. static void List_W3D_CHUNK_LIGHT(ChunkItem * Item,CListCtrl * List);
  149. static void List_W3D_CHUNK_LIGHT_INFO(ChunkItem * Item,CListCtrl * List);
  150. static void List_W3D_CHUNK_SPOT_LIGHT_INFO(ChunkItem * Item,CListCtrl * List);
  151. static void List_W3D_CHUNK_NEAR_ATTENUATION(ChunkItem * Item,CListCtrl * List);
  152. static void List_W3D_CHUNK_FAR_ATTENUATION(ChunkItem * Item,CListCtrl * List);
  153. static void List_W3D_CHUNK_EMITTER(ChunkItem * Item,CListCtrl * List);
  154. static void List_W3D_CHUNK_EMITTER_HEADER(ChunkItem * Item,CListCtrl * List);
  155. static void List_W3D_CHUNK_EMITTER_USER_DATA(ChunkItem * Item,CListCtrl * List);
  156. static void List_W3D_CHUNK_EMITTER_INFO(ChunkItem * Item,CListCtrl * List);
  157. static void List_W3D_CHUNK_EMITTER_INFOV2(ChunkItem * Item,CListCtrl * List);
  158. static void List_W3D_CHUNK_EMITTER_PROPS(ChunkItem * Item,CListCtrl * List);
  159. static void List_W3D_CHUNK_EMITTER_COLOR_KEYFRAME(ChunkItem * Item,CListCtrl * List);
  160. static void List_W3D_CHUNK_EMITTER_OPACITY_KEYFRAME(ChunkItem * Item,CListCtrl * List);
  161. static void List_W3D_CHUNK_EMITTER_SIZE_KEYFRAME(ChunkItem * Item,CListCtrl * List);
  162. static void List_W3D_CHUNK_EMITTER_ROTATION_KEYFRAMES(ChunkItem * Item,CListCtrl * List);
  163. static void List_W3D_CHUNK_EMITTER_FRAME_KEYFRAMES(ChunkItem * Item,CListCtrl * List);
  164. static void List_W3D_CHUNK_EMITTER_BLUR_TIME_KEYFRAMES(ChunkItem * Item,CListCtrl * List);
  165. static void List_W3D_CHUNK_AGGREGATE(ChunkItem * Item,CListCtrl * List);
  166. static void List_W3D_CHUNK_AGGREGATE_HEADER(ChunkItem * Item,CListCtrl * List);
  167. static void List_W3D_CHUNK_AGGREGATE_INFO(ChunkItem * Item,CListCtrl * List);
  168. static void List_W3D_CHUNK_TEXTURE_REPLACER_INFO(ChunkItem * Item,CListCtrl * List);
  169. static void List_W3D_CHUNK_AGGREGATE_CLASS_INFO(ChunkItem * Item,CListCtrl * List);
  170. static void List_W3D_CHUNK_HLOD(ChunkItem * Item,CListCtrl * List);
  171. static void List_W3D_CHUNK_HLOD_HEADER(ChunkItem * Item,CListCtrl * List);
  172. static void List_W3D_CHUNK_HLOD_LOD_ARRAY(ChunkItem * Item,CListCtrl * List);
  173. static void List_W3D_CHUNK_HLOD_LOD_ARRAY_HEADER(ChunkItem * Item,CListCtrl * List);
  174. static void List_W3D_CHUNK_HLOD_SUB_OBJECT(ChunkItem * Item,CListCtrl * List);
  175. static void List_W3D_CHUNK_BOX(ChunkItem * Item,CListCtrl * List);
  176. static void List_W3D_CHUNK_NULL_OBJECT(ChunkItem * Item,CListCtrl * List);
  177. static void List_W3D_CHUNK_PRELIT_UNLIT(ChunkItem *Item, CListCtrl *List);
  178. static void List_W3D_CHUNK_PRELIT_VERTEX(ChunkItem *Item, CListCtrl *List);
  179. static void List_W3D_CHUNK_PRELIT_LIGHTMAP_MULTI_PASS(ChunkItem *Item, CListCtrl *List);
  180. static void List_W3D_CHUNK_PRELIT_LIGHTMAP_MULTI_TEXTURE(ChunkItem *Item, CListCtrl *List);
  181. static void List_W3D_CHUNK_LIGHTSCAPE(ChunkItem *Item, CListCtrl *List);
  182. static void List_W3D_CHUNK_LIGHTSCAPE_LIGHT(ChunkItem *Item, CListCtrl *List);
  183. static void List_W3D_CHUNK_LIGHT_TRANSFORM(ChunkItem *Item, CListCtrl *List);
  184. static void List_W3D_CHUNK_DAZZLE(ChunkItem *Item, CListCtrl *List);
  185. static void List_W3D_CHUNK_DAZZLE_NAME(ChunkItem *Item, CListCtrl *List);
  186. static void List_W3D_CHUNK_DAZZLE_TYPENAME(ChunkItem *Item, CListCtrl *List);
  187. };
  188. class ChunkItem {
  189. public:
  190. ChunkItem(ChunkLoadClass &cload); // constructor copies header and data into buffer
  191. ~ChunkItem();
  192. int ID;
  193. ChunkType *Type;
  194. int Length;
  195. void *Data;
  196. CList<ChunkItem *, ChunkItem *> Chunks; // wrapper chunks will have members here.
  197. protected:
  198. static ChunkTableClass ChunkTable;
  199. };
  200. class ChunkData
  201. {
  202. public:
  203. void Release_Data();
  204. ChunkData();
  205. virtual ~ChunkData();
  206. bool Load(const char *Filename);
  207. CList<ChunkItem *, ChunkItem *> Chunks;
  208. protected:
  209. void Add_Chunk(ChunkLoadClass &cload, ChunkItem *Parent = 0); // add a chunk to the list of chunks maintained by ChunkData
  210. };
  211. #endif // !defined(AFX_CHUNK_D_H__41C157F9_5631_11D1_8CDB_006097C6A583__INCLUDED_)