Understanding OOF-Format

For all coding issues - MODers and programmers, HTML and more.

Moderators: Jeff250, fliptw

Locked
User avatar
MetalBeast
DBB Ace
DBB Ace
Posts: 151
Joined: Wed Sep 05, 2007 6:03 am
Location: http://3d-get.de/metalbeast
Contact:

Understanding OOF-Format

Post by MetalBeast » Wed Sep 19, 2007 4:01 am

Hi,

I hope somebody can help me :D
I try to code an ASE/3DS to OOF converter, but have some problems understanding the OOF-Format.

The documentation in internet ist very rare and not really extensive.

Is here enybody, who can help me to understand how to make an working OOF-Export?

I do not need the code, only the logic behind this.

I asked SuperSheep (autor of OOF-Edit), about the Source-Code or at least parts of it, but he don't even answer my PM's :(

thx in advance.
User avatar
The Lion
DBB Ace
DBB Ace
Posts: 197
Joined: Mon Apr 17, 2006 2:13 pm
Location: The Netherlands

Post by The Lion » Wed Sep 19, 2007 4:51 am

I found this DBB post using a google query...

viewtopic.php?p=199635#199635

...in which supersheep explains the .oof format.
User avatar
Aus-RED-5
DBB Friend
DBB Friend
Posts: 1604
Joined: Fri Apr 23, 2004 7:27 am
Location: Adelaide, South Australia
Contact:

Post by Aus-RED-5 » Wed Sep 19, 2007 5:00 am

awww.....

You beat me to it The Lion. :(


So now I have to quote SS to do better! :P

Besides, the DBB search feature is your friend.
SuperSheep wrote:I realize that the 3ds plugin will not work with blender. My point was that 3dsmax already has a large amount of tools designed to work with it. If you are a CG guy, you should be able to get yourself a copy of 3dsmax to use at the very least.

I guess I wonder at why you would make your model to the extent you did in a program that you know doesn't export to a usable format for D3, and then ask for someone else to write a converter so you can finish your work.

Writing a exporter for Blender or any 3d program for that matter is not going to be a simple 1.2.3. task for even a skilled programmer unless they had already wrote scripts for Blender and had an intimate knowledge of D3's OOF/ORF format.

Instead of complaining that you don't have the neccessary skillset to accomplish writing a script to export a model you made in a program that is unsupported to this date for D3 development, get your hands dirty, and write the code.

I will gladly provide you with all of the specs I've gathered on the OOF format and even give you a good place to begin...
http://en.wikibooks.org/wiki/Blender_3D ... rt_scripts

Code: Select all

***** OOF File Format *****

The beginning of every OOF file has a File Header which contains
the file ID and version number of the OOF. After that is a series
if chunks that each begin with a Chunk Header describing the type
of chunk.

// General Data Types
struct vector {
	float x;
	float y;
	float z;
}
struct RGB {
	byte red;
	byte green;
	byte blue;
}
struct FACE_VERT {
	int Index;		// Index of face vert
	float tu;		// Texture U mapping coordinate
	float tv;		// Texture V mapping coordinate
}
struct FACE {
    	vector normal;		// Faces normal
    	int numVerts;		// Number of verts on face
	int textured;		// Is this face textured? 0-No,
				// Anything else, yes
UNION {
	int textureID;		// Texture index(if textured<>0)
	RGB color;		// Color of face(if textured=0)
}
	FACE_VERT faceVerts[numVerts];	// Face vert data
	float x_diff;		// Used for lightmaps I believe
	float y_diff;		// ditto
}
struct SPCL_PT {
	int nameLen;		// Length of SPCL point Name
	char name[nameLen];	// SPCL point name
	int propLen;		// Length of SPCL point Property name
	char prop[propLen];	// Property Name
	vector pos;		// SPCL point position
	float radius;		// Radius of SPCL point
}
struct OOF_PT {
	int parent;		// Parent of Point
	vector pos;		// Position of Point
	vector dir;		// Direction of Point
}
struct WBAT_DATA {
	int numWBATGPNT;		// Number of Gunpoints
	int GPNTindex[numWBATGPNT];	// Gunpoint indexes
	int numWBATTuuret;		// Number of Turrets
	int turretIndex[numWBATTurret];	// Sub-Object index
}
struct TXTRdata {
	int nameLen;		// Length of Texture Name
	string name[nameLen];	// Texture name(Imagename)
}
struct PANI_FRAMES {
	int startTime;		// Start Time of frame
	vector pos;		// Position
}
struct RANI_FRAMES {
	int startTime;		// Start Time of frame
	vector axis;		// Axis of rotation
	int angle;		// Angle to rotate(0-65535=0-360 degrees)
}
struct RANI_ANIM {
	int numKey;		// Number of Key frames
	int min;		// Minimum Key Frame number
	int max;		// Maximum Key Frame number
	RANI_FRAMES RANIFrames[numKey];	// RANI Frames data
}
struct PANI_ANIM {
	int numKey;		// Number of Key frames
	int min;		// Minimum Key Frame number
	int max;		// Maximum Key Frame number
	PANI_FRAMES PANIFrames[numKey];	// PANI Frames data
}



// File Header
struct OOFHeader {
	char fileID(4);		// File ID
	int version;		// Version number
}

struct OOFChunk {
	char chunkID(4);	// Chunk ID
	int chunkLength;	// Length of Chunk
}

// OHDR = Object Data Chunk
struct ObjectData {
	int numSOBJ;		// Number of Sub-Objects in OOF
	float maxRadius;	// Max Radius of Model
	vector minBounding;	// Minimum bounding point for model
	vector maxBounding;	// Maximum bounding point for model
	int numDetailLevels;	// Number of detail levels in model
}

struct ObjectDetail {
	int detailLevel;	// Level of detail
	float depth;		// Depth in models
}

// SOBJ = Sub-Object Chunk
struct SOBJData {
	int Index;		// Sub-Objects index
	int parent;		// Sub-Objects parent index
	vector norm;		// norm for seperation plane(debugging)
	float d;		// norm d for seperation plane(debugging)
	vector pnt;		// pnt for seperation plane(debugging)
	vector offset;		// 3D offset from parent(pivot point)
	float radius;		// Radius of Sub-Object
	int treeOffset;		// Offset of tree data(not used)
	int dataOffset;		// Offset of the data(not used)
	vector geo_center;	// geometric center of this subobject.
				// In the same Frame Of Reference as
				// all other vertices in this submodel.
				// (Relative to pivot point)
	string Name;		// Name of Sub-Object(null terminated)
	string Property;	// Property Name of Sub-Object
				// (null terminated)
	int move_type;		// -1 if no movement, otherwise
				// rotational or positional movement
				// Not used
	int move_axis;		// Movement Axis(Axis to Rotate
				// or move around). Not used
	int numFSChunks;	// Number of freespace chunks
	int FSData[numFSChunks];	// Freespace data
	int numVerts;		// Number of vertices on Sub-Object
	vector vertex[numVerts];	// Vertex positions
	vector normal[numVerts];	// Vertex normals
	float alpha[numVerts];	// Vertex Alpha value. Only present
				// if version => 2300
	int numFaces;		// Number of faces on Sub-Object
	FACE faceData[numFaces];	// Face information
}

// SPCL - Special Point Chunk
struct SPCLData {
	int numSPCL;			// Number of Special Points
	SPCL_PT SPCLpoint[numSPCL];	// Special Point data
}

// ATCH - Attach Point Chunk
struct ATCHData {
	int numATCH;			// Number of Attach points
	OOF_PT pntData[numATCH];	// Attach Point data
}

// NATH - Attach Normal Point Chunk
struct NATHData {
	int numNATH;			// Number of Attach Normals
	OOF_PT pntData[numNATH];	// Attach Normal Point data
}

// GRND - Ground Point Chunk
struct GRNDData {
	int numGRND;			// Number of Ground points
	OOF_PT pntData[numGRND];	// Ground Point data
}

// GPNT - Gunpoint Chunk
struct GPNTData {
	int numGPNT;			// Number of Gunpoints
	OOF_PT pntData[numGPNT];	// Gunpoint data
}

// WBAT - Weapons Battery chunk
struct WBSData {
	int numWBAT;			// Number of Weapons Batteries
	WBAT_DATA wbatData[numWBAT];	// Weapon Battery data
}

// TXTR - Texture Chunk
struct textureData {
	int numTextures;		   // Number of textures
	TXTRdata textureData[numTextures]; // Texture data
}

// RANI, ANIM - Rotational Animation Chunk
struct RANIData {
	RANI_ANIM FrameData[numSOBJ];	// RANI Frames data
}

// PANI - Positional Animation Chunk
struct PANIData {
	PANI_ANIM FrameData[numSOBJ];	// PANI Frames data
}

// PINF - Information chunk
struct PINFData {
	char info[chunkLength];		// Information chunk data
}


// IDTA - Interpreter Data
??

// GRID - Grid Data
??
User avatar
MetalBeast
DBB Ace
DBB Ace
Posts: 151
Joined: Wed Sep 05, 2007 6:03 am
Location: http://3d-get.de/metalbeast
Contact:

Re:

Post by MetalBeast » Wed Sep 19, 2007 5:02 am

The Lion wrote:I found this DBB post using a google query...

viewtopic.php?p=199635#199635

...in which supersheep explains the .oof format.
I know this post, but there are not enough info for making an working Exporter. It's only rough type definition.
User avatar
MetalBeast
DBB Ace
DBB Ace
Posts: 151
Joined: Wed Sep 05, 2007 6:03 am
Location: http://3d-get.de/metalbeast
Contact:

Re:

Post by MetalBeast » Wed Sep 19, 2007 5:02 am

Sorry for double-post, DB-SQL-Error
User avatar
SuperSheep
DBB Benefactor
DBB Benefactor
Posts: 935
Joined: Sun Jun 03, 2001 2:01 am
Location: Illinois

Re:

Post by SuperSheep » Wed Sep 19, 2007 8:55 am

zombie999 wrote:
The Lion wrote:I found this DBB post using a google query...

viewtopic.php?p=199635#199635

...in which supersheep explains the .oof format.
I know this post, but there are not enough info for making an working Exporter. It's only rough type definition.
I have read your PM's, and no, I am not ignoring you, I was hoping you'd do a search and find this post.

The OOF file format is explained in this post. It is all you should need to make a working exporter.

If you really are having problems wrapping your head around this, download the D3 Edit Source code. It has a source file named LoadLevel.cpp that contains routines for reading an object from a hog file.

This is what I used to write OOF Editor.

I like to help people but only if they are first willing to do some work themselves. There are plenty of resources out there if you look.

D3 Edit 1.1 including source code...
http://www.planetdescent.com/site/files ... opment.asp
User avatar
MetalBeast
DBB Ace
DBB Ace
Posts: 151
Joined: Wed Sep 05, 2007 6:03 am
Location: http://3d-get.de/metalbeast
Contact:

Post by MetalBeast » Wed Sep 19, 2007 9:22 am

Many Thx for Answer SuperSheep,

I'm trying to understand the OOF-Filespec, but in this File-Format-Spec, there is no statement, how to export this format (in which order).

My other problem is, I'm not very good in c-programming, so it is difficult for me to understand c-source-codes.

This is, the reason, why I aseked you for Help, cause I know, OOF-Editor was written in VB5.

I'm using VB6.

But, I understand what you mean.
Ich will try to do my best and will post my progress here.

Maybe you can than post some corrections, where are my failures, if you have time ;)

Anyway, Thx for your statement again :D
(sorry for my bad english)
User avatar
SuperSheep
DBB Benefactor
DBB Benefactor
Posts: 935
Joined: Sun Jun 03, 2001 2:01 am
Location: Illinois

Post by SuperSheep » Wed Sep 19, 2007 9:42 am

This is why I referred you to the D3 Edit Source code as it contains the exact order of loading.

It is not necessary to understand C code enough to write a program, just to use as a guide.

I would start by writing some code to read an OOF, beginning with the first chunk, and displaying the data in a text field. This way you can monitor your progress and make small steps. I would not start by trying to write a fully functional exporter first.

It will take time, but it is well worth it because without an understanding of how to do it, you really won't understand how things work and then when you have problems you wouldn't know where to begin.
User avatar
MetalBeast
DBB Ace
DBB Ace
Posts: 151
Joined: Wed Sep 05, 2007 6:03 am
Location: http://3d-get.de/metalbeast
Contact:

Post by MetalBeast » Wed Sep 19, 2007 3:58 pm

OK, i did study this Stuff ;)
Let me see, if I undesrtand the basics;)

Code: Select all

The File starts with a File-Header, contains \"PSPO\"-Keyword in fist 4 Bytes and 4 Bytes for version number.

Then we have other Parts of File (Chunks).

Texture-Chunk:
start with Keyword \"TXTR\"
followed by 4 bytes = chunk length
4 bytes = Number of Textures
Then for all Texture:
4 Bytes = length of texturename
(lenoftex)x bytes texturename as Text

OBJ-Header Chunk
start with keyword \"OHDR\"

4 bytes = chunk length
4 Bytes = numb. of subobjects
4 bytes = max_radius
Vektor(12 Bytes) = min-bounding
Vektor(12 bytes) = max_bounding
4 bytes = Number of detail levels in model

Subobject-chunk:
Keyname=\"SOBJ\"
4 bytes = chunk length in bytes
4 bytes = subobjekt id
4 bytes = subobjekt_parent's ID
12 Bytes = vector normal?
4 bytes = norm d for seperation plane(debugging)
12 bytes vector pnt;      // pnt for seperation plane(debugging)
12 bytes vector offset;   // 3D offset from parent(pivot point)
4 bytes float radius;     // Radius of Sub-Object
4 bytes treeOffset;      // Offset of tree data(not used)
4 bytes dataOffset;      // Offset of the data(not used)
12 bytes vector geo_center;   	// geometric center of this subobject.
            			// In the same Frame Of Reference as
           			// all other vertices in this submodel.
            			// (Relative to pivot point)

x bytes =   string Name;      // Name of Sub-Object(null terminated)
x bytes =   string Property;   // Property Name of Sub-Object
            // (null terminated)
4 bytes =   move_type;      // -1 if no movement, otherwise
            // rotational or positional movement
            // Not used
4 bytes  move_axis;      // Movement Axis(Axis to Rotate
            // or move around). Not used
4 bytes  numFSChunks;   // Number of freespace chunks
4 bytes  FSData[numFSChunks];   // Freespace data
4 bytes  numVerts;      // Number of vertices on Sub-Object
12 bytes vector x vertex[numVerts];   // Vertex positions
12 bytes vector normal[numVerts];   // Vertex normals
4 bytes  float alpha[numVerts];   // Vertex Alpha value. Only present
            // if version => 2300
4 bytes  int numFaces;      // Number of faces on Sub-Object
   FACE faceData[numFaces];   // Face information =

structur of FACE {
12 bytes   vector normal;      // Faces normal
4 bytes   int numVerts;      // Number of verts on face
4 bytes   int textured;      // Is this face textured? 0-No,
            // Anything else, yes
UNION {
4 bytes   int textureID;      // Texture index(if textured<>0)
3 bytes   RGB color;      // Color of face(if textured=0)
}
   FACE_VERT x faceVerts[numVerts];   // Face vert data=
}
struct FACE_VERT {
4 bytes int Index;      // Index of face vert
4 bytes   float tu;      // Texture U mapping coordinate
4 bytes   float tv;      // Texture V mapping coordinate
} 

4 bytes   float x_diff;      // Used for lightmaps?
4 bytes   float y_diff;      // ditto
} 
It's correct?

I will now write simple procedure to read the data in VB.

Update:
tried to write a Type-Definition for VB:

Code: Select all

Global NmbOOFObjects As Long
Global NumTextures As Long

Private Type OOF_Vector
    x As Single
    y As Single
    Z As Single
End Type

Private Type OOF_RGB
    red As Byte
    green As Byte
    blue As Byte
End Type

Private Type OOF_file_HDR
    OOFid As String * 4
    OOFversion As Long
End Type

Private Type OOF_CHUNK_HDR
    ChunkID As String * 4
    length As Long
End Type

Private Type OOF_TXTR
    NameLenght As Long
    NameTxt As String
End Type

Private Type OOF_OHDR
    NumSObJ As Long
    Max_Radius As Single
    minBounding As OOF_Vector
    maxBounding As OOF_Vector
    numLOD As Long
End Type

Private Type OOF_SOBJ
    Index As Long
    parent As Long
    vector_norm As OOF_Vector
    norm_d As Single
    pointSP As OOF_Vector
    pivot As OOF_Vector
    radius As Single
    treeOffset As Long
    dataOffset As Long
    GeoCenter As OOF_Vector
    SOBJname As String
    SOBJproperty As String
    MoveType As Long
    MoveAxis As Long
    numFSChunks As Long
    FSData() As Long
    numVerts As Long
    Vertex() As OOF_Vector
    VNormal() As OOF_Vector
    VAlpha() As Single
    numFaces As Long
    FaceData() As OOF_FACE
End Type

Private Type OOF_FaceVert
    Index As Long
    tu As Single
    tv As Single
End Type


Private Type OOF_FACE
    FaceNormal As OOF_Vector
    numVerts As Long
    textured As Long
    textureID As Long
    RGBcolor As OOF_RGB
    FaceVerts() As OOF_FaceVert
    x_diff As Single
    y_diff As Single
End Type
User avatar
Sirius
DBB Master
DBB Master
Posts: 5437
Joined: Fri May 28, 1999 2:01 am
Location: Bellevue, WA
Contact:

Post by Sirius » Wed Sep 19, 2007 10:50 pm

Does VB6 support memcpy or something similar? It makes that kind of job much easier - the only problem is it doesn't really work with languages with protected types/memory access... I'm not sure how low-level VB6 is though.
User avatar
MetalBeast
DBB Ace
DBB Ace
Posts: 151
Joined: Wed Sep 05, 2007 6:03 am
Location: http://3d-get.de/metalbeast
Contact:

