Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation since 06/04/2025 in all areas

  1. Added support for version 4 of locres to UE4localizationsTool Added to row editor, edit or add new Item ID for row UE4localizationsTool-v2.7.2.zip
    5 points
  2. Warhammer 40,000 Space Marine - Anniversary Edition (2011) and Warhammer 40,000: Space Marine - Master Crafted Edition (2025) ucs.pc Export and Import python tool. Warhammer 40000 Space Marine .PC Tools.zip
    4 points
  3. This is the forum. Not help site sort of speak. In here, ppl are exchange the skills. Stop bumping the topic, this is against our rule! You asking for some help and in next to hours asking again. Stop doing it..
    3 points
  4. Please do not help anyone or provide guidance on how to convert TXT or JSON files into LOCRES files
    3 points
  5. Requirements UABEA PXR.py (For text extract and import) UnityPlayer.dll FFPR_FontTool (Optional, for font editing) Locating and Editing Texts Text files are stored inside the message_assets_all file "FINAL FANTASY_Data\StreamingAssets\aa\StandaloneWindows64" Open this file with UABEA and Select the four English text files by holding Ctrl and left click: system_en, story_mes_en, story_cha_en, etc_text_en On the right panel, click Plugins and export as txt. Create a new folder and move these exported .txt files into it. Download PXR.py and place it inside the same folder. Run the PXR.py and type 1 to extract the texts. Edit the generated merged_output_en.txt file as you want. After editing run PXR.py again and type 2 to import edited texts. Open message_assets_all with UABEA again, choose txt files > Plugins > Import.txt and choose the "merged" folder. And do Ctrl + S to save. Font Editing (Fonts are located in FINAL FANTASY_Data\StreamingAssets) Run FFPR_FontTool. Choose option D, then drag the font_en.bundle file into the tool. Choose a random name to extract the font files. This will decrypt the bundle. Open the extracted font files in UABEA. Select SE-ALPSTN and sqex-MonoSix files, then click Plugins > Export.ttf to export them. Edit the fonts, or you can use another font if you wish. After that Plugins > Import fonts with UABEA. Run FFPR_FontTool again, choose option E, drag your edited font files, and save as font_en.bundle. Textures Locations common_title.bundle: Title Screen Textures common_assets.bundle: Title Logo and Language Textures hit_sprite.bundle: Hit Textures miss_sprite.bundle: Miss Textures Installation For mods to work properly, you need to use the "UnityPlayer CRC Check Bypass" mod otherwise your mod will not work. https://www.nexusmods.com/finalfantasypixelremaster/mods/90 Credit: Shiryu64 on Moogles & Mods Discord FINAL_FANTASY_PIXEL_REMASTER_FONT_MODDING_TUTORIAL.pdf
    3 points
  6. Here is the script if you want to test it. You need to press F4 or the red icon on bottom("Toggle face cull"). fmt_fear_effect_inferno_ps2_rmd.py
    2 points
  7. I made a Noesis script to read all meshes from .RMD files but the meshes are in the center so we need the skeleton but I don't know how to do that, lol. I used the function "CreateTriList" from other PS2 script(made by leeao), it works fine. This function uses the last 4 bytes of vertices buffer as flag and pad: 12 bytes verts, 1 short flag, 1 short pad. Here is DBULL.RMD but like I said, we need the skeleton:
    2 points
  8. Hi, it was brought to my attention that the Beta xbox version has additional outfits that the PC version does not have. The models are in a different format, namely .xgg - Which is slightly similar to the pc version. The ps2 version is also in a different format .pgg - However I won't be looking at this at the moment. I created a script for the character models, it probably won't work for terrain or objects. At this stage I am not going to expand on it further or create a new thread as it is the same game. XGG_convert.py
    2 points
  9. edit: seems instead of experimenting I'd try to get TGE's RMD maxscript, maybe from xentax backup archives edit 2; found Amiticia, but exporting the clump creates no file The bones with parent ids: 0 *jtroot* -1 1 *jtbody* 0 2 *jtwaist* 1 3 *jtchest* 2 4 *jtrshoulder* 3 5 *jtrarm* 4 6 *jtrelbow* 5 7 *jtrwrist* 6 8 *jtrpalm* 7 9 *jtlshoulder* 3 10 *jtlarm* 9 11 *jtlelbow* 10 12 *jtlwrist* 11 13 *jtlpalm* 12 14 *jtneck* 3 15 *jtmouth* 14 16 *jtlip* 15 17 *jtlleg* 1 18 *jtlknee* 17 19 *jtlankle* 18 20 *jtltoe* 19 21 *jtrleg* 1 22 *jtrknee* 21 23 *jtrankle* 22 24 *jtrtoe* 23 floats from the matrices (undefined values replaced by 0.0 0.0 0.0): 0.0 0.0 0.0 jtroot 0.413449 -0.995091 0.495473 0.357034 -0.674350 0.553032 0.982738 -0.695039 0.691009 0.253196 -0.269279 0.291826 0.216968 -0.236668 0.236830 0.0 0.0 0.0 jtrelbow 0.032668 -0.201254 0.164289 0.0 0.0 0.0 jtrpalm 0.253197 -0.269279 0.291826 0.216968 -0.228647 0.236830 -0.044276 -0.264800 0.184460 -0.039168 -0.199243 0.158531 0.0 0.0 0.0 jtlpalm 0.722860 -0.408135 0.387143 0.038753 -0.180144 -0.108344 0.0 0.0 0.0 jelelbow 0.016553 -0.456171 0.428642 -0.045874 -0.276716 0.403431 0.037943 -0.777463 0.348391 0.0 0.0 0.0 jtmouth 0.016552 -0.456171 0.428642 0.0 0.0 0.0 jtlleg 0.037943 -0.777463 0.348391 0.0 0.0 0.0 jtlankle edit: uvs are a little bit weird, as usual:
    2 points
  10. Those .PS2 files are textures, you can examine those with Console Texture Explorer. I found some info too like width and height, image data offset and palette offset. About .RMD files, these have a lot of submeshes but we need to find a way to collect all. I will try to check that later... Here is texture head0.PS2 from DCHAIR folder:
    2 points
  11. Hi all! I've been reverse engineering this engine on and off for a while now (specifically the engine for Spy vs Spy 2005). I'm assuming there wasn't major changes over the years, here is some potentially useful info. Custom File Format The game is actually fully programmed in the custom files described above (the engine itself doesn't have any game logic). Custom files are all serialized the same way, which is a series of versioned nested nodes that define objects/fields (in the 2005 engine, there's ~400 object types). The first reference to an object initialized it. These objects are everything from entities, meshes, textures, etc. The raw data often matches a standard format for the console (for xbox: textures are mostly mipmaps of A8/DXT images and audio is ADPCM). To put this in context, here is what you might have to do to go get a texture (assuming the first instance is being referenced by the script that fires when the map loads): .map file -> FileObject - field: object -> MapObject - field: onMapStart -> ScriptNode - field: children -> SpawnActionNode - field: entity -> Entity - field: materials -> Material - field: texture -> Texture - field: color_buffer TL; DR, it's quite hard to reverse engineer the custom file formats without deep understanding of the engine. My Research I made a GitHub org that has all my work: https://github.com/vicious-rebirth Currently, all the repos are private because I'm trying to figure out the best way to release without getting a cease and desist (I think Little Orbit still owns the engine and there's some algos that are patented by MS). This said, I'll try to release my web tool on GitHub page for extracting assets (mileage will vary). I can give read access to anyone interested. Useful Videos Vicious Engine Demo (a good summary of the features from the devs) Vicious Engine Tutorial (a partial series of tutorials of how to use the engine - useful to understand the various types of objects) Extract Model (a preview of a model I extracted for proof)
    2 points
  12. Railway Empire 2 translation tools and description. Railway Empire 2 Tools.zip
    2 points
  13. Donated! 5$ not much but it’s always better than nothing!
    2 points
  14. I have made a Noesis script but it's basic. Just simple mesh export. No materials/ no bones/ no skin. Anyway this is mesh struct. Just basic. //------------------------------------------------ //--- 010 Editor v14.0 Binary Template // // File: // Authors: // Version: // Purpose: // Category: // File Mask: // ID Bytes: // History: //------------------------------------------------ LittleEndian();OutputPaneClear(); local uint32 i,j,k,l,TotalSize=FileSize(); string MeshName; uint32 Unknown_0; uint32 Unknown_1; float Unknown_2[27]; float Unknown_3[5]; uint32 TotalVertexCount; uint32 StrideType; if (StrideType == 19) { byte VertexBuffer[TotalVertexCount*24]; byte ColorBuffer[TotalVertexCount*4]; } else if (StrideType == 23) { byte VertexBuffer[TotalVertexCount*24]; byte UVBuffer[TotalVertexCount*8]; byte ColorBuffer[TotalVertexCount*4]; } uint32 TotalIndexCount; byte IndexBuffer[TotalIndexCount*6]; uint32 ShapeIndex; struct { string MaterialName; uint32 IndexCount; // *3 uint32 Unknown_0; uint32 VertexCount; uint32 Unknown_1; }ShapeInfo[ShapeIndex]<optimize=false>; FSeek(startof(VertexBuffer)); if (StrideType == 19) { struct { float VPosX,VPosY,VPosZ,VNPosX,VNPosY,VNPosZ; }Vertices[TotalVertexCount]<optimize=false>; } else if (StrideType == 23) { struct { float VPosX,VPosY,VPosZ,VNPosX,VNPosY,VNPosZ; }Vertices[TotalVertexCount]<optimize=false>; struct { float UVPosX,UVPosY; }UnitVector[TotalVertexCount]<optimize=false>; } FSeek(startof(IndexBuffer)); for (i=0; i < ShapeIndex; i++) { struct { uint16 F1,F2,F3; }Indices[ShapeInfo[i].IndexCount]<optimize=false>; }
    2 points
  15. Donated! Thank you all for your great efforts.
    2 points
  16. //------------------------------------------------ //--- 010 Editor v14.0 Binary Template // // File: // Authors: // Version: // Purpose: // Category: // File Mask: // ID Bytes: // History: //------------------------------------------------ LittleEndian();OutputPaneClear(); local uint32 i,j,k,l,InfoOffset=FileSize(); FSeek(InfoOffset - 20); uint32 CheckSum<format=hex>; // Must be updated after edit > 32 bit LE checksum uint32 TableOffset; // Must be updated after edit uint32 TotalFileSize; // Must be updated after edit uint32 Flag; uint32 Unknown; // Not sure what is for... FSeek(TableOffset); ubyte ResourceCount; struct { ubyte StrLen; char ResourcePath[StrLen]; uint32 ResourceOffset; // Must be updated after edit uint32 ResourceSize; // Must be updated after edit uint32 Null; }ResourceInfo[ResourceCount]<optimize=false>;
    2 points
  17. Yes, I used VulkanRipper + ShadPS4.
    2 points
  18. Version 0.6

    98 downloads

    Work in progress, build 0.6 For instructions and support join reshax discord: https://reshax.com/topic/138-reshax-discord-server Currently, we must be able to replace any mesh in the game, including Aloy and other characters, robots, or environment parts. Also possible to replace most textures.
    2 points
  19. Version 1.0.1

    21 downloads

    Tool to export HZDR models/textures. Usage is same as original PC game: https://reshax.com/topic/16020-horizon-zero-dawn/#comment-83749
    2 points
  20. i think its not armor, its uvs (skip z) i made plugin fmt_gb3.py *(parsing all blocks, if desired you can add parsing of materials, nodes, etc.)
    2 points
  21. Here's Noesis script for textures. from inc_noesis import * import noesis import rapi import os def registerNoesisTypes(): handle = noesis.register("Psi Ops - Texture", ".w32") noesis.setHandlerTypeCheck(handle, noepyCheckType) noesis.setHandlerLoadRGBA(handle, noepyLoadRGBA) noesis.logPopup() return 1 def noepyCheckType(data): bs = NoeBitStream(data) if len(data) < 20: return 0 return 1 def noepyLoadRGBA(data, texList): bs = NoeBitStream(data) BaseName = rapi.getExtensionlessName(rapi.getLocalFileName(rapi.getInputName())) bs.read(20) ResourceTableOffset = bs.readUInt() bs.read(12) StringTableOffset = bs.readUInt() bs.seek(ResourceTableOffset, NOESEEK_ABS) ResourceCount = bs.readUInt() for i in range(0, ResourceCount): Extension = bs.readUInt() Unknown_0 = bs.readUInt() ResourceSize = bs.readUInt() ResourceNameOffset = bs.readUInt() cPos_0 = bs.tell() bs.seek(StringTableOffset + ResourceNameOffset, NOESEEK_ABS) ResourceName = bs.readString() bs.seek(cPos_0, NOESEEK_ABS) ResourceOffset = bs.readUInt() Unknown_1 = bs.readUInt() cPos_1 = bs.tell() if Extension == 544761204: bs.seek(ResourceOffset, NOESEEK_ABS) TextureWidth = bs.readUInt() TextureHeight = bs.readUInt() RawDataSize = bs.readUInt() -20 Unknown_0 = bs.readUInt() BufferInfoOffset = bs.readUInt() Unknown_1 = bs.readUInt() MipMap = bs.readUInt() Unknown_2 = bs.readUInt() PixelFormat = bs.readUInt() Unknown_3 = bs.readUInt() RawDataOffset = bs.readUInt() bs.seek(RawDataOffset, NOESEEK_ABS) TextureBuffer = bs.read(RawDataSize) bs.seek(cPos_1, NOESEEK_ABS) if PixelFormat == 19: print("Pixel Format > R8") elif PixelFormat == 12: print("Pixel Format > DXT1") elif PixelFormat == 14: print("Pixel Format > DXT3") elif PixelFormat == 15: print("Pixel Format > DXT5") elif PixelFormat == 18: print("Pixel Format > RGBA8") else: print("Unknown Pixel Format > ",PixelFormat) if PixelFormat == 12: texFmt = noesis.NOESISTEX_DXT1 elif PixelFormat == 14: texFmt = noesis.NOESISTEX_DXT3 elif PixelFormat == 15: texFmt = noesis.NOESISTEX_DXT5 elif PixelFormat == 18: texFmt = noesis.NOESISTEX_RGBA32 elif PixelFormat == 19: TextureBuffer = rapi.imageDecodeRaw(TextureBuffer, TextureWidth, TextureHeight, "b0 g0 r8 a0") texFmt = noesis.NOESISTEX_RGBA32 texList.append(NoeTexture(ResourceName, TextureWidth, TextureHeight, TextureBuffer, texFmt)) return 1
    2 points
  22. becky GB3, 829 vertices, uvs unknown so far: edit: I've made a "smart UV projection", but the result is not how it should look like: Assumedly armor parts:
    2 points
  23. I've been chipping away at this for... Weeks now? I've been making improvements to the program called StudioCCS which is a model viewer/exporter for the .hack games. My primary focus is the original series' model animations. I have had some successes - characters largely now look a little bit off rather than twisted and deformed. I have, however, hit the limits of my understanding. An archived XenHax post indicates these use standard PS2 vif tags, and despite reading over the linked posts (through the wonders of the Wayback Machine), I still don't know what I can do. I've had some successes with fixing some of the rotation values so things don't look like garbage, and implemented a few things like exporting a current scene and exporting all animation data. A lot of what I've done is a little hacky, for now, and my code is a mess of commented out attempts and whatnot. My repo is here, and does include a built version in the bin/Debug folder (it's how what I forked from what doing, so I stuck with it): https://github.com/taarna23/StudioCCS I'm attaching 3 character models that the program will load. I hope someone will be able to help. ccs_chara_models.zip
    2 points
  24. I figured out the format and have documented the compression here: Torus Games (Leapster) sprite decompression documentation
    2 points
  25. public static Byte[] iDecrypt(Byte[] lpBuffer, UInt32 dwKey = 0x6E6B7270) { UInt32 dwMagic = BitConverter.ToUInt32(lpBuffer, 0); if (dwMagic == 0x53524944) { UInt16 wFlag1 = BitConverter.ToUInt16(lpBuffer, 8); UInt16 wFlag2 = BitConverter.ToUInt16(lpBuffer, 10); if (wFlag1 == 1 && (wFlag2 & 1) != 0) { UInt16 wValue1 = BitConverter.ToUInt16(lpBuffer, 12); UInt16 wValue2 = BitConverter.ToUInt16(lpBuffer, 14); dwKey = (UInt32)(dwKey * (wValue1 ^ wValue2)); UInt32 dwSize = ((BitConverter.ToUInt32(lpBuffer, 4) + 3) >> 2) - 4; Boolean dwRemaning = ((BitConverter.ToUInt32(lpBuffer, 4) + 3) >> 2) == 4; if (!dwRemaning) { for (Int32 i = 16; i < dwSize * 4 + 16; i += 4) { UInt32 dwData = BitConverter.ToUInt32(lpBuffer, i); dwData ^= dwKey; dwKey = 5 * dwKey + 1; lpBuffer[i + 0] = (Byte)dwData; lpBuffer[i + 1] = (Byte)(dwData >> 8); lpBuffer[i + 2] = (Byte)(dwData >> 16); lpBuffer[i + 3] = (Byte)(dwData >> 24); } } } } return lpBuffer; } FS.DIR is encrypted, so the code above will help to decrypt it. if someone wants to check it and help to reverse structure i also attached the decrypted file. Looks like entry table is flipped... some examples Some correct paths FS_DECRYPTED.zip
    2 points
  26. 30kB unit, using hex2obj: 184 kB unit: 2nd mesh of 881kB unit:
    2 points
  27. I'm monitoring your posts and your activity in general. No please not thx, nothing and keep, keep asking. This is your last notification.
    2 points
  28. Usage: Export text: Run ExportText.exe, select *.Localization_Package file Import text: Run ImportText.exe, select translated file PoPForgottenSandsTextToolByGier.7z
    2 points
  29. The locres file refers to a file that contains text in the Unreal Engine. Depending on the game, some use locres files while others use uasset files. Please clarify which game you are referring to. And before creating a new thread, please make sure to use the search function in this forum.
    2 points
  30. EA Games used the same endianess structure as the Nintendo Wii... Just insert it as if it were a Nintendo Wii game. You're welcome.
    2 points
  31. you mean this txt? https://github.com/zbirow/Monster-Jam-Unpack/blob/main/chunk_00000.txt
    1 point
  32. on this, you cannot use this script with the latest release of uniloader from github, the API has changed since the IKV script has been written, only version works with it is 0.1.0, which is the one i have provided here and the one OP has shown in his screenshot In addition both the loader and the script have been designed for Blender 4.0+ so there might be issues if you use older versions
    1 point
  33. Okay, so someone helped me and figured out the skeleton. Here's a Noesis script fmt_spidermanskel.py
    1 point
  34. Addon curtesy of REDxEYE __init__.py to be used with https://github.com/REDxEYE/UniLoader and with it there is my audio .raw file converter all the extracted resources can be found here ill link my extractor aswell if i can find it https://drive.google.com/file/d/10uo-DmmpNkiYlogR9eWmIyy74_AfaM05/view Program.zip
    1 point
  35. Then please extract the other bundles (one with skeleton) from the zip because I don't have the time to do it. Also it would be nice to have a picture from "unproper rigging".
    1 point
  36. Faces are simple for the mentioned mechanics:
    1 point
  37. Dunno. If I had known the cars have already been reversed I'd checked the character SGS instead.
    1 point
  38. Sorry about that. I did get the model to show up using your tools tho so no worries. OK, based on what you dug up with the file, faces are stored as tristrips in 16-bit words. Verts are the usual floats. 0x10 is apparently the submesh count, 0x9C is the face/index count and 0x80 is the vertex count. The lines I highlighted in offset 0x90 hold the addresses for both vertex and index buffers. I guess this should be straightforward enough for a Noesis script?
    1 point
  39. @NoobInCoding Please look at it
    1 point
  40. theHunter Call of the Wild Tetxts.rar
    1 point
  41. Some stuff for Insomniac game engine - https://github.com/team-waldo
    1 point
  42. Yes, these files contain models, textures, sounds etc... I am currently creating tools for Torus Games game files. So far I have managed to create a tool for textures. I am working on 3d models now, but it is quite complicated, idk when I will manage to do it. (.dat files have the same structure as hnk files) Repo with my program: https://github.com/zbirow/Hunkfile-Viewer screenshots of opening your files in my tool:
    1 point
  43. Here is the Script, I hope this provides use for other games with the RSF format. final note is that I found some RSF that don't contain XDNI or 16DI tags and so I've not figured out how to import these. but these weren't too important to me as they were things like vehicles in the background scenery like ambulances etc. Feel free to ask for any clarifications Nascar_09_RSF_Import.py
    1 point
  44. If you want to edit these font use one of this: https://fontforge.org/en-US/ https://www.fontlab.com/ https://www.high-logic.com/font-editor/fontcreator You can use another font as well, just import as ttf.
    1 point
  45. Here's bms for unpack. comtype zstd get BaseFileName basename idstring ERPK get Version uint32 getdstring Dummy 0x8 get ResourceTableOffset uint32 getdstring Dummy 0x4 get ResourceTableSize uint32 getdstring Dummy 0x4 get DataBaseOffset uint32 goto ResourceTableOffset get ResourceCount uint32 get ChunksCount uint32 for i = 0 < ResourceCount get ResourceInfoSize uint32 get StrLen ushort getdstring Dummy 0x7 math StrLen - 7 getdstring FileName StrLen getdstring FileType 0x10 getdstring Dummy 0x4 get ChunkCount ubyte for j = 0 < ChunkCount getdstring Sign 0x4 get Offset uint32 get Unknown_0 uint32 get DecompressedSize uint32 get Unknown_1 uint32 get Unknown_2 uint32 get Unknown_3 ubyte get CompreesedSize uint32 get Unknown_4 uint32 string Name p= "%s/%s" BaseFileName FileName math Offset + DataBaseOffset if ChunkCount < 2 if CompreesedSize == DecompressedSize log Name Offset DecompressedSize else clog Name Offset CompreesedSize DecompressedSize endif else if CompreesedSize == DecompressedSize append 0 log Name Offset DecompressedSize else append 0 clog Name Offset CompreesedSize DecompressedSize endif endif next j get Unknown_5 uint32 get Unknown_6 uint32 get Unknown_7 uint32 get Unknown_8 uint32 next i
    1 point
  46. New tool version 0.3 Added texture import.
    1 point
  47. 4 downloads

    This is attachment from ZenHAX posted by Szkaradek123 in topic: Mortal Kombat Deadly Alliance .ssf files
    1 point
  48. I've just released a new version of ImageHeat https://github.com/bartlomiejduda/ImageHeat/releases/tag/v0.14.2 Changelog: - Added changing canvas color feature. Three colors are available: Gray (default), black and white - Added config file feature. Now program's settings are stored in "config.ini" file - Added translation feature. Two initial languages are supported for this release: English (default) and Polish - Rewritten logic for indexed formats. Now there is an additional combobox where palette format can be selected - Added support for Nintendo Switch swizzling - Added support for PAL_I8A8 format - Added tooltip for longer filenames in Info Box - Fixed bug with mixed shortcuts when using CTRL or SHIFT - Removed support for some rare pixel formats (e.g. RGB121) - Added support for showing palette file name in GUI - Added shortcuts (N/M) for changing palette format - Removed rawutil dependency completely
    1 point
×
×
  • Create New...