All Activity
- Today
-
[PS2] Criterion Games BLACK (Aug 16, 2005 prototype) .DB .BIN
daintysam31 replied to daintysam31's topic in 3D/2D models
Yes sorry forgot to mention, your script unpacks the character models and level data succesfully in combination with the Noesis plugin. -
Yonko joined the community
-
TheTiojack joined the community
-
zoli9200 joined the community
-
AlexanderAlexis started following karol
-
I was asked to take a look at the animations used for Crash Bandicoot Wrath of Cortex that is on three different consoles. Xbox, Gamecube, and PS2. They wanted help and I took a quick look at it. After doing such I thought I should make a page here and put up my findings to help others with this. Some of this is a copy /paste of my reply to the one that asked me to have a look at it to save time. .HGO is the model/skeletal format that I should mention before hand. .ANI and it's companion file .BSA are the animations. The "Nuanim" animation format is the ANI and BSA together. " The .ani data behaves like a memory-structure dump from the game engine rather than a clean, self-describing interchange format. The strongest tell is the “pointer table” pattern. There is a run of 47 u32 values that look like absolute addresses (all sharing the same high 16 bits). Subtracting that common high-16 “base” yields valid in-file offsets. That pattern is typical of a format that was originally pointers in RAM, written out with minimal fixups. .ani is likely an engine-native serialized structure. Within each track block, I repeatedly seen something that parses cleanly as type_flags (u32), key_ptr (u32 “absolute pointer” into this same block), key_count (u32), pad (u32). Then key_count keys that look exactly like time (float32), value (float32), tanIn (float32), tanOut (float32). Times are mostly monotonic and look like frame indices (0..N). So the curve container is real. The .hgo contains "On xbox" an NTBL string table that yields plausible bone names (at least enough to map “track i → bone name i” in a consistent way). So they probably have track ordering and a skeleton name list. "The following here is what I tried and failed" A base explanation. I generated BVH by assuming “3 curves per bone” = Euler X/Y/Z rotations (with all six Euler orders). Same but with different Hermite tangent interpretations (dt-scaled vs not, clamping, wrapping). “3 curves per bone” = quaternion vector components (x,y,z) with implied w = sqrt(1 − x² − y² − z²) and continuity sign fixes. Doing this is why I mainly only got "spaghetti". A mostly coherent-looking hierarchy (so offsets / parentage aren’t totally random), one “sane” motion that looks like a repeated arc/hammer (likely a translation-like signal), the rest flailing at insane speeds (classic “wrong semantic decode,” not just wrong axis). The curves are real, but my interpretation of what each curve represents is wrong. " That is where I basically left off but am going to add additional information and again copy/pastes of what I already wrote to save time. " Now, here are some "guesses". One or more of the following are true. I would need more time to figure it out. One. The curves are not Euler components.. Two. The curves are not quaternion components in the simple sense.. Three. The .ani does not contain enough metadata to know what each curve means — the meaning is supplied by the companion .bsa and/or other per-skeleton structures. Four. type_flags (and/or .bsa) is encoding critical information such as channel type (rotation vs translation vs scale vs something else), packing mode (raw float vs quantized), component mapping (which curve is which component), unit (radians/turns/normalized), interpolation mode (Hermite/Bezier/slerp/etc.), or sign reconstruction (very common with quaternion compression). To summarize all this... I can parse the curve blobs, but I do not yet know how to apply them correctly to a skeleton. My assumptions about the BSA are the big bullets here. I have not decoded .bsa. That is likely fatal. I thought I did..... But as they say.. can't spell assumption without spelling ass first..... I should not have made so many assumptions. " For those that want to figure out this animation format and continue on, there is a github dedicated to reverse engineering the game Crash Bandicoot Wrath of Cortex using the gamecube version as a base due to it's debug symbols. Also, you would need to do the following as well and again is going to be a copy/paste so I don't have to write everything out again. " First, you need to properly decode the .BSA files. Second, you will need to identify the "type_flags". Third, Confirm the rotation representation used by NUANIM in this game. For each joint, produce a stable quaternion per frame that does not explode. My method was probably not the best using BVH because it is is a bad target for tricky rigs because it has limited support for per-bone pre-rotations and coordinate conventions. Even with a correct decode, BVH can still look “off.” I went this route for speed... Not sanity. You will be better off with glTF animation on the same joint names as crash.gltf, or a Blender importer that writes quaternions directly to pose bones. BVH was just faster for me for testing. I was trying to see if I could get ANYTHING correct. The solution to how these animations work are in the XBE and ELF files for the xbox and ps2 versions. " And that is about it. I am not going to continue looking into these animations unless someone pays me. Hopefully this helps others. This was my 1 day poke at the animations. I know some fan guru of the Crash Bandicoot game will figure it out with time. Hopefully this helps you out. Godspeed.
-
skyboy21 joined the community
-
一起交流一下?我也在尝试反编译自定义的字节码。对lua不熟。
-
My goal is to decompile all the Lua scripts of the game and fix its custom opcodes, so that I can use standard Lua decompilers to obtain the full Lua source code. Is this task difficult? I'd love to discuss it with you. I have decompilation experience with another NetEase game that uses a custom Python engine (Neox) and I’ve already managed to restore the Python code. However, I have no knowledge of this Lua engine.
-
mindphluxnet joined the community
-
kafeiro joined the community
-
sttie34 joined the community
-
[PS2] Criterion Games BLACK (Aug 16, 2005 prototype) .DB .BIN
Rabatini replied to daintysam31's topic in 3D/2D models
There it helps somehow? -
[NeoX Engine] Cyber Hunter .gis animation data
Eilde replied to vchakchina's topic in Animation file formats
This could be solvable but you would need to send the armature with the animations they are for. Probably the executable as well. I took one glance at it and it looks like a derivative of the same animations used in the game "Where The Winds Meet" that came out not long ago. Maybe same game engine but different iteration? I didn't bother looking. It would take a very long time for someone to work with these animations without the skeleton, knowledge of the game engine, and the specific game itself. With the game being closed, others can't get access to the game to work on it. Your best bet is to look into the modding scene of the game Where the Winds Meet to see if there was progress there. Might work in inverse for your older game if such is the case. While typing this I just now realized this is an older forum post from back in November. Still going to reply regardless so others will see this. Notes for others.: When asking about an animation format and sending a sample, also send with it a base skeleton "model + skeleton" that the game uses for that animation. Need the actual "skeleton" along with the animations to work with. Sending only an animation and asking for help is almost the same as sending someone an encrypted snippet of writing in another language without telling them what the original language was and to decode it. Think of the skeleton like a decoder tool they would use to decrypt that language or the name of the base language used that got encrypted. Best analogy I could think of on the fly. If the game is dead and can't be downloaded..... There isn't much a person can do without having access to those files. In many cases looking at all the files in the game, especially the executables is the main key. It helps out a lot. One needs to understand the game engine more "including the game itself" to understand the game formats used. -
rndbit joined the community
-
hi. would any of you happen to have gt7's undiscovered files? i had extracted them a while ago successfully, but after drive corruption only have the ascii files which aren't useful. no need to extract each and every file, as i know how. thanks!
-
I tried, but db_mp keep refreshing from the server
-
hundredProtein joined the community
-
There are uncompiled lua scripts stored in LocalDB/db_mp sqlite db file, you can try inject lua script which have your text to the game.
-
I have a list of locale id and text in lua, but i don't know how to repack into game
-
I built my own decompiler, turn lua into python. Their Lua have "List", "Dict", "Class", "Inheritance" feature
-
I've cracked the modified opcode, but I noticed it has more features than the standard 5.4 version. Do you know what to do next? Hey bro, how did you decrypt Lua scripts?
-
What practical use case scenarios does this have?
-
EASYkairo joined the community
-
Is anyone capable of doing this?
- Yesterday
-
[PS2] Criterion Games BLACK (Aug 16, 2005 prototype) .DB .BIN
daintysam31 replied to daintysam31's topic in 3D/2D models
Did some digging, the plugin works great. Requires some blender trickery to get rid of all the lods and reconstructing the character models but it works great, only thing of note is the shading being really funky but I fix those by hand anyway. I also tested it on some level meshes and gun viewmodels, works too but has flipped normals seemingly at random. Either way, thank you to everyone who helped and contributed, I truly appreciate it. -
You should use the -G command, which will force GUI startup
-
These are really very good "last words", I feel. My final idea is to use an emulator/debugger (did it for PC games only so far). The compatibility list of PCSX2 shows Garou - Mark of the Wolves only, which had a PS4 release. So yeah, another dead end, I guess. (Luckily I have some other unfinished projects so I think, I can live with the fact that the GGK animations will remain a riddle for me.)
- 15 replies
-
- animations
- modding
-
(and 1 more)
Tagged with:
-
I don't own the game so I can't personally test anything or look at the files. What I can say just from observation is that with some of the animations and your model importer it is having orientation issues. To find out if this is the armature itself or error with importing the animations, make a duplicate skeleton and retarget to it the animation that has normal skeletal/bone orientation. If the hands/fingers still look off, you got your answer. About the "spider stretch" screenshot I see from your pictures. I have seen that a LOT with people trying to work with Mortal Kombat 1 animations and many games in Unity engine. Totally different engines but probably similar issue. Importer is wonky with the skeleton/bones and gets incorrect animation data. First try a retarget. If you have Claude A.I you can use the blender MCP with Claude and it can generate a normal skeleton with duplicate names in blender for your retargeting tests to save time.
-
UModel is mis-parsing the package, usually because the game’s UE2 fork / package format doesn’t match what UModel expects with the current settings. Umodel to my knowledge works with this game. Your settings are not correct. I will elaborate using your error. FArray::Empty: -116 x 12 UModel tried to allocate an array with -116 elements of 12 bytes each. A negative element count is impossible, so the size overflows to a negative number (-1392) and appMalloc blows up. UModel is reading the wrong structure at that position (e.g., thinks this field is “NumVerts” but it’s actually some other 32-bit value), because the package layout / engine profile doesn’t match what UModel expects for “game=ue2” in this case. The rest of the stack confirms it dies while trying to load a skeletal mesh from that .ukx, not on textures or trivial data. In easy to understand terms. "wrong assumptions about how this game’s .ukx stores its skeletal meshes". Umodel should have a selection on the side for where you can pick game targets. If the game isn't there then you might be out of luck. However, I think this game shares a target with another game. Just trial and error to see if any of them work. Also, if this is not a "PC" version of the game you need to change the "Auto" on the bottom right of the gui to the specific platform. I know the topic says PC. People do make mistakes. Unreal Engine 2 games are rare and few in between. Not many people cared to work with any of them. Even the Wheels of Time game didn't get much investment. Also, turn off all forms of textures/material when first trying with unreal engine 2 games to speed up the process especially with whack a mole trial and error. The only people that would even bother adding support to this game which is extremely unlikely are on Gildor's forum. Again, very few people would ever care for an Unreal Engine 2 or 1 game. I am sorry if this wasn't helpful.
-
I don't know how the quote thing works with this forum so I apologize for doing full quotes. While I do have other renderware file types, none of them are near the same as this game. It is an extreme outlier. For models, it is the same as most other renderware games. Mainly the Eighting flavour. The animations are unique to this game exclusively. It's bizarre dual animation system with renderware is not used on any other game I have come across. The only similarity this game has with others using the same/similar engine are the models but even that is only by half since Garou mixes the older PS1/N64/Saturn/Early Dos style of animating with the normal style we are all used to with more modern games. I have no RWANM reference that is solved usable with this. Most of my other PS2 RenderWare titles I worked on either use the standard ANM/TMO chunk (for which there are public importers) or completely different animation containers (GNTA and similar), so I don’t have a clean “known good” PS2 DFF+RWANM pair to compare against. What I can provide are the DFF for this exact under-mesh rig which you already have, with the full bone list / hierarchy along with all others this game has. If there’s any particular chunk/offset range from gar.rws.dec_be_-15_anim_77.rwanm that would be more useful for you to see, or a specific format for the bone list that would make your life easier, let me know what you’d prefer and I’ll try to supply it. From the looks of it... without having more knowledge on this specific animation format it might be a dead end..... I hate to say that. I will say that if someone else does figure this out they should refrain from making it public instantly because there are people willing to pay around 800 USD for this animation importer/exporter. You could take their commission and get paid for it. That is what I was offered and now I have to say no to this because it would take too many weeks of reverse engineering to figure it out and in my opinion won't be worth the money by then. If you do make it public and snub the possible money that is fine as well. The people interested only want to mod the game to add/change characters in it since it is possible to add more characters to the game without the game itself breaking. They basically want to make their own Smash Bros game using Garou Golden Knight to make/add more characters from that anime/manga series. Thank you for trying and looking!! ^^ As of now I am quitting on this. I have too many other jobs to look at and this is too much of a time sink for me. If people want to continue on this and have questions feel free to message me. I will give my tools and such along with any information so you can continue where I left off.
- 15 replies
-
- animations
- modding
-
(and 1 more)
Tagged with:
-
Hello! Out of boredom, I decided to replace texture from a Godot game, in this case Slot or Not, by using Python but failing and failing over again exhausted me. My script has data and their MD5 hash code replacement, and data header change. I doubt that something doesn’t work or they are others data somewhere. I also think even if both WebP data from Godot and PIL are working, their data processing are different thus incompatible. Not even replacing them with PNG data works. I suspect there is a checksum for PCK somewhere. I compared its PCK file with Super Mario 127’s. Although the WebP data for CTEX and STEX are the same, the data pointers in SM127 are at the start of the file, after the header; SoN are at the bottom. The PCK for V1 is documented in Xentax wiki but not for V3. It may be small but this comparison shouldn’t be dismissed. What I need: If there is a checksum for PCK, where it is? The Bytes leading to the data header thus making the Python script adaptable If the WebP data is the issue, a better understanding of Godot’s WebP data Feel free to reply if you find anything! Slot or Not (PCK File V3) son PCK File.zip Godot Picture Replacer Script (Work in progress) Godot Pictures Replacer Script.py Note for the creator of Slot Or Not, you don’t have to turn it into an moddable game. The game need its own resource to be good game. I do this because why not and for research purpose. Knowledge GODOT PCK FILE FORMAT (Little Endian) (From Slot or Not) HEADER (112 Bytes) 4 Bytes = Signature ("GDPC") 4 Bytes = 03 00 00 00 (Engine Version) 4 Bytes = 04 00 00 00 (Major) 4 Bytes = 05 00 00 00 (Minor) 4 Bytes = 00 00 00 00 (Revision) 4 Bytes = 02 00 00 00 4 Bytes = 70 00 00 00 (First File Pointer) 4 Bytes = 00 00 00 00 4 Bytes = File Numbers 4 x 19 Bytes = 00s (Reserved) DATA HEADER (Found at the last part of the file) 4 Bytes = Length of Path, Including the 00s X Bytes = Path Name + 00s (If not divisible by 4) 8 Bytes = Data Pointer - 112 8 Bytes = File Size 16 Bytes = Data MD5 Checksum 4 Bytes = 00 00 00 00 GODOT CTEX FILE FORMAT (Little Endian) For WebP Format { 4 Bytes = String GTS2 4 Bytes = Use Alpha or Not (01 = Yes; 00 = No) 4 Bytes = Height 4 Bytes = Width 4 Bytes = 00 00 00 0D 4 Bytes = FF FF FF FF 4 x 3 Bytes = 00s (Reserved?) 4 Bytes = 02 00 00 00 2 Bytes = Height 2 Bytes = Width 4 Bytes = 00s 4 Bytes = 05 00 00 00 4 Bytes = Data Size after this Byte 4 Bytes = String RIFF 4 Bytes = WebP Data Size after this Byte 8 Bytes = WEBPVP8L / Tag for Loseless Encoded Image Data 4 Bytes = Data Size (or Data Size - 1 if WebP Chunk ends with 00) (Rest of the File) X Bytes = WEBP VP8L Chunk (On Python, the settings are Loseless = True, EXIF = False) 0-15 Bytes = 00 for Fill Up if the CTex Data Size isn't a divisible of 16 } [NOTE: You can get the WebP data by removing the GTS2 Header.] For PNG Format { X Bytes = PNG File Data 0-15 Bytes = 00 for Fill Up if the CTex Data Size isn't a divisible of 16 } X Bytes = String for [Remap], Settings, Path, Texture, Vram X Bytes = 00s (if the length the String isn’t a divisible of 16)
- 1 reply
-
- 1
-
-
I tried UE viewer but returns an error and crashes appMalloc: size=-1392 (total=2 Mbytes) <- FArray::Empty: -116 x 12 <- TArray::SerializeSimple <- TLazyArray<< <- FStaticLODModel<< <- TArray::Serialize: 1/4 <- USkeletalMesh::Serialize <- LoadObject: SkeletalMesh'CBA_Characters.General', pos=132000, ver=129/10, game=ue2 <- UObject::EndLoad <- LoadWholePackage: Animations/CBA_Characters.ukx <- CUmodelApp::ShowPackageUI <- Main: umodel_build=1590 Any ideas where to convert UKX and SkeletalMesh files. Thanks in advance. ww2crtb_ukx.zip CBA_Characters.zip
-
(PS3) Killzone 2 Models/Textures (Early Decima Engine) Help Wanted
Greg replied to DreamingOxxy's topic in 3D/2D models
My apologies. -
Yep. 0x2d72 is the start address of a block, 1100 is the count of 22 bytes blocks. Since hex2obj usually is used to display vertices I assumed the data at 0x2d72 to be translations which the visualizations seems to confirm. Other than wildest guessings? I fear, no. Another question is how the data is assigned to the bones. Do you have a PS2 example (dff/rwanm files of another game or just a picture) where this assignment can be traced? I'm glad when I could help somehow. Forgot to mention that (see picture in my previous post) I pressed the 'table' button to get the timeline list. The 'ptCld' button needs to be toggled to 'noPtC' for this (or you press 'mesh' to get the point cloud visualization).
- 15 replies
-
- animations
- modding
-
(and 1 more)
Tagged with:
ResHax.com: Empowering Curious Minds in the World of Reverse Engineering
Delving into the Art of Code Unraveling: ResHax.com - Your Gateway to the Thrilling World of Reverse Engineering, Where Curiosity Meets Innovation!