-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support for more File Formats (RtMI) #6
Comments
i wanted to extract all music and sfx from rtmi - tried with the 0.4 version and had no luck. any updates on a build of this enhancement? i am no coder :( |
It will come, we've done it successfully manually. I just need to code it so its done automatically. Hopefully this weekend. |
There is a third key. |
The first byte in the decoded files seems to be 0x00. Starting the key at the first key-byte that equals the first data byte seems to work. The largest offset I've seen is 20. |
The index for the yack decryption is just the file name length minus the file extension. I.e Carla.yack has the index 5. This has worked for all yack files I've extracted so far. |
Good catch. |
I think I understand the structure of the new .yack files now. Then, beginning at offset 8 follows a series of "lines"
Most opcodes seem to have one or two parameters. If a third one is added, it seems to make the line conditional. The condition is the first parameter in this case. Opcodes I have figured out (I think:)
I'm not so sure about these:
I'm really not familiar with the format of the yack files used in TWP - maybe some of this is explained by them. These "conditions" aren't always how I would expect them either. But sometimes they contain the name of a file: perplexing. |
I figured out a bunch of stuff. I can now dump yack-files to text. Look here https://github.com/jonsth131/ggtool/blob/main/libdinky/src/yack.rs I'm pretty confident with these opcode definitions: enum YackOpcode { |
Fantastic work yet again! |
I'm looking into the .dink file. Each block seems to describe a function in a script. Weird.dink contains 6478 of these blocks. It is comprised of multiple blocks and starts with the magic number 0x7F46a125. The header additionally holds 10 more bytes of unknown purpose. Here's what I found out: Block with ID 0x983f1cfa: Each function contains four more blocks:
|
I have started writing a tool to view the .wimpy files. |
.dink file:
I have no idea what the opcodes are, or how the constants are referenced in the byte code. |
The lowest 11 bits of each instruction are the op-code. |
Thankfully, the game contains strings for all of the opcodes:
|
Would be epic if you could confirm once we are successfully able to get hold of the music. I managed to get as far as determining that ggpack4d contains the music, and extracted Music.assets.bank from it, but none of the bank extraction applications seem to work - 0 files found :( |
Working on it now, I found a better way of doing it, so re-writing it. |
from Weird.ggpack1a
*.dinky - only one file. Seems to be an uncompiled script. It contains some global defines such as the character's talk colors and some macros.
*.dink - only one file. I assume that this file contains all compiled scripts. I don't know anything about the format, but the individual scripts seem to be delimited by the byte sequence 9C 78 41 34.
*.anim - Skeletal / Animation data. Actually just JSON.
*.attach - These files probably define attachment points on character's skeletons. These are just JSON as well.
*.blend - These are just text file as well. They start with "# DO NOT EDIT! Original is in SVN!".
*.emitter - GGDict file. I used the gg-tool to convert them to JSON.
*.json - Ironically, they are not actually JSON Files but rather GGDict files (which can be converted to JSON just fine). Probably created with the Tool Texturepacker - I think it has a plugin interface to write to custom data formats. If that is the case then these files mark which parts of the image files are separate textures.
*.lip - Probably lip sync data. just Text. Each line starts with a timestamp. The letters probably correspond to the character's mouth shapes.
*.otf, *.ttf - fonts
*.txt, *.tsv - Localized string data. Credits, LeDiary, VersionGame, CollectableData, Text
(the collectable data would be very useful if i hadn't already answered all of them correctly on my own... - the correct answers are prefixed by a *)
*.wimpy - I think these contain the actual locations. They are GGDict files and can be converted to json - see the note below. The "gg"-tool is almost able to parse them at the moment, I might have to make another pull request there.
*.yack - I think these are different than TWP's .yak files - the tool from the other repository doesn't work.
Note that they changed the format of the GGDicts from twp to rtmi - the string / key indices are now just 16 bits wide.
When converting the files the tool may complain about unknown data types - so far I have seen type 9, 10 and 11.
judging by the data (they are all just saved as strings), 9 is a 2D Vector, 10 is a structure comprised of 2 2D vectors, and 11 is a structure of 3 2d vectors.
from Weird.ggpack5*:
*.atlas - Just text. These seem to reference the sub-images from the .json-files. and control the Color format and filter modes. (as well as some sizing and rotation information)
I think the most interesting files - after the graphics / audio are the dink scripts (even though the comments have been removed during compilation) and the yak files. Most of the other ones are either Text, JSON or GGDict's (which could be converted to JSON for preview.)
If the Thimbleweed Park explorer implemented a conversion process from GGDICT<->JSON analogous to the gg-tool then the pack parsing could be further improved.
The text was updated successfully, but these errors were encountered: