Repository navigation
Windows x64 build of REDbridge 0.11.0. It is framework dependent, so it needs the .NET 10 runtime (winget install Microsoft.DotNet.Runtime.10).
Unzip it anywhere and point REDcode (redcode.bridgePath) or EDGEdeck (edgedeck.bridgePath) at REDbridge.exe, or let REDcode's Install REDbridge or EDGEdeck's Get REDbridge fetch it.
Changed
-
Reads game 2.5 (issue #10): built with WolvenKit 10.0.0-beta.1, WolvenKit's first build with support for game 2.5, instead of 9.1.0. All 3,041 quest streaming sectors of 2.5 read; 9.1.0 failed 262 of them because they hold node classes new in 2.5. The game's CR2W version did not change: 2.31's files are version 195 (0xC3) too. In other file types the JSON only gains the fields 2.5 added, such as
boundingBoxLocalBoundsOverrideon skinned mesh components andastcQualityin texture setups; no field was renamed or dropped in the types compared (30 file types, 5 files each). -
Game 2.31's streaming sectors no longer read right. WolvenKit 10.0.0-beta.1 reads node data and instanced mesh transforms only in 2.5's form. On a 2.31 install, 383 of 3,054 quest sectors fail ("Non-zero padding bytes found"), the others come back with wrong
nodeDataentries, andworldInstancedMeshNodeloses its transforms. Every other method still passes the probe and REDcode's smoke test on 2.31. -
A streaming sector's
nodeDatahas new field names incr2w.*JSON. WolvenKit 10 reads each entry as the game'sworldCompiledNodeInstanceSetupInfo, with one entry per node in node order:Was (WolvenKit 9.1) Now NodeIndex(wrong on 2.5)nodeIdx, a number as textPosition,Orientationtransform.position,transform.orientationScalescalePivotsecondaryRefPointPositionBounds.Min,Bounds.MaxstreamingRefPoint,preboostStreamingRefPoint: never boundsIdpatchedNodeQuestPrefabRefHash, resolved to the node pathglobalNodeId.hash, a number only. It is WolvenKit's NodeRef hash: FNV-1a 64 of the path with every#left outUkHash1proxyMeshId.hashCookedPrefabDataexternalInplaceResourceHashMaxStreamingDistance,UkFloat1secondaryRefPointDistance,streamingDistanceUk10toUk14nodeFlags,streamingPriority,todvisMask,instanceIndex,dataGroup -
sector.buildwrites game 2.5 sectors: version 68 and 2.5's node-data record, with the node flags, streaming priority and reference points of base-game 2.5 mesh, entity and light nodes. The scene format and the result are unchanged. Not yet tried in the game.
New
- Spoken lines in
loc.*(issue #9, for EDGEquest): the subtitles of the base game and Phantom Liberty, read offline fromlocalization\<language>\subtitles\**\*.json, with their voice-over files and lengths. A scene line'slocstringId.ruidis the line'sstringId. The first call per language builds an index in about 3 s; searches after it take a few milliseconds.loc.lines(stringIds, language, projectDir?): one result per stringId (decimal text), with both texts, the subtitle file and the row (index) in it,voice(the.wempaths fromvoiceovermap.jsonandvoiceovermap_1.json),length(seconds, fromstringidvariantlengthsreport.json) andotherVoices(the helmet, holocall and rewinded maps that have it).loc.searchLines(query, language, limit, projectDir?): lines with every word of the query in either text, or the stringId given as a number, as{ total, items }.loc.projectLinesFiles(projectDir, language)andloc.newLinesFile(projectDir, modName, language): a project's subtitle files, and an empty one when it has none, written tosource/archive/<mod>/localization/<language>/subtitles/<mod>.jsonand named in its.xlunderlocalization: subtitles:without rewriting the rest of the file.- With a project folder, the project's own subtitle entries win over the game's, as for onscreens: the files its
.xlfiles name underlocalization: subtitles:, and any undersource/archivein a<language>\subtitlesfolder.
project.importtakes atexturesetup (issue #8, for EDGEmat) for the.xbman image import writes. It is a preset,"color"(TEXG_Generic_Color,TCM_QualityColor, gamma on),"normal"(TEXG_Generic_Normal,TCM_Normalmap) or"grayscale"(TEXG_Generic_Grayscale,TCM_QualityR,TRF_Grayscale), or a texture group name, or an object{ group, compression, rawFormat, isGamma, hasMipchain, isStreamable }whose missing fields come from the group's defaults in WolvenKit. Given, it wins over an existing texture's setup. Without it, imports work as before.project.importreports the texture setup it wrote, read back from the.xbm, astexture: { group, compression, rawFormat, isGamma, hasMipchain, isStreamable }.mesh.items(path, appearance?, language?), for REDcode's Find Items in the mesh viewer: the TweakDB item records whose look shows a mesh, found backwards along the chain from record to factory.csvto root.entto.applook to mesh. Each item has its record, type, display name,appearanceName, the mesh appearance it shows, the.appand its look, and the root entity with its entries for that look (s1_casual_01_basic_01_&Male).lookslists every.applook that shows the mesh, also those no item reaches. Withappearance, only the looks that show that mesh appearance. The first call builds an index from file headers in under a second after TweakDB loads; a call after it takes a fraction of a second. Covers items that pick their look byappearanceName(clothing: 2,375 records in game 2.5); weapons, which pick theirs by visual tags, are not found, nor a mesh that only a part entity holds.
Built with WolvenKit 10.0.0-beta.1 from its NuGet packages. WolvenKit's source is https://github.com/WolvenKit/WolvenKit/tree/10.0.0-beta.1 (GPL-3.0), and the bridge's source is this repository.