|
|
« on: December 13, 2010, 08:39:11 PM » |
|
NOTE: This thread is no longer updated as of 1/1/2014!You can follow and discuss new BrawlBox updates here: http://forums.kc-mm.com/index.php?topic=67847.0Download (all versions made before 1/1/2014): v0.71 v0.70 v0.69b v0.69 v0.68d v0.68c v0.68b v0.68 v0.67b v0.67 v0.66b v0.66 v0.65c v0.65b v0.65b Beta v0.65 v0.64d v0.64 Modset 1
Legacy versions (very old) BrawlBox v0.63d Modset 4.2 BrawlBox v0.63d SmashBox v0.57
Google Code Source Latest Source (RAR Download) Download .NET Framework 4 Instructions for Mac users
Change Log:
- v0.71- (12/25/2013) - BrawlLib v0.18 . Added a tristripper and integrated it into Brawllib. This allows for mesh optimization for smaller filesize and less in-game lag. . Added several new options to the model importer settings dialog, including tristripper algorithm options . Added "Optimize" option to MDL0/object right click menus. This will allow you to re-optimize meshes that have already been encoded. . Added support for writing string type user data properly . Added toggles for texture matrices in model object properties . Fixed a bug where exported Collada models would have _ID added to the end of all bone and object names.
- v0.70- (12/7/2013) - BrawlLib v0.17 . Fixed header and alignment in module rebuilder . Fixed problem adding a new word to a static module . Fixed the right click menu on a static module . Fixed bug where only the command list with the same module id would be applied . Added option to change a relocation command's target module . Removed the Imports folder from REL tree, as its generation is now fully automatic
- v0.69b- (11/19/13) - BrawlLib v0.16b . Fixed problem painting the GUI when closing the model viewer . Fixed bug where when opening a TXT in the code manager, any spaces after hex lines would cause reading problems . Fixed bug where if codes where recognized in a GCT, they would be displayed as recognized and unrecognized . Fixed bug where hex lines in a GCT would be read incorrectly . Finished, fixed and added PMD importer . Fixed error in collision viewer with displaying and selecting plans/links anchored to bones . Fixed display error of SHP0 framecount in its editor . Fixed display error of CLR0 primary color in its editor . Fixed error when trying to view an SCN0 camera entry . Fixed error reading float values with commas in anim parser . Fixed problem where the bounding box would not be generated for imported models . Added option to code manager to display all remembered codes . Updated Collada model exporter to Collada 1.5 . Updated Collada model importer to support Collada 1.5 . Updated GCT editor to have checkboxes next to codes
- v0.69- (10/18/13) - BrawlLib v0.16 . Started to add Maya .anim animation importing and exporting. This feature is still a work in progress and does not work properly yet. . Added interpolation editor located under Tools in the model viewer . Added DOL & REL section editor . Finished DOL & REL rebuilders . Added option to sync first and last keyframes (useful for looping animations) . Added option to generate animation tangents automatically or not . Added "Recent Files" under File in the main menu strip . Added full support for RunLength and Extended LZ77 compression . Added a code manager for GCT files. Can read/write to TXT, save GCT with text info, and open GCTs using a database of saved codes if it contains no text info. . Added support for adding REFF entries . Added option to move the model viewer panel into a new window and back - useful for dual monitors . Added option to create a link directly on a plane in the collision editor . Added a help window to the collision editor . Added a texture resize function to the Texture Converter dialog . Added a Re-Encode option to the right click menus of TEX0, REFT, and TPL textures . Fixed saving RSAR files (RWSD, RBNK, RSEQ) when they are outside of the RSAR . Fixed U8 parser/rebuilder . Fixed bug where the model previewer would lock itself if you closed it while playing an animation . Fixed "Replace All" button on ARC right click menu . Fixed MDL0 object importer . Updated the keyframe panel in the model viewer . Made animation frames able to be copied and pasted in different instances of Brawlbox . Updated model viewer to internally retain all changes to settings; no more external settings file. . Model viewer settings can be exported, imported, and reset to default. . Updated the display of TPL entries . Updated the Collada model import settings dialog
- v0.68d- (6/22/2013) - BrawlLib v0.15d . Fixed BRSTM encoder issue . Fixed issue with mini model viewer when first loaded . Fixed bug where the frame count and loop animation properties were gone . Fixed animation framerate in model viewer (defaults to 60) - changing the FPS (Frames Per Second) value now works accurately . Fixed issue when opening collision viewer for the first time . Fixed collision plane culling (was inside-out) and removed 2D selection overlay from collision viewer . Fixed problem where texture matrices would be removed but leave empty bytes in the object . Moved collision editor and model viewer code out of Brawllib and into Brawlbox . Removed wireframe mode from the polygons button and moved it to a seperate menu button . Added support for viewing THPs (video and audio may desync though)
- v0.68c- (5/27/2013) - BrawlLib v0.15c . Added bones panel to the keyframes panel in the model previewer . Removed buttons to toggle playback and bones panels . Removed moveset editor (Moveset editing moved to Ikarus) . Fixed shortcut text for the button to toggle bones . Fixed crash when saving a PCS with compression already set to LZ77 . Fixed bug opening a model with objects that have incorrect vertex format flags . Fixed problem with PAT0 animations and different palettes . Fixed importing a model with no materials . Fixed model import problem where all normals and unweighted objects would be rotated forward 90 degrees . Added ability to drag and drop tree nodes. Hold shift to add node as a child . Added drop down color picker for any RGBA pixel property
- v0.68b- (5/5/2013) - BrawlLib v0.15b . Fixed loop points when importing an RSAR sound . Fixed problem where edited models would explode in-game . Fixed REFT image importer. Works just as good as the TEX0 image importer now . Fixed when vertices are moved when modified by a SHP0 . Fixed background image to load immediately . Fixed random green/blue/yellow color overlays when clicking bones . Fixed when the last frame of an animation is deleted when clicking "." . Fixed bone translation tool . Fixed duplicated objects to be independent from the original . Changed shortcut to delete the current frame to Shift + Backspace . Changed shortcut when zooming to increase/decrease camera zoom/translate/rotate speeds from Control to Alt . Added support to compress U8 Archives to YAZ0 format with RunLength compression . Added support for v1.9 REFF . Finished REFT and REFF rebuilders . Finished TPL rebuilder . Set point/line smooth to off by default and added a button to toggle it on . Set text overlays to not display by default and added a button to toggle them on - v0.68- (4/28/2013) - BrawlLib v0.15 . Fixed "Null weights" MDL0 error . "Export as Single Matrix" 3ds Max export setting for DAE models is not necessary to check anymore . Added support for editing REFF files . Updated UserData handling . Updated MDL0 Material Properties . MDL0 Objects updated: now support both an OPA and XLU material, added "DrawPriority" value and added the ability to change linked vertex/normal/color/uv nodes. . Updated BRRES "Edit All" dialog . Added TPL support . Added SCN0 & CLR0 editors to the model viewer (however, their effects cannot be literally displayed yet) . SCN0 rebuilder bugfixes . Finished SCN0 Editor . Added various model viewer buttons: take screenshot, save camera, model viewer help, load background image . Revised and added new options to model viewer settings window . Began working on rendering materials & shaders using GLSL; all OpenGL coded has been modified to use OpenTK. This feature is not yet available. . Added "Original Path" string value for all NW4R nodes. . Edited animation editors in model viewer to be a bit more compact . Finished RSAR rebuilder . Added RSAR sound importer . Added RSAR file viewer . Made RSAR file list sortable by columns . Fixed loop point retrieval for RSAR sounds . Added support for stereo RSAR sounds . Added support for modifying RWSD, RBNK, and RSEQ files. RSEQ MML code is not yet editable yet. . Added support for all RSAR versions . Added support for RWAR and RWAV formats, located in other versions of RWSD and RBNK . Updated Stage Model Converter . Fixed when an offset parameter is pasted back into moveset code . Finished bone translation and scale controls in the model previewer . Implemented vertex editor . Made bones, vertices and the bone scale/rotation/translation controls highlight when you move the mouse over them . Added left and right buttons to texture previewer to view the different mipmaps . Fixed problem with importing mono audio files . Multi-Channel BRSTMs are now previewable . Undo and Redo buttons re-coded . Added buttons to display model and object bounding boxes and to render normals . Fixed .wav file exporter . Corrected SHP0 morphing between multiple destinations . Added a donate button to the About menu dropdown (yay!)
- v0.67b- (7/23/2012) - BrawlLib v0.14b . Move up/down for events doesn't randomly throw an error . SubActions can have same names . Model Visibility works perfectly in viewer . Article Data3 now read correctly, will not freeze entry article . Auto removal of FADEF00D and FADE0D8A events created by PSA . External subroutine removal doesn't corrupt save file . Setting an offset doesn't require the value to already have an offset . Offset editor fixed up, had some problems before and did not work. . Culture Invariant Float.Parse on most parse uses . Loads animations from U8 files correctly . WAV files now parse correctly when there is text info in the header . InsertChild now adds node in right location on node tree . Event changes in viewer updates on the selected frame right after being modified . Model visibility switch nodes sync in number between references . Added REL stage converter coded by libertyernie to REL right click menu . Added new parameter node handling for events . Added new parameter node for external GFX using new text file "GFXFiles.txt" for the gfx file names. Names originally written down by Eternal Yoshi. . CLR0 parsing/rebuilding remade. Full editing support and v4 support . Removed all unknowns from all formats found in BRRES files. All flags are fully known as well. . Fixed CHR0/SRT0 manual editors . Fixed SRT0 flag handling . Better lighting in model viewer . SCN0 fully editable and rebuildable . "Part2" entries updated to UserData entries with full support
- v0.67- (7/7/2012) - BrawlLib v0.14 . New moveset editor & rebuilder . SCN0 rebuilder revised . PAT0 rebuilder revised . New text animation importer for use with a specific maxscript for 3ds Max . Various bug fixes
- v0.66b- (4/17/2012) - BrawlLib v0.13b . Various bug fixes . Edited viewer based on feedback . Previewer now allows saving viewer settings
- v0.66- (4/10/2012) - BrawlLib v0.13 . New SRT0 editor & rebuilder . New SHP0 editor & rebuilder . New PAT0 editor & revised rebuilder . New Model Previewer - now supports different animation editors . All animation types & versions supported
- v0.65c- (2/4/2012) - BrawlLib v0.12c . Made MDL0 nodes modulate their values and each other more closely . Finished Wavefront OBJ exporter (Right click an MDL0 object and export it as OBJ) . Fixed up the DAE exporter again . Undo and Redo buttons have been fixed for the model viewer and added to the collision viewer (All coded by Xiggah) . Texture matrices can now be used without any problems in-game (moving textures) . Added stage default support for DAE importer
- v0.65b- (1/28/2012) - BrawlLib v0.12b . Changed GX enums to be easier to understand . Updated MDL0 Shader display . Added an MDL0 object importer and duplicator . Added SCN0, SRT0 and STPM rebuilding . Fixed tons of bugs! . Added REFT image importer and rebuilder . Added new node icons . Changed around material values
- v0.65- (11/8/2011) - BrawlLib v0.12 . Finished the DAE model importer! . Finished the model rebuilder completely (everything is now editable). . Finalized shader editing. . Fixed the v5 CHR0 saving bug. . Added support for v8 MDL0s. . Added minor REFF support. . Added a new menu to the model previewer . Many bugfixes
- v0.64d- (08/31/2011) - BrawlLib v0.11d (BlackJax96 takes over development from here on) . Fixed "Clean" button and the keyframe viewer. . Added animation porter . Added "Rename All" and "Edit All" buttons to BRRES nodes. . Added support for viewing multiple models in the model previewer (CTRL+H opens model switcher). . Finished model rebuilder, for the most part. . Finished DAE parser. . Added support for editing most MDL0 shader values. . Added undo and redo functions in the model previewer. . Changed the way models are rendered. . Added support for v5 CHR0s and v10 and v11 MDL0s. . Added the ability to drag files into the model previewer to view all the models in the file. . Added bone tree editing functions. . Added support for editing/saving MRG files. . Added right click menus to the Trans, Rot and Scale labels for editing keyframes in the model previewer. . Many bugfixes and small additions/changes to things
- v0.63d- (02/08/2010) - BrawlLib v0.10d . Fixed animation encoder bug. . Fixed bug dealing with single CLR entries saving improperly. - v0.63c- (01/31/2010) - BrawlLib v0.10c . Various bugfixes . Added VIS editor . Animation frames now interpolate properly. - v0.63b- (01/19/2010) - BrawlLib v0.10b . Fixed image encoding bug related to image format on older systems. . Fixed save dialog extension bug. Also, numbered extensions will now have real extension added. . Fixed rendering bug related to materials without textures. . Added various features to collision editor. - v0.63 - (01/18/2010) - BrawlLib v0.10 . Fixed a bug that was causing decal textures to link improperly in MDL files. . Added minor support for EFLS resources. . Added support for stage collision files. . Added editor for stage collision files. . Fixed minor bug that was affecting the way non-textured polygons are rendered (alloy models). . Increased maximum frame delay for animation playback. . Fixed bug in OpenGL rendering dealing with depth buffer precision.
- v0.62b- (01/06/2010) - BrawlLib v0.09b . Added minor support for single-color CLR0 entries. Fixes many crashing problems. . Fixed bug in CI4 encoder that was corrupting image blocks. . Added floor option to model viewer. . CopyAll/PasteAll in model viewer now saves the animation state globally. . Color lists now have two color columns, one with transparency and one without. . Added gradient generator to color list.
- v0.62 - (01/05/2010) - BrawlLib v0.09 . Added support for CLR0 nodes. . Added color dialog for CLR0 and PLT0 editing. . New Median Cut quantizer using method from GIMP library. . Added features to BRSTM converter dialog. . Fixed CHR bug that was causing long animations to cut short. . Fixed bug in MSBin parser/decoder dealing with empty strings.
- v0.61 - (12/24/2009) - BrawlLib v0.08 . Added audio playback controls. . Added brstm converter. . Added CopyAll/PasteAll/Clean/Clear controls to animation editor. . Added support for RWSD/RBNK/RSEQ files. . Added RSAR file list.
- v0.60c- (12/01/2009) - BrawlLib v0.07c . Fixed various bugs with the CHR0 encoder. . Fixed a bug in the MSBin encoder for border entries.
- v0.60b- (11/30/2009) - BrawlLib v0.07b . Fixed various bugs with the CHR0 encoder. . Fixed a bug in the MSBin encoder for border entries. . Various improvements to the model editor: Added option panel. Added cut/copy/paste/insert/delete buttons to animation panel. Animation length can be set from the playback panel. Added context menu for animation list, which allows for faster import/export. Fixed issue with texture layers. Now all textures are rendered until it can be fixed. Adjusted keyboard controls. . Fixed bug with GLPanel not closing properly.
- v0.60 - (11/24/2009) - BrawlLib v0.07 . Added tons of features to model editor, including: Animation previewer/editor. Improved model editor features/controls. Improved OpenGL initialization/support. . Fixed a bug that was causing PAC files to export uncompressed regardless of setting. . Fixed a bug in the CHR0 decoder. . Most new features are library improvements. Please see BrawlLib.txt for more details.
- v0.59 - (11/08/2009) - BrawlLib v0.06 . Re-added settings dialog. . Various menu improvements/features. . CHR0 entries can now be manipulated. . Added editor for CHR0 keyframes. . Added editor for MSBin messages. . Re-added RSAR support with new organization. (No audio features yet) . Improved CMPR algorithm using modified code from the NVidia Texture Tools. . Lowered OpenGL version to 1.1, and changed the way mipmaps are generated. . Added FileAssociation and FileType classes. . Added CHR0 encoder/decoder, with KeyframeCollection class. . Added MSBinEditor for editing MSBin messages.
- v0.58b- (10/24/2009) - BrawlLib v0.05 . Re-integration with BrawlLib is nearly complete. Audio support still isn't finished. . Added support for the following new controls from BrawlLib: ModelPanel TextureConverterDialog . New menu system. . Due to new rebuild enhancements, nodes can now be created, renamed, and deleted. . Various improvements to node stability. . Certain resources now automatically convert with the Export/Replace(string) command. Mainly TEX0Node. . Support for binary string trees has been added. (Use ResourceEntry.Build) . More BRES entries now link to the string table. This allows other resources to change size. . BRES entries now do post-processing, and link groups/nodes to the binary tree.
- BrawlLib v0.04 - (10/11/2009) . FileMaps now hold on to a FileStream object until the map is closed. . Added OpenGL support with basic functions. . Added GLPanel/ModelPanel controls . Moved MDL0 node classes to separate folder for organization. . MDL0 support has been improved. . GLModel objects can now be created from MDL0Node. . GLModel can be attached to ModelPanel for rendering.
- BrawlLib v0.03 - (10/02/2009) . Fixed many bugs dealing with node memory: BRES entries properly adjust offsets in OnRebuild. BRESGroup addresses change on rebuild. Parent nodes (ARC/BRES) don't release sources until rebuild is complete. Initialization flag is set so nodes know when to initialize from a raw source. . Began support for OpenGL/Models with OGL natives and GLPanel. . Added minor speed tweak to LZ77 decompression.
- v0.58 - (09/29/2009) - BrawlLib v0.02 . Name has changed to BrawlBox (previously SmashBox) . Program has been separated, allowing for the creation of BrawlLib. . Now has minor Linux support. . Audio nodes/controls have been temporarily disabled until BrawlLib can be updated. . You can now use SaveAs on the current working file, so long as changes have been made. . Added the ability to construct a resource tree from scratch. . Various properties from ResourceTreeNode, TEX0Node and PLT0Node can now be written to.
- BrawlLib v0.01 - (09/28/2009) . Initial release
- v.057 - (08/23/2009) . Added support for brstm files. . Increased support for brsar audio packages. . Added audio playback control for use with brsar and brstm files. . Added the ability to export audio to .wav format.
- v0.56 - (08/09/2009) . Added support for TGA images. . Re-wrote the LZ77 algorithm for increased speed. . Due to compatibility problems with paletted images and transparent colors. All images are now exported in 32-bit format.
- v0.55b - (08/04/2009) . Fixed a bug that was causing unknown files to disappear entirely. (Thanks lavamage) . Fixed a bug with pre-paletted textures that was causing them to recreate the palette improperly. (Thanks kid craft 24/sonic master) . Added a progress bar for those long compression jobs. . Discovered another portion of model files that needs an entry in the BRES string table. . The texture replacer will now default to the original texture/palette/mip settings.
- v0.55 - (08/03/2009) . Fixed various issues with Common pac files. . Fixed an issue with certain compressed files. Character selection portraits are now supported. . Added support for more image formats (bmp, gif, jpg, still waiting on TGA) . Started incorporating change tracking which offers improvements such as: a. Active discovery; Nodes will only be interpreted as they are browsed. Helps with large/embedded files. b. Only portions of the tree that have changed will be re-built. c. Unchanged nodes will be copied back as-is. This helps with speed and compatibility. . Removed Managed DirectX 9 dependency. Was causing assembly problems. . Added child-only properties
- v0.54 - (08/01/2009) . Fixed a bug during texture replacing that was causing problems in some files (common pacs). . Added various improvements to MDL0 file browsing. . Confirmed successful rebuilding of 'common' files.
- v0.53b - (07/29/2009) . Fixed a bug dealing with vertex/color data types by removing vertex parsing.
- v0.53 - (07/25/2009) . Added minor support for the following brres resources (fixes some texture replacing issues): a. AnmVis (VIS0) b. AnmScn (SCN0) c. AnmTexShp (SHP0) d. AnmTexSrt (SRT0) e. AnmTexPat (PAT0) . Confirmed successful rebuilding of stage files.
- v0.52c - (07/23/2009) . Added some support for CHR0 and CLR0 animations. . A bit more support for MDL0 files (can browse data info) . Fixed an issue with character files with transformations.
- v0.52b - (07/17/2009) . Fixed a few small bugs with brres generation. . Confirmed texture replacement works, so long as the same texture format is used.
- v0.52 - (07/16/2009) . All texture formats are now supported for replacing. . Texture replacer has been updated to allow indexed textures. . Nodes can now be inserted/deleted/moved. . Added some support for MDL0 and brsar files. (Entry viewing only) . Remade node structure (again). Archives are rebuilt entirely when they are saved. . PCS files compress a little faster. . Added About window.
- v0.51 - (06/28/2009) . Texture replacing works fairly well, still doesn't support indexed textures. . Program can display/generate mipmaps. (Use the arrows on the preview panel to change mip level) . Node move/resize functions, allows for better data replacement . PCS entries are now re-packed before saving . Embedded PCS nodes are better supported - v0.50 - (06/23/2009) . Original release
|
|
« Last Edit: June 27, 2015, 06:15:55 PM by BlackJax96 »
|
Logged
|
|
|
|
|
|
|
« Reply #1 on: December 13, 2010, 08:46:05 PM » |
|
I'm pretty sure we would have to define EVERYTHING in .mdl0 first. SO start there.
|
|
|
Logged
|
|
|
|
|
|
|
« Reply #2 on: December 13, 2010, 08:49:16 PM » |
|
Yep, I'm looking for offsets for everything now. I'm going to update the main post as things progress.
|
|
|
Logged
|
|
|
|
|
|
|
« Reply #3 on: December 13, 2010, 09:27:20 PM » |
|
lol if you need info on mdl0 ..look at the bone tree editor thread and material collab...tcll is doing mostly everything. He made a template which has lots of offsets done
|
|
|
Logged
|
|
|
|
|
|
|
« Reply #4 on: December 13, 2010, 09:44:28 PM » |
|
Awesome.
|
|
« Last Edit: January 08, 2011, 06:27:25 PM by BlackJax96 »
|
Logged
|
|
|
|
|
|
|
« Reply #5 on: December 14, 2010, 10:16:56 AM » |
|
here: ^_^ <?xml version="1.0"?> <!DOCTYPE binary_file_format SYSTEM "BinaryFileFormat.dtd"> <binary_file_format name="MDL0" type_name="" comment="" expr="" default_byte_order="big" default_read_only="false" default_char_set="ansi"> <define_struct type_name="offset_name" comment="" expr=""> <data type="int" name="str_len" format="unsigned" len="1" display=""/> <data type="string" name="name" format="ascii" len="str_len" display=""/> </define_struct> <define_struct type_name="bounds" comment="" expr=""> <data type="int" name="min_X" format="unsigned" len="4" display=""/> <data type="int" name="min_Y" format="unsigned" len="4" display=""/> <data type="int" name="min_Z" format="unsigned" len="4" display=""/> <data type="int" name="max_X" format="unsigned" len="4" display=""/> <data type="int" name="max_Y" format="unsigned" len="4" display=""/> <data type="int" name="max_Z" format="unsigned" len="4" display=""/> <data type="none" name="pad" len="8"/> </define_struct> <define_struct type_name="relocation_group" comment="" expr=""> <data type="int" name="block_len" format="unsigned" len="4" display=""/> <data type="int" name="num_offsets" format="unsigned" len="4" display=""/> <data type="int" name="tag" format="unsigned" len="4" display="hex"/> <data type="int" name="unk1" format="unsigned" len="2" display="hex"/> <data type="int" name="unk2" format="unsigned" len="2" display="hex"/> <data type="int" name="pad" format="unsigned" len="8" display="hex"/> </define_struct> <define_struct type_name="relocation_offset" comment="" expr=""> <data type="int" name="ID" format="unsigned" len="2" display=""/> <data type="int" name="unk1" format="unsigned" len="2" display="hex"/> <data type="int" name="unk2" format="unsigned" len="2" display="hex"/> <data type="int" name="unk3" format="unsigned" len="2" display="hex"/> <data type="int" name="string_offset" format="unsigned" len="4" display=""/> <data type="int" name="data_offset" format="unsigned" len="4" display=""/> </define_struct> <define_struct type_name="Definitions" comment="" expr=""> <for name="type" count="" stop_test="this.type == 1" type_name="" comment=""> <struct name="" type_name="" comment="" expr="type{this.type}"> <data type="int" name="type" format="unsigned" len="1" display=""/> <if test="type == 2" comment=""> <struct name="t2" type_name="" comment="" expr="({this.ID1},{this.ID2})"> <data type="int" name="ID1" format="unsigned" len="2" display=""/> <data type="int" name="ID2" format="unsigned" len="2" display=""/> </struct> </if> <if test="type == 3" comment=""> <struct name="t3" type_name="" comment="" expr="({this.ID}) ({this.count})"> <data type="int" name="ID" format="unsigned" len="2" display=""/> <data type="int" name="count" format="unsigned" len="1" display=""/><for name="tmp" count="count || count - 1" stop_test="count == 0" type_name="" comment=""><data type="none" name="" len="6"/></for></struct> </if> <if test="type == 4" comment=""> <struct name="t4" type_name="" comment="" expr="({this.ID1},{this.ID2},{this.ID3},{this.ID4})"> <data type="int" name="ID1" format="unsigned" len="2" display=""/> <data type="int" name="ID2" format="unsigned" len="2" display=""/> <data type="int" name="ID3" format="unsigned" len="2" display=""/> <data type="int" name="ID4" format="unsigned" len="1" display=""/> </struct> </if> <if test="type == 5" comment=""> <struct name="t5" type_name="" comment="" expr="({this.ID1},{this.ID2})"> <data type="int" name="ID1" format="unsigned" len="2" display=""/> <data type="int" name="ID2" format="unsigned" len="2" display=""/> </struct> </if> </struct> </for> </define_struct> <define_struct type_name="Bones" comment="" expr=""> <struct name="bone_header" type_name="" comment="" expr=""> <data type="int" name="header_len" len="4" format="unsigned" display=""/> <data type="int" name="MDL0_offset" len="4" format="signed" display=""/> <data type="int" name="string_offset" len="4" format="unsigned" display=""/> <data type="int" name="bone_index" len="4" format="unsigned" display=""/> <data type="int" name="node_ID" len="4" format="unsigned" display=""/> <data type="int" name="flags" len="4" format="unsigned" display=""/> <data type="int" name="pad" len="8" format="unsigned" display=""/> <struct name="loc_rot_sca" type_name="" comment="" expr=""> <data type="int" name="sca_X" format="unsigned" len="4" display=""/> <data type="int" name="sca_Y" len="4" format="unsigned" display=""/> <data type="int" name="sca_Z" len="4" format="unsigned" display=""/> <data type="int" name="rot_X" len="4" format="unsigned" display=""/> <data type="int" name="rot_Y" len="4" format="unsigned" display=""/> <data type="int" name="rot_Z" len="4" format="unsigned" display=""/> <data type="int" name="loc_X" len="4" format="unsigned" display=""/> <data type="int" name="loc_Y" len="4" format="unsigned" display=""/> <data type="int" name="loc_Z" len="4" format="unsigned" display=""/> </struct> <struct name="bound" type_name="" comment="" expr=""> <data type="int" name="min_X" len="4" format="unsigned" display=""/> <data type="int" name="min_Y" len="4" format="unsigned" display=""/> <data type="int" name="min_Z" len="4" format="unsigned" display=""/> <data type="int" name="max_X" len="4" format="unsigned" display=""/> <data type="int" name="max_Y" len="4" format="unsigned" display=""/> <data type="int" name="max_Z" len="4" format="unsigned" display=""/> </struct> <data type="int" name="parent" len="4" format="signed" display=""/> <data type="int" name="child" len="4" format="unsigned" display=""/> <data type="int" name="next" len="4" format="unsigned" display=""/> <data type="int" name="prev" len="4" format="unsigned" display=""/> <data type="int" name="part2" len="4" format="unsigned" display=""/> </struct> <struct name="frame_matrix" type_name="" comment="" expr=""> <data type="int" name="s_1_1" format="signed" len="4" display=""/> <data type="int" name="s_2_1" format="signed" len="4" display=""/> <data type="int" name="s_3_1" format="signed" len="4" display=""/> <data type="int" name="s_4_1" format="signed" len="4" display=""/> <data type="int" name="s_1_2" format="signed" len="4" display=""/> <data type="int" name="s_2_2" format="signed" len="4" display=""/> <data type="int" name="s_3_2" format="signed" len="4" display=""/> <data type="int" name="s_4_2" format="signed" len="4" display=""/> <data type="int" name="s_1_3" format="signed" len="4" display=""/> <data type="int" name="s_2_3" format="signed" len="4" display=""/> <data type="int" name="s_3_3" format="signed" len="4" display=""/> <data type="int" name="s_4_3" format="signed" len="4" display=""/> </struct> <struct name="inverse_matrix" type_name="" comment="" expr=""> <data type="int" name="s_1_1" format="signed" len="4" display=""/> <data type="int" name="s_2_1" format="signed" len="4" display=""/> <data type="int" name="s_3_1" format="signed" len="4" display=""/> <data type="int" name="s_4_1" format="signed" len="4" display=""/> <data type="int" name="s_1_2" format="signed" len="4" display=""/> <data type="int" name="s_2_2" format="signed" len="4" display=""/> <data type="int" name="s_3_2" format="signed" len="4" display=""/> <data type="int" name="s_4_2" format="signed" len="4" display=""/> <data type="int" name="s_1_3" format="signed" len="4" display=""/> <data type="int" name="s_2_3" format="signed" len="4" display=""/> <data type="int" name="s_3_3" format="signed" len="4" display=""/> <data type="int" name="s_4_3" format="signed" len="4" display=""/> </struct> </define_struct> <define_struct type_name="Vertices" comment="" expr=""> <struct name="vertice_header" type_name="" comment="" expr=""> <data type="int" name="block_size" len="4" format="unsigned" display=""/> <data type="int" name="MDL0_offset" len="4" format="signed" display=""/> <data type="int" name="data_offset" len="4" format="unsigned" display=""/> <data type="int" name="string_offset" len="4" format="unsigned" display=""/> <data type="int" name="ID" len="4" format="unsigned" display=""/> <data type="int" name="isXYZ" len="4" format="unsigned" display=""/> <data type="int" name="type" len="4" format="unsigned" display=""/> <data type="int" name="modifier" len="1" format="unsigned" display=""/> <data type="int" name="entry_stride" len="1" format="unsigned" display=""/> <data type="int" name="num_vertices" len="2" format="unsigned" display=""/> <if test="isXYZ == 1" comment=""> <use_struct name="bounds" expr="" type_name="bounds" comment=""/> </if> </struct> <data type="string" name="vertices" len="vertice_header.entry_stride * vertice_header.num_vertices" format="default" display="vert structures" comment="I could've put a 'FOR' here, but it'd take too long when loading the file"/> <data type="none" name="pad" len="vertice_header.block_size - (vertice_header.entry_stride*vertice_header.num_vertices) - vertice_header.data_offset"/> </define_struct> <define_struct type_name="Normals" comment="" expr=""> <struct name="normal_header" type_name="" comment="" expr=""> <data type="int" name="block_size" len="4" format="unsigned" display=""/> <data type="int" name="MDL0_offset" len="4" format="signed" display=""/> <data type="int" name="data_offset" len="4" format="unsigned" display=""/> <data type="int" name="string_offset" len="4" format="unsigned" display=""/> <data type="int" name="ID" len="4" format="unsigned" display=""/> <data type="int" name="isXYZ" len="4" format="unsigned" display=""/> <data type="int" name="type" len="4" format="unsigned" display=""/> <data type="int" name="modifier" len="1" format="unsigned" display=""/> <data type="int" name="entry_stride" len="1" format="unsigned" display=""/> <data type="int" name="num_normals" len="2" format="unsigned" display=""/> <if test="isXYZ == 1" comment=""> <use_struct name="bounds" expr="" type_name="bounds" comment=""/> </if> </struct> <data type="string" name="normals" format="default" display="normal structures" len="normal_header.entry_stride*normal_header.num_normals" comment="I could've put a 'FOR' here, but it'd take too long when loading the file"/> <data type="none" name="pad" len="normal_header.block_size - (normal_header.entry_stride*normal_header.num_normals) - normal_header.data_offset"/> </define_struct> <define_struct type_name="Colors" comment="" expr=""> <struct name="color_header" type_name="" comment="" expr=""> <data type="int" name="block_size" len="4" format="signed" display=""/> <data type="int" name="MDL0_offset" len="4" format="signed" display=""/> <data type="int" name="data_offset" len="4" format="signed" display=""/> <data type="int" name="string_offset" len="4" format="signed" display=""/> <data type="int" name="ID" len="4" format="signed" display=""/> <data type="int" name="isRGBA" len="4" format="signed" display=""/> <data type="int" name="type" len="4" format="signed" display=""/> <data type="int" name="entry_stride" len="1" format="signed" display=""/> <data type="int" name="modifier" len="1" format="signed" display=""/> <data type="int" name="num_colors" len="2" format="signed" display=""/> </struct> <for name="color" count="color_header.num_colors || color_header.num_colors - 1" stop_test="color_header.num_colors == 0" type_name="" comment=""> <data type="none" name="color" len="color_header.entry_stride"/> </for> <data type="none" name="pad" len="color_header.block_size - (color_header.num_colors*color_header.entry_stride) - 32"/> </define_struct> <define_struct type_name="UV_Points" comment="" expr=""> <struct name="UV_header" type_name="" comment="" expr=""> <data type="int" name="block_size" len="4" format="unsigned" display=""/> <data type="int" name="MDL0_offset" len="4" format="signed" display=""/> <data type="int" name="data_offset" len="4" format="unsigned" display=""/> <data type="int" name="string_offset" len="4" format="unsigned" display=""/> <data type="int" name="ID" len="4" format="unsigned" display=""/> <data type="int" name="isXY" len="4" format="unsigned" display=""/> <data type="int" name="type" len="4" format="unsigned" display=""/> <data type="int" name="modifier" len="1" format="unsigned" display=""/> <data type="int" name="entry_stride" len="1" format="unsigned" display=""/> <data type="int" name="num_UVs" len="2" format="unsigned" display=""/> <if test="isXY == 1" comment=""> <struct name="bounds" expr="" type_name="" comment=""> <data type="int" name="min_X" format="unsigned" len="4" display=""/> <data type="int" name="min_Y" format="unsigned" len="4" display=""/> <data type="int" name="max_X" format="unsigned" len="4" display=""/> <data type="int" name="max_Y" format="unsigned" len="4" display=""/> <data type="none" name="pad" len="16"/> </struct> </if> </struct> <data type="string" name="UVs" len="UV_header.entry_stride * UV_header.num_UVs" format="default" display="uv structures" comment="I could've put a 'FOR' here, but it'd take too long when loading the file"/> <data type="none" name="pad" len="UV_header.block_size - (UV_header.entry_stride*UV_header.num_UVs) - UV_header.data_offset"/> </define_struct> <define_struct type_name="Shaders" comment="" expr=""> <struct name="header" type_name="" comment="" expr=""> <data type="int" name="block_size" len="4" format="unsigned" display=""/> <data type="int" name="MDL0_offset" len="4" format="signed" display=""/> <data type="int" name="string_offset" len="4" format="unsigned" display=""/> <data type="int" name="ID" len="4" format="unsigned" display=""/> <data type="int" name="unk1" len="4" format="unsigned" display=""/> <data type="int" name="textures" len="1" format="unsigned" display=""/> <data type="int" name="num_layers" len="1" format="unsigned" display=""/> <data type="int" name="Flag3" len="1" format="unsigned" display=""/> <data type="int" name="Flag4" len="1" format="unsigned" display=""/> <data type="int" name="type" len="4" format="unsigned" display=""/> <data type="int" name="Flag5" len="1" format="unsigned" display=""/> <data type="int" name="Flag6" len="1" format="unsigned" display=""/> <data type="int" name="Flag7" len="1" format="unsigned" display=""/> <data type="int" name="Flag8" len="1" format="unsigned" display=""/> <data type="int" name="unk3" format="unsigned" len="4" display=""/> <data type="int" name="unk4" format="signed" len="4" display=""/> <data type="int" name="material_offset" format="signed" len="4" display=""/> <data type="int" name="num_textures" format="signed" len="4" display=""/> <data type="int" name="textures_offset" format="signed" len="4" display=""/> <data type="int" name="P4_offset" format="signed" len="4" display=""/> <data type="int" name="P5_offset" format="signed" len="4" display=""/> <data type="int" name="P6_offset" format="signed" len="4" display=""/> </struct> <jump offset="header.material_offset+(header.MDL0_offset*-1)" comment="" origin="start"> <use_struct name="Material_Reference" expr="" type_name="Materials" comment=""/> </jump> <if test="header.textures_offset != 0" comment=""> <jump offset="header.textures_offset+(header.MDL0_offset*-1)" comment="" origin="start"> <for name="texture" count="header.textures || header.textures -1" stop_test="header.textures == 0" type_name="" comment=""> <struct name="texture" type_name="" comment="" expr="{this.offset_name.name}"> <data type="int" name="string_offset" format="signed" len="4" display=""/> <data type="int" name="pad" len="4" format="signed" display=""/> <data type="int" name="unk1" format="signed" len="4" display=""/> <data type="int" name="unk2" format="signed" len="4" display=""/> <data type="int" name="unk3" format="signed" len="4" display=""/> <data type="int" name="unk4" format="signed" len="4" display=""/> <data type="int" name="layerID1" format="signed" len="4" display=""/> <data type="int" name="layerID2" format="signed" len="4" display=""/> <data type="int" name="unk5" format="signed" len="4" display=""/> <data type="int" name="unk6" format="signed" len="4" display=""/> <data type="int" name="float" format="unsigned" len="4" display=""/> <data type="int" name="unk7" format="signed" len="4" display=""/> <data type="int" name="unk8" format="signed" len="4" display=""/> <jump offset="string_offset -53" comment="" origin="current"> <use_struct name="offset_name" expr="" type_name="offset_name" comment=""/> </jump> </struct> </for> </jump> </if> <if test="header.P4_offset != 0" comment=""> <jump offset="header.P4_offset+(header.MDL0_offset*-1)" comment="" origin="start"> <struct name="P4" type_name="" comment="" expr=""> <data type="int" name="tmp" format="signed" len="4" display=""/> </struct> </jump> </if> <if test="header.P5_offset != 0" comment=""> <jump offset="header.P5_offset+(header.MDL0_offset*-1)" comment="" origin="start"> <struct name="P5" type_name="" comment="" expr=""> <data type="none" name="tmp" len="384"/> </struct> </jump> </if> <if test="header.P6_offset != 0" comment=""> <jump offset="header.P6_offset+(header.MDL0_offset*-1)" comment="" origin="start"> <struct name="P6" type_name="" comment="" expr=""> <data type="none" name="tmp" len="384"/> </struct> </jump> </if> </define_struct> <define_struct type_name="Materials" comment="" expr=""> <struct name="header" type_name="" comment="" expr=""> <data type="int" name="block_length" format="signed" len="4" display=""/> <data type="int" name="MDL0_offset" format="signed" len="4" display=""/> <data type="int" name="ID" format="signed" len="4" display=""/> <data type="int" name="unk" format="unsigned" len="1" display=""/> </struct> <data type="none" name="tmp" len="header.block_length - 13"/> </define_struct> <define_struct type_name="Polygons" comment="" expr=""> <struct name="header" type_name="" comment="" expr=""> <data type="none" name="tmp" len="4"/> </struct> </define_struct> <define_struct type_name="Textures" comment="" expr=""> <data type="int" name="textures" format="signed" len="4" display=""/> <for name="texture" count="textures || textures - 1" stop_test="textures == 0" type_name="" comment=""> <struct name="texture" type_name="" comment="" expr="X: {this.X}, Y: {this.Y}"> <data type="int" name="X" format="unsigned" len="4" display=""/> <data type="int" name="Y" format="unsigned" len="4" display=""/> </struct> </for> </define_struct> <define_struct type_name="Pallets" comment="" expr=""> <data type="int" name="pallets" format="signed" len="4" display=""/> <for name="pallet" count="pallets || pallets - 1" stop_test="pallets == 0" type_name="" comment=""> <struct name="texture" type_name="" comment="" expr="X: {this.X}, Y: {this.Y}"> <data type="int" name="X" format="unsigned" len="4" display=""/> <data type="int" name="Y" format="unsigned" len="4" display=""/> </struct> </for> </define_struct> <struct name="header" type_name="" comment="" expr=""> <data type="string" name="magic" len="4" format="ascii" display=""/> <data type="int" name="filesize" format="unsigned" len="4" display=""/> <data type="int" name="sections" format="unsigned" len="4" display=""/> <data type="int" name="nodes" format="signed" len="4" display=""/> <struct name="lists" type_name="" comment="" expr=""> <data type="int" name="Definitions" format="unsigned" len="4" display=""/> <data type="int" name="Bones" format="unsigned" len="4" display=""/> <data type="int" name="Vertices" format="unsigned" len="4" display=""/> <data type="int" name="Normals" format="unsigned" len="4" display=""/> <data type="int" name="Colors" format="unsigned" len="4" display=""/> <data type="int" name="UV_Points" format="unsigned" len="4" display=""/> <data type="int" name="Shaders" format="unsigned" len="4" display=""/> <data type="int" name="Materials" format="unsigned" len="4" display=""/> <data type="int" name="Polygons" format="unsigned" len="4" display=""/> <data type="int" name="Textures" format="unsigned" len="4" display=""/> <data type="int" name="Pallets" format="unsigned" len="4" display=""/> </struct> <data type="int" name="name_offset" format="unsigned" len="4" display=""/> <data type="int" name="header_len" format="unsigned" len="4" display=""/> <data type="int" name="header_offset" format="signed" len="4" display=""/> <data type="int" name="unk1" format="unsigned" len="4" display=""/> <data type="int" name="unk2" format="unsigned" len="4" display=""/> <data type="int" name="num_verticies" format="unsigned" len="4" display=""/> <data type="int" name="num_faces" format="unsigned" len="4" display=""/> <data type="int" name="unk3" format="unsigned" len="4" display=""/> <data type="int" name="num_nodes" format="unsigned" len="4" display=""/> <data type="int" name="version" format="unsigned" len="4" display=""/> <data type="int" name="unk4" format="unsigned" len="2" display=""/> <data type="int" name="unk5" format="unsigned" len="2" display=""/> <struct name="bounds" type_name="" comment="" expr=""> <data type="int" name="min_X" format="unsigned" len="4" display=""/> <data type="int" name="min_Y" format="unsigned" len="4" display=""/> <data type="int" name="min_Z" format="unsigned" len="4" display=""/> <data type="int" name="max_X" format="unsigned" len="4" display=""/> <data type="int" name="max_Y" format="unsigned" len="4" display=""/> <data type="int" name="max_Z" format="unsigned" len="4" display=""/> </struct> </struct> <jump offset="header.nodes * -1" comment="" origin="start"> <struct name="nodes" type_name="" comment="" expr=""> <data type="int" name="num_nodes" format="signed" len="4" display=""/> <for name="node" count="num_nodes || num_nodes - 1" stop_test="num_nodes == 0" type_name="" comment=""> <data type="int" name="node" format="signed" len="4" display=""/> </for> </struct> </jump> <if test="header.lists.Definitions != 0" comment=""> <jump offset="header.lists.Definitions" comment="" origin="start"> <struct name="Definitions" type_name="" comment="" expr=""> <use_struct name="relocation_group" expr="" type_name="relocation_group" comment=""/> <for name="data" count="relocation_group.num_offsets || relocation_group.num_offsets - 1" stop_test="relocation_group.num_offsets == 0" type_name="" comment=""> <struct name="data" type_name="" comment="" expr="{this.offset_name.name}"> <use_struct name="relocation_offset" expr="" type_name="relocation_offset" comment=""/> <jump offset="relocation_offset.data_offset + header.lists.Definitions" comment="" origin="start"> <use_struct name="Definitions" expr="" type_name="Definitions" comment=""/> </jump> <jump offset="relocation_offset.string_offset + header.lists.Definitions - 1" comment="" origin="start"> <use_struct name="offset_name" expr="" type_name="offset_name" comment=""/> </jump> </struct> </for> </struct> </jump> </if> <if test="header.lists.Bones != 0" comment=""> <jump offset="header.lists.Bones" comment="" origin="start"> <struct name="Bones" type_name="" comment="" expr=""> <use_struct name="relocation_group" expr="" type_name="relocation_group" comment=""/> <for name="data" count="relocation_group.num_offsets || relocation_group.num_offsets - 1" stop_test="relocation_group.num_offsets == 0" type_name="" comment=""> <struct name="data" type_name="" comment="" expr="{this.offset_name.name}"> <use_struct name="relocation_offset" expr="" type_name="relocation_offset" comment=""/> <jump offset="relocation_offset.data_offset + header.lists.Bones" comment="" origin="start"> <use_struct name="Bone_data" expr="" type_name="Bones" comment=""/> </jump> <jump offset="relocation_offset.string_offset + header.lists.Bones - 1" comment="" origin="start"> <use_struct name="offset_name" expr="" type_name="offset_name" comment=""/> </jump> </struct> </for> </struct> </jump> </if> <if test="header.lists.Vertices != 0" comment=""> <jump offset="header.lists.Vertices" comment="" origin="start"> <struct name="Vertices" type_name="" comment="" expr=""> <use_struct name="relocation_group" expr="" type_name="relocation_group" comment=""/> <for name="data" count="relocation_group.num_offsets || relocation_group.num_offsets - 1" stop_test="relocation_group.num_offsets == 0" type_name="" comment=""> <struct name="data" type_name="" comment="" expr="{this.offset_name.name}"> <use_struct name="relocation_offset" expr="" type_name="relocation_offset" comment=""/> <jump offset="relocation_offset.data_offset + header.lists.Vertices" comment="" origin="start"> <use_struct name="Vertices" expr="" type_name="Vertices" comment=""/> </jump> <jump offset="relocation_offset.string_offset + header.lists.Vertices - 1" comment="" origin="start"> <use_struct name="offset_name" expr="" type_name="offset_name" comment=""/> </jump> </struct> </for> </struct> </jump> </if> <if test="header.lists.Normals != 0" comment=""> <jump offset="header.lists.Normals" comment="" origin="start"> <struct name="Normals" type_name="" comment="" expr=""> <use_struct name="relocation_group" expr="" type_name="relocation_group" comment=""/> <for name="data" count="relocation_group.num_offsets || relocation_group.num_offsets - 1" stop_test="relocation_group.num_offsets == 0" type_name="" comment=""> <struct name="data" type_name="" comment="" expr="{this.offset_name.name}"> <use_struct name="relocation_offset" expr="" type_name="relocation_offset" comment=""/> <jump offset="relocation_offset.data_offset + header.lists.Normals" comment="" origin="start"> <use_struct name="Normals" expr="" type_name="Normals" comment=""/> </jump> <jump offset="relocation_offset.string_offset + header.lists.Normals - 1" comment="" origin="start"> <use_struct name="offset_name" expr="" type_name="offset_name" comment=""/> </jump> </struct> </for> </struct> </jump> </if> <if test="header.lists.Colors != 0" comment=""> <jump offset="header.lists.Colors" comment="" origin="start"> <struct name="Colors" type_name="" comment="" expr=""> <use_struct name="relocation_group" expr="" type_name="relocation_group" comment=""/> <for name="data" count="relocation_group.num_offsets || relocation_group.num_offsets - 1" stop_test="relocation_group.num_offsets == 0" type_name="" comment=""> <struct name="data" type_name="" comment="" expr="{this.offset_name.name}"> <use_struct name="relocation_offset" expr="" type_name="relocation_offset" comment=""/> <jump offset="relocation_offset.data_offset + header.lists.Colors" comment="" origin="start"> <use_struct name="Colors" expr="" type_name="Colors" comment=""/> </jump> <jump offset="relocation_offset.string_offset + header.lists.Colors - 1" comment="" origin="start"> <use_struct name="offset_name" expr="" type_name="offset_name" comment=""/> </jump> </struct> </for> </struct> </jump> </if> <if test="header.lists.UV_Points != 0" comment=""> <jump offset="header.lists.UV_Points" comment="" origin="start"> <struct name="UV_Points" type_name="" comment="" expr=""> <use_struct name="relocation_group" expr="" type_name="relocation_group" comment=""/> <for name="data" count="relocation_group.num_offsets || relocation_group.num_offsets - 1" stop_test="relocation_group.num_offsets == 0" type_name="" comment=""> <struct name="data" type_name="" comment="" expr="{this.offset_name.name}"> <use_struct name="relocation_offset" expr="" type_name="relocation_offset" comment=""/> <jump offset="relocation_offset.data_offset + header.lists.UV_Points" comment="" origin="start"> <use_struct name="UV_Points" expr="" type_name="UV_Points" comment=""/> </jump> <jump offset="relocation_offset.string_offset + header.lists.UV_Points - 1" comment="" origin="start"> <use_struct name="offset_name" expr="" type_name="offset_name" comment=""/> </jump> </struct> </for> </struct> </jump> </if> <if test="header.lists.Shaders != 0" comment=""> <jump offset="header.lists. Shaders" comment="" origin="start"> <struct name="Shaders" type_name="" comment="" expr=""> <use_struct name="relocation_group" expr="" type_name="relocation_group" comment=""/> <for name="data" count="relocation_group.num_offsets || relocation_group.num_offsets - 1" stop_test="relocation_group.num_offsets == 0" type_name="" comment=""> <struct name="data" type_name="" comment="" expr="{this.offset_name.name}"> <use_struct name="relocation_offset" expr="" type_name="relocation_offset" comment=""/> <jump offset="relocation_offset.data_offset + header.lists.Shaders" comment="" origin="start"> <use_struct name="Shaders" expr="" type_name="Shaders" comment=""/> </jump> <jump offset="relocation_offset.string_offset + header.lists.Shaders - 1" comment="" origin="start"> <use_struct name="offset_name" expr="" type_name="offset_name" comment=""/> </jump> </struct> </for> </struct> </jump> </if> <if test="header.lists.Materials != 0" comment=""> <jump offset="header.lists.Materials" comment="" origin="start"> <struct name="Materials" type_name="" comment="" expr=""> <use_struct name="relocation_group" expr="" type_name="relocation_group" comment=""/> <for name="data" count="relocation_group.num_offsets || relocation_group.num_offsets - 1" stop_test="relocation_group.num_offsets == 0" type_name="" comment=""> <struct name="data" type_name="" comment="" expr="{this.offset_name.name}"> <use_struct name="relocation_offset" expr="" type_name="relocation_offset" comment=""/> <jump offset="relocation_offset.data_offset + header.lists.Materials" comment="" origin="start"> <use_struct name="Materials" expr="" type_name="Materials" comment=""/> </jump> <jump offset="relocation_offset.string_offset + header.lists.Materials - 1" comment="" origin="start"> <use_struct name="offset_name" expr="" type_name="offset_name" comment=""/> </jump> </struct> </for> </struct> </jump> </if> <if test="header.lists.Polygons != 0" comment=""> <jump offset="header.lists.Polygons" comment="" origin="start"> <struct name="Polygons" type_name="" comment="" expr=""> <use_struct name="relocation_group" expr="" type_name="relocation_group" comment=""/> <for name="data" count="relocation_group.num_offsets || relocation_group.num_offsets - 1" stop_test="relocation_group.num_offsets == 0" type_name="" comment=""> <struct name="data" type_name="" comment="" expr="{this.offset_name.name}"> <use_struct name="relocation_offset" expr="" type_name="relocation_offset" comment=""/> <jump offset="relocation_offset.data_offset + header.lists.Polygons" comment="" origin="start"> <use_struct name="Polygons" expr="" type_name="Polygons" comment=""/> </jump> <jump offset="relocation_offset.string_offset + header.lists.Polygons - 1" comment="" origin="start"> <use_struct name="offset_name" expr="" type_name="offset_name" comment=""/> </jump> </struct> </for> </struct> </jump> </if> <if test="header.lists.Textures != 0" comment=""> <jump offset="header.lists.Textures" comment="" origin="start"> <struct name="Textures" type_name="" comment="" expr=""> <use_struct name="relocation_group" expr="" type_name="relocation_group" comment=""/> <for name="data" count="relocation_group.num_offsets || relocation_group.num_offsets - 1" stop_test="relocation_group.num_offsets == 0" type_name="" comment=""> <struct name="data" type_name="" comment="" expr="{this.offset_name.name}"> <use_struct name="relocation_offset" expr="" type_name="relocation_offset" comment=""/> <jump offset="relocation_offset.data_offset + header.lists.Textures" comment="" origin="start"> <use_struct name="Textures" expr="" type_name="Textures" comment=""/> </jump> <jump offset="relocation_offset.string_offset + header.lists.Textures - 1" comment="" origin="start"> <use_struct name="offset_name" expr="" type_name="offset_name" comment=""/> </jump> </struct> </for> </struct> </jump> </if> <if test="header.lists.Pallets != 0" comment=""> <jump offset="header.lists.Pallets" comment="" origin="start"> <struct name="Pallets" type_name="" comment="" expr=""> <use_struct name="relocation_group" expr="" type_name="relocation_group" comment=""/> <for name="data" count="relocation_group.num_offsets || relocation_group.num_offsets - 1" stop_test="relocation_group.num_offsets == 0" type_name="" comment=""> <struct name="data" type_name="" comment="" expr="{this.offset_name.name}"> <use_struct name="relocation_offset" expr="" type_name="relocation_offset" comment=""/> <jump offset="relocation_offset.data_offset + header.lists.Pallets" comment="" origin="start"> <use_struct name="Pallets" expr="" type_name="Pallets" comment=""/> </jump> <jump offset="relocation_offset.string_offset + header.lists.Pallets - 1" comment="" origin="start"> <use_struct name="offset_name" expr="" type_name="offset_name" comment=""/> </jump> </struct> </for> </struct> </jump> </if> <data type="none" name="none"/> </binary_file_format>
you'll need HexEdit for this to work... http://www.smashboards.com/showpost.php?p=11656041&postcount=2778copy the template, and paste it in: C:\Documents and Settings\*user*\Application Data\ECSoftware\HexEdit\_mdl0.xml and open an mdl0 file in HexEdit... now, the template doesn't initiate automatically :/ when you open the mdl0, go to 'view'-'template'-'split window' and be sure to turn the auto sync on as well (looks like 3 red arrows "back, forth, back") also, be sure to R-Click 'MDL0' and click 'Allow Editing'. (it takes a while to load, but there's no errors with it this way) heh... the more help I get in learning the format, the faster I'll be able to build a 2-way (complete) converter. Will's is uncomplete, but returns a working mesh (verts, normals, uv's, and faces) AIS returns alot more, but is glitchy and still doesn't cover everything. also... dae is ascii (text) mdl0 is binary (hex) I'm trying to convert between collada 140 and 141 glad to have some help FINALLYthere's currently alot to be known before a perfect mdl0 can be written from scratch... also, I have the AIS src... but... I can't read C codes :/ I progg in Py, or HTML/JS >_>
|
|
« Last Edit: December 14, 2010, 10:21:42 AM by Tcll »
|
Logged
|
|
|
|
|
|
|
« Reply #6 on: December 14, 2010, 04:29:02 PM » |
|
I know a little C#, or is AiS in C/C++? I have a couple friends who are good at C/C++ coding too. I have no clue how the daes are made, but I do know that they are in ascii (xml), and I'm pretty good with looking over binary. I think I found a thread somewhere that listed all the parts of an mdl0, I'll try to find it
|
|
« Last Edit: December 14, 2010, 04:32:03 PM by BlackJax96 »
|
Logged
|
|
|
|
|
|
|
« Reply #7 on: December 14, 2010, 04:52:50 PM » |
|
I know a little C#, or is AiS in C/C++? I have a couple friends who are good at C/C++ coding too. nice here's the src: http://www.filefactory.com/file/b29fah4/n/ais_rartook me FOREVER to find btw D:> I have no clue how the daes are made, but I do know that they are in ascii (xml), and I'm pretty good with looking over binary. I think I found a thread somewhere that listed all the parts of an mdl0, I'll try to find it
ah... I see... do you have any 140 or 141 files that import perfectly into blender?? I need a template to tell me how it works :/ 140 has a VGroup prob, and 141 has a UV and bone prob on my end... can't build a template out of files that don't work :/ I could look online too, so it's ok if you don't have any and yea, can't wait for that thread *waits patiently*
|
|
« Last Edit: December 14, 2010, 04:53:46 PM by Tcll »
|
Logged
|
|
|
|
|
|
|
|
« Reply #9 on: December 14, 2010, 05:32:38 PM » |
|
heh... can't afford 3DS and don't wanna deal with dreaded blue screen again here I thought 3DS was good, but after it destroyed my cpu twice... yea... btw, I've got a copy of every src from brbx saved... brawllib contains the structures... (I can read vars) EDIT: well today was kinda a blowoff day for me I'm not getting help with either of the MDL0 or DAT formats... DX so I've been on YT and random sites, just doin... stuff...
|
|
« Last Edit: December 14, 2010, 06:08:15 PM by Tcll »
|
Logged
|
|
|
|
|
|
|
« Reply #10 on: December 14, 2010, 06:25:41 PM » |
|
You dont happen to have a file called Dae.h, do you? I need it to build the source Lately I've been working on Nel. ...and trying to convert a model I have in PMD and X format to any other format that's importable with 3ds max... no luck yet with that, I've tried everything
|
|
|
Logged
|
|
|
|
|
|
|
« Reply #11 on: December 14, 2010, 06:41:34 PM » |
|
You dont happen to have a file called Dae.h, do you? I need it to build the source lol... I just deleted it (the entire DOM) XD I'll retrieve it right now Lately I've been working on Nel. ...and trying to convert a model I have in PMD and X format to any other format that's importable with 3ds max... no luck yet with that, I've tried everything O.O did you say PMD... there's a blender importer for that you know... it may, or may not work for your file :/ roo525 wanted me to import a pmd of Flandre
|
|
« Last Edit: December 14, 2010, 06:46:06 PM by Tcll »
|
Logged
|
|
|
|
|
|
|
« Reply #12 on: December 14, 2010, 06:56:14 PM » |
|
Like I said, blender is stupid for me I got a script error importing it, I think I have to switch Blender to Japanese but I have no clue how to do that 0_o figured out how to switch it, but I still get an error Could you try and export it as a DAE for me? lol and thanks for getting dae.h for me It's Yoko Littner http://www.mediafire.com/?kekova24i5nei61
|
|
« Last Edit: December 14, 2010, 07:01:45 PM by BlackJax96 »
|
Logged
|
|
|
|
|
|
|
« Reply #13 on: December 14, 2010, 07:19:18 PM » |
|
KK... here's dae.h: /* * Copyright 2006 Sony Computer Entertainment Inc. * * Licensed under the MIT Open Source License, for details please see license.txt or the website * http://www.opensource.org/licenses/mit-license.php * */
#ifndef __DAE__ #define __DAE__
// We use the boost filesystem library for cross-platform file system support. You'll need // to have boost on your machine for this to work. For the Windows build boost is provided // in the external-libs folder, but for Linux it's expected that you'll install a boost // obtained via your distro's package manager. For example on Debian/Ubuntu, you can run // apt-get install libboost-filesystem-dev // to install the boost filesystem library on your machine. // // Disable the warnings we get from Boost // warning C4180: qualifier applied to function type has no meaning; ignored // warning C4245: 'argument' : conversion from 'int' to 'boost::filesystem::system_error_type', // signed/unsigned mismatch #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4180 4245) #endif #ifndef NO_BOOST #include <boost/filesystem/convenience.hpp> // THIS WAS NOT COMMENTED. #endif #ifdef _MSC_VER #pragma warning(pop) #endif
#include <dae/daeTypes.h> #include <dae/daeError.h> #include <dae/daeDatabase.h> #include <dae/daeIOPlugin.h> #include <dae/daeAtomicType.h> #include <dae/daeMetaElement.h> #include <dae/daeIDRef.h> #include <dae/daeURI.h> #include <dae/daeUtils.h> #include <dae/daeRawResolver.h> #include <dae/daeSIDResolver.h>
class domCOLLADA; typedef daeSmartRef<domCOLLADA> domCOLLADARef; class daeDatabase;
// The DAE class is the core interface via which you interact with the DOM. It // has methods to load/save documents, get the root element of each document, // etc. Although internally the DOM works exclusively with URIs, the methods of // the DAE class that take document paths can take URIs or OS-specific file // paths. class DLLSPEC DAE { public: // Constructor. If no database or IO plugin are provided, a default database and // IO plugin will be used. DAE(daeDatabase* database = NULL, daeIOPlugin* ioPlugin = NULL) : atomicTypes(*this), baseUri(*this, cdom::getCurrentDirAsUri().c_str()) { // See the end of the thread linked below for an explanation of why we have the DAE // constructor set up this way. Basically, I'm going to be changing the build output // location, and when this happens people sometimes continue to link against the old // libraries by accident (e.g. if they just do an svn update). By introducing a new // function that gets called from a function in a header file, I'm ensuring that someone // who tries linking against old libraries will get a link error. This may not sound // very nice, but it's certainly better than getting bizarre runtime crashes. // https://collada.org/public_forum/viewtopic.php?t=771&sid=f13c34f2d17ca720c5021bccbe5128b7 init(database, ioPlugin); dummyFunction1(); }
virtual ~DAE();
// Release all memory used by the DOM. You never need to call this explicitly. It's // called automatically when all DAE objects go out of scope. // Deletes directory returned by cdom::getSafeTmpDir(). static void cleanup(); public: // Database setup virtual daeDatabase* getDatabase(); virtual daeInt setDatabase(daeDatabase* database);
// IO Plugin setup virtual daeIOPlugin* getIOPlugin(); virtual daeInt setIOPlugin(daeIOPlugin* plugin);
// Creates a new document, returning null on failure. virtual domCOLLADA* add(const std::string& path); // Opens an existing document, returning null on failure. virtual domCOLLADA* open(const std::string& path); // Opens a document from memory, returning null on failure. virtual domCOLLADA* openFromMemory(const std::string& path, daeString buffer); // Write a document to the path specified by the document's URI, returning false on failure. virtual bool write(const std::string& path); // Write a document to the path specified in the second parameter, returning false on failure. virtual bool writeTo(const std::string& docPath, const std::string& pathToWriteTo); // Writes all documents, returning false if any document failed to write. virtual bool writeAll(); // Close a specific document, unloading all memory used by the document. Returns false on failure. virtual void close(const std::string& path); // Remove all loaded documents. Always returns DAE_OK. virtual daeInt clear();
// Returns the total number of documents. virtual int getDocCount(); // Returns the i'th document . virtual daeDocument* getDoc(int i); // Returns a document matching the path. virtual daeDocument* getDoc(const std::string& path); // Get the root domCOLLADA object corresponding to a particular document. virtual domCOLLADA* getRoot(const std::string& path); // Set the root domCOLLADA object corresponding to a particular document, returning false on failure. virtual bool setRoot(const std::string& path, domCOLLADA* root);
// Returns the Collada version, i.e. 1.4, 1.5, etc. Note that this _isn't_ the // same as the DOM version (1.3, 2.0, ...). virtual daeString getDomVersion();
// Returns the (modifiable) list of atomic type objects. daeAtomicTypeList& getAtomicTypes();
// Get/set a daeMetaElement object given the meta object's type ID. daeMetaElement* getMeta(daeInt typeID); void setMeta(daeInt typeID, daeMetaElement& meta);
// Get all daeMetaElement objects. daeMetaElementRefArray& getAllMetas();
// Returns the list of URI resolvers. You can modify the list to add new resolvers. daeURIResolverList& getURIResolvers();
// The base URI used for resolving relative URI references. daeURI& getBaseURI(); void setBaseURI(const daeURI& uri); void setBaseURI(const std::string& uri);
// Returns the list of ID reference resolvers. You can modify the list to add new // resolvers. daeIDRefResolverList& getIDRefResolvers();
// Meant for internal DOM use only. daeRawRefCache& getRawRefCache(); daeSidRefCache& getSidRefCache();
// These functions specify the client's character encoding for the DOM. The // default is Utf8, but if you specify Latin1 then the DOM will use libxml's // character conversion functions to convert to Utf8 when writing data and // convert to Latin1 when reading data. This can help with the handling of // non-ASCII characters on Windows. Only when using libxml for xml I/O does // any character conversion occur. // // Most people can probably just ignore this completely. If you have trouble // with non-ASCII characters on Windows, try setting the char encoding to // Latin1 to see if that helps. // // Frankly this certainly isn't the best way of handling non-ASCII character // support on Windows, so this interface is a likely target for significant // changes in the future. // // See this Sourceforge thread for more info: // http://sourceforge.net/tracker/index.php?func=detail&aid=1818473&group_id=157838&atid=805426 // enum charEncoding { Utf8, Latin1 };
// Global encoding setting. Defaults to Utf8. Set this if you want to make a // char encoding change and apply it to all DAE objects. static charEncoding getGlobalCharEncoding(); static void setGlobalCharEncoding(charEncoding encoding);
// Local encoding setting. If set, overrides the global setting. Useful for setting // a specific char encoding for a single DAE object but not for all DAE objects. charEncoding getCharEncoding(); void setCharEncoding(charEncoding encoding);
// Deprecated. Alternative methods are given. virtual daeInt load(daeString uri, daeString docBuffer = NULL); // Use open virtual daeInt save(daeString uri, daeBool replace=true); // Use write virtual daeInt save(daeUInt documentIndex, daeBool replace=true); // Use write virtual daeInt saveAs(daeString uriToSaveTo, daeString docUri, daeBool replace=true); // Use writeTo virtual daeInt saveAs(daeString uriToSaveTo, daeUInt documentIndex=0, daeBool replace=true); // Use writeTo virtual daeInt unload(daeString uri); // Use close virtual domCOLLADA* getDom(daeString uri); // use getRoot virtual daeInt setDom(daeString uri, domCOLLADA* dom); // use setRoot
private: void init(daeDatabase* database, daeIOPlugin* ioPlugin); void dummyFunction1(); std::string makeFullUri(const std::string& path); domCOLLADA* openCommon(const std::string& path, daeString buffer); bool writeCommon(const std::string& docPath, const std::string& pathToWriteTo, bool replace);
daeDatabase *database; daeIOPlugin *plugin; bool defaultDatabase; bool defaultPlugin; daeAtomicTypeList atomicTypes; daeMetaElementRefArray metas; daeURI baseUri; daeURIResolverList uriResolvers; daeIDRefResolverList idRefResolvers; daeRawRefCache rawRefCache; daeSidRefCache sidRefCache;
std::auto_ptr<charEncoding> localCharEncoding; static charEncoding globalCharEncoding; };
template <typename T> inline T *daeSafeCast(daeElement *element) { if (element && element->typeID() == T::ID()) return (T*)element; return NULL; }
#endif // __DAE_INTERFACE__
didn't feel like UL-ing it
|
|
|
Logged
|
|
|
|
|
|
|
« Reply #14 on: December 14, 2010, 07:32:17 PM » |
|
Still won't build
*cough* #include <dae/daeTypes.h> #include <dae/daeError.h> #include <dae/daeDatabase.h> #include <dae/daeIOPlugin.h> #include <dae/daeAtomicType.h> #include <dae/daeMetaElement.h> #include <dae/daeIDRef.h> #include <dae/daeURI.h> #include <dae/daeUtils.h> #include <dae/daeRawResolver.h> #include <dae/daeSIDResolver.h> #include <dom/domCOLLADA.h> #include <dom/domProfile_COMMON.h> *cough*
Need those .h files too >.> Might want to upload them lol
|
|
|
Logged
|
|
|
|
|
|