Skip to content

Commit 1419572

Browse files
committed
init
0 parents  commit 1419572

18 files changed

Lines changed: 1867 additions & 0 deletions

.gitignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
bin/
2+
obj/
3+
.vs/
4+
.claude/
5+
*.user
6+
Properties/
7+
oodle-data-shared.dll

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[submodule "CUE4Parse"]
2+
path = CUE4Parse
3+
url = https://github.com/FabianFG/CUE4Parse.git

CUE4Parse

Submodule CUE4Parse added at e482971

README.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# RepSeedResolver
2+
3+
UE5 Blueprint replication handle & net field resolver, built on [CUE4Parse](https://github.com/FabianFG/CUE4Parse).
4+
5+
Scans `.pak` files to discover Blueprint classes and resolves their replication layout handles and ClassNetCache indices using C++ seed data from [RepSeedDumper](https://github.com/Starter-Pack/Dumper-7).
6+
7+
<img src="assets/screenshot-log.png" width="600"/>
8+
9+
<img src="assets/screenshot-results.png" width="600"/>
10+
11+
## Output
12+
13+
Produces two JSON files:
14+
15+
- `rep_layout.json` — Per-class replication property handles with 1-based indices, inheriting from the C++ seed and appending BP-defined replicated properties
16+
- `class_net_cache.json` — Per-class net field export indices, combining seed net fields with BP properties and RPCs
17+
18+
## Build
19+
20+
```
21+
git clone --recurse-submodules https://github.com/Mokocoder/RepSeedResolver.git
22+
dotnet publish -c Release
23+
```
24+
25+
## Usage
26+
27+
1. Set Paks Dir to the game's pak folder
28+
2. Load Seed JSON (`replication_seed.json` from RepSeedDumper)
29+
3. Select Game version
30+
4. (Optional) Load `.usmap` mappings
31+
5. Click Run
32+
33+
## How it works
34+
35+
1. CUE4Parse mounts the game's pak files and loads mappings
36+
2. Scans all packages for `UBlueprintGeneratedClass` exports using the global script object index for fast filtering
37+
3. For each BP class, collects replicated properties (`EPropertyFlags::Net`) and net RPCs (`FUNC_Net`)
38+
4. Walks the BP inheritance chain to find the C++ ancestor in the seed data
39+
5. Appends BP handles after the C++ seed handles, preserving UE's `FRepLayout` wire ordering
40+
6. Accumulates net field counts up the chain to produce correct `ClassNetCache` max indices

RepSeedResolver.sln

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
# Visual Studio Version 17
4+
VisualStudioVersion = 17.0.0.0
5+
MinimumVisualStudioVersion = 10.0.40219.1
6+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RepSeedResolver", "RepSeedResolver\RepSeedResolver.csproj", "{A1B2C3D4-E5F6-7890-ABCD-EF1234567890}"
7+
EndProject
8+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CUE4Parse", "CUE4Parse", "{6B5F23C8-25B8-33E9-C6F8-A53632F5B30D}"
9+
EndProject
10+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CUE4Parse", "CUE4Parse\CUE4Parse\CUE4Parse.csproj", "{EB8112D2-21E3-4AC5-91F7-5C827374F194}"
11+
EndProject
12+
Global
13+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
14+
Debug|Any CPU = Debug|Any CPU
15+
Debug|x64 = Debug|x64
16+
Debug|x86 = Debug|x86
17+
Release|Any CPU = Release|Any CPU
18+
Release|x64 = Release|x64
19+
Release|x86 = Release|x86
20+
EndGlobalSection
21+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
22+
{A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
23+
{A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Debug|Any CPU.Build.0 = Debug|Any CPU
24+
{A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Debug|x64.ActiveCfg = Debug|Any CPU
25+
{A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Debug|x64.Build.0 = Debug|Any CPU
26+
{A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Debug|x86.ActiveCfg = Debug|Any CPU
27+
{A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Debug|x86.Build.0 = Debug|Any CPU
28+
{A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Release|Any CPU.ActiveCfg = Release|Any CPU
29+
{A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Release|Any CPU.Build.0 = Release|Any CPU
30+
{A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Release|x64.ActiveCfg = Release|Any CPU
31+
{A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Release|x64.Build.0 = Release|Any CPU
32+
{A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Release|x86.ActiveCfg = Release|Any CPU
33+
{A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Release|x86.Build.0 = Release|Any CPU
34+
{EB8112D2-21E3-4AC5-91F7-5C827374F194}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
35+
{EB8112D2-21E3-4AC5-91F7-5C827374F194}.Debug|Any CPU.Build.0 = Debug|Any CPU
36+
{EB8112D2-21E3-4AC5-91F7-5C827374F194}.Debug|x64.ActiveCfg = Debug|Any CPU
37+
{EB8112D2-21E3-4AC5-91F7-5C827374F194}.Debug|x64.Build.0 = Debug|Any CPU
38+
{EB8112D2-21E3-4AC5-91F7-5C827374F194}.Debug|x86.ActiveCfg = Debug|Any CPU
39+
{EB8112D2-21E3-4AC5-91F7-5C827374F194}.Debug|x86.Build.0 = Debug|Any CPU
40+
{EB8112D2-21E3-4AC5-91F7-5C827374F194}.Release|Any CPU.ActiveCfg = Release|Any CPU
41+
{EB8112D2-21E3-4AC5-91F7-5C827374F194}.Release|Any CPU.Build.0 = Release|Any CPU
42+
{EB8112D2-21E3-4AC5-91F7-5C827374F194}.Release|x64.ActiveCfg = Release|Any CPU
43+
{EB8112D2-21E3-4AC5-91F7-5C827374F194}.Release|x64.Build.0 = Release|Any CPU
44+
{EB8112D2-21E3-4AC5-91F7-5C827374F194}.Release|x86.ActiveCfg = Release|Any CPU
45+
{EB8112D2-21E3-4AC5-91F7-5C827374F194}.Release|x86.Build.0 = Release|Any CPU
46+
EndGlobalSection
47+
GlobalSection(SolutionProperties) = preSolution
48+
HideSolutionNode = FALSE
49+
EndGlobalSection
50+
GlobalSection(NestedProjects) = preSolution
51+
{EB8112D2-21E3-4AC5-91F7-5C827374F194} = {6B5F23C8-25B8-33E9-C6F8-A53632F5B30D}
52+
EndGlobalSection
53+
GlobalSection(ExtensibilityGlobals) = postSolution
54+
SolutionGuid = {2AE41AA3-C729-41B9-806D-82EF1B70F2AC}
55+
EndGlobalSection
56+
EndGlobal

0 commit comments

Comments
 (0)