Fan-made offline blueprint viewer — a few questions about the .blueprint format

  • Hi red51 and the JIW Games team,


    First of all, thank you for Rising World. We're a father and son slowly recreating the city of Memphis from Assassin's Creed Origins at real scale, and the game is perfect for it. ^^


    To preview our growing blueprint collection outside the game, we're building a small offline viewer (helped by an AI assistant, Hermes Agent with GLM 5.3): a single self-contained HTML file (Three.js, opens with a double-click, no server) that reads .blueprint files directly. So far we have reverse-engineered the container (LZ4 block compression) and the 105-byte construction records (position, quaternion, size, type, texture, surface offset/scale, thickness), and we extract the real construction meshes from models.bin so the shapes match the game. Our parser is verified field-by-field against an independent reference implementation.


    A few rendering details still don't match the game, and black-box analysis has taken us as far as it can. Any hint — even one line per question — would help enormously:


    1. **Rotation convention.** Are the quaternions stored exactly as Unity consumes them? Empirically, negating X and Y of the quaternion (equivalent to conjugating through a Z mirror) reproduces the game for rotated elements. Is that the intended interpretation, or is there an engine-side step we're missing?


    2. **Negative sizes.** Some elements carry negative size components (e.g. cones with size (-0.05, 0.15, -0.05)). We take negative scale to mean "mirror the mesh" — is that correct?


    3. **Surface editing.** For cylinders we know surface_scale.x is the top/bottom radius ratio. We also see surface scale on plain blocks: a 0.5×1.5×0.5 block with surface_scale (0.5, 1, 0.5) whose top face must shrink to 0.25×0.25 to meet a pyramid on top — the numbers match exactly. How do surface offset and surface scale combine for arbitrary construction types, and which face(s) do they act on?


    4. **Arcs and arc corners.** Arcs (types 15/16/17 in definitions.db) come out flipped in every blueprint we test. Their meshes have an origin offset from the bounding-box center (e.g. 0.318 in Z for the arc), and definitions.db lists pivotaxisflip = Z with pivotincluderotation = 1 for them. Does the game anchor these constructions at the mesh's original pivot rather than the bounding-box center? And does pivotaxisflip imply a mirror at render time?


    5. **Rotation snapping.** Some elements store quaternions a few degrees off axis-aligned, yet they appear perfectly axis-aligned in game. Does the game snap construction rotations to 90° multiples?


    6. **Format documentation.** Is there any official documentation of the .blueprint format you would be willing to share? The project is personal and non-commercial; the viewer stays strictly offline and we don't redistribute any game assets.


    Thank you very much for your time — and for making such a moddable, blueprint-friendly game.


    Best regards, ^^

    Juan & Juanma (with Hermes and GLM 5.3)

  • This sounds very interesting! :) :thumbup:


    1. **Rotation convention.** Are the quaternions stored exactly as Unity consumes them? Empirically, negating X and Y of the quaternion (equivalent to conjugating through a Z mirror) reproduces the game for rotated elements. Is that the intended interpretation, or is there an engine-side step we're missing?

    Yes, the game just stores the raw x, y, z and w components of the quaternion (exactly as Unity uses it). It's the world rotation of the element.


    2. **Negative sizes.** Some elements carry negative size components (e.g. cones with size (-0.05, 0.15, -0.05)). We take negative scale to mean "mirror the mesh" — is that correct?

    Yes, a negative size mirrors the mesh along the particular local axis.


    3. **Surface editing.** For cylinders we know surface_scale.x is the top/bottom radius ratio. We also see surface scale on plain blocks: a 0.5×1.5×0.5 block with surface_scale (0.5, 1, 0.5) whose top face must shrink to 0.25×0.25 to meet a pyramid on top — the numbers match exactly. How do surface offset and surface scale combine for arbitrary construction types, and which face(s) do they act on?

    The information about which vertices are moved isn't stored in the blueprint or code, instead it's stored in the base mesh of the construction element (in the UV2 channel). The surface offset is applied like this:

    vertex = (vertex * elementScale + surfaceOffset * sign(elementSize)) * surfaceScale


    The surfaceScale is also applied to the elementScale after performing the calculation above.


    4. **Arcs and arc corners.** Arcs (types 15/16/17 in definitions.db) come out flipped in every blueprint we test. Their meshes have an origin offset from the bounding-box center (e.g. 0.318 in Z for the arc), and definitions.db lists pivotaxisflip = Z with pivotincluderotation = 1 for them. Does the game anchor these constructions at the mesh's original pivot rather than the bounding-box center? And does pivotaxisflip imply a mirror at render time?

    Constructions are anchored at the mesh original pivot, not the bounding-box center.


    5. **Rotation snapping.** Some elements store quaternions a few degrees off axis-aligned, yet they appear perfectly axis-aligned in game. Does the game snap construction rotations to 90° multiples?

    No, the game does not perform any rotation snapping, neither when placing nor rendering the elements. The game uses the raw quaternion without any modifications.


    6. **Format documentation.** Is there any official documentation of the .blueprint format you would be willing to share? The project is personal and non-commercial; the viewer stays strictly offline and we don't redistribute any game assets.

    I've posted the blueprint format a long time ago, it's unfortunately a bit difficult to find: RE: Blueprints Format (Unity)


    But the next update will slightly change the format. If I remember, I'll update the post (otherwise, please remind me) ^^

Participate now!

Don’t have an account yet? Create a new account now and be part of our community!