It is completely open source, you can find it on GitHub here. Please feel free to modify it and send me pull requests.

You can extract files from a LAB, import new files and replace existing ones. After doing any modifications you should right-click the LAB file and select "Save LAB" to rebuild to a new file.

They say a picture speaks a thousand words so here are some screenshots:

Font viewer:

Image view:

Model viewer/manipulator/exporter (note I messed with the roll on his headbone here):

You can export models and their textures to .obj format for use in other programs, here is Manny in blender:P.S. OBj export is new functionality and I'm not sure why it's showing up with that lighting in blender - I'd appreciate if someone could have a look!

You can also view and export animations as GIFs. Here is Manny walking down some invisible stairs:

My favourite feature is being able to listen to the awesome soundtrack on repeat using loop points in iMUSE:

All of this work was done by myself and is in no way feature complete - there are probably a ton of bugs (especially with the custom SMUSH codec).

Currently everything is read-only except for the LAB file structure. Basically any modifications you do in the file tree on the left will be saved when you save a LAB file but any modifications in individual editor windows on the right will not.The reason for this is basically because I haven't written the codecs for converting back to the specific file types before saving,

To anyone who wants to start using this tool, make sure you have java 1.7 installed, download either the x86 or x64 JAR from GitHub and run it!x86 downloadx64 download

If you have any problems, change requests, etc. then please add it to the issue tracker in GitHub here.

I hope you guys enjoy!

Last edited by jlaw90 on Wed Oct 15, 2014 10:53 pm, edited 2 times in total.

What license is the source under? Could I suggest adding a LICENSE-file to the repos (see our repos for an example if there's multiple), so it's clearerto anyone wanting to contribute or reuse what the terms are?

@JohnnyWalker2001: As it's made in java, the executable format is .jar - it doesn't compile to native code. If you have java installed you can just download the jar I linked to in the main post, double-click it and run on nearly any operating system.

@somaen: It's GPL v3, the license attribution is included at the beginning of each source file, but you're right - it would make sense to have a separate LICENSE file.

I'm working on the costume decoder at present so I'll try and get that done before adding the license file, if not I'll have to stash and merge which is difficult when you're not too familiar with git

Sorry to cut in on the debugging you guys are doing, just wanted to say that this is amazing! Good job!

I also started doing something like this a while back, but I got stuck on the initial rotations, Yaw/Pitch/Roll some 3do models have (like the Gatekeeper and Meche when she's first in Manny's office), so I dropped it. Glad to see someone did a better job than me!

Hi Nitrus, thanks a million! It means a lot getting positive feedback for this

It's very possible that I might not have worked around issues like that if they are edge cases - this really was just a hobby project as I've always been interested in game engines and Grim Fandango is one of my favourite classics.

Thanks again, feel free to hack away at the source code if you find any problems

[PATH TO GRIMEDI]\Grimja-master\grimedi\release>java -jar [PATH TO GRIMEDI]\Grimja-master\grimedi\release\grimedi.jarjava.lang.UnsatisfiedLinkError: C:\Users\[MY_USERNAME]\AppData\Local\Temp\jogamp_0000\file_cache\jln4038577623482544712\jln1144747327218483508\gluegen-rt.dll: Can't load AMD 64-bit .dll on a IA 32-bit platform at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary0(Unknown Source) at java.lang.ClassLoader.loadLibrary(Unknown Source) at java.lang.Runtime.load0(Unknown Source) at java.lang.System.load(Unknown Source) at com.jogamp.common.jvm.JNILibLoaderBase.loadLibraryInternal(JNILibLoaderBase.java:575) at com.jogamp.common.jvm.JNILibLoaderBase.access$000(JNILibLoaderBase.java:64) at com.jogamp.common.jvm.JNILibLoaderBase$DefaultAction.loadLibrary(JNILibLoaderBase.java:96) at com.jogamp.common.jvm.JNILibLoaderBase.loadLibrary(JNILibLoaderBase.java:459) at com.jogamp.common.os.DynamicLibraryBundle$GlueJNILibLoader.loadLibrary(DynamicLibraryBundle.java:388) at com.jogamp.common.os.Platform$1.run(Platform.java:209) at java.security.AccessController.doPrivileged(Native Method) at com.jogamp.common.os.Platform.<clinit>(Platform.java:179) at javax.media.opengl.GLProfile.<clinit>(GLProfile.java:120) at com.sqrt4.grimedi.ui.component.ModelRenderer.loadGL(ModelRenderer.java:388) at com.sqrt4.grimedi.ui.component.ModelRenderer.setModel(ModelRenderer.java:106) at com.sqrt4.grimedi.ui.editor.ModelView.onNewData(ModelView.java:257) at com.sqrt4.grimedi.ui.editor.EditorPanel.setData(EditorPanel.java:34) at com.sqrt4.grimedi.ui.MainWindow$5.run(MainWindow.java:269) at com.sqrt4.grimedi.ui.MainWindow$4.run(MainWindow.java:185)

Should be obvious, but I'm running 64bit Windows 7. My JRE could be x86.

Ah okay, yes the problem here is that you're using the 32-bit JRE and for some reason it's trying to load the 64-bit DLL. I'm not sure why as the 32-bit DLL is included and would probably load fine, but that's java for you!

Ah no my apologies, it seems that the way I'm packing the jar file means the binaries are overriden by the 64-bit versions. I guess I'll have to change the build process to produce 32 and 64-bit JAR so that it can work for everyone.