Jump to content

SoD's Utilities


SoulofDeity
 Share

Recommended Posts

Here's a list of programs I've written for Z64 modding

 

dl2obj - converts display lists to wavefront obj's (also rips textures)

 

dlpos - allows you to position, rotate, and scale display lists

 

n64conv - a replacement for the tool in ZLE2's texture export folder; converts the files into .tga's. This was written because the tool that comes with ZLE is 16-bit and won't work on 64-bit pc's.

 

tga2i4 - converts a 32-bit RGBA (uncompressed) .tga to an i4 texture

 

tga2i8 - converts a 32-bit RGBA (uncompressed) .tga to an i8 texture

 

tga2rgba16 - converts a 32-bit RGBA (uncompressed) .tga to a rgba16 (5551) texture

 

tga2rgba32 - converts a 32-bit RGBA (uncompressed) .tga to a rgba32 (8888) texture

 

 

A Quick Tutorial on Texture Replacement With My Utilities

 

 

What you'll need:

- Gimp

- A decompressed rom

- Rice's debug plugin (don't worry, this isn't a texture pack tut; its real texture replacement)

- HxD hex editor

 

1. Run your rom and dump the textures you want to replace with Rice's plugin.

 

2. Open the texture in GIMP, go to Layer->Transparency->Add Alpha Channel

 

3. Go to File->Export and save as a .tga; make sure you uncheck the RLE compress checkbox.

 

4. Drag and drop your .tga file onto one of the converter scripts. Eg. if you dropped it on tga2I4 it would convert the image to I4 texture data.

 

5. Open the rom and texture data in HxD.

 

6. Hit Ctrl->A; Ctrl->C to copy the entire texture data.

 

7. On the rom file, hit Ctrl->F to open the search box, paste the data into the textbox, and change the combobox to Hex-values, then hit enter to search

 

8. If you converted the texture to the right format, it should have found the texture. Now you can just replace it with texture data from your own images converted to texture data.

 

---- Bonus: Using n64conv:

 

1. Place n64conv into the texture_export folder of ZLE2.

 

2. Drag and drop the raw files onto n64conv to convert them to .tga's. (it can do batch conversions, so you can drop multiple files on it at once)

 

3. Use my textures conversion utils to convert the tga's back

 

 

 

 

 

 

Another project I'm working on, z64rip. It converts wavefront obj's into valve smd's (complete with skeleton and skinning)

 

 

Posted Image

Posted Image

Posted Image

Posted Image

 

 

 

 

 

And of course, Hylian Cartographer, which is also in progress:

 

 

 

Posted Image

Posted Image

Posted Image

 

 

 

 

On the Todo List for Hylian Cartographer:

 

- 90% : Full-fledged 3d engine supports skeletal animations and capable of loading various file formats.

- 80% : Automated display list replacer

 

- 0% : Filesystem editor that support searching, extraction, replacement, and external file name loading

 

 

 

Q/A:

 

- q - What do you do when you're not working on these projects?

- a - I work on one of my other projects; the Storm SDK / 3D Engine (which I plan on selling), and the Soul operating system which I'm not entirely sure I'm gonna release because at its current stage, I don't know if I can make it compete with Windows / Mac / Linux.

 

- q - Do you ever take a break?

- a - No. I'm autistic, and programming is how I express myself. To me, it's enjoyable. Its actually harder for me NOT to do something constructive with my time.

  • Like 2
Link to comment
Share on other sites

Aight, HC's source was getting really messy and hard to work with, so today I've been rewriting the engine from scratch and making some serious improvements.

 

 

Changes To The Scene Hierarchy:

  • New item type called mesh. Meshes contain vertex groups and are parented by objects.
  • For the sake of simplicity, objects now contain their animations instead of them being in a separate resource tree
Changes To The Class Structure:
  • A new class type has been added for matrices that makes use of overloaded operators, custom indexing properties, and a fairly powerful library of functions allowing you manipulate matrices as a 3d transforms (translation, rotation, and scale).
  • All scene objects (cameras, lamps, waterboxes, objects, etc.) now use matrices to store their transforms.
  • The texture class has been replaced by the material class. Texture data is no longer stored after being loaded into OpenGL, materials are planned to have support for masks, bump/normal/specular maps, and they keep track of important information such as horizontal and vertical velocity.
  • All classes have been separated into header and source files. People viewing the HC source tree should have no trouble finding what they're looking for.
  • A new namespace has been added called HC_Math
On a final note, I've decided that I don't plan to ever port Hylian Cartographer from .NET to another library such as the GTK. Every time I've tried to do so, I always get set back further and run into problems. Contributors can either do it themselves or people can just use WINE to emulate it (its been tested, it works).

 

 

;=======================================

 

EDIT:

 

Just to show that I'm not blowing false updates out my ass, here's the source to the CMatrix class I've been working on all day:

 

Matrix.h

Matrix.c

 

It's not 100% complete yet, I still have to write the functions for retrieving the cofactor and inverse matrix then port the 3d transformation matrix functions from the Storm game engine; but even now it's a rather powerful library. Below is the usage.

 

Initializers:

  • CMatrix(void) - Creates an empty matrix
  • CMatrix(rows, columns) - Creates a matrix of Rows*Columns in size (contains all 0's by default)
  • CMatrix(list of lists of floats) - Creates a matrix using a list of lists of floats for the data
  • CMatrix(matrix) - Creates a matrix that is a duplicate of the input
Sizing:
  • AddRows(number) - Appends number of rows to the matrix
  • InsertRows(position, number) - Inserts number of rows at position in matrix
  • RemoveRows(number) - Removes number of rows from the end of the matrix
  • RemoveRows(position, number) - Removes number of rows at position from the matrix
  • AddColumns(number) - Appends number of columns to the matrix
  • InsertColumns(position, number) - Inserts number of columns at position in matrix
  • RemoveColumns(number) - Removes number of columns from the end of the matrix
  • RemoveColumns(position, number) - Removes number of columns at position from the matrix
Operators:
  • Matrix + value
  • Matrix + list of lists of floats
  • Matrix + matrix
  • Matrix += value
  • Matrix += list of lists of floats
  • Matrix += matrix
  • Matrix - value
  • Matrix - list of lists of floats
  • Matrix - matrix
  • Matrix -= value
  • Matrix -= list of lists of floats
  • Matrix -= matrix
  • Matrix * value
  • Matrix * list of lists of floats (uses real matrix multiplication)
  • Matrix * matrix (uses real matrix multiplication)
  • Matrix *= value
  • Matrix *= list of lists of floats (uses real matrix multiplication)
  • Matrix *= matrix (uses real matrix multiplication)
  • Matrix / value
  • Matrix /= value
Matrix Manipulation:
  • Zero - fills the matrix with 0's
  • Identity - turns the matrix into an identity matrix
  • Transpose - returns the transpose of the matrix as a new matrix
  • DeterminantN - gets the determinant of an N-sized matrix (used by Determinant, don't use this)
  • Determinant - gets the determinant of the matrix
  • Normalize - returns the normalized matrix as a new matrix

An example use:

HC_Math::CMatrix ^matrix = gcnew HC_Math::CMatrix(3, 3)  // Create a 3x3 matrix
matrix[0][0] = 1; matrix[0][1] = 4; matrix[0][2] = 7;    // Row 1 - {1, 4, 7}
matrix[1][0] = 4; matrix[1][1] = 5; matrix[1][2] = 8;    // Row 2 - {4, 5, 8}
matrix[2][0] = 3; matrix[2][1] = 6; matrix[2][2] = 9;    // Row 3 - {3, 6, 9}
double det = matrix->Determinate();               // det = determinant of the matrix (12)
HC_Math::CMatrix ^nm = matrix->Normalize();      // nm = normalized matrix
HC_Math::CMatrix ^tp = matrix->Transpose();      // tp = transpose matrix
matrix *= matrix + matrix - matrix * 2;      // matrix = matrix * (itself * 2) (extra math thrown in for the sake of example)
  • Like 1
Link to comment
Share on other sites

Wow, I should really go back to Algebra II and PreCal to study matrices.. I've had Calculus II stuck in my head all year and it's a pain to bring back all that old knowledge :(

 

Honestly, I've always hated matrices. Some stuff just takes a ridiculous amount of effort to do, eg. determinants and cofactors...ugh...But still, they make maneuvering in 3d a breeze.

Link to comment
Share on other sites

 Share

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.