Post by MetalBeast » Thu Sep 20, 2007 2:23 am

@Sirius VB supports since Ver. 4 the most needed functions. The only big difference between C an VB is, that VB is not made for performance hungry programms, like 3D games and so on.
But any way there exists 3D Engines written completly in VB ;) They are not very good, but they works :D

But VB is the first choice for making small Tools, cause you spend not so many time programming your interface, like with C ;)

@SuperSheep:
I think I found a bug in the OOF-File-Format description:

in the SOBJ-Chunk:
bevor this:

Code: Select all

string Name;      // Name of Sub-Object(null terminated)
missing 4 bytes (c=int,VB=long) Name-Length?

bevor this:

Code: Select all

string Property;   // Property Name of Sub-Object
missing 4 bytes (c=int,VB=long) Property-Length?
User avatar
MetalBeast
DBB Ace
DBB Ace
Posts: 151
Joined: Wed Sep 05, 2007 6:03 am
Location: http://3d-get.de/metalbeast
Contact:

Post by MetalBeast » Fri Sep 21, 2007 5:09 am

OK, I now have an working importer-procedure.
But there is some problems with models with many subobjects.
After Loading, they look like this:

Image

I assume, that the subobject-pivots are relative?
Relative to what?
to subobject-parrent?
to frist subobject?
User avatar
BUBBALOU
DBB Benefactor
DBB Benefactor
Posts: 4193
Joined: Tue Aug 24, 1999 2:01 am
Location: Dallas Texas USA
Contact:

Post by BUBBALOU » Fri Sep 21, 2007 9:22 am

Logical modeling

child/link to base object or parent

and the reason it shows up that way in the first place the model builder ignored basic modeling 101

Reset X-Ref and X-Form before link was established of hierarchy parent child

I seem to have a better workout dodging your stupidity than attempting to grasp the weight of your intelligence.
User avatar
Sirius
DBB Master
DBB Master
Posts: 5437
Joined: Fri May 28, 1999 2:01 am
Location: Bellevue, WA
Contact:

Post by Sirius » Sat Sep 22, 2007 7:46 am

These days people usually use WinForms and C#/VB.NET, for the record.
User avatar
MetalBeast
DBB Ace
DBB Ace
Posts: 151
Joined: Wed Sep 05, 2007 6:03 am
Location: http://3d-get.de/metalbeast
Contact:

Re:

Post by MetalBeast » Sat Sep 22, 2007 12:30 pm

Sirius wrote:These days people usually use WinForms and C#/VB.NET, for the record.
It may be, but I'm a man from the old days ;)
I started using VB about 20 years ago.

So, I hope you will understand, that it's not really simple for me, now to lern a new coding-language ;)

Maybe I will lern C# in the future, but not now.
No time for this ;)

About Topic, i fixed the Problem. The models are loading proper now ;)

It's too sad about, that SuperSheep wouldn't like to provide at least parts of OOF-Tool code.
It would make the things easier. :(

But any way, I'm still working on my tool. ;)
User avatar
SuperSheep
DBB Benefactor
DBB Benefactor
Posts: 935
Joined: Sun Jun 03, 2001 2:01 am
Location: Illinois

Re:

Post by SuperSheep » Sat Sep 22, 2007 7:14 pm

zombie999 wrote:
Sirius wrote:These days people usually use WinForms and C#/VB.NET, for the record.
It may be, but I'm a man from the old days ;)
I started using VB about 20 years ago.

So, I hope you will understand, that it's not really simple for me, now to lern a new coding-language ;)

Maybe I will lern C# in the future, but not now.
No time for this ;)

About Topic, i fixed the Problem. The models are loading proper now ;)

