chunk_d.cpp 91 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334
  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. /***********************************************************************************************
  19. *** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
  20. ***********************************************************************************************
  21. * *
  22. * Project Name : WDump *
  23. * *
  24. * $Archive:: /Commando/Code/Tools/W3DShellExt/External/chunk_d.cpp $*
  25. * *
  26. * $Author:: Moumine_ballo $*
  27. * *
  28. * $Modtime:: 1/02/02 1:22p $*
  29. * *
  30. * $Revision:: 66 $*
  31. * *
  32. *---------------------------------------------------------------------------------------------*
  33. * Functions: *
  34. * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
  35. #include "w3d_file.h"
  36. #include "stdafx.h"
  37. #include "wdump.h"
  38. #include "Chunk_D.h"
  39. #include "rawfilem.h"
  40. #include "finddialog.h"
  41. #ifdef _DEBUG
  42. #undef THIS_FILE
  43. static char THIS_FILE[]=__FILE__;
  44. #define new DEBUG_NEW
  45. #endif
  46. static int Get_Bit(void const * array, int bit);
  47. static void Set_Bit(void * array, int bit, int value);
  48. ChunkTableClass ChunkItem::ChunkTable;
  49. ChunkTableClass::~ChunkTableClass() {
  50. ChunkType *chunktype;
  51. POSITION p = Types.GetStartPosition();
  52. while(p) {
  53. void *key;
  54. Types.GetNextAssoc(p, key, (void *&) chunktype);
  55. delete chunktype;
  56. }
  57. }
  58. void ChunkTableClass::NewType(int ID, const char *name, void (*callback)(ChunkItem *item, CListCtrl *list), bool wrapper) {
  59. ChunkType *chunktype = new ChunkType(name, callback, wrapper);
  60. Types.SetAt((void *) ID, (void *) chunktype);
  61. }
  62. void ChunkTableClass::AddItem(CListCtrl *List, int &Counter, const char *Name, const char *Value, const char *Type) {
  63. if (List != NULL) {
  64. int list_item = List->InsertItem(Counter++, Name);
  65. List->SetItemText(list_item, 1, Type);
  66. List->SetItemText(list_item, 2, Value);
  67. } else {
  68. FindDialog::Compare (Value);
  69. }
  70. }
  71. void ChunkTableClass::AddItemVersion(CListCtrl *List,int &Counter,uint32 version)
  72. {
  73. char buf[64];
  74. sprintf(buf,"%d.%d",W3D_GET_MAJOR_VERSION(version),W3D_GET_MINOR_VERSION(version));
  75. AddItem(List,Counter,"Version",buf);
  76. }
  77. void ChunkTableClass::AddItem(CListCtrl *List, int &Counter, const char *Name, uint32 Value) {
  78. char buf[256];
  79. sprintf(buf, "%d", Value);
  80. AddItem(List, Counter, Name, buf, "int32");
  81. }
  82. void ChunkTableClass::AddItem(CListCtrl *List, int &Counter, const char *Name, uint16 Value) {
  83. char buf[256];
  84. sprintf(buf, "%d", Value);
  85. AddItem(List, Counter, Name, buf, "int16");
  86. }
  87. void ChunkTableClass::AddItem(CListCtrl *List, int &Counter, const char *Name, uint8 Value) {
  88. char buf[256];
  89. sprintf(buf, "%d", Value);
  90. AddItem(List, Counter, Name, buf, "int8");
  91. }
  92. void ChunkTableClass::AddItem(CListCtrl *List, int &Counter, const char *Name, uint8 *Value, int Count) {
  93. CString buffer;
  94. CString temp;
  95. int counter = 0;
  96. while(counter < Count) {
  97. temp.Format("%d ", Value[counter++]);
  98. buffer += temp;
  99. }
  100. char type[256];
  101. sprintf(type, "int8[%d]", Count);
  102. AddItem(List, Counter, Name, (LPCTSTR) buffer, type);
  103. }
  104. void ChunkTableClass::AddItem(CListCtrl *List,int &Counter, const char *Name, float32 Value) {
  105. char buf[256];
  106. sprintf(buf, "%f", Value);
  107. AddItem(List, Counter, Name, buf, "float");
  108. }
  109. void ChunkTableClass::AddItem(CListCtrl *List, int &Counter, const char *Name, uint32 *Value, int Count) {
  110. CString buffer;
  111. CString temp;
  112. int counter = 0;
  113. while(counter < Count) {
  114. temp.Format("%d ", Value[counter++]);
  115. buffer += temp;
  116. }
  117. char type[256];
  118. sprintf(type, "int32[%d]", Count);
  119. AddItem(List, Counter, Name, (LPCTSTR) buffer, type);
  120. }
  121. void ChunkTableClass::AddItem(CListCtrl *List, int &Counter, const char *Name, float32 *Value, int Count) {
  122. CString buffer;
  123. CString temp;
  124. int counter = 0;
  125. while(counter < Count) {
  126. temp.Format("%f ", Value[counter++]);
  127. buffer += temp;
  128. }
  129. char type[256];
  130. sprintf(type, "float[%d]", Count);
  131. AddItem(List, Counter, Name, (LPCTSTR) buffer, type);
  132. }
  133. void ChunkTableClass::AddItem(CListCtrl *List, int &Counter, const char *Name, IOVector3Struct *Value) {
  134. char buf[256];
  135. sprintf(buf, "%f %f %f", Value->X, Value->Y, Value->Z);
  136. AddItem(List, Counter, Name, buf, "vector");
  137. }
  138. void ChunkTableClass::AddItem(CListCtrl *List, int &Counter, const char *Name, IOVector4Struct *Value) {
  139. char buf[256];
  140. sprintf(buf, "%f %f %f %f", Value->X, Value->Y, Value->Z, Value->W);
  141. AddItem(List, Counter, Name, buf, "vector4");
  142. }
  143. void ChunkTableClass::AddItem(CListCtrl *List, int &Counter, const char *Name, W3dQuaternionStruct *Value) {
  144. char buf[256];
  145. sprintf(buf, "%f %f %f %f", Value->Q[0], Value->Q[1], Value->Q[2], Value->Q[3]);
  146. AddItem(List, Counter, Name, buf, "quaternion");
  147. }
  148. void ChunkTableClass::AddItem(CListCtrl *List, int &Counter, const char *Name, W3dRGBStruct *Value) {
  149. CString buffer;
  150. buffer.Format( "(%d %d %d) ", Value->R, Value->G, Value->B);
  151. AddItem(List, Counter, Name, (LPCTSTR) buffer, "RGB");
  152. }
  153. void ChunkTableClass::AddItem(CListCtrl *List, int &Counter, const char *Name, W3dRGBStruct *Value, int Count) {
  154. CString buffer;
  155. CString temp;
  156. int counter = 0;
  157. while(counter < Count) {
  158. temp.Format( "(%d %d %d) ", Value[counter].R, Value[counter].G, Value[counter].B);
  159. counter++;
  160. buffer += temp;
  161. }
  162. char type[256];
  163. sprintf(type, "RGB[%d]", Count);
  164. AddItem(List, Counter, Name, (LPCTSTR) buffer, type);
  165. }
  166. void ChunkTableClass::AddItem(CListCtrl *List, int &Counter, const char *Name, W3dRGBAStruct *Value) {
  167. CString buffer;
  168. buffer.Format( "(%d %d %d %d) ", Value->R, Value->G, Value->B, Value->A);
  169. AddItem(List, Counter, Name, (LPCTSTR) buffer, "RGBA");
  170. }
  171. void ChunkTableClass::AddItem(CListCtrl *List, int &Counter, const char *Name, W3dTexCoordStruct *Value, int Count) {
  172. CString temp;
  173. int counter = 0;
  174. while(counter < Count) {
  175. char type[256];
  176. sprintf(type, "%s.TexCoord[%d]", Name, counter);
  177. AddItem(List, Counter, type, &Value[counter]);
  178. counter++;
  179. }
  180. }
  181. void ChunkTableClass::AddItem(CListCtrl *List, int &Counter, const char *Name, W3dTexCoordStruct *Value)
  182. {
  183. char buf[256];
  184. sprintf(buf, "%f %f", Value->U, Value->V);
  185. AddItem(List, Counter, Name, buf, "UV");
  186. }
  187. void ChunkTableClass::AddItem(CListCtrl *List, int &Counter, const char *name, W3dShaderStruct * shader)
  188. {
  189. static char * _depth_compare[] = { "Pass Never","Pass Less","Pass Equal","Pass Less or Equal", "Pass Greater","Pass Not Equal","Pass Greater or Equal","Pass Always" };
  190. static char * _depth_mask[] = { "Write Disable", "Write Enable" };
  191. static char * _color_mask[] = { "Write Disable", "Write Enable" };
  192. static char * _destblend[] = { "Zero","One","Src Color","One Minus Src Color","Src Alpha","One Minus Src Alpha","Src Color Prefog" };
  193. static char * _fogfunc[] = { "Disable","Enable","Scale Fragment","Replace Fragment" };
  194. static char * _prigradient[] = { "Disable","Modulate","Add","Bump-Environment" };
  195. static char * _secgradient[] = { "Disable","Enable" };
  196. static char * _srcblend[] = { "Zero","One","Src Alpha","One Minus Src Alpha" };
  197. static char * _texturing[] = { "Disable","Enable" };
  198. static char * _detailcolor[] = { "Disable","Detail","Scale","InvScale","Add","Sub","SubR","Blend","DetailBlend" };
  199. static char * _detailalpha[] = { "Disable","Detail","Scale","InvScale" };
  200. static char * _dithermask[] = { "Disable", "Enable" };
  201. static char * _shademodel[] = { "Smooth", "Flat" };
  202. static char * _alphatest[] = { "Alpha Test Disable", "Alpha Test Enable" };
  203. int counter = 0;
  204. char label[256];
  205. sprintf(label,"%s.DepthCompare",name);
  206. AddItem(List, Counter, label, _depth_compare[W3d_Shader_Get_Depth_Compare(shader)]);
  207. sprintf(label,"%s.DepthMask",name);
  208. AddItem(List, Counter, label, _depth_mask[W3d_Shader_Get_Depth_Mask(shader)]);
  209. sprintf(label,"%s.DestBlend",name);
  210. AddItem(List, Counter, label, _destblend[W3d_Shader_Get_Dest_Blend_Func(shader)]);
  211. sprintf(label,"%s.PriGradient",name);
  212. AddItem(List, Counter, label, _prigradient[W3d_Shader_Get_Pri_Gradient(shader)]);
  213. sprintf(label,"%s.SecGradient",name);
  214. AddItem(List, Counter, label, _secgradient[W3d_Shader_Get_Sec_Gradient(shader)]);
  215. sprintf(label,"%s.SrcBlend",name);
  216. AddItem(List, Counter, label, _srcblend[W3d_Shader_Get_Src_Blend_Func(shader)]);
  217. sprintf(label,"%s.Texturing",name);
  218. AddItem(List, Counter, label, _texturing[W3d_Shader_Get_Texturing(shader)]);
  219. sprintf(label,"%s.DetailColor",name);
  220. AddItem(List, Counter, label, _detailcolor[W3d_Shader_Get_Detail_Color_Func(shader)]);
  221. sprintf(label,"%s.DetailAlpha",name);
  222. AddItem(List, Counter, label, _detailalpha[W3d_Shader_Get_Detail_Alpha_Func(shader)]);
  223. sprintf(label,"%s.AlphaTest",name);
  224. AddItem(List, Counter, label, _alphatest[W3d_Shader_Get_Alpha_Test(shader)]);
  225. counter++;
  226. shader++;
  227. }
  228. void ChunkTableClass::AddItem(CListCtrl *List, int &Counter, const char *name, W3dPS2ShaderStruct * shader)
  229. {
  230. static char * _depth_compare[] = { "Pass Never","Pass Less","Pass Always","Pass Less or Equal"};
  231. static char * _depth_mask[] = { "Write Disable", "Write Enable" };
  232. static char * _color_mask[] = { "Write Disable", "Write Enable" };
  233. static char * _ablend[] = { "Src Color","Dest Color","Zero"};
  234. static char * _cblend[] = { "Src Alpha","Dest Alpha","One"};
  235. static char * _fogfunc[] = { "Disable","Enable","Scale Fragment","Replace Fragment" };
  236. static char * _prigradient[] = { "Disable","Modulate","Highlight","Highlight2" };
  237. static char * _secgradient[] = { "Disable","Enable" };
  238. static char * _texturing[] = { "Disable","Enable" };
  239. static char * _detailcolor[] = { "Disable","Detail","Scale","InvScale","Add","Sub","SubR","Blend","DetailBlend" };
  240. static char * _detailalpha[] = { "Disable","Detail","Scale","InvScale" };
  241. static char * _dithermask[] = { "Disable", "Enable" };
  242. static char * _shademodel[] = { "Smooth", "Flat" };
  243. int counter = 0;
  244. char label[256];
  245. sprintf(label,"%s.DepthCompare",name);
  246. AddItem(List, Counter, label, _depth_compare[W3d_Shader_Get_Depth_Compare(shader)]);
  247. sprintf(label,"%s.DepthMask",name);
  248. AddItem(List, Counter, label, _depth_mask[W3d_Shader_Get_Depth_Mask(shader)]);
  249. sprintf(label,"%s.PriGradient",name);
  250. AddItem(List, Counter, label, _prigradient[W3d_Shader_Get_Pri_Gradient(shader)]);
  251. sprintf(label,"%s.Texturing",name);
  252. AddItem(List, Counter, label, _texturing[W3d_Shader_Get_Texturing(shader)]);
  253. sprintf(label,"%s.AParam",name);
  254. AddItem(List, Counter, label, _ablend[W3d_Shader_Get_PS2_Param_A(shader)]);
  255. sprintf(label,"%s.BParam",name);
  256. AddItem(List, Counter, label, _ablend[W3d_Shader_Get_PS2_Param_B(shader)]);
  257. sprintf(label,"%s.CParam",name);
  258. AddItem(List, Counter, label, _cblend[W3d_Shader_Get_PS2_Param_C(shader)]);
  259. sprintf(label,"%s.DParam",name);
  260. AddItem(List, Counter, label, _ablend[W3d_Shader_Get_PS2_Param_D(shader)]);
  261. counter++;
  262. shader++;
  263. }
  264. void ChunkTableClass::AddItem(CListCtrl *List, int &Counter, const char *Name, Vector3i *Value) {
  265. char buf[256];
  266. sprintf(buf, "%d %d %d", Value->I, Value->J, Value->K);
  267. AddItem(List, Counter, Name, buf, "IJK");
  268. }
  269. void ChunkTableClass::List_Subitems(ChunkItem *Item, CListCtrl *List) {
  270. int counter = 0;
  271. POSITION p = Item->Chunks.GetHeadPosition();
  272. while(p) {
  273. ChunkItem *subitem = Item->Chunks.GetNext(p);
  274. if(subitem->Type) {
  275. AddItem(List, counter,subitem->Type->Name, "", "chunk");
  276. }
  277. }
  278. }
  279. void ChunkTableClass::List_W3D_CHUNK_MESH(ChunkItem *Item, CListCtrl *List) {
  280. List_Subitems(Item, List);
  281. }
  282. void ChunkTableClass::List_W3D_CHUNK_MESH_HEADER(ChunkItem *Item, CListCtrl *List) {
  283. struct W3dMeshHeaderStruct *data;
  284. data = (W3dMeshHeaderStruct *) Item->Data;
  285. int Counter = 0;
  286. char buf[64];
  287. sprintf(buf,"%d.%d",W3D_GET_MAJOR_VERSION(data->Version),W3D_GET_MINOR_VERSION(data->Version));
  288. AddItem(List, Counter,"Version", buf);
  289. AddItem(List, Counter,"MeshName", data->MeshName);
  290. AddItem(List,Counter,"Attributes",data->Attributes);
  291. if (data->Attributes & W3D_MESH_FLAG_COLLISION_BOX) AddItem(List, Counter,"Attributes", "W3D_MESH_FLAG_COLLISION_BOX");
  292. if (data->Attributes & W3D_MESH_FLAG_SKIN) AddItem(List, Counter,"Attributes", "W3D_MESH_FLAG_SKIN");
  293. if (data->Attributes & W3D_MESH_FLAG_SHADOW) AddItem(List, Counter,"Attributes", "W3D_MESH_FLAG_SHADOW");
  294. if (data->Attributes & W3D_MESH_FLAG_ALIGNED) AddItem(List, Counter,"Attributes", "W3D_MESH_FLAG_ALIGNED");
  295. if (data->Attributes & W3D_MESH_FLAG_COLLISION_TYPE_PHYSICAL) AddItem(List, Counter,"Attributes", "W3D_MESH_FLAG_COLLISION_TYPE_PHYSICAL");
  296. if (data->Attributes & W3D_MESH_FLAG_COLLISION_TYPE_PROJECTILE) AddItem(List, Counter,"Attributes", "W3D_MESH_FLAG_COLLISION_TYPE_PROJECTILE");
  297. AddItem(List, Counter,"NumTris", data->NumTris);
  298. AddItem(List, Counter,"NumQuads", data->NumQuads);
  299. AddItem(List, Counter,"NumSrTris", data->NumSrTris);
  300. AddItem(List, Counter,"NumPovQuads", data->NumPovQuads);
  301. AddItem(List, Counter,"NumVertices", data->NumVertices);
  302. AddItem(List, Counter,"NumNormals", data->NumNormals);
  303. AddItem(List, Counter,"NumSrNormals", data->NumSrNormals);
  304. AddItem(List, Counter,"NumTexCoords", data->NumTexCoords);
  305. AddItem(List, Counter,"NumMaterials", data->NumMaterials);
  306. AddItem(List, Counter,"NumVertColors", data->NumVertColors);
  307. AddItem(List, Counter,"NumVertInfluences", data->NumVertInfluences);
  308. AddItem(List, Counter,"NumDamageStages", data->NumDamageStages);
  309. AddItem(List, Counter,"FutureCounts", data->FutureCounts, 5);
  310. AddItem(List, Counter,"LODMin", data->LODMin);
  311. AddItem(List, Counter,"LODMax", data->LODMax);
  312. AddItem(List, Counter,"Min", &data->Min);
  313. AddItem(List, Counter,"Max", &data->Max);
  314. AddItem(List, Counter,"SphCenter", &data->SphCenter);
  315. AddItem(List, Counter,"SphRadius", data->SphRadius);
  316. AddItem(List, Counter,"Translation", &data->Translation);
  317. AddItem(List, Counter,"Rotation", data->Rotation, 9);
  318. AddItem(List, Counter,"MassCenter", &data->MassCenter);
  319. AddItem(List, Counter,"Inertia", data->Inertia, 9);
  320. AddItem(List, Counter,"Volume", data->Volume);
  321. AddItem(List, Counter,"HierarchyTreeName", data->HierarchyTreeName);
  322. AddItem(List, Counter,"HierarchyModelName", data->HierarchyModelName);
  323. AddItem(List, Counter,"FutureUse", data->FutureUse, 24);
  324. }
  325. void ChunkTableClass::List_W3D_CHUNK_VERTICES(ChunkItem *Item, CListCtrl *List) {
  326. W3dVectorStruct *data;
  327. data = (W3dVectorStruct *) Item->Data;
  328. int Counter = 0;
  329. int index = 0;
  330. void *max = (char *) Item->Data + Item->Length;
  331. int counter = 0;
  332. char buf[256];
  333. while(data < max) {
  334. sprintf(buf, "Vertex[%d]", counter++);
  335. AddItem(List, Counter,buf, data);
  336. data++;
  337. }
  338. }
  339. void ChunkTableClass::List_W3D_CHUNK_VERTEX_NORMALS(ChunkItem *Item, CListCtrl *List) {
  340. W3dVectorStruct *data;
  341. data = (W3dVectorStruct *) Item->Data;
  342. int Counter = 0;
  343. int index = 0;
  344. void *max = (char *) Item->Data + Item->Length;
  345. int counter = 0;
  346. char buf[256];
  347. while(data < max) {
  348. sprintf(buf, "Normal[%d]", counter++);
  349. AddItem(List, Counter,buf, data);
  350. data++;
  351. }
  352. }
  353. void ChunkTableClass::List_W3D_CHUNK_SURRENDER_NORMALS(ChunkItem *Item, CListCtrl *List) {
  354. W3dVectorStruct *data;
  355. data = (W3dVectorStruct *) Item->Data;
  356. int Counter = 0;
  357. int index = 0;
  358. void *max = (char *) Item->Data + Item->Length;
  359. int counter = 0;
  360. char buf[256];
  361. while(data < max) {
  362. sprintf(buf, "SRNormal[%d]", counter++);
  363. AddItem(List, Counter,buf, data);
  364. data++;
  365. }
  366. }
  367. void ChunkTableClass::List_W3D_CHUNK_TEXCOORDS(ChunkItem *Item, CListCtrl *List) {
  368. W3dTexCoordStruct *data;
  369. data = (W3dTexCoordStruct *) Item->Data;
  370. int Counter = 0;
  371. int index = 0;
  372. void *max = (char *) Item->Data + Item->Length;
  373. int counter = 0;
  374. char buf[256];
  375. while(data < max) {
  376. sprintf(buf, "TexCoord[%d]", counter++);
  377. AddItem(List, Counter, buf, data);
  378. data++;
  379. }
  380. }
  381. void ChunkTableClass::List_O_W3D_CHUNK_MATERIALS(ChunkItem *Item, CListCtrl *List) {
  382. struct W3dMaterialStruct *data;
  383. data = (W3dMaterialStruct *) Item->Data;
  384. int Counter = 0;
  385. int index = 0;
  386. void *max = (char *) Item->Data + Item->Length;
  387. int counter = 0;
  388. char buf[256];
  389. while(data < max) {
  390. sprintf(buf, "Material[%d].MaterialName", counter);
  391. AddItem(List, Counter,buf, data->MaterialName);
  392. sprintf(buf, "Material[%d].PrimaryName", counter);
  393. AddItem(List, Counter,buf, data->PrimaryName);
  394. sprintf(buf, "Material[%d].SecondaryName", counter);
  395. AddItem(List, Counter,buf, data->SecondaryName);
  396. sprintf(buf, "Material[%d].RenderFlags", counter);
  397. AddItem(List, Counter,buf, data->RenderFlags);
  398. sprintf(buf, "Material[%d].Red", counter);
  399. AddItem(List, Counter,buf, data->Red);
  400. sprintf(buf, "Material[%d].Green", counter);
  401. AddItem(List, Counter,buf, data->Green);
  402. sprintf(buf, "Material[%d].Blue", counter);
  403. AddItem(List, Counter,buf, data->Blue);
  404. counter++;
  405. data++;
  406. }
  407. }
  408. void ChunkTableClass::List_O_W3D_CHUNK_TRIANGLES(ChunkItem *Item, CListCtrl *List) {
  409. int Counter = 0;
  410. AddItem(List, Counter, "Obsolete structure", "");
  411. }
  412. void ChunkTableClass::List_O_W3D_CHUNK_QUADRANGLES(ChunkItem *Item, CListCtrl *List) {
  413. int Counter = 0;
  414. AddItem(List, Counter, "Outdated structure", "");
  415. }
  416. void ChunkTableClass::List_O_W3D_CHUNK_SURRENDER_TRIANGLES(ChunkItem *Item, CListCtrl *List) {
  417. struct W3dSurrenderTriStruct *data;
  418. data = (W3dSurrenderTriStruct *) Item->Data;
  419. int Counter = 0;
  420. int index = 0;
  421. void *max = (char *) Item->Data + Item->Length;
  422. int counter = 0;
  423. char buf[256];
  424. while(data < max) {
  425. sprintf(buf, "Triangle[%d].Attributes", counter);
  426. AddItem(List, Counter,buf, data->Attributes);
  427. sprintf(buf, "Triangle[%d].Gouraud", counter);
  428. AddItem(List, Counter,buf, data->Gouraud, 3);
  429. sprintf(buf, "Triangle[%d].VertexIndices", counter);
  430. AddItem(List, Counter,buf, data->Vindex, 3);
  431. sprintf(buf, "Triangle[%d].MaterialIdx", counter);
  432. AddItem(List, Counter,buf, data->MaterialIdx);
  433. sprintf(buf, "Triangle[%d].Normal", counter);
  434. AddItem(List, Counter,buf, &data->Normal);
  435. sprintf(buf, "Triangle[%d].TexCoord", counter);
  436. AddItem(List, Counter,buf, data->TexCoord, 3);
  437. counter++;
  438. data++;
  439. }
  440. }
  441. void ChunkTableClass::List_O_W3D_CHUNK_POV_TRIANGLES(ChunkItem *Item, CListCtrl *List) {
  442. int Counter = 0;
  443. AddItem(List, Counter,"Contact Greg if you need to look at this!", "unsupported");
  444. }
  445. void ChunkTableClass::List_O_W3D_CHUNK_POV_QUADRANGLES(ChunkItem *Item, CListCtrl *List) {
  446. int Counter = 0;
  447. AddItem(List, Counter,"Contact Greg if you need to look at this!", "unsupported");
  448. }
  449. void ChunkTableClass::List_W3D_CHUNK_MESH_USER_TEXT(ChunkItem *Item, CListCtrl *List) {
  450. int Counter = 0;
  451. AddItem(List, Counter,"UserText", (char *) Item->Data);
  452. }
  453. void ChunkTableClass::List_W3D_CHUNK_VERTEX_COLORS(ChunkItem *Item, CListCtrl *List) {
  454. struct W3dRGBStruct *data;
  455. data = (W3dRGBStruct *) Item->Data;
  456. int Counter = 0;
  457. int index = 0;
  458. void *max = (char *) Item->Data + Item->Length;
  459. int counter = 0;
  460. char buf[256];
  461. int sz = sizeof(W3dRGBStruct);
  462. while(data < max) {
  463. sprintf(buf, "Vertex[%d].RGB", counter);
  464. AddItem(List, Counter,buf, data);
  465. counter++;
  466. data++;
  467. }
  468. }
  469. void ChunkTableClass::List_W3D_CHUNK_VERTEX_INFLUENCES(ChunkItem *Item, CListCtrl *List) {
  470. struct W3dVertInfStruct *data;
  471. data = (W3dVertInfStruct *) Item->Data;
  472. int Counter = 0;
  473. int index = 0;
  474. void *max = (char *) Item->Data + Item->Length;
  475. int counter = 0;
  476. char buf[256];
  477. while(data < max) {
  478. sprintf(buf, "VertexInfluence[%d].BoneIdx", counter);
  479. AddItem(List, Counter,buf, data->BoneIdx);
  480. sprintf(buf, "VertexInfluence[%d].Pad", counter);
  481. AddItem(List, Counter,buf, data->Pad, 6);
  482. counter++;
  483. data++;
  484. }
  485. }
  486. void ChunkTableClass::List_W3D_CHUNK_DAMAGE(ChunkItem *Item, CListCtrl *List) {
  487. List_Subitems(Item, List);
  488. }
  489. void ChunkTableClass::List_W3D_CHUNK_DAMAGE_HEADER(ChunkItem *Item, CListCtrl *List) {
  490. struct W3dMeshDamageStruct *data;
  491. data = (W3dMeshDamageStruct *) Item->Data;
  492. int Counter = 0;
  493. int index = 0;
  494. void *max = (char *) Item->Data + Item->Length;
  495. int counter = 0;
  496. char buf[256];
  497. while(data < max) {
  498. sprintf(buf, "DamageStruct[%d].NumDamageMaterials", counter);
  499. AddItem(List, Counter,buf, data->NumDamageMaterials);
  500. sprintf(buf, "DamageStruct[%d].NumDamageVerts", counter);
  501. AddItem(List, Counter,buf, data->NumDamageVerts);
  502. sprintf(buf, "DamageStruct[%d].NumDamageColors", counter);
  503. AddItem(List, Counter,buf, data->NumDamageColors);
  504. sprintf(buf, "DamageStruct[%d].DamageIndex", counter);
  505. AddItem(List, Counter,buf, data->DamageIndex);
  506. counter++;
  507. data++;
  508. }
  509. }
  510. void ChunkTableClass::List_W3D_CHUNK_DAMAGE_VERTICES(ChunkItem *Item, CListCtrl *List) {
  511. struct W3dMeshDamageVertexStruct *data;
  512. data = (W3dMeshDamageVertexStruct *) Item->Data;
  513. int Counter = 0;
  514. int index = 0;
  515. void *max = (char *) Item->Data + Item->Length;
  516. int counter = 0;
  517. char buf[256];
  518. while(data < max) {
  519. sprintf(buf, "DamageVertexStruct[%d].VertexIndex", counter);
  520. AddItem(List, Counter,buf, data->VertexIndex);
  521. sprintf(buf, "DamageVertexStruct[%d].NewVertex", counter);
  522. AddItem(List, Counter,buf, data->VertexIndex);
  523. counter++;
  524. data++;
  525. }
  526. }
  527. void ChunkTableClass::List_W3D_CHUNK_DAMAGE_COLORS(ChunkItem *Item, CListCtrl *List) {
  528. struct W3dMeshDamageColorStruct *data;
  529. data = (W3dMeshDamageColorStruct *) Item->Data;
  530. int Counter = 0;
  531. int index = 0;
  532. void *max = (char *) Item->Data + Item->Length;
  533. int counter = 0;
  534. char buf[256];
  535. while(data < max) {
  536. sprintf(buf, "DamageColorStruct[%d].VertexIndex", counter);
  537. AddItem(List, Counter,buf, data->VertexIndex);
  538. sprintf(buf, "DamageColorStruct[%d].NewColor", counter);
  539. AddItem(List, Counter,buf, &data->NewColor);
  540. counter++;
  541. data++;
  542. }
  543. }
  544. void ChunkTableClass::List_O_W3D_CHUNK_MATERIALS2(ChunkItem *Item, CListCtrl *List) {
  545. struct W3dMaterial2Struct *data;
  546. data = (W3dMaterial2Struct *) Item->Data;
  547. int Counter = 0;
  548. int index = 0;
  549. void *max = (char *) Item->Data + Item->Length;
  550. int counter = 0;
  551. char buf[256];
  552. while(data < max) {
  553. sprintf(buf, "Material[%d].MaterialName", counter);
  554. AddItem(List, Counter,buf, data->MaterialName);
  555. sprintf(buf, "Material[%d].PrimaryName", counter);
  556. AddItem(List, Counter,buf, data->PrimaryName);
  557. sprintf(buf, "Material[%d].SecondaryName", counter);
  558. AddItem(List, Counter,buf, data->SecondaryName);
  559. sprintf(buf, "Material[%d].RenderFlags", counter);
  560. AddItem(List, Counter,buf, data->RenderFlags);
  561. sprintf(buf, "Material[%d].Red", counter);
  562. AddItem(List, Counter,buf, data->Red);
  563. sprintf(buf, "Material[%d].Green", counter);
  564. AddItem(List, Counter,buf, data->Green);
  565. sprintf(buf, "Material[%d].Blue", counter);
  566. AddItem(List, Counter,buf, data->Blue);
  567. sprintf(buf, "Material[%d].Alpha", counter);
  568. AddItem(List, Counter,buf, data->Alpha);
  569. sprintf(buf, "Material[%d].PrimaryNumFrames", counter);
  570. AddItem(List, Counter,buf, data->PrimaryNumFrames);
  571. sprintf(buf, "Material[%d].SecondaryNumFrames", counter);
  572. AddItem(List, Counter,buf, data->SecondaryNumFrames);
  573. counter++;
  574. data++;
  575. }
  576. }
  577. void ChunkTableClass::List_W3D_CHUNK_MATERIALS3(ChunkItem *Item, CListCtrl *List)
  578. {
  579. List_Subitems(Item, List);
  580. }
  581. void ChunkTableClass::List_W3D_CHUNK_MATERIAL3(ChunkItem *Item, CListCtrl *List)
  582. {
  583. List_Subitems(Item, List);
  584. }
  585. void ChunkTableClass::List_W3D_CHUNK_MATERIAL3_NAME(ChunkItem *Item, CListCtrl *List)
  586. {
  587. int Counter = 0;
  588. char * data = (char *)Item->Data;
  589. AddItem(List, Counter,"Material Name:", data);
  590. }
  591. void ChunkTableClass::List_W3D_CHUNK_MATERIAL3_INFO(ChunkItem *Item, CListCtrl *List)
  592. {
  593. int Counter = 0;
  594. struct W3dMaterial3Struct *data;
  595. data = (W3dMaterial3Struct *) Item->Data;
  596. AddItem(List,Counter,"Attributes",data->Attributes);
  597. if (data->Attributes & W3DMATERIAL_USE_ALPHA) AddItem(List,Counter,"Attributes","W3DMATERIAL_USE_ALPHA");
  598. if (data->Attributes & W3DMATERIAL_USE_SORTING) AddItem(List,Counter,"Attributes","W3DMATERIAL_USE_SORTING");
  599. if (data->Attributes & W3DMATERIAL_HINT_DIT_OVER_DCT) AddItem(List,Counter,"Attributes","W3DMATERIAL_HINT_DIT_OVER_DCT");
  600. if (data->Attributes & W3DMATERIAL_HINT_SIT_OVER_SCT) AddItem(List,Counter,"Attributes","W3DMATERIAL_HINT_SIT_OVER_SCT");
  601. if (data->Attributes & W3DMATERIAL_HINT_DIT_OVER_DIG) AddItem(List,Counter,"Attributes","W3DMATERIAL_HINT_DIT_OVER_DIG");
  602. if (data->Attributes & W3DMATERIAL_HINT_SIT_OVER_SIG) AddItem(List,Counter,"Attributes","W3DMATERIAL_HINT_SIT_OVER_SIG");
  603. if (data->Attributes & W3DMATERIAL_HINT_FAST_SPECULAR_AFTER_ALPHA) AddItem(List,Counter,"Attributes","W3DMATERIAL_HINT_FAST_SPECULAR_AFTER_ALPHA");
  604. if (data->Attributes & W3DMATERIAL_PSX_TRANS_100) AddItem(List,Counter,"Attributes","W3DMATERIAL_PSX_TRANS_100");
  605. if (data->Attributes & W3DMATERIAL_PSX_TRANS_50) AddItem(List,Counter,"Attributes","W3DMATERIAL_PSX_TRANS_50");
  606. if (data->Attributes & W3DMATERIAL_PSX_TRANS_25) AddItem(List,Counter,"Attributes","W3DMATERIAL_PSX_TRANS_25");
  607. if (data->Attributes & W3DMATERIAL_PSX_TRANS_MINUS_100) AddItem(List,Counter,"Attributes","W3DMATERIAL_PSX_TRANS_MINUS_100");
  608. if (data->Attributes & W3DMATERIAL_PSX_NO_RT_LIGHTING) AddItem(List,Counter,"Attributes","W3DMATERIAL_PSX_NO_RT_LIGHTING");
  609. AddItem(List, Counter,"Diffuse Color", &data->DiffuseColor);
  610. AddItem(List, Counter,"Specular Color", &data->SpecularColor);
  611. AddItem(List, Counter,"Emissive Coefficients", &data->EmissiveCoefficients);
  612. AddItem(List, Counter,"Ambient Coefficients", &data->AmbientCoefficients);
  613. AddItem(List, Counter,"Diffuse Coefficients", &data->DiffuseCoefficients);
  614. AddItem(List, Counter,"Specular Coefficients", &data->SpecularCoefficients);
  615. AddItem(List, Counter,"Shininess", data->Shininess);
  616. AddItem(List, Counter,"Opacity", data->Opacity);
  617. AddItem(List, Counter,"Translucency", data->Translucency);
  618. AddItem(List, Counter,"Fog Coefficient", data->FogCoeff);
  619. }
  620. void ChunkTableClass::List_W3D_CHUNK_MAP3_FILENAME(ChunkItem * Item,CListCtrl * List)
  621. {
  622. int Counter = 0;
  623. char * data = (char *)Item->Data;
  624. AddItem(List, Counter, "Texture Filename:", data);
  625. }
  626. void ChunkTableClass::List_W3D_CHUNK_MAP3_INFO(ChunkItem * Item,CListCtrl * List)
  627. {
  628. int Counter = 0;
  629. struct W3dMap3Struct * data;
  630. data = (W3dMap3Struct *)Item->Data;
  631. AddItem(List, Counter, "Mapping Type",data->MappingType);
  632. AddItem(List, Counter, "Frame Count",data->FrameCount);
  633. AddItem(List, Counter, "Frame Rate",data->FrameRate);
  634. }
  635. void ChunkTableClass::List_W3D_CHUNK_MATERIAL3_DC_MAP(ChunkItem *Item, CListCtrl *List)
  636. {
  637. List_Subitems(Item, List);
  638. }
  639. void ChunkTableClass::List_W3D_CHUNK_MATERIAL3_DI_MAP(ChunkItem *Item, CListCtrl *List)
  640. {
  641. List_Subitems(Item,List);
  642. }
  643. void ChunkTableClass::List_W3D_CHUNK_MATERIAL3_SC_MAP(ChunkItem *Item, CListCtrl *List)
  644. {
  645. List_Subitems(Item,List);
  646. }
  647. void ChunkTableClass::List_W3D_CHUNK_MATERIAL3_SI_MAP(ChunkItem *Item, CListCtrl *List)
  648. {
  649. List_Subitems(Item,List);
  650. }
  651. void ChunkTableClass::List_W3D_CHUNK_MESH_HEADER3(ChunkItem *Item, CListCtrl *List) {
  652. struct W3dMeshHeader3Struct *data;
  653. data = (W3dMeshHeader3Struct *) Item->Data;
  654. int Counter = 0;
  655. char buf[64];
  656. sprintf(buf,"%d.%d",W3D_GET_MAJOR_VERSION(data->Version),W3D_GET_MINOR_VERSION(data->Version));
  657. AddItem(List, Counter,"Version", buf);
  658. AddItem(List, Counter,"MeshName", data->MeshName);
  659. AddItem(List, Counter,"ContainerName", data->ContainerName);
  660. AddItem(List, Counter,"Attributes",data->Attributes);
  661. switch(data->Attributes & W3D_MESH_FLAG_GEOMETRY_TYPE_MASK)
  662. {
  663. case W3D_MESH_FLAG_GEOMETRY_TYPE_NORMAL:
  664. AddItem(List, Counter,"Attributes", "W3D_MESH_FLAG_GEOMETRY_TYPE_NORMAL_MESH","flag");
  665. break;
  666. case W3D_MESH_FLAG_GEOMETRY_TYPE_CAMERA_ALIGNED:
  667. AddItem(List, Counter,"Attributes", "W3D_MESH_FLAG_GEOMETRY_TYPE_CAMERA_ALIGNED","flag");
  668. break;
  669. case W3D_MESH_FLAG_GEOMETRY_TYPE_SKIN:
  670. AddItem(List, Counter,"Attributes", "W3D_MESH_FLAG_GEOMETRY_TYPE_SKIN","flag");
  671. break;
  672. case W3D_MESH_FLAG_GEOMETRY_TYPE_AABOX:
  673. AddItem(List, Counter,"Attributes", "W3D_MESH_FLAG_GEOMETRY_TYPE_AABOX","flag");
  674. break;
  675. case W3D_MESH_FLAG_GEOMETRY_TYPE_OBBOX:
  676. AddItem(List, Counter,"Attributes", "W3D_MESH_FLAG_GEOMETRY_TYPE_OBBOX","flag");
  677. break;
  678. };
  679. if (data->Attributes & W3D_MESH_FLAG_COLLISION_TYPE_PHYSICAL) AddItem(List, Counter,"Attributes", "W3D_MESH_FLAG_COLLISION_TYPE_PHYSICAL","flag");
  680. if (data->Attributes & W3D_MESH_FLAG_COLLISION_TYPE_PROJECTILE) AddItem(List, Counter,"Attributes", "W3D_MESH_FLAG_COLLISION_TYPE_PROJECTILE","flag");
  681. if (data->Attributes & W3D_MESH_FLAG_COLLISION_TYPE_VIS) AddItem(List, Counter,"Attributes", "W3D_MESH_FLAG_COLLISION_TYPE_VIS","flag");
  682. if (data->Attributes & W3D_MESH_FLAG_COLLISION_TYPE_CAMERA) AddItem(List, Counter,"Attributes", "W3D_MESH_FLAG_COLLISION_TYPE_CAMERA","flag");
  683. if (data->Attributes & W3D_MESH_FLAG_COLLISION_TYPE_VEHICLE) AddItem(List, Counter,"Attributes", "W3D_MESH_FLAG_COLLISION_TYPE_VEHICLE","flag");
  684. if (data->Attributes & W3D_MESH_FLAG_HIDDEN) AddItem(List, Counter,"Attributes", "W3D_MESH_FLAG_HIDDEN","flag");
  685. if (data->Attributes & W3D_MESH_FLAG_TWO_SIDED) AddItem(List, Counter,"Attributes", "W3D_MESH_FLAG_TWO_SIDED","flag");
  686. if (data->Attributes & W3D_MESH_FLAG_CAST_SHADOW) AddItem(List, Counter,"Attributes", "W3D_MESH_FLAG_CAST_SHADOW");
  687. if (data->Attributes & W3D_MESH_FLAG_SHATTERABLE) AddItem(List, Counter,"Attributes", "W3D_MESH_FLAG_SHATTERABLE");
  688. if (data->Attributes & W3D_MESH_FLAG_NPATCHABLE) AddItem(List, Counter,"Attributes", "W3D_MESH_FLAG_NPATCHABLE");
  689. if (data->Attributes & W3D_MESH_FLAG_PRELIT_UNLIT) AddItem(List, Counter,"Attributes", "W3D_MESH_FLAG_PRELIT_UNLIT","flag");
  690. if (data->Attributes & W3D_MESH_FLAG_PRELIT_VERTEX) AddItem(List, Counter,"Attributes", "W3D_MESH_FLAG_PRELIT_VERTEX","flag");
  691. if (data->Attributes & W3D_MESH_FLAG_PRELIT_LIGHTMAP_MULTI_PASS) AddItem(List, Counter,"Attributes", "W3D_MESH_FLAG_PRELIT_LIGHTMAP_MULTI_PASS","flag");
  692. if (data->Attributes & W3D_MESH_FLAG_PRELIT_LIGHTMAP_MULTI_TEXTURE) AddItem(List, Counter,"Attributes", "W3D_MESH_FLAG_PRELIT_LIGHTMAP_MULTI_TEXTURE","flag");
  693. AddItem(List, Counter,"NumTris", data->NumTris);
  694. AddItem(List, Counter,"NumVertices", data->NumVertices);
  695. AddItem(List, Counter,"NumMaterials", data->NumMaterials);
  696. AddItem(List, Counter,"NumDamageStages", data->NumDamageStages);
  697. if (data->SortLevel == SORT_LEVEL_NONE) {
  698. AddItem(List, Counter, "SortLevel", "NONE");
  699. } else {
  700. AddItem(List, Counter, "SortLevel", (uint8)data->SortLevel);
  701. }
  702. if ((data->Attributes & W3D_MESH_FLAG_PRELIT_MASK) != 0x0) {
  703. if (data->PrelitVersion != 0) {
  704. sprintf (buf, "%d.%d", W3D_GET_MAJOR_VERSION (data->PrelitVersion), W3D_GET_MINOR_VERSION (data->PrelitVersion));
  705. } else {
  706. sprintf (buf, "UNKNOWN");
  707. }
  708. } else {
  709. sprintf (buf, "N/A");
  710. }
  711. AddItem (List, Counter, "PrelitVersion", buf);
  712. AddItem(List, Counter, "FutureCounts", data->FutureCounts, 1);
  713. AddItem(List, Counter, "VertexChannels", data->VertexChannels);
  714. if (data->VertexChannels & W3D_VERTEX_CHANNEL_LOCATION) AddItem(List,Counter,"VertexChannels","W3D_VERTEX_CHANNEL_LOCATION","flag");
  715. if (data->VertexChannels & W3D_VERTEX_CHANNEL_NORMAL) AddItem(List,Counter,"VertexChannels","W3D_VERTEX_CHANNEL_NORMAL","flag");
  716. if (data->VertexChannels & W3D_VERTEX_CHANNEL_TEXCOORD) AddItem(List,Counter,"VertexChannels","W3D_VERTEX_CHANNEL_TEXCOORD","flag");
  717. if (data->VertexChannels & W3D_VERTEX_CHANNEL_COLOR) AddItem(List,Counter,"VertexChannels","W3D_VERTEX_CHANNEL_COLOR","flag");
  718. if (data->VertexChannels & W3D_VERTEX_CHANNEL_BONEID) AddItem(List,Counter,"VertexChannels","W3D_VERTEX_CHANNEL_BONEID","flag");
  719. AddItem(List, Counter,"FaceChannels", data->FaceChannels);
  720. if (data->FaceChannels & W3D_FACE_CHANNEL_FACE) AddItem(List,Counter,"FaceChannels","W3D_FACE_CHANNEL_FACE","flag");
  721. AddItem(List, Counter,"Min", &data->Min);
  722. AddItem(List, Counter,"Max", &data->Max);
  723. AddItem(List, Counter,"SphCenter", &data->SphCenter);
  724. AddItem(List, Counter,"SphRadius", data->SphRadius);
  725. }
  726. void ChunkTableClass::List_W3D_CHUNK_TRIANGLES(ChunkItem *Item, CListCtrl *List) {
  727. struct W3dTriStruct *data;
  728. data = (W3dTriStruct *) Item->Data;
  729. int Counter = 0;
  730. int index = 0;
  731. void *max = (char *) Item->Data + Item->Length;
  732. int counter = 0;
  733. char buf[256];
  734. while(data < max) {
  735. sprintf(buf, "Triangle[%d].VertexIndices", counter);
  736. AddItem(List, Counter,buf, data->Vindex, 3);
  737. sprintf(buf, "Triangle[%d].Attributes", counter);
  738. AddItem(List, Counter,buf, data->Attributes);
  739. sprintf(buf, "Triangle[%d].Normal", counter);
  740. AddItem(List, Counter,buf, &data->Normal);
  741. sprintf(buf, "Triangle[%d].Dist", counter);
  742. AddItem(List, Counter,buf, data->Dist);
  743. counter++;
  744. data++;
  745. }
  746. }
  747. void ChunkTableClass::List_W3D_CHUNK_PER_TRI_MATERIALS(ChunkItem * Item,CListCtrl *List)
  748. {
  749. unsigned short *data;
  750. data = (unsigned short *) Item->Data;
  751. int Counter = 0;
  752. int index = 0;
  753. void *max = (char *) Item->Data + Item->Length;
  754. int counter = 0;
  755. char buf[256];
  756. while(data < max) {
  757. sprintf(buf, "Triangle[%d].MaterialIdx", counter);
  758. AddItem(List, Counter,buf, *data);
  759. counter++;
  760. data++;
  761. }
  762. }
  763. void ChunkTableClass::List_W3D_CHUNK_VERTEX_SHADE_INDICES(ChunkItem * Item,CListCtrl *List)
  764. {
  765. uint32 * data = (uint32 *) Item->Data;
  766. int Counter = 0;
  767. int index = 0;
  768. void *max = (char *) Item->Data + Item->Length;
  769. int counter = 0;
  770. char buf[256];
  771. while(data < max) {
  772. sprintf(buf, "Index[%d]", counter);
  773. AddItem(List, Counter, buf, *data);
  774. counter++;
  775. data++;
  776. }
  777. }
  778. void ChunkTableClass::List_W3D_CHUNK_MATERIAL_INFO(ChunkItem * Item,CListCtrl *List)
  779. {
  780. W3dMaterialInfoStruct * matinfo = (W3dMaterialInfoStruct *)Item->Data;
  781. int counter = 0;
  782. AddItem(List, counter,"PassCount", matinfo->PassCount);
  783. AddItem(List, counter,"VertexMaterialCount", matinfo->VertexMaterialCount);
  784. AddItem(List, counter,"ShaderCount", matinfo->ShaderCount);
  785. AddItem(List, counter,"TextureCount",matinfo->TextureCount);
  786. }
  787. void ChunkTableClass::List_W3D_CHUNK_VERTEX_MATERIALS(ChunkItem *Item,CListCtrl *List)
  788. {
  789. List_Subitems(Item,List);
  790. }
  791. void ChunkTableClass::List_W3D_CHUNK_VERTEX_MATERIAL(ChunkItem *Item,CListCtrl *List)
  792. {
  793. List_Subitems(Item,List);
  794. }
  795. void ChunkTableClass::List_W3D_CHUNK_VERTEX_MATERIAL_NAME(ChunkItem * Item,CListCtrl *List)
  796. {
  797. int Counter = 0;
  798. char * data = (char *)Item->Data;
  799. AddItem(List, Counter,"Material Name:", data);
  800. }
  801. void ChunkTableClass::List_W3D_CHUNK_VERTEX_MATERIAL_INFO(ChunkItem * Item,CListCtrl *List)
  802. {
  803. struct W3dVertexMaterialStruct *data = (W3dVertexMaterialStruct *)Item->Data;
  804. int Counter = 0;
  805. if (data->Attributes & W3DVERTMAT_USE_DEPTH_CUE) AddItem (List, Counter, "Material.Attributes", "W3DVERTMAT_USE_DEPTH_CUE", "flag");
  806. if (data->Attributes & W3DVERTMAT_ARGB_EMISSIVE_ONLY) AddItem (List, Counter, "Material.Attributes", "W3DVERTMAT_ARGB_EMISSIVE_ONLY", "flag");
  807. if (data->Attributes & W3DVERTMAT_COPY_SPECULAR_TO_DIFFUSE) AddItem (List, Counter, "Material.Attributes", "W3DVERTMAT_COPY_SPECULAR_TO_DIFFUSE", "flag");
  808. if (data->Attributes & W3DVERTMAT_DEPTH_CUE_TO_ALPHA) AddItem (List, Counter, "Material.Attributes", "W3DVERTMAT_DEPTH_CUE_TO_ALPHA", "flag");
  809. if ((data->Attributes & W3DVERTMAT_STAGE0_MAPPING_MASK) == W3DVERTMAT_STAGE0_MAPPING_UV) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE0_MAPPING_UV", "flag");
  810. if ((data->Attributes & W3DVERTMAT_STAGE0_MAPPING_MASK) == W3DVERTMAT_STAGE0_MAPPING_ENVIRONMENT) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE0_MAPPING_ENVIRONMENT", "flag");
  811. if ((data->Attributes & W3DVERTMAT_STAGE0_MAPPING_MASK) == W3DVERTMAT_STAGE0_MAPPING_CHEAP_ENVIRONMENT) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE0_MAPPING_CHEAP_ENVIRONMENT", "flag");
  812. if ((data->Attributes & W3DVERTMAT_STAGE0_MAPPING_MASK) == W3DVERTMAT_STAGE0_MAPPING_SCREEN) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE0_MAPPING_SCREEN", "flag");
  813. if ((data->Attributes & W3DVERTMAT_STAGE0_MAPPING_MASK) == W3DVERTMAT_STAGE0_MAPPING_LINEAR_OFFSET) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE0_MAPPING_LINEAR_OFFSET", "flag");
  814. if ((data->Attributes & W3DVERTMAT_STAGE0_MAPPING_MASK) == W3DVERTMAT_STAGE0_MAPPING_SILHOUETTE) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE0_MAPPING_SILHOUETTE", "flag");
  815. if ((data->Attributes & W3DVERTMAT_STAGE0_MAPPING_MASK) == W3DVERTMAT_STAGE0_MAPPING_SCALE) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE0_MAPPING_SCALE", "flag");
  816. if ((data->Attributes & W3DVERTMAT_STAGE0_MAPPING_MASK) == W3DVERTMAT_STAGE0_MAPPING_GRID) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE0_MAPPING_GRID", "flag");
  817. if ((data->Attributes & W3DVERTMAT_STAGE0_MAPPING_MASK) == W3DVERTMAT_STAGE0_MAPPING_ROTATE) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE0_MAPPING_ROTATE", "flag");
  818. if ((data->Attributes & W3DVERTMAT_STAGE0_MAPPING_MASK) == W3DVERTMAT_STAGE0_MAPPING_SINE_LINEAR_OFFSET) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE0_MAPPING_SINE_LINEAR_OFFSET", "flag");
  819. if ((data->Attributes & W3DVERTMAT_STAGE0_MAPPING_MASK) == W3DVERTMAT_STAGE0_MAPPING_STEP_LINEAR_OFFSET) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE0_MAPPING_STEP_LINEAR_OFFSET", "flag");
  820. if ((data->Attributes & W3DVERTMAT_STAGE0_MAPPING_MASK) == W3DVERTMAT_STAGE0_MAPPING_ZIGZAG_LINEAR_OFFSET) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE0_MAPPING_ZIGZAG_LINEAR_OFFSET", "flag");
  821. if ((data->Attributes & W3DVERTMAT_STAGE0_MAPPING_MASK) == W3DVERTMAT_STAGE0_MAPPING_WS_CLASSIC_ENV) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE0_MAPPING_WS_CLASSIC_ENV", "flag");
  822. if ((data->Attributes & W3DVERTMAT_STAGE0_MAPPING_MASK) == W3DVERTMAT_STAGE0_MAPPING_WS_ENVIRONMENT) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE0_MAPPING_WS_ENVIRONMENT", "flag");
  823. if ((data->Attributes & W3DVERTMAT_STAGE0_MAPPING_MASK) == W3DVERTMAT_STAGE0_MAPPING_GRID_CLASSIC_ENV) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE0_MAPPING_GRID_CLASSIC_ENV", "flag");
  824. if ((data->Attributes & W3DVERTMAT_STAGE0_MAPPING_MASK) == W3DVERTMAT_STAGE0_MAPPING_GRID_ENVIRONMENT) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE0_MAPPING_GRID_ENVIRONMENT", "flag");
  825. if ((data->Attributes & W3DVERTMAT_STAGE0_MAPPING_MASK) == W3DVERTMAT_STAGE0_MAPPING_RANDOM) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE0_MAPPING_RANDOM", "flag");
  826. if ((data->Attributes & W3DVERTMAT_STAGE0_MAPPING_MASK) == W3DVERTMAT_STAGE0_MAPPING_BUMPENV) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE0_MAPPING_BUMPENV", "flag");
  827. if ((data->Attributes & W3DVERTMAT_STAGE1_MAPPING_MASK) == W3DVERTMAT_STAGE1_MAPPING_UV) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE1_MAPPING_UV", "flag");
  828. if ((data->Attributes & W3DVERTMAT_STAGE1_MAPPING_MASK) == W3DVERTMAT_STAGE1_MAPPING_ENVIRONMENT) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE1_MAPPING_ENVIRONMENT", "flag");
  829. if ((data->Attributes & W3DVERTMAT_STAGE1_MAPPING_MASK) == W3DVERTMAT_STAGE1_MAPPING_CHEAP_ENVIRONMENT) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE1_MAPPING_CHEAP_ENVIRONMENT", "flag");
  830. if ((data->Attributes & W3DVERTMAT_STAGE1_MAPPING_MASK) == W3DVERTMAT_STAGE1_MAPPING_SCREEN) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE1_MAPPING_SCREEN", "flag");
  831. if ((data->Attributes & W3DVERTMAT_STAGE1_MAPPING_MASK) == W3DVERTMAT_STAGE1_MAPPING_LINEAR_OFFSET) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE1_MAPPING_LINEAR_OFFSET", "flag");
  832. if ((data->Attributes & W3DVERTMAT_STAGE1_MAPPING_MASK) == W3DVERTMAT_STAGE1_MAPPING_SILHOUETTE) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE1_MAPPING_SILHOUETTE", "flag");
  833. if ((data->Attributes & W3DVERTMAT_STAGE1_MAPPING_MASK) == W3DVERTMAT_STAGE1_MAPPING_SCALE) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE1_MAPPING_SCALE", "flag");
  834. if ((data->Attributes & W3DVERTMAT_STAGE1_MAPPING_MASK) == W3DVERTMAT_STAGE1_MAPPING_GRID) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE1_MAPPING_GRID", "flag");
  835. if ((data->Attributes & W3DVERTMAT_STAGE1_MAPPING_MASK) == W3DVERTMAT_STAGE1_MAPPING_ROTATE) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE1_MAPPING_ROTATE", "flag");
  836. if ((data->Attributes & W3DVERTMAT_STAGE1_MAPPING_MASK) == W3DVERTMAT_STAGE1_MAPPING_SINE_LINEAR_OFFSET) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE1_MAPPING_SINE_LINEAR_OFFSET", "flag");
  837. if ((data->Attributes & W3DVERTMAT_STAGE1_MAPPING_MASK) == W3DVERTMAT_STAGE1_MAPPING_STEP_LINEAR_OFFSET) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE1_MAPPING_STEP_LINEAR_OFFSET", "flag");
  838. if ((data->Attributes & W3DVERTMAT_STAGE1_MAPPING_MASK) == W3DVERTMAT_STAGE1_MAPPING_ZIGZAG_LINEAR_OFFSET) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE1_MAPPING_ZIGZAG_LINEAR_OFFSET", "flag");
  839. if ((data->Attributes & W3DVERTMAT_STAGE1_MAPPING_MASK) == W3DVERTMAT_STAGE1_MAPPING_WS_CLASSIC_ENV) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE1_MAPPING_WS_CLASSIC_ENV", "flag");
  840. if ((data->Attributes & W3DVERTMAT_STAGE1_MAPPING_MASK) == W3DVERTMAT_STAGE1_MAPPING_WS_ENVIRONMENT) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE1_MAPPING_WS_ENVIRONMENT", "flag");
  841. if ((data->Attributes & W3DVERTMAT_STAGE1_MAPPING_MASK) == W3DVERTMAT_STAGE1_MAPPING_GRID_CLASSIC_ENV) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE1_MAPPING_GRID_CLASSIC_ENV", "flag");
  842. if ((data->Attributes & W3DVERTMAT_STAGE1_MAPPING_MASK) == W3DVERTMAT_STAGE1_MAPPING_GRID_ENVIRONMENT) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE1_MAPPING_GRID_ENVIRONMENT", "flag");
  843. if ((data->Attributes & W3DVERTMAT_STAGE1_MAPPING_MASK) == W3DVERTMAT_STAGE1_MAPPING_RANDOM) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE1_MAPPING_RANDOM", "flag");
  844. if ((data->Attributes & W3DVERTMAT_STAGE1_MAPPING_MASK) == W3DVERTMAT_STAGE1_MAPPING_BUMPENV) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_STAGE1_MAPPING_BUMPENV", "flag");
  845. if (data->Attributes & W3DVERTMAT_PSX_MASK) {
  846. if (data->Attributes & W3DVERTMAT_PSX_NO_RT_LIGHTING) {
  847. AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_PSX_NO_RT_LIGHTING", "flag");
  848. }
  849. else {
  850. if ((data->Attributes & W3DVERTMAT_PSX_TRANS_MASK) == W3DVERTMAT_PSX_TRANS_NONE) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_PSX_TRANS_NONE", "flag");
  851. if ((data->Attributes & W3DVERTMAT_PSX_TRANS_MASK) == W3DVERTMAT_PSX_TRANS_100) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_PSX_TRANS_100", "flag");
  852. if ((data->Attributes & W3DVERTMAT_PSX_TRANS_MASK) == W3DVERTMAT_PSX_TRANS_50) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_PSX_TRANS_50", "flag");
  853. if ((data->Attributes & W3DVERTMAT_PSX_TRANS_MASK) == W3DVERTMAT_PSX_TRANS_25) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_PSX_TRANS_25", "flag");
  854. if ((data->Attributes & W3DVERTMAT_PSX_TRANS_MASK) == W3DVERTMAT_PSX_TRANS_MINUS_100) AddItem(List, Counter, "Material.Attributes", "W3DVERTMAT_PSX_TRANS_MINUS_100", "flag");
  855. }
  856. }
  857. AddItem(List, Counter, "Material.Attributes", data->Attributes);
  858. AddItem(List, Counter, "Material.Ambient", &(data->Ambient));
  859. AddItem(List, Counter, "Material.Diffuse", &(data->Diffuse));
  860. AddItem(List, Counter, "Material.Specular", &(data->Specular));
  861. AddItem(List, Counter, "Material.Emissive", &(data->Emissive));
  862. AddItem(List, Counter, "Material.Shininess", data->Shininess);
  863. AddItem(List, Counter, "Material.Opacity", data->Opacity);
  864. AddItem(List, Counter, "Material.Translucency", data->Translucency);
  865. }
  866. void ChunkTableClass::List_W3D_CHUNK_VERTEX_MAPPER_ARGS0(ChunkItem *Item, CListCtrl *List)
  867. {
  868. int Counter = 0;
  869. char * data = (char *)Item->Data;
  870. AddItem(List, Counter, "Stage0 Mapper Args:", data);
  871. }
  872. void ChunkTableClass::List_W3D_CHUNK_VERTEX_MAPPER_ARGS1(ChunkItem *Item, CListCtrl *List)
  873. {
  874. int Counter = 0;
  875. char * data = (char *)Item->Data;
  876. AddItem(List, Counter, "Stage1 Mapper Args:", data);
  877. }
  878. void ChunkTableClass::List_W3D_CHUNK_SHADERS(ChunkItem * Item,CListCtrl *List)
  879. {
  880. struct W3dShaderStruct *shader = (W3dShaderStruct *)Item->Data;
  881. void *max = (char *)Item->Data + Item->Length;
  882. int counter = 0;
  883. char label[256];
  884. while(shader < max) {
  885. sprintf(label,"shader[%d]",counter);
  886. int counter2 = 0;
  887. AddItem(List,counter2,label,shader);
  888. counter++;
  889. shader++;
  890. }
  891. }
  892. void ChunkTableClass::List_W3D_CHUNK_PS2_SHADERS(ChunkItem * Item,CListCtrl *List)
  893. {
  894. struct W3dPS2ShaderStruct *shader = (W3dPS2ShaderStruct *)Item->Data;
  895. void *max = (char *)Item->Data + Item->Length;
  896. int counter = 0;
  897. char label[256];
  898. while(shader < max) {
  899. sprintf(label,"shader[%d]",counter);
  900. int counter2 = 0;
  901. AddItem(List,counter2,label,shader);
  902. counter++;
  903. shader++;
  904. }
  905. }
  906. void ChunkTableClass::List_W3D_CHUNK_TEXTURES(ChunkItem * Item,CListCtrl *List)
  907. {
  908. List_Subitems(Item,List);
  909. }
  910. void ChunkTableClass::List_W3D_CHUNK_TEXTURE(ChunkItem * Item,CListCtrl *List)
  911. {
  912. List_Subitems(Item,List);
  913. }
  914. void ChunkTableClass::List_W3D_CHUNK_TEXTURE_NAME(ChunkItem * Item,CListCtrl *List)
  915. {
  916. int Counter = 0;
  917. char * data = (char *)Item->Data;
  918. AddItem(List, Counter,"Texture Name:", data);
  919. }
  920. void ChunkTableClass::List_W3D_CHUNK_TEXTURE_INFO(ChunkItem * Item,CListCtrl *List)
  921. {
  922. struct W3dTextureInfoStruct *data = (W3dTextureInfoStruct *)Item->Data;
  923. int Counter = 0;
  924. AddItem(List, Counter, "Texture.Attributes", data->Attributes);
  925. if (data->Attributes & W3DTEXTURE_PUBLISH) AddItem(List, Counter,"Attributes", "W3DTEXTURE_PUBLISH","flag");
  926. if (data->Attributes & W3DTEXTURE_NO_LOD) AddItem(List, Counter,"Attributes", "W3DTEXTURE_NO_LOD","flag");
  927. if (data->Attributes & W3DTEXTURE_CLAMP_U) AddItem(List, Counter,"Attributes", "W3DTEXTURE_CLAMP_U","flag");
  928. if (data->Attributes & W3DTEXTURE_CLAMP_V) AddItem(List, Counter,"Attributes", "W3DTEXTURE_CLAMP_V","flag");
  929. if (data->Attributes & W3DTEXTURE_ALPHA_BITMAP) AddItem(List, Counter,"Attributes", "W3DTEXTURE_ALPHA_BITMAP","flag");
  930. AddItem(List, Counter, "Texture.FrameCount", data->FrameCount);
  931. AddItem(List, Counter, "Texture.FrameRate", data->FrameRate);
  932. }
  933. void ChunkTableClass::List_W3D_CHUNK_MATERIAL_PASS(ChunkItem * Item,CListCtrl *List)
  934. {
  935. List_Subitems(Item,List);
  936. }
  937. void ChunkTableClass::List_W3D_CHUNK_VERTEX_MATERIAL_IDS(ChunkItem * Item,CListCtrl *List)
  938. {
  939. int Counter = 0;
  940. int counter = 0;
  941. uint32 *data = (uint32 *)Item->Data;
  942. void *max = (char *) Item->Data + Item->Length;
  943. char buf[256];
  944. while(data < max) {
  945. sprintf(buf, "Vertex[%d] Vertex Material Index", counter);
  946. AddItem(List, Counter,buf, *data);
  947. counter++;
  948. data++;
  949. }
  950. }
  951. void ChunkTableClass::List_W3D_CHUNK_SHADER_IDS(ChunkItem * Item,CListCtrl *List)
  952. {
  953. int Counter = 0;
  954. int counter = 0;
  955. uint32 *data = (uint32 *)Item->Data;
  956. void *max = (char *) Item->Data + Item->Length;
  957. char buf[256];
  958. while(data < max) {
  959. sprintf(buf, "Face[%d] Shader Index", counter);
  960. AddItem(List, Counter, buf, *data);
  961. counter++;
  962. data++;
  963. }
  964. }
  965. void ChunkTableClass::List_W3D_CHUNK_DCG(ChunkItem * Item,CListCtrl *List)
  966. {
  967. W3dRGBAStruct *data = (W3dRGBAStruct *) Item->Data;
  968. int Counter = 0;
  969. int index = 0;
  970. void *max = (char *) Item->Data + Item->Length;
  971. int counter = 0;
  972. char buf[256];
  973. while(data < max) {
  974. sprintf(buf, "Vertex[%d].DCG", counter);
  975. AddItem(List, Counter,buf, data);
  976. counter++;
  977. data++;
  978. }
  979. }
  980. void ChunkTableClass::List_W3D_CHUNK_DIG(ChunkItem * Item,CListCtrl *List)
  981. {
  982. W3dRGBStruct *data = (W3dRGBStruct *)Item->Data;
  983. int Counter = 0;
  984. int index = 0;
  985. void *max = (char *) Item->Data + Item->Length;
  986. int counter = 0;
  987. char buf[256];
  988. while(data < max) {
  989. sprintf(buf, "Vertex[%d].DIG", counter);
  990. AddItem(List, Counter,buf, data);
  991. counter++;
  992. data++;
  993. }
  994. }
  995. void ChunkTableClass::List_W3D_CHUNK_SCG(ChunkItem * Item,CListCtrl *List)
  996. {
  997. W3dRGBStruct *data = (W3dRGBStruct *)Item->Data;
  998. int Counter = 0;
  999. int index = 0;
  1000. void *max = (char *) Item->Data + Item->Length;
  1001. int counter = 0;
  1002. char buf[256];
  1003. while(data < max) {
  1004. sprintf(buf, "Vertex[%d].SCG", counter);
  1005. AddItem(List, Counter,buf, data);
  1006. counter++;
  1007. data++;
  1008. }
  1009. }
  1010. void ChunkTableClass::List_W3D_CHUNK_TEXTURE_STAGE(ChunkItem * Item,CListCtrl *List)
  1011. {
  1012. List_Subitems(Item,List);
  1013. }
  1014. void ChunkTableClass::List_W3D_CHUNK_TEXTURE_IDS(ChunkItem * Item,CListCtrl *List)
  1015. {
  1016. int Counter = 0;
  1017. int counter = 0;
  1018. uint32 *data = (uint32 *)Item->Data;
  1019. void *max = (char *) Item->Data + Item->Length;
  1020. char buf[256];
  1021. while(data < max) {
  1022. sprintf(buf, "Face[%d] Texture Index", counter);
  1023. AddItem(List, Counter, buf, *data);
  1024. counter++;
  1025. data++;
  1026. }
  1027. }
  1028. void ChunkTableClass::List_W3D_CHUNK_STAGE_TEXCOORDS(ChunkItem * Item,CListCtrl *List)
  1029. {
  1030. W3dTexCoordStruct *data = (W3dTexCoordStruct *)Item->Data;
  1031. int Counter = 0;
  1032. int index = 0;
  1033. void *max = (char *) Item->Data + Item->Length;
  1034. int counter = 0;
  1035. char buf[256];
  1036. while(data < max) {
  1037. sprintf(buf, "Vertex[%d].UV", counter);
  1038. AddItem(List, Counter, buf, data);
  1039. counter++;
  1040. data++;
  1041. }
  1042. }
  1043. void ChunkTableClass::List_W3D_CHUNK_PER_FACE_TEXCOORD_IDS(ChunkItem * Item,CListCtrl *List)
  1044. {
  1045. int Counter = 0;
  1046. int counter = 0;
  1047. Vector3i *data = (Vector3i *)Item->Data;
  1048. void *max = (char *) Item->Data + Item->Length;
  1049. char buf[256];
  1050. while(data < max) {
  1051. sprintf(buf, "Face[%d] UV Indices", counter);
  1052. AddItem(List, Counter, buf, data);
  1053. counter++;
  1054. data++;
  1055. }
  1056. }
  1057. void ChunkTableClass::List_W3D_CHUNK_AABTREE(ChunkItem * Item,CListCtrl *List)
  1058. {
  1059. List_Subitems(Item, List);
  1060. }
  1061. void ChunkTableClass::List_W3D_CHUNK_AABTREE_HEADER(ChunkItem * Item,CListCtrl *List)
  1062. {
  1063. W3dMeshAABTreeHeader * data = (W3dMeshAABTreeHeader*)Item->Data;
  1064. int Counter = 0;
  1065. AddItem(List, Counter, "NodeCount", data->NodeCount);
  1066. AddItem(List, Counter, "PolyCount", data->PolyCount);
  1067. }
  1068. void ChunkTableClass::List_W3D_CHUNK_AABTREE_POLYINDICES(ChunkItem * Item,CListCtrl *List)
  1069. {
  1070. int Counter = 0;
  1071. int counter = 0;
  1072. uint32 *data = (uint32 *)Item->Data;
  1073. void *max = (char *) Item->Data + Item->Length;
  1074. char buf[256];
  1075. while(data < max) {
  1076. sprintf(buf, "Polygon Index[%d]", counter);
  1077. AddItem(List, Counter, buf, *data);
  1078. counter++;
  1079. data++;
  1080. }
  1081. }
  1082. void ChunkTableClass::List_W3D_CHUNK_AABTREE_NODES(ChunkItem * Item,CListCtrl *List)
  1083. {
  1084. W3dMeshAABTreeNode * data = (W3dMeshAABTreeNode *)Item->Data;
  1085. int Counter = 0;
  1086. int index = 0;
  1087. void *max = (char *)Item->Data + Item->Length;
  1088. int counter = 0;
  1089. char buf[256];
  1090. while(data < max) {
  1091. sprintf(buf, "Node[%d].Min", counter);
  1092. AddItem(List, Counter,buf, &data->Min);
  1093. sprintf(buf, "Node[%d].Max", counter);
  1094. AddItem(List, Counter,buf, &data->Max);
  1095. if (data->FrontOrPoly0 & 0x80000000) {
  1096. sprintf(buf, "Node[%d].Poly0",counter);
  1097. AddItem(List, Counter, buf, data->FrontOrPoly0 & 0x7FFFFFFF);
  1098. sprintf(buf, "Node[%d].PolyCount",counter);
  1099. AddItem(List, Counter, buf, data->BackOrPolyCount);
  1100. } else {
  1101. sprintf(buf, "Node[%d].Front",counter);
  1102. AddItem(List, Counter, buf, data->FrontOrPoly0);
  1103. sprintf(buf, "Node[%d].Back",counter);
  1104. AddItem(List, Counter, buf, data->BackOrPolyCount);
  1105. }
  1106. counter++;
  1107. data++;
  1108. }
  1109. }
  1110. void ChunkTableClass::List_W3D_CHUNK_HIERARCHY(ChunkItem *Item, CListCtrl *List) {
  1111. List_Subitems(Item, List);
  1112. }
  1113. void ChunkTableClass::List_W3D_CHUNK_HIERARCHY_HEADER(ChunkItem *Item, CListCtrl *List) {
  1114. struct W3dHierarchyStruct *data;
  1115. data = (W3dHierarchyStruct *) Item->Data;
  1116. int Counter = 0;
  1117. char buf[64];
  1118. sprintf(buf,"%d.%d",W3D_GET_MAJOR_VERSION(data->Version),W3D_GET_MINOR_VERSION(data->Version));
  1119. AddItem(List, Counter,"Version", buf);
  1120. AddItem(List, Counter, "Name", data->Name);
  1121. AddItem(List, Counter, "NumPivots", data->NumPivots);
  1122. AddItem(List, Counter, "Center", &data->Center);
  1123. }
  1124. void ChunkTableClass::List_W3D_CHUNK_PIVOTS(ChunkItem *Item, CListCtrl *List) {
  1125. struct W3dPivotStruct *data;
  1126. data = (W3dPivotStruct *) Item->Data;
  1127. int Counter = 0;
  1128. int index = 0;
  1129. void *max = (char *) Item->Data + Item->Length;
  1130. int counter = 0;
  1131. char buf[256];
  1132. while(data < max) {
  1133. sprintf(buf, "Pivot[%d].Name", counter);
  1134. AddItem(List, Counter,buf, data->Name);
  1135. sprintf(buf, "Pivot[%d].ParentIdx", counter);
  1136. AddItem(List, Counter,buf, data->ParentIdx);
  1137. sprintf(buf, "Pivot[%d].Translation", counter);
  1138. AddItem(List, Counter,buf, &data->Translation);
  1139. sprintf(buf, "Pivot[%d].EulerAngles", counter);
  1140. AddItem(List, Counter,buf, &data->EulerAngles);
  1141. sprintf(buf, "Pivot[%d].Rotation", counter);
  1142. AddItem(List, Counter,buf, &data->Rotation);
  1143. counter++;
  1144. data++;
  1145. }
  1146. }
  1147. void ChunkTableClass::List_W3D_CHUNK_PIVOT_FIXUPS(ChunkItem *Item, CListCtrl *List) {
  1148. W3dPivotFixupStruct *data = (W3dPivotFixupStruct *) Item->Data;
  1149. int Counter = 0;
  1150. int pivot_counter = 0;
  1151. while ((char*)data < (char*)Item->Data + Item->Length) {
  1152. char tmp[256];
  1153. for (int i=0;i<4;i++) {
  1154. sprintf(tmp,"Transform %d, Row[%d]", pivot_counter,i);
  1155. AddItem(List, Counter, tmp, data->TM[i], 3);
  1156. }
  1157. data++;
  1158. pivot_counter++;
  1159. }
  1160. }
  1161. void ChunkTableClass::List_W3D_CHUNK_ANIMATION(ChunkItem *Item, CListCtrl *List) {
  1162. List_Subitems(Item, List);
  1163. }
  1164. void ChunkTableClass::List_W3D_CHUNK_ANIMATION_HEADER(ChunkItem *Item, CListCtrl *List) {
  1165. W3dAnimHeaderStruct *data = (W3dAnimHeaderStruct *) Item->Data;
  1166. int Counter = 0;
  1167. char buf[64];
  1168. sprintf(buf,"%d.%d",W3D_GET_MAJOR_VERSION(data->Version),W3D_GET_MINOR_VERSION(data->Version));
  1169. AddItem(List, Counter,"Version", buf);
  1170. AddItem(List, Counter, "Name", data->Name);
  1171. AddItem(List, Counter, "HierarchyName", data->HierarchyName);
  1172. AddItem(List, Counter, "NumFrames", data->NumFrames);
  1173. AddItem(List, Counter, "FrameRate", data->FrameRate);
  1174. }
  1175. void ChunkTableClass::List_W3D_CHUNK_ANIMATION_CHANNEL(ChunkItem *Item, CListCtrl *List)
  1176. {
  1177. static char * _chntypes[] = {
  1178. "X Translation",
  1179. "Y Translation",
  1180. "Z Translation",
  1181. "X Rotation",
  1182. "Y Rotation",
  1183. "Z Rotation",
  1184. "Quaternion"
  1185. };
  1186. W3dAnimChannelStruct *data = (W3dAnimChannelStruct *) Item->Data;
  1187. int Counter = 0;
  1188. AddItem(List, Counter, "FirstFrame", data->FirstFrame);
  1189. AddItem(List, Counter, "LastFrame", data->LastFrame);
  1190. if ((data->Flags >= ANIM_CHANNEL_X)&&(data->Flags <= ANIM_CHANNEL_Q)) {
  1191. AddItem(List, Counter, "ChannelType",_chntypes[data->Flags]);
  1192. } else {
  1193. AddItem(List, Counter, "ChannelType",data->Flags);
  1194. }
  1195. AddItem(List, Counter, "Pivot", data->Pivot);
  1196. AddItem(List, Counter, "VectorLen", data->VectorLen);
  1197. CString name;
  1198. for (int frameidx=0; frameidx <= data->LastFrame - data->FirstFrame; frameidx++) {
  1199. for (int vidx = 0; vidx < data->VectorLen; vidx++) {
  1200. name.Format("Data[%d][%d]", frameidx, vidx);
  1201. AddItem(List, Counter, name, data->Data[frameidx * data->VectorLen + vidx]);
  1202. }
  1203. }
  1204. }
  1205. void ChunkTableClass::List_W3D_CHUNK_BIT_CHANNEL(ChunkItem *Item, CListCtrl *List)
  1206. {
  1207. static char * _chntypes[] =
  1208. {
  1209. "Visibility",
  1210. };
  1211. W3dBitChannelStruct *data = (W3dBitChannelStruct *) Item->Data;
  1212. int Counter = 0;
  1213. unsigned char * bits = &(data->Data[0]);
  1214. AddItem(List, Counter, "FirstFrame", data->FirstFrame);
  1215. AddItem(List, Counter, "LastFrame", data->LastFrame);
  1216. if ((data->Flags >= BIT_CHANNEL_VIS)&&(data->Flags <= BIT_CHANNEL_VIS)) {
  1217. AddItem(List, Counter, "ChannelType",_chntypes[data->Flags]);
  1218. } else {
  1219. AddItem(List, Counter, "ChannelType",data->Flags);
  1220. }
  1221. AddItem(List, Counter, "Pivot", data->Pivot);
  1222. AddItem(List, Counter, "Default Value", data->DefaultVal);
  1223. CString name;
  1224. for (int frameidx=0; frameidx <= data->LastFrame - data->FirstFrame; frameidx++) {
  1225. name.Format("Data[%d]",frameidx + data->FirstFrame);
  1226. AddItem(List, Counter, name, (uint8)Get_Bit(bits,frameidx));
  1227. }
  1228. }
  1229. void ChunkTableClass::List_W3D_CHUNK_HMODEL(ChunkItem *Item, CListCtrl *List) {
  1230. List_Subitems(Item, List);
  1231. }
  1232. void ChunkTableClass::List_W3D_CHUNK_HMODEL_HEADER(ChunkItem *Item, CListCtrl *List) {
  1233. W3dHModelHeaderStruct *data = (W3dHModelHeaderStruct *) Item->Data;
  1234. int Counter = 0;
  1235. char buf[64];
  1236. sprintf(buf,"%d.%d",W3D_GET_MAJOR_VERSION(data->Version),W3D_GET_MINOR_VERSION(data->Version));
  1237. AddItem(List, Counter,"Version", buf);
  1238. AddItem(List, Counter, "Name", data->Name);
  1239. AddItem(List, Counter, "HierarchyName", data->HierarchyName);
  1240. AddItem(List, Counter, "NumConnections", data->NumConnections);
  1241. }
  1242. void ChunkTableClass::List_W3D_CHUNK_NODE(ChunkItem *Item, CListCtrl *List) {
  1243. W3dHModelNodeStruct *data = (W3dHModelNodeStruct *) Item->Data;
  1244. int Counter = 0;
  1245. AddItem(List, Counter, "RenderObjName", data->RenderObjName);
  1246. AddItem(List, Counter, "PivotIdx", data->PivotIdx);
  1247. }
  1248. void ChunkTableClass::List_W3D_CHUNK_COLLISION_NODE(ChunkItem *Item, CListCtrl *List) {
  1249. W3dHModelNodeStruct *data = (W3dHModelNodeStruct *) Item->Data;
  1250. int Counter = 0;
  1251. AddItem(List, Counter, "CollisionMeshName", data->RenderObjName);
  1252. AddItem(List, Counter, "PivotIdx", data->PivotIdx);
  1253. }
  1254. void ChunkTableClass::List_W3D_CHUNK_SKIN_NODE(ChunkItem *Item, CListCtrl *List) {
  1255. W3dHModelNodeStruct *data = (W3dHModelNodeStruct *) Item->Data;
  1256. int Counter = 0;
  1257. AddItem(List, Counter, "SkinMeshName", data->RenderObjName);
  1258. AddItem(List, Counter, "PivotIdx", data->PivotIdx);
  1259. }
  1260. void ChunkTableClass::List_W3D_CHUNK_HMODEL_AUX_DATA(ChunkItem *Item, CListCtrl *List) {
  1261. W3dHModelAuxDataStruct *data = (W3dHModelAuxDataStruct *) Item->Data;
  1262. int Counter = 0;
  1263. AddItem(List, Counter, "Attributes", data->Attributes);
  1264. AddItem(List, Counter, "MeshCount", data->MeshCount);
  1265. AddItem(List, Counter, "CollisionCount", data->CollisionCount);
  1266. AddItem(List, Counter, "SkinCount", data->SkinCount);
  1267. AddItem(List, Counter, "FutureCounts", data->FutureCounts, 8);
  1268. AddItem(List, Counter, "LODMin", data->LODMin);
  1269. AddItem(List, Counter, "LODMax", data->LODMax);
  1270. AddItem(List, Counter, "FutureUse", data->FutureUse, 32);
  1271. }
  1272. void ChunkTableClass::List_W3D_CHUNK_SHADOW_NODE(ChunkItem *Item, CListCtrl *List) {
  1273. W3dHModelNodeStruct *data = (W3dHModelNodeStruct *) Item->Data;
  1274. int Counter = 0;
  1275. AddItem(List, Counter, "ShadowMeshName", data->RenderObjName);
  1276. AddItem(List, Counter, "PivotIdx", data->PivotIdx);
  1277. }
  1278. void ChunkTableClass::List_W3D_CHUNK_LODMODEL(ChunkItem *Item, CListCtrl *List)
  1279. {
  1280. List_Subitems(Item, List);
  1281. }
  1282. void ChunkTableClass::List_W3D_CHUNK_LODMODEL_HEADER(ChunkItem *Item, CListCtrl *List)
  1283. {
  1284. W3dLODModelHeaderStruct *data = (W3dLODModelHeaderStruct *) Item->Data;
  1285. int Counter = 0;
  1286. char buf[64];
  1287. sprintf(buf,"%d.%d",W3D_GET_MAJOR_VERSION(data->Version),W3D_GET_MINOR_VERSION(data->Version));
  1288. AddItem(List, Counter,"Version", buf);
  1289. AddItem(List, Counter, "Name", data->Name);
  1290. AddItem(List, Counter, "NumLODs", data->NumLODs);
  1291. }
  1292. void ChunkTableClass::List_W3D_CHUNK_LOD(ChunkItem * Item,CListCtrl * List)
  1293. {
  1294. W3dLODStruct *data = (W3dLODStruct *) Item->Data;
  1295. int Counter = 0;
  1296. AddItem(List, Counter, "Render Object Name", data->RenderObjName);
  1297. AddItem(List, Counter, "LOD Min Distance", data->LODMin);
  1298. AddItem(List, Counter, "LOD Max Distance", data->LODMax);
  1299. }
  1300. void ChunkTableClass::List_W3D_CHUNK_COLLECTION(ChunkItem * Item,CListCtrl * List)
  1301. {
  1302. List_Subitems(Item, List);
  1303. }
  1304. void ChunkTableClass::List_W3D_CHUNK_COLLECTION_HEADER(ChunkItem * Item,CListCtrl * List)
  1305. {
  1306. W3dCollectionHeaderStruct *data = (W3dCollectionHeaderStruct *) Item->Data;
  1307. int Counter = 0;
  1308. char buf[64];
  1309. sprintf(buf,"%d.%d",W3D_GET_MAJOR_VERSION(data->Version),W3D_GET_MINOR_VERSION(data->Version));
  1310. AddItem(List, Counter,"Version", buf);
  1311. AddItem(List, Counter, "Name", data->Name);
  1312. AddItem(List, Counter, "RenderObjectCount", data->RenderObjectCount);
  1313. }
  1314. void ChunkTableClass::List_W3D_CHUNK_COLLECTION_OBJ_NAME(ChunkItem * Item,CListCtrl * List)
  1315. {
  1316. char * name = (char *)Item->Data;
  1317. int Counter = 0;
  1318. AddItem(List,Counter,"Render Object Name",name);
  1319. }
  1320. void ChunkTableClass::List_W3D_CHUNK_PLACEHOLDER(ChunkItem * Item,CListCtrl * List)
  1321. {
  1322. W3dPlaceholderStruct * data = (W3dPlaceholderStruct *)(Item->Data);
  1323. int Counter = 0;
  1324. AddItemVersion(List,Counter,data->version);
  1325. AddItem(List,Counter,"Transform",&(data->transform[0][0]),3);
  1326. AddItem(List,Counter,"Transform",&(data->transform[1][0]),3);
  1327. AddItem(List,Counter,"Transform",&(data->transform[2][0]),3);
  1328. AddItem(List,Counter,"Transform",&(data->transform[3][0]),3);
  1329. AddItem(List,Counter,"Name",(char *)(data + 1));
  1330. }
  1331. void ChunkTableClass::List_W3D_CHUNK_TRANSFORM_NODE(ChunkItem * Item,CListCtrl * List)
  1332. {
  1333. W3dTransformNodeStruct * data = (W3dTransformNodeStruct *)(Item->Data);
  1334. int Counter = 0;
  1335. AddItemVersion(List,Counter,data->version);
  1336. AddItem(List,Counter,"Transform",&(data->transform[0][0]),3);
  1337. AddItem(List,Counter,"Transform",&(data->transform[1][0]),3);
  1338. AddItem(List,Counter,"Transform",&(data->transform[2][0]),3);
  1339. AddItem(List,Counter,"Transform",&(data->transform[3][0]),3);
  1340. AddItem(List,Counter,"Name",(char *)(data + 1));
  1341. }
  1342. void ChunkTableClass::List_W3D_CHUNK_POINTS(ChunkItem * Item,CListCtrl * List)
  1343. {
  1344. W3dVectorStruct *data;
  1345. data = (W3dVectorStruct *) Item->Data;
  1346. int Counter = 0;
  1347. void *max = (char *) Item->Data + Item->Length;
  1348. int counter = 0;
  1349. char buf[256];
  1350. while (data < max) {
  1351. sprintf(buf, "Point[%d]", counter++);
  1352. AddItem(List, Counter,buf, data);
  1353. data++;
  1354. }
  1355. }
  1356. void ChunkTableClass::List_W3D_CHUNK_LIGHT(ChunkItem * Item,CListCtrl * List)
  1357. {
  1358. List_Subitems(Item, List);
  1359. }
  1360. void ChunkTableClass::List_W3D_CHUNK_LIGHT_INFO(ChunkItem * Item,CListCtrl * List)
  1361. {
  1362. W3dLightStruct * data = (W3dLightStruct *)Item->Data;
  1363. int counter = 0;
  1364. if ((data->Attributes & W3D_LIGHT_ATTRIBUTE_TYPE_MASK) == W3D_LIGHT_ATTRIBUTE_POINT) AddItem (List, counter, "Attributes", "W3D_LIGHT_ATTRIBUTE_POINT");
  1365. if ((data->Attributes & W3D_LIGHT_ATTRIBUTE_TYPE_MASK) == W3D_LIGHT_ATTRIBUTE_SPOT) AddItem (List, counter, "Attributes", "W3D_LIGHT_ATTRIBUTE_SPOT");
  1366. if ((data->Attributes & W3D_LIGHT_ATTRIBUTE_TYPE_MASK) == W3D_LIGHT_ATTRIBUTE_DIRECTIONAL) AddItem (List, counter, "Attributes", "W3D_LIGHT_ATTRIBUTE_DIRECTIONAL");
  1367. if (data->Attributes & W3D_LIGHT_ATTRIBUTE_CAST_SHADOWS) AddItem (List, counter, "Attributes", "W3D_LIGHT_ATTRIBUTE_CAST_SHADOWS", "flag");
  1368. AddItem(List,counter,"Ambient",&(data->Ambient),1);
  1369. AddItem(List,counter,"Diffuse",&(data->Diffuse),1);
  1370. AddItem(List,counter,"Specular",&(data->Specular),1);
  1371. AddItem(List,counter,"Intensity",data->Intensity);
  1372. }
  1373. void ChunkTableClass::List_W3D_CHUNK_SPOT_LIGHT_INFO(ChunkItem * Item,CListCtrl * List)
  1374. {
  1375. W3dSpotLightStruct * data = (W3dSpotLightStruct*)Item->Data;
  1376. int counter = 0;
  1377. AddItem(List,counter,"SpotDirection",&(data->SpotDirection));
  1378. AddItem(List,counter,"SpotAngle",data->SpotAngle);
  1379. AddItem(List,counter,"SpotExponent",data->SpotExponent);
  1380. }
  1381. void ChunkTableClass::List_W3D_CHUNK_NEAR_ATTENUATION(ChunkItem * Item,CListCtrl * List)
  1382. {
  1383. W3dLightAttenuationStruct * data = (W3dLightAttenuationStruct *)Item->Data;
  1384. int counter = 0;
  1385. AddItem(List,counter,"Near Atten Start",data->Start);
  1386. AddItem(List,counter,"Near Atten End",data->End);
  1387. }
  1388. void ChunkTableClass::List_W3D_CHUNK_FAR_ATTENUATION(ChunkItem * Item,CListCtrl * List)
  1389. {
  1390. W3dLightAttenuationStruct * data = (W3dLightAttenuationStruct *)Item->Data;
  1391. int counter = 0;
  1392. AddItem(List,counter,"Far Atten Start",data->Start);
  1393. AddItem(List,counter,"Far Atten End",data->End);
  1394. }
  1395. void ChunkTableClass::List_W3D_CHUNK_EMITTER(ChunkItem * Item,CListCtrl * List)
  1396. {
  1397. List_Subitems(Item, List);
  1398. }
  1399. void ChunkTableClass::List_W3D_CHUNK_EMITTER_HEADER(ChunkItem * Item,CListCtrl * List)
  1400. {
  1401. W3dEmitterHeaderStruct * data = (W3dEmitterHeaderStruct*)Item->Data;
  1402. int counter = 0;
  1403. AddItem(List,counter,"Version",data->Version);
  1404. AddItem(List,counter,"Name",data->Name);
  1405. }
  1406. void ChunkTableClass::List_W3D_CHUNK_EMITTER_USER_DATA(ChunkItem * Item,CListCtrl * List)
  1407. {
  1408. char * data = (char *)Item->Data;
  1409. int counter = 0;
  1410. AddItem(List,counter,"User Data",data);
  1411. }
  1412. void ChunkTableClass::List_W3D_CHUNK_EMITTER_INFO(ChunkItem * Item,CListCtrl * List)
  1413. {
  1414. W3dEmitterInfoStruct * data = (W3dEmitterInfoStruct *)Item->Data;
  1415. int counter = 0;
  1416. AddItem(List,counter,"Texture Name",data->TextureFilename);
  1417. AddItem(List,counter,"StartSize", data->StartSize);
  1418. AddItem(List,counter,"EndSize",data->EndSize);
  1419. AddItem(List,counter,"Lifetime",data->Lifetime);
  1420. AddItem(List,counter,"EmissionRate",data->EmissionRate);
  1421. AddItem(List,counter,"MaxEmissions",data->MaxEmissions);
  1422. AddItem(List,counter,"VelocityRandom",data->VelocityRandom);
  1423. AddItem(List,counter,"PositionRandom",data->PositionRandom);
  1424. AddItem(List,counter,"FadeTime",data->FadeTime);
  1425. AddItem(List,counter,"Gravity",data->Gravity);
  1426. AddItem(List,counter,"Elasticity",data->Elasticity);
  1427. AddItem(List,counter,"Velocity",&(data->Velocity));
  1428. AddItem(List,counter,"Acceleration",&(data->Acceleration));
  1429. AddItem(List,counter,"StartColor",&(data->StartColor));
  1430. AddItem(List,counter,"EndColor",&(data->EndColor));
  1431. }
  1432. void ChunkTableClass::List_W3D_CHUNK_EMITTER_INFOV2(ChunkItem * Item,CListCtrl * List)
  1433. {
  1434. W3dEmitterInfoStructV2 * data = (W3dEmitterInfoStructV2 *)(Item->Data);
  1435. int counter = 0;
  1436. AddItem(List,counter,"BurstSize",data->BurstSize);
  1437. AddItem(List,counter,"CreationVolume.ClassID",data->CreationVolume.ClassID);
  1438. AddItem(List,counter,"CreationVolume.Value1",data->CreationVolume.Value1);
  1439. AddItem(List,counter,"CreationVolume.Value2",data->CreationVolume.Value2);
  1440. AddItem(List,counter,"CreationVolume.Value3",data->CreationVolume.Value3);
  1441. AddItem(List,counter,"VelRandom.ClassID",data->VelRandom.ClassID);
  1442. AddItem(List,counter,"VelRandom.Value1",data->VelRandom.Value1);
  1443. AddItem(List,counter,"VelRandom.Value2",data->VelRandom.Value2);
  1444. AddItem(List,counter,"VelRandom.Value3",data->VelRandom.Value3);
  1445. AddItem(List,counter,"OutwardVel",data->OutwardVel);
  1446. AddItem(List,counter,"VelInherit",data->VelInherit);
  1447. AddItem(List,counter,"Shader",&(data->Shader));
  1448. AddItem(List,counter,"RenderMode",data->RenderMode);
  1449. }
  1450. void ChunkTableClass::List_W3D_CHUNK_EMITTER_PROPS(ChunkItem * Item,CListCtrl * List)
  1451. {
  1452. W3dEmitterPropertyStruct * data = (W3dEmitterPropertyStruct *)(Item->Data);
  1453. int counter = 0;
  1454. AddItem(List,counter,"ColorKeyframes",data->ColorKeyframes);
  1455. AddItem(List,counter,"OpacityKeyframes",data->OpacityKeyframes);
  1456. AddItem(List,counter,"SizeKeyframes",data->SizeKeyframes);
  1457. AddItem(List,counter,"ColorRandom",&(data->ColorRandom));
  1458. AddItem(List,counter,"OpacityRandom",data->OpacityRandom);
  1459. AddItem(List,counter,"SizeRandom",data->SizeRandom);
  1460. }
  1461. void ChunkTableClass::List_W3D_CHUNK_EMITTER_COLOR_KEYFRAME(ChunkItem * Item,CListCtrl * List)
  1462. {
  1463. W3dEmitterColorKeyframeStruct * data = (W3dEmitterColorKeyframeStruct *)(Item->Data);
  1464. int counter = 0;
  1465. AddItem(List,counter,"Time",data->Time);
  1466. AddItem(List,counter,"Color",&(data->Color));
  1467. }
  1468. void ChunkTableClass::List_W3D_CHUNK_EMITTER_OPACITY_KEYFRAME(ChunkItem * Item,CListCtrl * List)
  1469. {
  1470. W3dEmitterOpacityKeyframeStruct * data = (W3dEmitterOpacityKeyframeStruct *)(Item->Data);
  1471. int counter = 0;
  1472. AddItem(List,counter,"Time",data->Time);
  1473. AddItem(List,counter,"Opacity",data->Opacity);
  1474. }
  1475. void ChunkTableClass::List_W3D_CHUNK_EMITTER_SIZE_KEYFRAME(ChunkItem * Item,CListCtrl * List)
  1476. {
  1477. W3dEmitterSizeKeyframeStruct * data = (W3dEmitterSizeKeyframeStruct *)(Item->Data);
  1478. int counter = 0;
  1479. AddItem(List,counter,"Time",data->Time);
  1480. AddItem(List,counter,"Size",data->Size);
  1481. }
  1482. void ChunkTableClass::List_W3D_CHUNK_EMITTER_ROTATION_KEYFRAMES(ChunkItem * Item,CListCtrl * List)
  1483. {
  1484. W3dEmitterRotationHeaderStruct * header = (W3dEmitterRotationHeaderStruct*)(Item->Data);
  1485. int counter = 0;
  1486. AddItem(List,counter,"KeyframeCount",header->KeyframeCount);
  1487. AddItem(List,counter,"Random",header->Random);
  1488. W3dEmitterRotationKeyframeStruct * key = (W3dEmitterRotationKeyframeStruct *)((char*)Item->Data + sizeof(W3dEmitterRotationHeaderStruct));
  1489. char buf[256];
  1490. for (unsigned int i=0; i<header->KeyframeCount+1; i++) {
  1491. sprintf(buf,"Time[%d]",i);
  1492. AddItem(List,counter,buf,key[i].Time);
  1493. sprintf(buf,"Rotation[%d]",i);
  1494. AddItem(List,counter,buf,key[i].Rotation);
  1495. }
  1496. }
  1497. void ChunkTableClass::List_W3D_CHUNK_EMITTER_FRAME_KEYFRAMES(ChunkItem * Item,CListCtrl * List)
  1498. {
  1499. W3dEmitterFrameHeaderStruct * header = (W3dEmitterFrameHeaderStruct*)(Item->Data);
  1500. int counter = 0;
  1501. AddItem(List,counter,"KeyframeCount",header->KeyframeCount);
  1502. AddItem(List,counter,"Random",header->Random);
  1503. W3dEmitterFrameKeyframeStruct * key = (W3dEmitterFrameKeyframeStruct *)((char *)Item->Data + sizeof(W3dEmitterFrameHeaderStruct));
  1504. char buf[256];
  1505. for (unsigned int i=0; i<header->KeyframeCount+1; i++) {
  1506. sprintf(buf,"Time[%d]",i);
  1507. AddItem(List,counter,buf,key[i].Time);
  1508. sprintf(buf,"Frame[%d]",i);
  1509. AddItem(List,counter,buf,key[i].Frame);
  1510. }
  1511. }
  1512. void ChunkTableClass::List_W3D_CHUNK_EMITTER_BLUR_TIME_KEYFRAMES(ChunkItem * Item,CListCtrl * List)
  1513. {
  1514. W3dEmitterBlurTimeHeaderStruct * header = (W3dEmitterBlurTimeHeaderStruct*)(Item->Data);
  1515. int counter = 0;
  1516. AddItem(List,counter,"KeyframeCount",header->KeyframeCount);
  1517. AddItem(List,counter,"Random",header->Random);
  1518. W3dEmitterBlurTimeKeyframeStruct * key = (W3dEmitterBlurTimeKeyframeStruct *)((char *)Item->Data + sizeof(W3dEmitterBlurTimeHeaderStruct));
  1519. char buf[256];
  1520. for (unsigned int i=0; i<header->KeyframeCount+1; i++) {
  1521. sprintf(buf,"Time[%d]",i);
  1522. AddItem(List,counter,buf,key[i].Time);
  1523. sprintf(buf,"BlurTime[%d]",i);
  1524. AddItem(List,counter,buf,key[i].BlurTime);
  1525. }
  1526. }
  1527. void ChunkTableClass::List_W3D_CHUNK_AGGREGATE(ChunkItem * Item,CListCtrl * List)
  1528. {
  1529. List_Subitems(Item, List);
  1530. }
  1531. void ChunkTableClass::List_W3D_CHUNK_AGGREGATE_HEADER(ChunkItem * Item,CListCtrl * List)
  1532. {
  1533. W3dAggregateHeaderStruct * data = (W3dAggregateHeaderStruct*)Item->Data;
  1534. int counter = 0;
  1535. AddItem(List,counter,"Version",data->Version);
  1536. AddItem(List,counter,"Name",data->Name);
  1537. }
  1538. void ChunkTableClass::List_W3D_CHUNK_AGGREGATE_INFO(ChunkItem * Item,CListCtrl * List)
  1539. {
  1540. W3dAggregateInfoStruct * info = (W3dAggregateInfoStruct *)Item->Data;
  1541. int counter = 0;
  1542. AddItem(List,counter,"BaseModelName",info->BaseModelName);
  1543. AddItem(List,counter,"SubobjectCount",info->SubobjectCount);
  1544. char label[256];
  1545. W3dAggregateSubobjectStruct * defs = (W3dAggregateSubobjectStruct *)((char*)Item->Data + sizeof(W3dAggregateInfoStruct));
  1546. for (unsigned int subobj=0; subobj<info->SubobjectCount; subobj++) {
  1547. counter = 0;
  1548. sprintf(label,"SubObject[%d].SubobjectName",subobj);
  1549. AddItem(List,counter,label,defs[subobj].SubobjectName);
  1550. sprintf(label,"SubObject[%d].BoneName",subobj);
  1551. AddItem(List,counter,label,defs[subobj].BoneName);
  1552. }
  1553. }
  1554. void ChunkTableClass::List_W3D_CHUNK_TEXTURE_REPLACER_INFO(ChunkItem * Item,CListCtrl * List)
  1555. {
  1556. W3dTextureReplacerHeaderStruct * header = (W3dTextureReplacerHeaderStruct *)(Item->Data);
  1557. int counter = 0;
  1558. AddItem(List,counter,"ReplacedTexturesCount",header->ReplacedTexturesCount);
  1559. W3dTextureReplacerStruct * data = (W3dTextureReplacerStruct *)(header + 1);
  1560. for (uint32 replaceidx=0; replaceidx<header->ReplacedTexturesCount; replaceidx++) {
  1561. int pathidx = 0;
  1562. char label[256];
  1563. for (pathidx=0; pathidx<MESH_PATH_ENTRIES; pathidx++){
  1564. sprintf(label,"Replacer[%d].MeshPath[%d]",replaceidx,pathidx);
  1565. AddItem(List,counter,label,data->MeshPath[pathidx]);
  1566. }
  1567. for (pathidx=0; pathidx<MESH_PATH_ENTRIES; pathidx++){
  1568. sprintf(label,"Replacer[%d].BonePath[%d]",replaceidx,pathidx);
  1569. AddItem(List,counter,label,data->BonePath[pathidx]);
  1570. }
  1571. AddItem(List,counter,"OldTextureName",data->OldTextureName);
  1572. AddItem(List,counter,"NewTextureName",data->NewTextureName);
  1573. AddItem(List,counter,"TextureParams.Attributes", data->TextureParams.Attributes);
  1574. AddItem(List,counter,"TextureParams.FrameCount", data->TextureParams.FrameCount);
  1575. AddItem(List,counter,"TextureParams.FrameRate", data->TextureParams.FrameRate);
  1576. data++;
  1577. }
  1578. }
  1579. void ChunkTableClass::List_W3D_CHUNK_AGGREGATE_CLASS_INFO(ChunkItem * Item,CListCtrl * List)
  1580. {
  1581. W3dAggregateMiscInfo * data = (W3dAggregateMiscInfo *)(Item->Data);
  1582. int counter = 0;
  1583. AddItem(List,counter,"OriginalClassID",data->OriginalClassID);
  1584. AddItem(List,counter,"Flags",data->Flags);
  1585. }
  1586. void ChunkTableClass::List_W3D_CHUNK_HLOD(ChunkItem * Item,CListCtrl * List)
  1587. {
  1588. List_Subitems(Item, List);
  1589. }
  1590. void ChunkTableClass::List_W3D_CHUNK_HLOD_HEADER(ChunkItem * Item,CListCtrl * List)
  1591. {
  1592. W3dHLodHeaderStruct * header = (W3dHLodHeaderStruct *)Item->Data;
  1593. int counter = 0;
  1594. AddItem(List,counter,"Version",header->Version);
  1595. AddItem(List,counter,"LodCount", header->LodCount);
  1596. AddItem(List,counter,"Name",header->Name);
  1597. AddItem(List,counter,"HTree Name", header->HierarchyName);
  1598. }
  1599. void ChunkTableClass::List_W3D_CHUNK_HLOD_LOD_ARRAY(ChunkItem * Item,CListCtrl * List)
  1600. {
  1601. List_Subitems(Item, List);
  1602. }
  1603. void ChunkTableClass::List_W3D_CHUNK_HLOD_LOD_ARRAY_HEADER(ChunkItem * Item,CListCtrl * List)
  1604. {
  1605. W3dHLodArrayHeaderStruct * header = (W3dHLodArrayHeaderStruct *)Item->Data;
  1606. int counter = 0;
  1607. AddItem(List,counter,"ModelCount",header->ModelCount);
  1608. AddItem(List,counter,"MaxScreenSize",header->MaxScreenSize);
  1609. }
  1610. void ChunkTableClass::List_W3D_CHUNK_HLOD_SUB_OBJECT(ChunkItem * Item,CListCtrl * List)
  1611. {
  1612. W3dHLodSubObjectStruct * data = (W3dHLodSubObjectStruct *)Item->Data;
  1613. int counter = 0;
  1614. AddItem(List,counter,"Name",data->Name);
  1615. AddItem(List,counter,"BoneIndex",data->BoneIndex);
  1616. }
  1617. void ChunkTableClass::List_W3D_CHUNK_BOX(ChunkItem * Item,CListCtrl * List)
  1618. {
  1619. W3dBoxStruct * box = (W3dBoxStruct *)Item->Data;
  1620. int counter = 0;
  1621. AddItem(List,counter,"Version",box->Version);
  1622. AddItem(List,counter,"Attributes",box->Attributes);
  1623. if (box->Attributes & W3D_BOX_ATTRIBUTE_ORIENTED) {
  1624. AddItem(List,counter,"Attributes","W3D_BOX_ATTRIBUTE_ORIENTED","flag");
  1625. }
  1626. if (box->Attributes & W3D_BOX_ATTRIBUTE_ALIGNED) {
  1627. AddItem(List,counter,"Attributes","W3D_BOX_ATTRIBUTE_ALIGNED","flag");
  1628. }
  1629. if (box->Attributes & W3D_BOX_ATTRIBTUE_COLLISION_TYPE_PHYSICAL) {
  1630. AddItem(List,counter,"Attributes","W3D_BOX_ATTRIBTUE_COLLISION_TYPE_PHYSICAL","flag");
  1631. }
  1632. if (box->Attributes & W3D_BOX_ATTRIBTUE_COLLISION_TYPE_PROJECTILE) {
  1633. AddItem(List,counter,"Attributes","W3D_BOX_ATTRIBTUE_COLLISION_TYPE_PROJECTILE","flag");
  1634. }
  1635. if (box->Attributes & W3D_BOX_ATTRIBTUE_COLLISION_TYPE_VIS) {
  1636. AddItem(List,counter,"Attributes","W3D_BOX_ATTRIBTUE_COLLISION_TYPE_VIS","flag");
  1637. }
  1638. if (box->Attributes & W3D_BOX_ATTRIBTUE_COLLISION_TYPE_CAMERA) {
  1639. AddItem(List,counter,"Attributes","W3D_BOX_ATTRIBTUE_COLLISION_TYPE_CAMERA","flag");
  1640. }
  1641. if (box->Attributes & W3D_BOX_ATTRIBTUE_COLLISION_TYPE_VEHICLE) {
  1642. AddItem(List,counter,"Attributes","W3D_BOX_ATTRIBTUE_COLLISION_TYPE_VEHICLE","flag");
  1643. }
  1644. AddItem(List,counter,"Name",box->Name);
  1645. AddItem(List,counter,"Color",&(box->Color));
  1646. AddItem(List,counter,"Center",&(box->Center));
  1647. AddItem(List,counter,"Extent",&(box->Extent));
  1648. }
  1649. void ChunkTableClass::List_W3D_CHUNK_NULL_OBJECT(ChunkItem * Item,CListCtrl * List)
  1650. {
  1651. W3dNullObjectStruct * null = (W3dNullObjectStruct *)Item->Data;
  1652. int counter = 0;
  1653. AddItemVersion(List,counter,null->Version);
  1654. AddItem(List,counter,"Attributes",null->Attributes);
  1655. // No attributes are currently used
  1656. AddItem(List,counter,"Name",null->Name);
  1657. }
  1658. void ChunkTableClass::List_W3D_CHUNK_PRELIT_UNLIT(ChunkItem *Item, CListCtrl *List) {
  1659. List_Subitems(Item, List);
  1660. }
  1661. void ChunkTableClass::List_W3D_CHUNK_PRELIT_VERTEX(ChunkItem *Item, CListCtrl *List) {
  1662. List_Subitems(Item, List);
  1663. }
  1664. void ChunkTableClass::List_W3D_CHUNK_PRELIT_LIGHTMAP_MULTI_PASS(ChunkItem *Item, CListCtrl *List) {
  1665. List_Subitems(Item, List);
  1666. }
  1667. void ChunkTableClass::List_W3D_CHUNK_PRELIT_LIGHTMAP_MULTI_TEXTURE(ChunkItem *Item, CListCtrl *List) {
  1668. List_Subitems(Item, List);
  1669. }
  1670. void ChunkTableClass::List_W3D_CHUNK_LIGHTSCAPE(ChunkItem *Item, CListCtrl *List) {
  1671. List_Subitems(Item, List);
  1672. }
  1673. void ChunkTableClass::List_W3D_CHUNK_LIGHTSCAPE_LIGHT(ChunkItem *Item, CListCtrl *List) {
  1674. List_Subitems(Item, List);
  1675. }
  1676. void ChunkTableClass::List_W3D_CHUNK_LIGHT_TRANSFORM(ChunkItem *Item, CListCtrl *List) {
  1677. W3dLightTransformStruct *data = (W3dLightTransformStruct*) (Item->Data);
  1678. int counter = 0;
  1679. AddItem (List, counter, "Transform", &(data->Transform [0][0]), 4);
  1680. AddItem (List, counter, "Transform", &(data->Transform [1][0]), 4);
  1681. AddItem (List, counter, "Transform", &(data->Transform [2][0]), 4);
  1682. }
  1683. void ChunkTableClass::List_W3D_CHUNK_DAZZLE(ChunkItem *Item, CListCtrl *List)
  1684. {
  1685. List_Subitems(Item, List);
  1686. }
  1687. void ChunkTableClass::List_W3D_CHUNK_DAZZLE_NAME(ChunkItem *Item, CListCtrl *List)
  1688. {
  1689. int counter = 0;
  1690. AddItem (List, counter, "Dazzle Name", (char *)(Item->Data));
  1691. }
  1692. void ChunkTableClass::List_W3D_CHUNK_DAZZLE_TYPENAME(ChunkItem *Item, CListCtrl *List)
  1693. {
  1694. int counter = 0;
  1695. AddItem (List, counter, "Dazzle Type Name", (char *)(Item->Data));
  1696. }
  1697. ChunkTableClass::ChunkTableClass() {
  1698. NewType( W3D_CHUNK_MESH, "CHUNK_MESH", List_W3D_CHUNK_MESH, true);
  1699. NewType( W3D_CHUNK_MESH_HEADER, "W3D_CHUNK_MESH_HEADER", List_W3D_CHUNK_MESH_HEADER);
  1700. NewType( W3D_CHUNK_VERTICES, "W3D_CHUNK_VERTICES", List_W3D_CHUNK_VERTICES);
  1701. NewType( W3D_CHUNK_VERTEX_NORMALS, "W3D_CHUNK_VERTEX_NORMALS", List_W3D_CHUNK_VERTEX_NORMALS);
  1702. NewType( W3D_CHUNK_SURRENDER_NORMALS, "W3D_CHUNK_SURRENDER_NORMALS", List_W3D_CHUNK_SURRENDER_NORMALS);
  1703. NewType( W3D_CHUNK_TEXCOORDS, "W3D_CHUNK_TEXCOORDS", List_W3D_CHUNK_TEXCOORDS);
  1704. NewType( O_W3D_CHUNK_MATERIALS, "O_W3D_CHUNK_MATERIALS", List_O_W3D_CHUNK_MATERIALS);
  1705. NewType( O_W3D_CHUNK_TRIANGLES, "O_W3D_CHUNK_TRIANGLES", List_O_W3D_CHUNK_TRIANGLES);
  1706. NewType( O_W3D_CHUNK_QUADRANGLES, "O_W3D_CHUNK_QUADRANGLES", List_O_W3D_CHUNK_QUADRANGLES);
  1707. NewType( O_W3D_CHUNK_SURRENDER_TRIANGLES, "O_W3D_CHUNK_SURRENDER_TRIANGLES", List_O_W3D_CHUNK_SURRENDER_TRIANGLES);
  1708. NewType( O_W3D_CHUNK_POV_TRIANGLES, "O_W3D_CHUNK_POV_TRIANGLES", List_O_W3D_CHUNK_POV_TRIANGLES);
  1709. NewType( O_W3D_CHUNK_POV_QUADRANGLES, "O_W3D_CHUNK_POV_QUADRANGLES", List_O_W3D_CHUNK_POV_QUADRANGLES);
  1710. NewType( W3D_CHUNK_MESH_USER_TEXT, "W3D_CHUNK_MESH_USER_TEXT", List_W3D_CHUNK_MESH_USER_TEXT);
  1711. NewType( W3D_CHUNK_VERTEX_COLORS, "W3D_CHUNK_VERTEX_COLORS", List_W3D_CHUNK_VERTEX_COLORS);
  1712. NewType( W3D_CHUNK_VERTEX_INFLUENCES, "W3D_CHUNK_VERTEX_INFLUENCES", List_W3D_CHUNK_VERTEX_INFLUENCES);
  1713. NewType( W3D_CHUNK_DAMAGE, "W3D_CHUNK_DAMAGE", List_W3D_CHUNK_DAMAGE, true);
  1714. NewType( W3D_CHUNK_DAMAGE_HEADER, "W3D_CHUNK_DAMAGE_HEADER", List_W3D_CHUNK_DAMAGE_HEADER);
  1715. NewType( W3D_CHUNK_DAMAGE_VERTICES, "W3D_CHUNK_DAMAGE_VERTICES", List_W3D_CHUNK_DAMAGE_VERTICES);
  1716. NewType( W3D_CHUNK_DAMAGE_COLORS, "W3D_CHUNK_DAMAGE_COLORS", List_W3D_CHUNK_DAMAGE_COLORS);
  1717. NewType( O_W3D_CHUNK_MATERIALS2, "O_W3D_CHUNK_MATERIALS2", List_O_W3D_CHUNK_MATERIALS2);
  1718. NewType( W3D_CHUNK_MATERIALS3, "W3D_CHUNK_MATERIALS3", List_W3D_CHUNK_MATERIALS3, true);
  1719. NewType( W3D_CHUNK_MATERIAL3, "W3D_CHUNK_MATERIAL3", List_W3D_CHUNK_MATERIAL3, true);
  1720. NewType( W3D_CHUNK_MATERIAL3_NAME, "W3D_CHUNK_MATERIAL3_NAME", List_W3D_CHUNK_MATERIAL3_NAME);
  1721. NewType( W3D_CHUNK_MATERIAL3_INFO, "W3D_CHUNK_MATERIAL3_INFO", List_W3D_CHUNK_MATERIAL3_INFO);
  1722. NewType( W3D_CHUNK_MATERIAL3_DC_MAP, "W3D_CHUNK_MATERIAL3_DC_MAP", List_W3D_CHUNK_MATERIAL3_DC_MAP,true);
  1723. NewType( W3D_CHUNK_MATERIAL3_DI_MAP, "W3D_CHUNK_MATERIAL3_DI_MAP", List_W3D_CHUNK_MATERIAL3_DI_MAP,true);
  1724. NewType( W3D_CHUNK_MATERIAL3_SC_MAP, "W3D_CHUNK_MATERIAL3_SC_MAP", List_W3D_CHUNK_MATERIAL3_SC_MAP,true);
  1725. NewType( W3D_CHUNK_MATERIAL3_SI_MAP, "W3D_CHUNK_MATERIAL3_SI_MAP", List_W3D_CHUNK_MATERIAL3_SI_MAP,true);
  1726. NewType( W3D_CHUNK_MAP3_FILENAME, "W3D_CHUNK_MAP3_FILENAME", List_W3D_CHUNK_MAP3_FILENAME);
  1727. NewType( W3D_CHUNK_MAP3_INFO, "W3D_CHUNK_MAP3_INFO", List_W3D_CHUNK_MAP3_INFO);
  1728. NewType( W3D_CHUNK_MESH_HEADER3, "W3D_CHUNK_MESH_HEADER3",List_W3D_CHUNK_MESH_HEADER3);
  1729. NewType( W3D_CHUNK_TRIANGLES, "W3D_CHUNK_TRIANGLES",List_W3D_CHUNK_TRIANGLES);
  1730. NewType( W3D_CHUNK_PER_TRI_MATERIALS,"W3D_CHUNK_PER_TRI_MATERIALS",List_W3D_CHUNK_PER_TRI_MATERIALS);
  1731. NewType( W3D_CHUNK_VERTEX_SHADE_INDICES, "W3D_CHUNK_VERTEX_SHADE_INDICES",List_W3D_CHUNK_VERTEX_SHADE_INDICES);
  1732. NewType( W3D_CHUNK_MATERIAL_INFO,"W3D_CHUNK_MATERIAL_INFO",List_W3D_CHUNK_MATERIAL_INFO);
  1733. NewType( W3D_CHUNK_SHADERS,"W3D_CHUNK_SHADERS",List_W3D_CHUNK_SHADERS);
  1734. NewType( W3D_CHUNK_PS2_SHADERS,"W3D_CHUNK_PS2_SHADERS",List_W3D_CHUNK_PS2_SHADERS);
  1735. NewType( W3D_CHUNK_VERTEX_MATERIALS, "W3D_CHUNK_VERTEX_MATERIALS",List_W3D_CHUNK_VERTEX_MATERIALS,true);
  1736. NewType( W3D_CHUNK_VERTEX_MATERIAL, "W3D_CHUNK_VERTEX_MATERIAL",List_W3D_CHUNK_VERTEX_MATERIAL,true);
  1737. NewType( W3D_CHUNK_VERTEX_MATERIAL_NAME, "W3D_CHUNK_VERTEX_MATERIAL_NAME",List_W3D_CHUNK_VERTEX_MATERIAL_NAME);
  1738. NewType( W3D_CHUNK_VERTEX_MATERIAL_INFO, "W3D_CHUNK_VERTEX_MATERIAL_INFO",List_W3D_CHUNK_VERTEX_MATERIAL_INFO);
  1739. NewType( W3D_CHUNK_VERTEX_MAPPER_ARGS0, "W3D_CHUNK_VERTEX_MAPPER_ARGS0",List_W3D_CHUNK_VERTEX_MAPPER_ARGS0);
  1740. NewType( W3D_CHUNK_VERTEX_MAPPER_ARGS1, "W3D_CHUNK_VERTEX_MAPPER_ARGS1",List_W3D_CHUNK_VERTEX_MAPPER_ARGS1);
  1741. NewType( W3D_CHUNK_TEXTURES, "W3D_CHUNK_TEXTURES", List_W3D_CHUNK_TEXTURES,true);
  1742. NewType( W3D_CHUNK_TEXTURE, "W3D_CHUNK_TEXTURE", List_W3D_CHUNK_TEXTURE,true);
  1743. NewType( W3D_CHUNK_TEXTURE_NAME, "W3D_CHUNK_TEXTURE_NAME", List_W3D_CHUNK_TEXTURE_NAME);
  1744. NewType( W3D_CHUNK_TEXTURE_INFO, "W3D_CHUNK_TEXTURE_INFO", List_W3D_CHUNK_TEXTURE_INFO);
  1745. NewType( W3D_CHUNK_MATERIAL_PASS, "W3D_CHUNK_MATERIAL_PASS", List_W3D_CHUNK_MATERIAL_PASS,true);
  1746. NewType( W3D_CHUNK_VERTEX_MATERIAL_IDS, "W3D_CHUNK_VERTEX_MATERIAL_IDS", List_W3D_CHUNK_VERTEX_MATERIAL_IDS);
  1747. NewType( W3D_CHUNK_SHADER_IDS, "W3D_CHUNK_SHADER_IDS", List_W3D_CHUNK_SHADER_IDS);
  1748. NewType( W3D_CHUNK_DCG, "W3D_CHUNK_DCG", List_W3D_CHUNK_DCG);
  1749. NewType( W3D_CHUNK_DIG, "W3D_CHUNK_DIG", List_W3D_CHUNK_DIG);
  1750. NewType( W3D_CHUNK_SCG, "W3D_CHUNK_SCG", List_W3D_CHUNK_SCG);
  1751. NewType( W3D_CHUNK_TEXTURE_STAGE, "W3D_CHUNK_TEXTURE_STAGE", List_W3D_CHUNK_TEXTURE_STAGE,true);
  1752. NewType( W3D_CHUNK_TEXTURE_IDS, "W3D_CHUNK_TEXTURE_IDS", List_W3D_CHUNK_TEXTURE_IDS);
  1753. NewType( W3D_CHUNK_STAGE_TEXCOORDS, "W3D_CHUNK_STAGE_TEXCOORDS", List_W3D_CHUNK_STAGE_TEXCOORDS);
  1754. NewType( W3D_CHUNK_PER_FACE_TEXCOORD_IDS, "W3D_CHUNK_PER_FACE_TEXCOORD_IDS", List_W3D_CHUNK_PER_FACE_TEXCOORD_IDS);
  1755. NewType( W3D_CHUNK_AABTREE, "W3D_CHUNK_AABTREE", List_W3D_CHUNK_AABTREE,true);
  1756. NewType( W3D_CHUNK_AABTREE_HEADER, "W3D_CHUNK_AABTREE_HEADER", List_W3D_CHUNK_AABTREE_HEADER);
  1757. NewType( W3D_CHUNK_AABTREE_POLYINDICES, "W3D_CHUNK_AABTREE_POLYINDICES", List_W3D_CHUNK_AABTREE_POLYINDICES);
  1758. NewType( W3D_CHUNK_AABTREE_NODES, "W3D_CHUNK_AABTREE_NODES", List_W3D_CHUNK_AABTREE_NODES);
  1759. NewType( W3D_CHUNK_HIERARCHY, "W3D_CHUNK_HIERARCHY", List_W3D_CHUNK_HIERARCHY, true);
  1760. NewType( W3D_CHUNK_HIERARCHY_HEADER, "W3D_CHUNK_HIERARCHY_HEADER", List_W3D_CHUNK_HIERARCHY_HEADER);
  1761. NewType( W3D_CHUNK_PIVOTS, "W3D_CHUNK_PIVOTS", List_W3D_CHUNK_PIVOTS);
  1762. NewType( W3D_CHUNK_PIVOT_FIXUPS, "W3D_CHUNK_PIVOT_FIXUPS", List_W3D_CHUNK_PIVOT_FIXUPS);
  1763. NewType( W3D_CHUNK_ANIMATION, "W3D_CHUNK_ANIMATION", List_W3D_CHUNK_ANIMATION, true);
  1764. NewType( W3D_CHUNK_ANIMATION_HEADER, "W3D_CHUNK_ANIMATION_HEADER", List_W3D_CHUNK_ANIMATION_HEADER);
  1765. NewType( W3D_CHUNK_ANIMATION_CHANNEL, "W3D_CHUNK_ANIMATION_CHANNEL", List_W3D_CHUNK_ANIMATION_CHANNEL);
  1766. NewType( W3D_CHUNK_BIT_CHANNEL, "W3D_CHUNK_BIT_CHANNEL", List_W3D_CHUNK_BIT_CHANNEL);
  1767. NewType( W3D_CHUNK_HMODEL, "W3D_CHUNK_HMODEL", List_W3D_CHUNK_HMODEL,true);
  1768. NewType( W3D_CHUNK_HMODEL_HEADER, "W3D_CHUNK_HMODEL_HEADER", List_W3D_CHUNK_HMODEL_HEADER);
  1769. NewType( W3D_CHUNK_NODE, "W3D_CHUNK_NODE", List_W3D_CHUNK_NODE);
  1770. NewType( W3D_CHUNK_COLLISION_NODE, "W3D_CHUNK_COLLISION_NODE", List_W3D_CHUNK_COLLISION_NODE);
  1771. NewType( W3D_CHUNK_SKIN_NODE, "W3D_CHUNK_SKIN_NODE", List_W3D_CHUNK_SKIN_NODE);
  1772. NewType( OBSOLETE_W3D_CHUNK_HMODEL_AUX_DATA, "W3D_CHUNK_HMODEL_AUX_DATA", List_W3D_CHUNK_HMODEL_AUX_DATA);
  1773. NewType( OBSOLETE_W3D_CHUNK_SHADOW_NODE, "OBSOLETE_W3D_CHUNK_SHADOW_NODE", List_W3D_CHUNK_SHADOW_NODE);
  1774. NewType( W3D_CHUNK_LODMODEL, "W3D_CHUNK_LODMODEL", List_W3D_CHUNK_LODMODEL,true);
  1775. NewType( W3D_CHUNK_LODMODEL_HEADER, "W3D_CHUNK_LODMODEL_HEADER", List_W3D_CHUNK_LODMODEL_HEADER);
  1776. NewType( W3D_CHUNK_LOD, "W3D_CHUNK_LOD", List_W3D_CHUNK_LOD);
  1777. NewType( W3D_CHUNK_COLLECTION, "W3D_CHUNK_COLLECTION", List_W3D_CHUNK_COLLECTION,true);
  1778. NewType( W3D_CHUNK_COLLECTION_HEADER, "W3D_CHUNK_COLLECTION_HEADER", List_W3D_CHUNK_COLLECTION_HEADER);
  1779. NewType( W3D_CHUNK_COLLECTION_OBJ_NAME, "W3D_CHUNK_COLLECTION_OBJ_NAME", List_W3D_CHUNK_COLLECTION_OBJ_NAME);
  1780. NewType( W3D_CHUNK_PLACEHOLDER,"W3D_CHUNK_PLACEHOLDER", List_W3D_CHUNK_PLACEHOLDER);
  1781. NewType( W3D_CHUNK_TRANSFORM_NODE,"W3D_CHUNK_TRANSFORM_NODE", List_W3D_CHUNK_TRANSFORM_NODE);
  1782. NewType( W3D_CHUNK_POINTS, "W3D_CHUNK_POINTS", List_W3D_CHUNK_POINTS);
  1783. NewType( W3D_CHUNK_LIGHT, "W3D_CHUNK_LIGHT", List_W3D_CHUNK_LIGHT,true);
  1784. NewType( W3D_CHUNK_LIGHT_INFO, "W3D_CHUNK_LIGHT_INFO",List_W3D_CHUNK_LIGHT_INFO);
  1785. NewType( W3D_CHUNK_SPOT_LIGHT_INFO, "W3D_CHUNK_SPOT_LIGHT_INFO",List_W3D_CHUNK_SPOT_LIGHT_INFO);
  1786. NewType( W3D_CHUNK_NEAR_ATTENUATION, "W3D_CHUNK_NEAR_ATTENUATION", List_W3D_CHUNK_NEAR_ATTENUATION);
  1787. NewType( W3D_CHUNK_FAR_ATTENUATION, "W3D_CHUNK_FAR_ATTENUATION", List_W3D_CHUNK_FAR_ATTENUATION);
  1788. NewType( W3D_CHUNK_EMITTER, "W3D_CHUNK_EMITTER", List_W3D_CHUNK_EMITTER,true);
  1789. NewType( W3D_CHUNK_EMITTER_HEADER, "W3D_CHUNK_EMITTER_HEADER",List_W3D_CHUNK_EMITTER_HEADER);
  1790. NewType( W3D_CHUNK_EMITTER_USER_DATA, "W3D_CHUNK_EMITTER_USER_DATA", List_W3D_CHUNK_EMITTER_USER_DATA);
  1791. NewType( W3D_CHUNK_EMITTER_INFO, "W3D_CHUNK_EMITTER_INFO", List_W3D_CHUNK_EMITTER_INFO);
  1792. NewType( W3D_CHUNK_EMITTER_INFOV2, "W3D_CHUNK_EMITTER_INFOV2",List_W3D_CHUNK_EMITTER_INFOV2);
  1793. NewType( W3D_CHUNK_EMITTER_PROPS, "W3D_CHUNK_EMITTER_PROPS", List_W3D_CHUNK_EMITTER_PROPS);
  1794. NewType( OBSOLETE_W3D_CHUNK_EMITTER_COLOR_KEYFRAME, "OBSOLETE_W3D_CHUNK_EMITTER_COLOR_KEYFRAME", List_W3D_CHUNK_EMITTER_COLOR_KEYFRAME);
  1795. NewType( OBSOLETE_W3D_CHUNK_EMITTER_OPACITY_KEYFRAME, "OBSOLETE_W3D_CHUNK_EMITTER_OPACITY_KEYFRAME", List_W3D_CHUNK_EMITTER_OPACITY_KEYFRAME);
  1796. NewType( OBSOLETE_W3D_CHUNK_EMITTER_SIZE_KEYFRAME, "OBSOLETE_W3D_CHUNK_EMITTER_SIZE_KEYFRAME", List_W3D_CHUNK_EMITTER_SIZE_KEYFRAME);
  1797. NewType( W3D_CHUNK_EMITTER_ROTATION_KEYFRAMES, "W3D_CHUNK_EMITTER_ROTATION_KEYFRAMES", List_W3D_CHUNK_EMITTER_ROTATION_KEYFRAMES);
  1798. NewType( W3D_CHUNK_EMITTER_FRAME_KEYFRAMES, "W3D_CHUNK_EMITTER_FRAME_KEYFRAMES", List_W3D_CHUNK_EMITTER_FRAME_KEYFRAMES);
  1799. NewType( W3D_CHUNK_EMITTER_BLUR_TIME_KEYFRAMES, "W3D_CHUNK_EMITTER_BLUR_TIME_KEYFRAMES", List_W3D_CHUNK_EMITTER_BLUR_TIME_KEYFRAMES);
  1800. NewType( W3D_CHUNK_AGGREGATE, "W3D_CHUNK_AGGREGATE", List_W3D_CHUNK_AGGREGATE,true);
  1801. NewType( W3D_CHUNK_AGGREGATE_HEADER, "W3D_CHUNK_AGGREGATE_HEADER", List_W3D_CHUNK_AGGREGATE_HEADER);
  1802. NewType( W3D_CHUNK_AGGREGATE_INFO, "W3D_CHUNK_AGGREGATE_INFO",List_W3D_CHUNK_AGGREGATE_INFO);
  1803. NewType( W3D_CHUNK_TEXTURE_REPLACER_INFO, "W3D_CHUNK_TEXTURE_REPLACER_INFO", List_W3D_CHUNK_TEXTURE_REPLACER_INFO);
  1804. NewType( W3D_CHUNK_AGGREGATE_CLASS_INFO, "W3D_CHUNK_AGGREGATE_CLASS_INFO", List_W3D_CHUNK_AGGREGATE_CLASS_INFO);
  1805. NewType( W3D_CHUNK_HLOD, "W3D_CHUNK_HLOD", List_W3D_CHUNK_HLOD, true);
  1806. NewType( W3D_CHUNK_HLOD_HEADER, "W3D_CHUNK_HLOD_HEADER", List_W3D_CHUNK_HLOD_HEADER);
  1807. NewType( W3D_CHUNK_HLOD_LOD_ARRAY, "W3D_CHUNK_HLOD_LOD_ARRAY", List_W3D_CHUNK_HLOD_LOD_ARRAY, true);
  1808. NewType( W3D_CHUNK_HLOD_SUB_OBJECT_ARRAY_HEADER, "W3D_CHUNK_HLOD_LOD_ARRAY_HEADER", List_W3D_CHUNK_HLOD_LOD_ARRAY_HEADER);
  1809. NewType( W3D_CHUNK_HLOD_SUB_OBJECT, "W3D_CHUNK_HLOD_SUB_OBJECT", List_W3D_CHUNK_HLOD_SUB_OBJECT);
  1810. NewType( W3D_CHUNK_HLOD_AGGREGATE_ARRAY, "W3D_CHUNK_HLOD_AGGREGATE_ARRAY", List_W3D_CHUNK_HLOD_LOD_ARRAY, true);
  1811. NewType( W3D_CHUNK_HLOD_PROXY_ARRAY, "W3D_CHUNK_HLOD_PROXY_ARRAY", List_W3D_CHUNK_HLOD_LOD_ARRAY, true);
  1812. NewType( W3D_CHUNK_BOX, "W3D_CHUNK_BOX", List_W3D_CHUNK_BOX);
  1813. NewType( W3D_CHUNK_NULL_OBJECT, "W3D_CHUNK_NULL_OBJECT", List_W3D_CHUNK_NULL_OBJECT);
  1814. NewType( W3D_CHUNK_PRELIT_UNLIT, "W3D_CHUNK_PRELIT_UNLIT", List_W3D_CHUNK_PRELIT_UNLIT, true);
  1815. NewType( W3D_CHUNK_PRELIT_VERTEX, "W3D_CHUNK_PRELIT_VERTEX", List_W3D_CHUNK_PRELIT_VERTEX, true);
  1816. NewType( W3D_CHUNK_PRELIT_LIGHTMAP_MULTI_PASS, "W3D_CHUNK_PRELIT_LIGHTMAP_MULTI_PASS", List_W3D_CHUNK_PRELIT_LIGHTMAP_MULTI_PASS, true);
  1817. NewType( W3D_CHUNK_PRELIT_LIGHTMAP_MULTI_TEXTURE, "W3D_CHUNK_PRELIT_LIGHTMAP_MULTI_TEXTURE", List_W3D_CHUNK_PRELIT_LIGHTMAP_MULTI_TEXTURE, true);
  1818. NewType( W3D_CHUNK_LIGHTSCAPE, "W3D_CHUNK_LIGHTSCAPE", List_W3D_CHUNK_LIGHTSCAPE, true);
  1819. NewType( W3D_CHUNK_LIGHTSCAPE_LIGHT, "W3D_CHUNK_LIGHTSCAPE_LIGHT", List_W3D_CHUNK_LIGHTSCAPE_LIGHT, true);
  1820. NewType( W3D_CHUNK_LIGHT_TRANSFORM, "W3D_CHUNK_LIGHT_TRANSFORM", List_W3D_CHUNK_LIGHT_TRANSFORM);
  1821. NewType( W3D_CHUNK_DAZZLE, "W3D_CHUNK_DAZZLE", List_W3D_CHUNK_DAZZLE, true);
  1822. NewType( W3D_CHUNK_DAZZLE_NAME, "W3D_CHUNK_DAZZLE_NAME" , List_W3D_CHUNK_DAZZLE_NAME);
  1823. NewType( W3D_CHUNK_DAZZLE_TYPENAME, "W3D_CHUNK_DAZZLE_TYPENAME" , List_W3D_CHUNK_DAZZLE_TYPENAME);
  1824. }
  1825. ChunkType *ChunkTableClass::Lookup(int ID) {
  1826. ChunkType *chunktype;
  1827. if(Types.Lookup((void *) ID, (void *&) chunktype))
  1828. return chunktype;
  1829. return 0;
  1830. }
  1831. ChunkItem::ChunkItem(ChunkLoadClass &cload) {
  1832. ID = cload.Cur_Chunk_ID();
  1833. Length = cload.Cur_Chunk_Length();
  1834. Type = ChunkTable.Lookup(ID);
  1835. // if the chunktype indicates that it has member chunks then do not load this chunk's data. Have the external caller do that.
  1836. if(Type != 0 && Type->Wrapper) {
  1837. Data = 0;
  1838. return;
  1839. }
  1840. if(Type != 0) {
  1841. TRACE("%s %d\n", Type->Name, Length);
  1842. }
  1843. if(Length == 0) {
  1844. Data = 0;
  1845. } else {
  1846. Data = new char[Length];
  1847. cload.Read(Data, Length);
  1848. }
  1849. }
  1850. ChunkItem::~ChunkItem() {
  1851. if(Data != 0)
  1852. delete [] Data;
  1853. while(!Chunks.IsEmpty()) {
  1854. ChunkItem *item = Chunks.RemoveHead();
  1855. delete item;
  1856. }
  1857. }
  1858. //////////////////////////////////////////////////////////////////////
  1859. // Construction/Destruction
  1860. //////////////////////////////////////////////////////////////////////
  1861. ChunkData::ChunkData()
  1862. {
  1863. }
  1864. ChunkData::~ChunkData()
  1865. {
  1866. while(!Chunks.IsEmpty()) {
  1867. ChunkItem *item = Chunks.RemoveHead();
  1868. delete item;
  1869. }
  1870. }
  1871. bool ChunkData::Load(const char *filename)
  1872. {
  1873. Release_Data();
  1874. RawFileMClass chunk_file;
  1875. if (!chunk_file.Open(filename)) {
  1876. return false;
  1877. }
  1878. ChunkLoadClass cload(&chunk_file);
  1879. while (cload.Open_Chunk()) {
  1880. Add_Chunk(cload);
  1881. cload.Close_Chunk();
  1882. }
  1883. /*
  1884. switch (cload.Cur_Chunk_ID()) {
  1885. case W3D_CHUNK_MESH:
  1886. MeshManager.Load_Mesh(cload);
  1887. break;
  1888. case W3D_CHUNK_HIERARCHY:
  1889. HTreeManager.Load_Tree(cload);
  1890. break;
  1891. case W3D_CHUNK_ANIMATION:
  1892. HAnimManager.Load_Anim(cload);
  1893. break;
  1894. case W3D_CHUNK_MESH_CONNECTIONS:
  1895. HModelManager.Load_Model_Definition(cload);
  1896. break;
  1897. }
  1898. cload.Close_Chunk();
  1899. }
  1900. */
  1901. chunk_file.Close();
  1902. return true;
  1903. }
  1904. void ChunkData::Add_Chunk(ChunkLoadClass & cload, ChunkItem *Parent)
  1905. {
  1906. ChunkItem *item = new ChunkItem(cload);
  1907. if(Parent)
  1908. Parent->Chunks.AddTail(item);
  1909. else
  1910. Chunks.AddTail(item);
  1911. //Moumine 1/2/2002 1:21:26 PM
  1912. #if ! defined _W3DSHELLEXT
  1913. if(theApp.DumpTextures) {
  1914. if(item->ID == W3D_CHUNK_TEXTURE_NAME) {
  1915. static CMapStringToString existing;
  1916. char * data = (char *)item->Data;
  1917. CString value;
  1918. if(existing.Lookup(data, value) == FALSE) {
  1919. existing.SetAt(data, data);
  1920. if(theApp.TextureDumpFile != 0)
  1921. fprintf(theApp.TextureDumpFile, "%s,%s\n", theApp.Filename, data);
  1922. TRACE("%s,%s\n", theApp.Filename, data);
  1923. }
  1924. }
  1925. }
  1926. #endif
  1927. if((item->Type != 0) && item->Type->Wrapper) {
  1928. while(cload.Open_Chunk()) {
  1929. Add_Chunk(cload, item);
  1930. cload.Close_Chunk();
  1931. }
  1932. }
  1933. }
  1934. void ChunkData::Release_Data()
  1935. {
  1936. while(Chunks.IsEmpty() == 0) {
  1937. ChunkItem *item = Chunks.RemoveHead();
  1938. delete item;
  1939. }
  1940. }
  1941. int Get_Bit(void const * array, int bit)
  1942. {
  1943. unsigned char mask = (unsigned char)(1 << (bit % 8));
  1944. return((*((unsigned char *)array + (bit/8)) & mask) != 0);
  1945. }
  1946. void Set_Bit(void * array, int bit, int value)
  1947. {
  1948. unsigned char mask = (unsigned char)(1 << (bit % 8));
  1949. if (value != 0) {
  1950. *((unsigned char *)array + (bit/8)) |= mask;
  1951. } else {
  1952. *((unsigned char *)array + (bit/8)) &= (unsigned char)~mask;
  1953. }
  1954. }