Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation since 10/25/2025 in all areas

  1. I'm trying my best to make it load somehow
    4 points
  2. Actually the LZSS provide above, is wrong, for the files. I did the reverse enginner of the algorithim, Try the tool, see if the image get right TenchuWoH_DeCompressor.zip
    3 points
  3. Version 1.0.0

    17 downloads

    Broken Sword - Shadow of the Templars (1996) * bs1_1996_clu_export.py * bs1_1996_clu_import_and_patch.py Required: Python. When installing, make sure to check “Add python.exe to PATH.” Usage: * Copy the swordres.rif and text.clu files into the same folder as the .py files. * Run bs1_1996_clu_export.py: this will extract the texts into Text_exported.txt. * Translate it, then rename the finished file to Text_translated.txt. * Run bs1_1996_clu_import_and_patch.py: this will insert the translated texts back into text.clu and modify swordres.rif. * The new files will be created with the _new suffix. Tested with GoG (2.0.0.8) and Steam Reforged Free DLC FEARka
    3 points
  4. Thanks for some info from here and made a tool for unpacking and packing localize map files, if someone is interested in it. https://github.com/dest1yo/wwm_utils
    2 points
  5. Version 1.1

    498 downloads

    Tools for Battlefield 6 beta. Currently supports dumping the game, export models/maps. Usage is similar to previous tools for frostbite engine. toc_bf6.exe - dump tool Change .ini file parameters: - game path - dump path - selection to dump "ebx", "res", "chunks" or "all" Then drop any .toc file onto .exe to dump assets. Or run from command line with 1 parameter - toc file name. Fb_bf6_mesh.exe - model tool Takes .MeshSet as parameter. ske_soldier_3p.ebx - main universal skeleton for soldiers. Must be in the same folder. If you need another skeleton, use its name as 2nd parameter. Or rename it to ske_soldier_3p.ebx. Tool will try to find chunks automatically. If not, it gives error message with chunk name. Map export 1. Create database Run fb_maps_bf6_db.exe tool once, it will scan whole dump for meshsets and blueprints, so later maps can be converted fast, without the need to go into whole tree of assets. This will take a few minutes. After that, 2 files will be created: bp.db & meshnames.txt, which need to stay in the same folder with EXE for main tool to work. 2. Export maps Use fb_maps_bf6.exe (main map tool) to convert maps. Drop any EBX on it, use in command line with 1 parameter, or create a batch. 3. Terrain export Main terrain data is in .TerrainStreamingTree files for each level. For some levels, these files are small, which means the actual data is in chunks. Sometimes data is in the file itself, in this case it may be big, about 50mb in size. Drop .TerrainStreamingTree on fb_terrain_bf6.exe or use command line.
    2 points
  6. models.zip Here's the map FBX files I got.
    2 points
  7. Let's just say Im remaking a certain game. But in VR
    2 points
  8. Tutorial which describes how to export-import Horizon Forbidden West game assets by use of id-daemons HFW import tool: Required programs/tools: id-daemons HFW import tool Blender 3.6 ASCII Import-Export Blender Add-on (HFW) HFW Export-Import Tutorial.pdf
    1 point
  9. It's Unity, but seems to have a protection layer so it can't be opened in Asset Studio. Game Assembly: https://www.mediafire.com/file/3i7kvobi4nacnbh/GameAssembly.zip/file THO.zip
    1 point
  10. tool.py Here a working script that will output json file with { hash: text, ... }
    1 point
  11. Here my analysis: Header: 24 bytes: [ Int64 EntryCount Int64 ValueCount Int32 Timestamp Int32 Padding ] Buckets: [24-528] bytes, based on allocated bucket TableEntries: EntryCount * [ 8 Bytes Hash(or id?), Int32 RelativeOffset, (formula: text_start = current_entry_offset + 8 + value) Int32 TextLength ] Values: ValueCount * [ Byte[ValueLength] Data ] Null value have zero length and no hash. Successfully unpack and pack, the game load new text normally.
    1 point
  12. To whoever ends up here in the future, there is a really simple to use utility to convert files from Xbox ADPCM to PCM and vice-versa on Github: Sergeanur/XboxADPCM Thanks for the thread, I really thought the WAV files I had were lost forever due to an obsolete codec..! In my case, I am porting the PT-BR voiceover of Max Payne from PC to Xbox, which I am surprised wasn't done before.
    1 point
  13. I found the solution. Use the pak.py python script (i uploaded) in the same directory as the .data file This will extract the UE4 .pak file from the .data file Since the version is 4.27, use the QuickBMS 4.27 Unreal Engine Script to extract all data! Then you can use UModel to extract models/audio etc! # Unreal Engine 4 - Unreal Tournament 4 (*WindowsNoEditor.pak) (script 0.4.27e) # script for QuickBMS http://quickbms.aluigi.org math NO_TAIL_INFO = 0 # set it to 1 for archives with corrupt/missing tail information (extract without index) math VERSION = 3 # set it to 3 if NO_TAIL_INFO = 1 for most of modern games quickbmsver "0.12" callfunction QUICKBMS_4GB_CHECK 1 # set your AES_KEY here as umodel hex ("0x1122...") or C string ("\x11\x22...") # don't change AES_KEY_IS_SET, it will be handled automatically set AES_KEY binary "" math TOC_FILE = 0 math ALTERNATIVE_MODE = 0 math AES_KEY_IS_SET = 0 math BASE_PATH_INCLUDED = 1 math DIR_FLAG = 1 math NAME_FROM_ARRAY = 0 math SKIP_COUNT = 0 get ARCHIVE_NAME basename get ARCHIVE_PATH FILEPATH math CHUNK_OFFSET_ABSOLUTE = -1 # default, enabled # 1 = HIT math WORKAROUND = 0 if NO_TAIL_INFO != 0 get OFFSET asize math ALTERNATIVE_MODE = 1 else goto -0xcc # version 11 (4.26-4.27) savepos MAGIC_OFF get MAGIC long get VERSION long endian guess VERSION get OFFSET longlong get SIZE longlong getdstring HASH 20 xmath SIZE "MAGIC_OFF - OFFSET - 1" get FSIZE asize savepos CUR_POS if CUR_POS = FSIZE string COMP1 = "" else get CHECK byte if CHECK > 1 goto -1 0 SEEK_CUR endif getdstring COMP1 32 getdstring COMP2 32 string COMP1 l COMP1 string COMP2 l COMP2 endif if VERSION >= 3 goto MAGIC_OFF goto -1 0 SEEK_CUR get ENCRYPTED byte if ENCRYPTED != 0 callfunction SET_AES_KEY 1 log MEMORY_FILE5 OFFSET SIZE encryption "" "" else log MEMORY_FILE5 OFFSET SIZE endif math TOC_FILE5 = -5 endif goto 0 callfunction GET_BASE_PATH 1 endif get FILES long TOC_FILE5 getdstring DUMMY 12 TOC_FILE5 get HASHES_OFFSET longlong TOC_FILE5 math HASHES_OFFSET - OFFSET get HASHES_SIZE longlong TOC_FILE5 getdstring DUMMY 24 TOC_FILE5 get NAMES_OFFSET longlong TOC_FILE5 math NAMES_OFFSET - OFFSET get NAMES_SIZE longlong TOC_FILE5 getdstring DUMMY 24 TOC_FILE5 savepos BASE_INDEX_OFF TOC_FILE5 goto NAMES_OFFSET TOC_FILE5 math CHUNK_SIZE = 0x10000 # just in case... for i = 0 < FILES callfunction GET_NAME_AND_OFFSET 1 if NAME = "" continue NEXT0 endif savepos TMP_OFF TOC_FILE get OFFSET longlong TOC_FILE get ZSIZE longlong TOC_FILE get SIZE longlong TOC_FILE get ZIP long TOC_FILE getdstring HASH 20 TOC_FILE math CHUNKS = 0 math ENCRYPTED = 0 if VERSION >= 3 if ZIP != 0 get CHUNKS long TOC_FILE for x = 0 < CHUNKS get CHUNK_OFFSET longlong TOC_FILE get CHUNK_END_OFFSET longlong TOC_FILE putarray 0 x CHUNK_OFFSET putarray 1 x CHUNK_END_OFFSET next x endif get ENCRYPTED byte TOC_FILE get CHUNK_SIZE long TOC_FILE endif #if ALTERNATIVE_MODE != 0 savepos TMP_OFF TOC_FILE math OFFSET + TMP_OFF #endif #comtype copy callfunction COMPRESSION_TYPE 1 if CHUNKS > 0 log NAME 0 0 append math TMP_SIZE = SIZE if CHUNK_OFFSET_ABSOLUTE < 0 && OFFSET != 0 getarray CHUNK_OFFSET 0 0 if CHUNK_OFFSET u< OFFSET math CHUNK_OFFSET_ABSOLUTE = 0 else math CHUNK_OFFSET_ABSOLUTE = 1 endif endif for x = 0 < CHUNKS getarray CHUNK_OFFSET 0 x getarray CHUNK_END_OFFSET 1 x math CHUNK_ZSIZE = CHUNK_END_OFFSET math CHUNK_ZSIZE - CHUNK_OFFSET math CHUNK_XSIZE = CHUNK_ZSIZE if ENCRYPTED != 0 callfunction SET_AES_KEY 1 math CHUNK_XSIZE x 16 endif if TMP_SIZE u< CHUNK_SIZE math CHUNK_SIZE = TMP_SIZE endif math CHUNK_OFFSET = OFFSET if ZIP == 0 log NAME CHUNK_OFFSET CHUNK_SIZE 0 CHUNK_XSIZE else clog NAME CHUNK_OFFSET CHUNK_ZSIZE CHUNK_SIZE 0 CHUNK_XSIZE endif math TMP_SIZE - CHUNK_SIZE math OFFSET + CHUNK_XSIZE next x append else # the file offset points to an entry containing # the "same" OFFSET ZSIZE SIZE ZIP HASH ZERO fields, # just an additional backup... so let's skip them savepos BASE_OFF TOC_FILE math BASE_OFF - TMP_OFF math OFFSET + BASE_OFF math XSIZE = ZSIZE if ENCRYPTED != 0 callfunction SET_AES_KEY 1 math XSIZE x 16 endif if ZIP == 0 math BLOCK = 0x40000000 xmath FSIZE "OFFSET + ZSIZE" log NAME 0 0 append for OFFSET = OFFSET < FSIZE xmath DIFF "FSIZE - OFFSET" if DIFF < BLOCK math XSIZE = DIFF if ENCRYPTED != 0 math XSIZE x 16 endif log NAME OFFSET DIFF 0 XSIZE else log NAME OFFSET BLOCK endif math OFFSET + BLOCK next append else clog NAME OFFSET ZSIZE SIZE 0 XSIZE endif endif encryption "" "" if ALTERNATIVE_MODE != 0 if CHUNKS == 0 math OFFSET + XSIZE endif goto OFFSET get TMP1 longlong get CHECK byte if TMP1 == 0 && CHECK != 0 goto OFFSET continue NEXT1 else goto OFFSET endif xmath CHECK "0x800 - (OFFSET % 0x800)" if CHECK <= 16 padding 0x800 endif savepos OFFSET get TMP1 longlong get TMP2 longlong if TMP2 == 0 padding 0x800 else goto OFFSET endif label NEXT1 endif label NEXT0 next i print "\nEntries ignored: %SKIP_COUNT%" for i = 0 < SKIP_COUNT getarray NAME 7 i print "Ignored entry: %NAME%" next i startfunction SET_AES_KEY_ASK math AES_KEY_IS_SET = 1 print "The archive is encrypted, you need to provide the key" if AES_KEY == "" set KEY unknown "???" else set KEY binary AES_KEY endif if KEY == "" math AES_KEY_IS_SET = -1 set AES_KEY string "No key provided, encryption disabled" elif KEY strncmp "0x" string KEY << 2 string AES_KEY h KEY else set AES_KEY binary KEY endif print "KEY: %AES_KEY%" endfunction startfunction SET_AES_KEY if AES_KEY_IS_SET == 0 callfunction SET_AES_KEY_ASK 1 endif if AES_KEY_IS_SET > 0 encryption aes AES_KEY "" 0 32 endif endfunction startfunction GET_BASE_PATH get NAMESZ long TOC_FILE5 getdstring BASE_PATH NAMESZ TOC_FILE5 if NAMESZ != 0x0A && NAMESZ < 0xFF string BASE_PATH | "../../../" math BASE_PATH_INCLUDED = 0 endif endfunction startfunction CHECK_UNICODE if NAMESZ >= 0 getdstring RESULT NAMESZ TOC_FILE5 else math NAMESZ n NAMESZ math NAMESZ * 2 getdstring RESULT NAMESZ TOC_FILE5 set RESULT unicode RESULT endif endfunction startfunction GET_NAME_AND_OFFSET if NAME_FROM_ARRAY = 1 if CURR_NAME < DIR_FILES getarray NAME 5 CURR_NAME getarray OFFSET 6 CURR_NAME goto OFFSET math CURR_NAME + 1 if CURR_NAME = DIR_FILES math NAME_FROM_ARRAY = 0 endif endif else if DIR_FLAG = 1 get DIR_COUNT long TOC_FILE5 math DIR_FLAG = 0 endif if DIR_COUNT = 0 math DIR_FLAG = 1 callfunction GET_NAME_AND_OFFSET 1 else math DIR_COUNT - 1 get NAMESZ signed_long TOC_FILE5 callfunction CHECK_UNICODE 1 string DIR_NAME = RESULT get DIR_FILES long TOC_FILE5 if DIR_FILES = 0 callfunction GET_NAME_AND_OFFSET 1 else for y = 0 < DIR_FILES get NAMESZ signed_long TOC_FILE5 callfunction CHECK_UNICODE 1 string NAME = RESULT string NAME p "%s%s" DIR_NAME NAME if BASE_PATH_INCLUDED == 0 string NAME p "%s%s" BASE_PATH NAME endif putarray 5 y NAME get OFFSET long TOC_FILE5 savepos TMP_INDEX_OFF TOC_FILE5 if OFFSET != 0x80000000 && OFFSET != 0x7FFFFFFF xmath INDEX_OFF "BASE_INDEX_OFF + OFFSET" goto INDEX_OFF TOC_FILE5 get FLAGS long TOC_FILE5 xmath HAS_SIZE "FLAGS & 0x3F" xmath IS_64 "FLAGS >> 28" if HAS_SIZE = 0x3F get CHUNK_SIZE long TOC_FILE5 endif if IS_64 = 0xE get OFFSET long TOC_FILE5 else get OFFSET longlong TOC_FILE5 endif else putarray 7 SKIP_COUNT NAME math SKIP_COUNT + 1 string NAME = "" putarray 5 y NAME endif putarray 6 y OFFSET goto TMP_INDEX_OFF TOC_FILE5 next y math NAME_FROM_ARRAY = 1 math CURR_NAME = 0 callfunction GET_NAME_AND_OFFSET 1 endif endif endif endfunction startfunction COMPRESSION_TYPE if COMP1 = "" comtype zlib endif if ZIP = 1 && COMP1 = "zlib" comtype zlib elif ZIP = 1 && COMP1 = "zstd" comtype zstd elif ZIP = 1 && COMP1 = "oodle" comtype oodle elif ZIP = 1 && COMP1 = "lz4" comtype lz4 elif ZIP = 1 && COMP1 = "gzip" comtype gzip elif ZIP = 2 && COMP2 = "zlib" comtype zlib elif ZIP = 2 && COMP2 = "zstd" comtype zstd elif ZIP = 2 && COMP2 = "oodle" comtype oodle elif ZIP = 2 && COMP2 = "lz4" comtype lz4 elif ZIP = 2 && COMP2 = "gzip" comtype gzip elif ZIP = 3 || ZIP = 4 || ZIP = 0x10 # 3 - Faith of Danschant, 4 - Days Gone, 10 - Ashen comtype oodle if WORKAROUND == 2 comtype lz4 endif endif endfunction startfunction QUICKBMS_4GB_CHECK math TMP64 = 0x10000000 math TMP64 * 16 if TMP64 == 0 print "You must use quickbms_4gb_files.exe with this script!" cleanexit endif endfunction pak.py
    1 point
  14. Hello Ikskoks! Thank for the solution. I have seen most of your links long ago but because it says nothing about the "mysterious bytes" after the string "grid", I fall in the conclusion that SOL Files isn't documentation enough. Crazy though, I wouldn't care about where the AMF format bytes data is, as long as the script reproduces a SOL file format and work on the Flash game in question is what matter, like I did with DS-nitro-files-builder. Regardless, this is clearer now. So, there are SOL Editors. My Python project is useless!
    1 point
  15. In the ..var01.st2 csv data is contained: edit: and xml data: <!-- ______________________________________________________________________________ Copyright 2004 The Collective, Inc. DISMEMBERMENT DEFINITION Character: Clone Trooper Author: Baback Elmieh Date: 01/07/2004 ______________________________________________________________________________ --> <!-- HEAD --> <DismemberablePart Name="Head" Hitpoints="25"> <!-- The Materials section is a list of materials in the original mesh that are to be turned off when the part is dismembered --> <!-- <Materials> <Material Name="headSG"/> </Materials> --> <!-- ReactionProcessing defines the chunks and particles to be spawned when a reaction dismemberment is processed for the character the definition requires a Bone from which a chunk should be spawned and the name of the chunkmesh. The ChunkMesh definition in turn can have several values set such as GravityScale and UseGinFile. GravityScale greater than 1.0 pulls a chunk down faster, UseGinFile will look for a bounding box with the same name as the chunkmesh in the damage mesh's gin file, if the bound is found, it is used instead of the default rendering bound which can help artists orientate chunks so that they land on their correct side --> <ReactionProcessing> <!-- particles --> <Particles> <!-- spark particle from the joint --> <Param Name="BoneEmission" Value="neck_g"> <Param Name="ParticleID" Value="IDS_FX_LIGHTSABER_BODY_IMPACT"/> </Param> </Particles> <!-- chunks --> <!-- <Chunk Typename="TSingleChunk"> <Param Name="Bone" Value="neck_g"> <Param Name="ChunkMesh" Value="head"/> <Param Name="GravityScale" Value="1.4"/> <Param Name="RandomVelocityScale" Value="0.2"/> </Param> </Chunk> --> </ReactionProcessing> <!-- The Capsules section provides a list of capsules that should affect the hitpoint of the part and should be disabled once the chunk has been dismembered --> <Capsules> <Capsule Name="Dneck_g"/> </Capsules> </DismemberablePart> <!-- LEFT SHOULDER --> <DismemberablePart Name="Left Shoulder" Hitpoints="25"> <Materials> <Material Name="Shoulder_LSG"/> </Materials> <ReactionProcessing> <!-- particles --> <Particles> <!-- spark particle from the joint --> <Param Name="BoneEmission" Value="shoulder_L_g"> <Param Name="ParticleID" Value="IDS_FX_LIGHTSABER_BODY_IMPACT"/> </Param> </Particles> <!-- chunks --> <Chunk Typename="TSingleChunk"> <Param Name="Bone" Value="shoulder_L_g"> <Param Name="ChunkMesh" Value="Shoulder_L"/> <Param Name="GravityScale" Value="1.8"/> <Param Name="RandomVelocityScale" Value="0.1"/> </Param> </Chunk> </ReactionProcessing> <Capsules> <Capsule Name="Dshoulder_L_g"/> </Capsules> </DismemberablePart> <!-- RIGHT ELBOW --> <DismemberablePart Name="Right Shoulder" Hitpoints="25"> <Materials> <Material Name="Elbow_RSG"/> </Materials> <ReactionProcessing> <!-- particles --> <Particles> <!-- spark particle from the joint --> <Param Name="BoneEmission" Value="shoulder_R_g"> <Param Name="ParticleID" Value="IDS_FX_LIGHTSABER_BODY_IMPACT"/> </Param> </Particles> <!-- chunks --> <Chunk Typename="TSingleChunk"> <Param Name="Bone" Value="shoulder_R_g"> <Param Name="ChunkMesh" Value="Elbow_R"/> <Param Name="GravityScale" Value="1.8"/> <Param Name="RandomVelocityScale" Value="0.1"/> </Param> </Chunk> </ReactionProcessing> <Capsules> <Capsule Name="Dshoulder_R_g"/> </Capsules> </DismemberablePart> </DismembermentDefinition>
    1 point
  16. I have a basic exporter for 3ds max here https://github.com/taylorfinnell/onbadexporter
    1 point
  17. Yes! I´ve to create a tool to merge and split image, so i can merge them, edit and later split to insert.
    1 point
  18. Hi Reh! (Reh from former Xentax?) PS2 models are known for using auto created faces. Doesn't work here, so maybe a split up of this mesh is required? edit: tried steps of 120 vertices but even this obvious head gives a bad result when using fake faces.
    1 point
  19. Version 1.0.0.0

    8 downloads

    // Gorky 17 Modding tools GUI .:: Introduction ::. Gorky 17 Modding Tools is a powerful utility that lets you extract and build .kdt and .dta archives. It supports both single-file (selected file) and full archive extraction. In addition, the program includes an SPR-to-image converter, file list generator, script reader, image inspector, and many other useful features! .:: Knowing issues ::. There's an unknown issue with the .spr files. They can be read, displayed, and converted to any image format, but I assume there’s a problem with the RLE compression. The investigation is in progress, and this issue will be fixed in the next update. .:: OS Support ::. Built and tested on Windows 11 64 bit. The native linux version of the tool will be released soon. .:: Special thanks to ::. Krisztian Kispeti, Lead Dev: K's Interactive.
    1 point
  20. Okay, thanks for the lead. I successfully uncompressed the PUD file, and it is indeed a container. The value 0x2 represents the number of files within it. The uncomressed images are raw pixel data and need to be combined with the PAL file to get the correct image. can use imageheat to view the correct image.
    1 point
  21. I used the files from the zip, iirc. But seems, you're too late to the party...
    1 point
  22. This .pud files is another container that contains custom lzss blocks files, for example Title.pud contains 2 images with custom lzss compressed, if you decompress it you will see..
    1 point
  23. fmt_psaVita_ValkyrieDrive.py Here's a old noesis plugin to view and export most of the mib, msb and mab of the PSVisa version of the game.
    1 point
  24. I've been doing a Noesis script for the beta of Once Human. Still got a few things to do on it, but it should work for most of the models so far: Edit: Read the notes at the start of the script regarding the various files needed. once_human_mesh.zip
    1 point
  25. for the mcgregors normal you can use this bms Decompressor.zip
    1 point
  26. I know I’ve already posted my progress with materialising Mike Tyson but I thought I’d show these also as I managed to convert the normals from green to purple which for me personally and unity mods it works better
    1 point
  27. Hey all, I also recently got interested in modding the original QP Shooting. I'm currently working on a command-line tool that so far allows for extracting and repacking the LAG assets, with decoding and encoding of dialogue/system files also now planned to be implemented. However, it seems after reviewing this thread that I wrongfully assumed that the graphics were red-blue-swapped A16B16G16R16 DDS surfaces rather than a special Luna/LAG image format... so that's probably another thing I need to fix up (although the assets can be modified fine with an editor that supports that DDS format once the header is written, so maybe it is just a slightly tweaked version of DDS). I'll post the GitHub link here when I polish and finish it up : )
    1 point
  28. It uses a 1-byte xor encryption - you can use the attached QuickBMS script to decrypt it. The resulting file is a zip file with audio and other file types in. Hopefully the other files will all be the same. odau.zip
    1 point
  29. Sorry, my bad, now i see, list look similiar how my old
    1 point
  30. Hello, here the decompressor, it´s a custom lzss. LZSS_DGirl-ps2.7z
    1 point
  31. *(I think you should mention the author.)
    1 point
  32. Version 0.0.2

    17 downloads

    An addon for Blender 4.3.0 (also tested with 4.4.3) to import and export the .msh, .bn (.bbx goes together) and .ani files for RF Online. The entity (R3E) and map (BSP) formats are import only. Import operations work with drag and drop. There is code for exporting the BSP format inside the addon code but it is deactivated due to being incomplete. It only reaches so far as actually exporting walkable map geometry (with the BSP structure also built) and baking+exporting the light maps. Unfortunately, Blender proved to not be very suitable for the task of actually being a complete map editor for RF Online, mostly due to complexity issues with the .SPT particle format and other desirable features that would be hard to implement into it, such as mob spawn areas and portals. The R3M materials are also quite hard to simulate, since the original engine rendered the same mesh multiple times for each texture layer they had. It is possible to reactivate the feature by manually uncommenting the three commented lines in the bsp.py's menu_func_export, register and unregister functions. Expect no support for this feature, as the more proper solution would be writing a proper dedicated software. Current Features: MSH (Mesh) Import: Imports .msh static meshes (Standard and MESH08 formats). Automatically attempts to find and assign textures by looking for DDS files referenced in the mesh or by searching .RFS archives in expected relative paths (../Tex/). MSH (Mesh) Export: Exports selected Blender mesh(es) to .msh format (Standard or MESH08). Handles vertex data, UVs, weights, and bone assignments. The export ignores any collection with the name "bone shapes". BN (Skeleton) Import: Imports .bn skeleton files. Reads bone hierarchy and rest poses. Automatically looks for the corresponding .bbx file (must be same name, same folder) to get the proper skeleton name. Creates Blender Armature objects. Also imports custom bone shape geometry if defined in the BN file and creates mesh objects for them, assigning them as custom shapes in Blender. BN (Skeleton) Export: Exports a selected Blender Armature to .bn format. Calculates and exports the corresponding .bbx file with skeleton name and bounding box. Exports custom bone shape geometry if assigned. ANI (Animation) Import: Imports .ani animation files. Applies animations to compatible Armatures and/or Objects based on names found in the ANI file. Creates Blender Actions. Option to target selected objects or objects within a collection matching the ANI's base name. ANI (Animation) Export: Exports Blender Actions to .ani format. Bakes complex animations (constraints, drivers, NLA) before export. Options to export the active action, actions from selected objects, actions from the active collection, or all scene actions. BSP (Map) Import: Imports .bsp map geometry. Reads associated .r3m (materials), .r3t (textures), and .ebp (entities, collision) files (must be same base name, same folder). Locates entity assets by parsing .rpk archives found in ../Entity/ relative to the BSP's directory. Instantiates map geometry, materials (replicating many R3M effects), and R3E entities. Includes an option to import and display LDR lightmaps from Lgt.r3t files. There is also an option for creating a visualization of the actual BSP structure of the map by creating boxes with the nodes' dimensions and leaves with the appropriate geometry, however this will most certainly make the Blender scene run very slow (this option is not necessary to see the actual map at all if that's what you want). R3E (Entity) Import: Imports .r3e files together with their associated .r3m and .r3t files. Also imports animations, if present. Installation: Download the repository as a .zip file. Or simply download the embed file here. In Blender, go to Edit > Preferences > Add-ons. Click Install... and select the downloaded .zip file. Enable the "RF Online importer/exporter" addon by checking the box next to it. Dependencies (only necessary if you want to manually try the BSP export option) DDS Export (.bsp): Exporting BSPs requires ImageMagick to be installed and accessible in your system's PATH. The addon uses it to convert textures to DDS format. Download from: https://imagemagick.org/script/download.php Important: During installation, ensure you check the option to "Install legacy utilities (e.g., convert)" as the addon uses the magick convert command. How to Use: Import: Find the RF Online importers under File > Import > ... (MSH, BN Skeleton, ANI, BSP, R3E). Export: Find the RF Online exporters under File > Export > ... (MSH, BN Skeleton, ANI). Operator Options: Each operator has options. Pay attention to options like: MSH Export: Mesh Format to Export (Standard/MESH08), Collection Type to Export. ANI Import: Apply to Selected Objects, Ignore Not Found Objects. ANI Export: Action(s) to Export. BN Export: Export only selected. Debug options are available for troubleshooting. If turned on, open Blender's console to see the messages. Expected File Structure & Naming Conventions The addon relies on specific file names and relative folder locations to find associated assets: BSP Import (map.bsp): Needs map.r3m, map.r3t, mapLgt.r3t (optional), map.ebp in the same folder. Needs entity RPK archives (e.g., entity.rpk, monster.rpk) located in ../Entity/ relative to the map.bsp folder. The addon parses these RPKs to find the .r3e, .r3m, .r3t, etc., files for map entities. MSH Import (mesh.msh): Will look for texture paths defined within the MSH. If not found directly, it attempts to find textures in .rfs archives located in ../Tex/ relative to the .msh file's folder. BN Import (skeleton.bn): Needs skeleton.bbx in the same folder to read the proper skeleton name and overall bounding box. Export Naming:MSH Export: Selected Objects: Uses the filename you provide in the export dialog (e.g., my_export.msh). Active Collection / All Collections: Uses the collection name as the base filename in the selected directory (e.g., exporting a collection named "Props" to D:/Exports/ results in D:/Exports/Props.msh). Any collection named "bone shapes" is ignored and not exported when present. This is done to prevent the exportation of bone shapes as new .msh files. BN Export: Similar to MSH Export (uses selected armature name or collection name). Writes both .bn and .bbx files (e.g., skeleton.bn, skeleton.bbx). ANI Export: Uses the Blender Action name as the filename in the selected directory (e.g., an action named "Walk_Cycle" exports as Walk_Cycle.ani). Current Limitations / Disclaimer: BSP Export is DISABLED: While the addon includes the code for that, the operator to export a full .bsp map (including geometry, materials, entities, and baked lightmaps) is currently disabled in this release. BSP export is extremely complex, and this feature is incomplete. Performance: Importing very large maps or exporting complex scenes may take time due to Python processing. You can see the importing progress if you've opened Blender's console before importing a map. R3M Effects: While many material effects are replicated using shader nodes, perfect 1:1 visual parity with the original D3D8 fixed-function pipeline can be challenging. MSH exporter does not export effects currently. Download Link: https://github.com/Cardboard-box-a/cbb-rf-online-addon (download the repo as a zip), or the file embed here. Bug Reports/Suggestions: [The github's Issue page might be more suitable for keeping tracking of possible issues] Overall the import part of the addon expects that you are using it to import files from a real game client, with the original folder structure. Meshes, for example, can be imported without their associated textures if the original folder structure is not present. The .MSH exporter splits meshes that have more than 65k vertices automatically which has been tested by the .msh importer itself, but actual experience in the game is welcome to be known. Uploaded in this post itself is a zip containing ImHex patterns for some of the file formats I've worked on. Hopefully this addon will prove useful for creating custom content for such an old game, or at least to satisfy the curiosity of what the game looks like behind the curtains. Patterns.zip
    1 point
  33. 45 downloads

    This is attachment from ZenHAX posted by rengareng in topic: Metro: Exodus vfx unpacker
    1 point
  34. Does anyone know more about the mcd format used by EA? Models are packed inside the rsf format and it is possible to extract them with the rsf.bms script. I managed to make a Noesis script to view the models, but reading the skeletons is hard for me and I don't know how to proceed with them. Vertex weights are stored in a table that starts with the tag TIEW in mcd and skeleton data in FRGS in .skel file. I would appreciate any kind of help to import the skeletons into noesis. Preview in Noesis: https://imgur.com/a/o2dQvCl fmt_NHL21_mcd.py rsf.bms.zip nhl21model.zip
    1 point
  35. Version 1.0.0

    1,186 downloads

    Here is a list of all (or almost all) Xentax topics archived by wayback machine. Find topic name with search or filter (see "spiderman" screenshot as example), then copy URL for the list, and open it. There you can read the whole topic, with instructions and comments. But there will be no attached files. You can get attached files from archive.org - https://archive.org/details/xentax.7z in "attachments" folder. They are sorted by forum number and topic ID. So you have to look into corresponding forum folder (16 = 3d models in this example) and topic folder (20634 for spiderman PS4) - there you can find all files attached to that topic for each post (in there are many).
    1 point
  36. not quite sure about uvs, try ofs 17 for U and ofs 21 for V, (all as Short) sample for 4e153346.SGGR
    1 point
  37. my plugin for vfs work with your file EDIT: and i made preview plugin for *.sggr fmt_sggr.py (*.pvr its image, use pvrTexTool)
    1 point
  38. Seems the game dont accepts a different zlib levels Maybe using levels 0-9 and try. use level 9, the compression file will be the same as original! https://drive.google.com/file/d/11rON0JaDswJCQJ-RBF2USKErQRtPbP_I/view?usp=sharing and maybe solution post;
    1 point
  39. The WAVE files just use XBox ADPCM (not that obscure) and you can play and convert them with Foobar + vgmstream (note: some files don't contain audio). You don't really need to do anything else.
    1 point
  40. 1 point
  41. Maybe I didn’t quite understand your goal, but you can’t just take files from the game and compile them back into the game.) Edit: ah, I read a few posts above, you need to compile Asset Studio, not the game files.
    1 point
  42. Maybe you should open a new thread and ask in there, not here, because this thread is for discussing the motion file.
    1 point
  43. for fgo's script, you just need run this: python FGOArcade-FARC.py "your farcfile path" for farcpack tool, Run it in the shell to see the cli commands.
    1 point
  44. How exactly should I use it? First I have to decrypt the farc files, right? To decrypt the 3D Models I was using quickbms and the script that was on XeNTaX, but that script can't decrypt the farcs from the trading cards
    1 point
  45. for fgo arcade, you can use this to extract the farc file: https://github.com/Silvris/RandomScriptsAndTemplates/blob/main/FGO Arcade/FGOArcade-FARC.py for kancolle arcade, you can use farcpack tools to extract it: https://github.com/blueskythlikesclouds/MikuMikuLibrary/releases/download/v2.2.0/FarcPack.7z the trading card images was in ./rom/trading_card
    1 point
  46. https://github.com/h-kidd/noesis-project-diva AFAIK this uses the same (or highly relevant - Virtua Fighter 5 based) engine as other arcade games such as Project DIVA Arcade or Fate Grand Order I guess the animation format would be relevant (and hope this be helpful for REing)
    1 point
  47. Guys just close this post make no sense, The forum is new in 3d category are 260 post and 4 of this are with the same title "please help .......3dunity". Please search first in forum if exist a answer next make post. Its more easy if collect all the info for type of file in 1 place, honesty the old xentax have guys who redirect to main post if some1 go like this for every little thing. And I see the OP make 3 post in row 5 min from each other for almost the same thing. Just start over this obvious goin anywhere.
    1 point
×
×
  • Create New...