It's too sad about, that SuperSheep wouldn't like to provide at least parts of OOF-Tool code.
It would make the things easier. :(

But any way, I'm still working on my tool. ;)
It's too sad that people want all the work done by someone else. I have provided the complete OOF spec and have given plenty of guidance but it is one thing to provide guidance and another to do a project for someone.

This is your project, there are plenty of resources on the net, there is the D3-SDK, there is the OOF format posted above. That is more information than most of us "tool" writers had starting off and should be more than enough for any future tool writers to use.

You've solved the problem as I knew you would. That is what tool writing is all about. Using whatever information you have, and learning the rest.
User avatar
MetalBeast
DBB Ace
DBB Ace
Posts: 151
Joined: Wed Sep 05, 2007 6:03 am
Location: http://3d-get.de/metalbeast
Contact:

Post by MetalBeast » Sun Sep 23, 2007 3:23 am

In some points I understand your position, but in other I do not.

As I know, you are no more working on OOF-tools, so I assume, there will be no more new releases of it, from your side. Or is it wrong?

So please explain to me, why do you still need to keep the source-code this kind of top secret?

I never said, that I need \"all your work\" or need you for making a tool for me.

I just asked you friendly, if it is possible to provide the source code or at least parts of it.

Let say me one thing: I will NEVER use your soruce code for making an new OOF-Tool!

I just do not want to reinvent the wheel.
My intension was just to use some parts/procedures to understand, \"how it works\", for which there not many explanation on the net.

I was searching many days for usefull informations on the net, but there are not many. The most of Descent-sites are dead or are staying short bevor to be dead. Many Links are not working. And so on.
Many of the informations and people, which helped you, are not more or are very hard to find.

OK, there is D3-Edit source and maybe of one or two other tools.
But they are in C, and not all people are coding in C. I do not understand C.
And at the moment, I have no time to lern it.

I just imaginary, that we, as part of dying VB-community can halp us one the another.
Ok, I now understand, I was wrong.

If all the people of the past, would think like you, we would be still using stone-tools for preparing our food ;)

So, ok, keep your source for whatever you want.

I will make my Tool on my way.
And I will make it Open-Source.
Ok there will be many bugs in the first releases and maybe I will never be able to make some features.

But it's not your problem. Essential thing is, that only you know how it works ;))

In this meaning, never wanted to disturb you.

Have a nice day :D

@Moderators, you can close this topic.
User avatar
Sirius
DBB Master
DBB Master
Posts: 5437
Joined: Fri May 28, 1999 2:01 am
Location: Bellevue, WA
Contact:

Post by Sirius » Sun Sep 23, 2007 6:54 am

Ah right ... I have heard even VB.NET is radically different from VB6, though, hence why you wouldn't be using it.

Some people like to keep their source code to themselves even with no commercial incentive... a kind of ownership thing I think.

Most common programming languages are fairly equivalent in ideas though... even if you can't write any code in for instance C++ yourself, you might be able to understand enough to figure out how it works from an algorithm perspective. That's a maybe though, if the syntax confuses you too much it might not be worth the hassle. (There's also the issue of finding the parts you need...)
User avatar
SuperSheep
DBB Benefactor
DBB Benefactor
Posts: 935
Joined: Sun Jun 03, 2001 2:01 am
Location: Illinois

Re:

Post by SuperSheep » Sun Sep 23, 2007 2:08 pm

zombie999 wrote:As I know, you are no more working on OOF-tools, so I assume, there will be no more new releases of it, from your side. Or is it wrong?
No, I am not currently working on OOF tools. I do not have any time as I am currently starting a business.
zombie999 wrote:So please explain to me, why do you still need to keep the source-code this kind of top secret?
I am not keeping it "top secret" lol. I spent approximately 8 months writing OOF Editor and most of that time was spent on the UI and 3-D OpenGL engine. It was not written to be "easy to read" or to be used for "teaching", it was written to take VB to a level on par with C in terms of speed. If I were writing code to be "open source" it would be much different in terms of legibility.
zombie999 wrote:I never said, that I need "all your work" or need you for making a tool for me.
That's the impression I got from numerous PM's and questions about little details that are quite simple to determine on your own.
Let's use your question about the 4 bytes missing from the spec. They are not missing, this is a standard way to store strings in C whereby the first 4 bytes are the length of the string, then the string itself, and sometimes with a NULL character.
The modelling question is as Bubbalou pointed out, a modelling question.
My feeling is that you seem to ask a question everytime you get stuck instead of using the resources I mentioned, as well as taking at least a glance at C data types.

I have no idea how you can approach a project related to D3 and not have at least a cursory understanding of C as that is what D3 was written in.

Just because OOF Editor is written in VB doesn't mean I didn't have to learn C. I chose VB because I could much more easily make a nice UI.
zombie999 wrote:I just asked you friendly, if it is possible to provide the source code or at least parts of it.
And you feel I am not being friendly. I am simply stating that you need to take some time and look at the D3-SDK and learn some C code before asking many basic questions. A day or two is not IMHO spending time.

I repeat...It took 8 months to write OOF Editor. Much of that time was spent reading the D3-SDK, D3 Edit source code, and trial and error. I am not saying you need to spend 8 months, but at least review the section of code I referred you to, learn the C needed to understand it and come back after you are stumped. 1 day is not enough even for an experienced programmer in C to understand.
zombie999 wrote:Let say me one thing: I will NEVER use your soruce code for making an new OOF-Tool!
That doesn't bother me.
zombie999 wrote:I just do not want to reinvent the wheel.
My intension was just to use some parts/procedures to understand, "how it works", for which there not many explanation on the net.
What makes you think OOF Editor source code will be easy to understand?
Just because it is written in VB, does not mean it is easy to read, and duplicate. Actually, the D3-Edit load function for reading objects is easier to understand, this is why I pointed you to it.
OOF Editor is a highly optimized program, not written for easy legibility. You would have 10 times the number of questions about how does this work, why is this here, what is this for, than you do now.
zombie999 wrote:I was searching many days for usefull informations on the net, but there are not many. The most of Descent-sites are dead or are staying short bevor to be dead. Many Links are not working. And so on.
Many of the informations and people, which helped you, are not more or are very hard to find.
The D3-Edit source code and the D3-SDK are excellent resources and provide all you need to write an importer/exporter. There is not many resources out there because there wasn't to begin with.
zombie999 wrote:OK, there is D3-Edit source and maybe of one or two other tools.
But they are in C, and not all people are coding in C. I do not understand C.
And at the moment, I have no time to lern it.
If you are a programmer, then learning C is easy. C is much easier to understand than C++ and C#. It's fine to write programs in VB, but C is just about mandatory to at least understand as so many programs use C and C data types.
Not enough time? lol. Go on the web and search for tutorials on C. It should take you no more than a week to get good enough at C to read and understand it.

zombie999 wrote:I just imaginary, that we, as part of dying VB-community can halp us one the another.
Ok, I now understand, I was wrong.
I wasn't aware of the mass death of VB and VB programmers. VB has always been a starter language. It is great for non-critical applications and when used properly can be quite fast, however VB will never be the "de-facto" standard. C is the standard which is why I keep mentioning that you should learn it.

zombie999 wrote:If all the people of the past, would think like you, we would be still using stone-tools for preparing our food ;)
Your right. I'm a creton and am unwilling to help anyone accomplish anything. LOL!
I am willing to help those who are willing to help themselves. Not people who just inundate me with questions and then respond with "I've got no time to learn that". Guess what? You will have to learn things to accomplish this. You're already learning by solving the problems with your importing. Why are you so adverse to learning some C?

And for the love of god...Why do you think you could just sit down with OOF Editor source code and be all like "AHA! I understand everything now!" You would have more questions than answers.
zombie999 wrote:So, ok, keep your source for whatever you want.

I will make my Tool on my way.
And I will make it Open-Source.
Ok there will be many bugs in the first releases and maybe I will never be able to make some features.

But it's not your problem. Essential thing is, that only you know how it works ;))

In this meaning, never wanted to disturb you.

Have a nice day :D

@Moderators, you can close this topic.
So, first you want help, I point you in the directions you need to learn to do this and now, because you don't like my response, you want to close the thread?

Look...I have provided you with the information you need to get started. You don't want to accept that because you don't have time, or because you don't want to learn the things needed?

How does this work then? You ask a question, I answer, and so on...

How does that differ from me writing it?

When I started, I had no information. There was very little understanding of the OOF format. But I didn't ask people for help understanding C code. I learned it because every tool, and the SDK, and the D3 edit source was all written in C. I chose to use VB because I knew I could pound out a UI that rocked. I did not understand enough about C to make as nice of a UI.

However, I read the source code, and slowly converted what I needed into making OOF-ORF Converter. This was my first attempt at writing an import/export utility.

Naturally, it was not easy but it only took a few months to do, and I learned alot.

You have the same opportunity here. You can either choose to learn what you need to learn, or you can plead to others to give it to you. I think you'd make a better program and be in a position to make even better programs in the future if you learn how to do it yourself.

I will help if you actually have questions that pertain to specific problems with the OOF format or quirks relating to it, but I am not going to teach you C or basic modelling as these are things you should and can readily learn.
User avatar
MetalBeast
DBB Ace
DBB Ace
Posts: 151
Joined: Wed Sep 05, 2007 6:03 am
Location: http://3d-get.de/metalbeast
Contact:

Post by MetalBeast » Sun Sep 23, 2007 3:58 pm

OK, the code of your OOF-Editor is peace of Spaghetti and nobody, excepting you, can reading it.
I understand, that you did not write it for open-source, but this was not the point for me.
I just wanted to have a look iside. So maybe it could help me to understand some things easier and save some time.

I have'nt 8 Months time to write a small tool.
My intention is simply to write a small tool, which allow importing standard format-models and export them to OOF.

