mirror of
https://github.com/rehan-remade/universal-modder.git
synced 2026-11-05 01:37:40 +00:00
[PR #134] [MERGED] kb: reading old ForzaTech burG .modelbin containers and the MakeH2O lineage #150
Labels
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
rehan-remade/universal-modder#150
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/rehan-remade/universal-modder/pull/134
Author: @Selene0623
Created: 10/7/2026
Status: ✅ Merged
Merged: 10/8/2026
Merged by: @rehan-remade
Base:
main← Head:kb/forzatech-burg-modelbin-makeh2o📝 Commits (4)
143a1abkb: read old ForzaTech burG .modelbin containers and the MakeH2O lineage5b08787Merge origin/main into kb/forzatech-burg-modelbin-makeh2o; regenerate the knowledge index6b4d69dMerge main into kb/forzatech-burg-modelbin-makeh2o and regenerate the kb index33e205ekb: burG header and Skel fixes, Grub = burG, MinGW not Java, scope FH6-spec claims📊 Changes
3 files changed (+286 additions, -1 deletions)
View changed files
📝
knowledge/INDEX.md(+2 -1)📝
knowledge/index.json(+29 -0)➕
knowledge/techniques/forzatech-burg-modelbin-containers-and-makeh2o.md(+255 -0)📄 Description
One new technique note, plus the regenerated index.
The note
knowledge/techniques/forzatech-burg-modelbin-containers-and-makeh2o.mdTwo things in one file, because they are the same story:
.modelbincontainer. MagicburG(Grubreversed), the v1.0/v1.1header difference, the chunk table whose four-byte ids are ASCII-reversed (
kelS=Skel,hseM=Mesh,BreV=VerB, …), the 16-byte<IIHHIheader at the start of aVerBpayload, the stride-8 position stream (three
SNORM16) and the stride-40 stream (normals, fourUV pairs, a tangent frame, an AO mask), and the bbox-relative position decode
bbox_min + (raw + 32768) / 65535 · (max - min)with the box taken from theNamerecord.family; the Forza line's build suffixes and their changelog are known, and the copy in the
workspace is an earlier build than any of the archived ones. It has no CLI, gates on the first
byte being
'b', and finds geometry by hardcoded byte-pattern searches rather than reading thechunk table.
Verification
tree, with two tyre files in detail.
constants (1/256 for vertices, 1/65536 for UVs, 32768 for the position offset), and its OBJ
emission.
finds zero matches for both of its hardcoded block patterns, so its own consistency check
would fire. That is the mechanical explanation for the long "no scale found" part list its author
documented.
noidex0/fh6-model-tools, validatedagainst 638 cars) describes the same lineage, which is where the bbox decode above comes from.
What is not verified
attempts at driving it under Wine failed. The note says so rather than implying a successful run.
note tells the reader to take it from a reference implementation instead of guessing it from
hexdumps.
-jm9is the newest) were not executed.Also in here
Gotcha 8 is a tool-usage one: a reversing tool rejected
provider_unavailableon a Ghidra installthat demonstrably works, because it compares the Ghidra version as an exact string and the Java
major as exactly 21. Filed upstream separately as morluto/rea#821; included as a gotcha with the
workaround rather than as a complaint.
No download links, no keys, no decompiled dumps — the tool's behaviour is written up in prose and
its patterns are described, not pasted as code.
um kb check --indexpasses (71 notes).🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.