And I need it as soon as possible, cause I'm modelling for D2X-XL now, and it is really tiresome to use 10 tools to convert things properly.
So, I need it now or I need it no more.

Your impression from my PM's was simply wrong. As I wrote my first PM to you, I just started to think about my tool.
And that you don't even answered to me was not really nicely.
Maybe simple question as answer to my PM, would help you to undersand my real intention.

I wrote to you, that my english is not good, it is very difficult for me wrting things in english, as i mean them really.
So mybe this was the reason, why you did become wrong impressions.
And don't even try to say to me now \"lern better english\".
I'm not a teenager!

So, you say, you have no idea, why i don't want to lern C, right cause D3 was written in?
What kind of logic is that?
So we can write tools only in coding-language, which was used for generall-application?

So I do not want to lern C, simply cause I don't need it for any reason.
I can't agrre, that i have to lern C, spend weeks for understanding it, only for studing hundreds of C-lines.

So keep it in your head, I don't want to write a monster application, just a small tool, that allow to convert model-formats.
There is no reason for learing C for it.And I have no time for it,
I will not kill my sleeping time for lerning C.

I'm spending a part of my free time for making models and high-res textures for D2X-XL.
This is my hobby, cause I loved this game and love the version, which Diedel are working on.

SO, you start making businnes ;) I'm making my business since 18 years.
So you are not able to say me, what I have to lern or not.
I just asked you, case I thoght you can and mybe want to help me.

You don't. Point!

It's OK, I did understand this since your last post.
So you can stop your apology.

Your arrogant position is really sad, cause you don't even know anything about me.
So stop to say me what I have to or should to lern.

Dude, I wrote my first computer-programm about 1985.
If you don't understand my intention or just don't want to understand it, just we shell stop it.
Maybe it's my fault, maybe my english is to bad, to make the things understandable enough.
Anyway, let us stop this discussion, cause this is leading to nothing.

I said, please close this topic, cause I neither want your Help nor your source-code.
And I really do not need you to teach me anything.

It was my biggest mistake to ask you anything.
So keep your code under your cushion and let me alone.

You're wasting your time answering to this post, cause I will never answer to you.

Have a nice whatever...
User avatar
Sirius
DBB Master
DBB Master
Posts: 5437
Joined: Fri May 28, 1999 2:01 am
Location: Bellevue, WA
Contact:

Post by Sirius » Sun Sep 23, 2007 4:16 pm

Coding a converter isn't a small effort - it may be a better use of your time to do what you're doing now actually. Either that or make a simple batch script to pass the files from one converter to another, which doesn't take so much learning.

The only reason SS is suggesting you learn a little bit of C (not enough to program, just to read it) is that most Descent tools are written in C and it'd make your life a lot easier if you're really serious about this... but if you don't have ~2 months to write this - and that is probably about how long it would take - then again, your current method would be a better choice.
User avatar
Diedel
D2X Master
D2X Master
Posts: 5278
Joined: Thu Nov 05, 1998 12:01 pm
Contact:

Post by Diedel » Mon Sep 24, 2007 7:06 am

Zombie,

I don't think Supersheep's reply is so bad. I'll translate it for you: ;)
My OOF Tool is a crappily coded program I hardly understand myself anymore, written in an amateur programming language because that's all I could handle. I also simply don't have the time to help you a lot with it. Look at the OOF specs, learn to deal with C, and dig through my tool's source code. Good luck.
Bottom line: It is better to rewrite this tool, or to create a 3ds to oof converter or exporter plugin.

Well, now there's two people who'd need that, so I might finally start to do that.

On a side note: Standard C strings are not stored with preceding length information. Other than examining live data, I would not have guessed these 4 bytes are there for that purpose.
User avatar
BUBBALOU
DBB Benefactor
DBB Benefactor
Posts: 4193
Joined: Tue Aug 24, 1999 2:01 am
Location: Dallas Texas USA
Contact:

Re:

Post by BUBBALOU » Mon Sep 24, 2007 8:18 am

Diedel wrote:My OOF Tool is a crappily coded program I hardly understand myself anymore, written in an amateur programming language because that's all I could handle. I also simply don't have the time to help you a lot with it. Look at the OOF specs, learn to deal with C, and dig through my tool's source code. Good luck.
Image
User avatar
fliptw
DBB DemiGod
DBB DemiGod
Posts: 6415
Joined: Sat Oct 24, 1998 2:01 am
Location: Calgary Alberta Canada

Post by fliptw » Mon Sep 24, 2007 1:09 pm

this thread died an ugly death.
Locked