Skip to content

Water surfaces, rivers and lakes

AnvilWaterApplies toRRSWS

Riders Republic uses three distinct water geometries: distant FakeWater boxes or half-float meshes, ordinary river/waterfall meshes, and lake surfaces generated from stored quadtree patches. Their data is not interchangeable with one generic water Material. Observed · component, mesh and shader joins

FakeWaterMeshComponent (0x961F3B5D) is the only component of 512 stored WaterVisualEntity_Fake_* entities, representing 256 base/patch tile identities. Each references a FakeWaterComponentChunk (a forge resource of type 0x4CB7E94B, which community word lists name FakeWaterMesh) and embeds a FakeWaterMeshInstance (0xC3457872), bounds, a Visual tail and three vec4 values describing centre/minimum/maximum. Its instance-matrix count is zero on all 512 bodies. Seventy bodies also hold a small half-float triangle mesh. Proven · all 512 component bodies

The boxes form 1024-metre world tiles in a 16×16 grid. Every Entity rotation is identity, and Entity x/y translation agrees with the box centre to one metre; the half-float vertices lie within their world boxes. These are world positions, so applying the Entity translation again double-translates them. Half precision reaches four-metre steps at coordinate magnitudes 4096–8192. Proven · all 512 transform/box checks Proven · all 70 stored FakeWater mesh bounds

River_Mesh_generation entities use Visual → LODSelector → Mesh plus a rigid-body mesh shape. The stored set includes 10,667 named river LOD meshes, with waterfall and skirt variants among the related entities. Observed · resource and entity joins

There are 2,905 River_Mesh_generation_[x,y]_PACK_* Entities in the base forge and 2,885 in the patch, counting the waterfall and skirt variants, and all parse with the ordinary Entity grammar. Grids list them at several levels: TerrainWorldSmall level 0 lists 2,995, level 1 1,346 and level 2 230, and LongRange level 0 lists 106, so the finest cells alone do not reach every river. Observed · complete entity and listing census

All 10,667 river LOD meshes use one Material, WaterMaterial_USNAT, of the FlowingWater_River template; it has no TextureSet and carries two foam texture records, and the patch forge stores it again. Observed · every river LOD mesh

FlowingWater_River writes a five-target water G-buffer. Its mesh UV supplies a flow vector 2*uv-1, while texture samples use world XY. The sampled river Material repeats at .128 per metre, about 7.8 metres per tile; normal waves combine animated wave frames and noise. Observed · river vertex/pixel programs and constants

The river’s encoded water type is sqrt(sat(p/(40,100,40))), with placed type p=(0,5.15,0). Its transmittance is max_c exp(-sigma_c*depth), and the executed river program yields sigma approximately (1.052,.833,.923) per metre. At depths .5, 1 and 2 metres this gives opacity about .34, .57 and .81. Proven · executed river permutation

Waterfalls use MAD_Waterfall’s unlit tinted-alpha cascade, with a sampled tint (.204,.302,.322). Skirts use an alpha foam strip, scaling sampled foam alpha by Contrast Vertex, 3 on the examined material. They do not use the same depth response as the river water body. Observed · programs and material constants

Lakes are the 36 WaterVisualEntity_###_### Entities of the base forge, each a WaterComponent (0x996DF94F) and a RigidBodyComponent on its own _ColMesh MeshShape. Only TerrainWorldSmall levels 2–4 list them, never level 0. Observed · all 36 Entities

Thirty-six WaterComponent bodies parse completely; 35 have atlases. Their WaterMesh resource has a 12-byte body rather than stored surface vertices. The component embeds a RiverQuadTree, WaterPatchDesc records and three references in Flow, Params, LocalProfile order. Proven · 36 component envelopes Observed · referenced resources

WaterPatchDesc49 bytes92% known

All 2,062 patches of the 36 stored WaterComponents are consumed exactly.

ProvenObservedSourcedInferredUnknownNot described
OffsetSizeTypeFieldConfidenceNotes
0x01u8 = 0pointer byteProven
0x18u64object identityProven
0x94u32 = 0x6FBE4670WaterPatchDesc classProven
0xD12float3world minimum corner and water levelProven
0x194bytesstored bytesUnknown00 00 01 02 in the examined patch profile
0x1D16float4atlas rectangleProvenu0 v0 u1 v1
0x2D4u32levelProvensquare side = 512 >> level metres

All 2,062 patches match a quadtree-node minimum corner and 512>>level side. Levels 3/4/5/6 have 485/635/625/317 patches, with sides 64/32/16/8 metres. Position z is the water level. Proven · all patches

Atlas Channels Confidence
Flow RG signed flow direction around byte 127; B speed code; A coverage Observed · atlas content and shader
Params RGB encoded water type sqrt(p/(40,100,40)); A coverage Proven · executed real-patch shader
LocalProfile RG ripple/shore direction, B magnitude, A shading class Observed · atlas joins Proven · class passthrough execution

LocalProfile alpha stores byte 48, class 6, on 20 lakes and byte 80, class 10, on thirteen lakes without flow data. Two atlas sets have no water pixels. Atlas colours require the established BGRA byte order of format 0. Proven · all 35 atlas sets

Executing the Low-quality lake G-buffer program with one real patch and real atlases establishes that Params R/B pass through, G can increase with a noise/flow turbidity term, and LocalProfile A passes to the class byte. Surrogate wave/noise inputs establish their influence, not the full game’s animated wave state. Proven · real-patch execution Unknown · complete wave state

Lake absorption differs from the river template: its pure-water term is approximately (.3265,.1019,.1025) per metre before the water-type contribution. The default lake type (4,.5,5) gives sigma (.668,.604,2.776); SwampMud (20,4,4) gives (1.825,1.639,11.05). Nine depth sample points match max_c exp(-sigma_c*d) within 1e-5. Proven · executed lake program

The water G-buffer stores encoded type and foam in o0, normal/class in o1, transmittance in o3.x and velocity in o4.xy. These are inputs to a later water-lighting branch, not the final visible RGB water colour. The inspected deferred water-lighting program combines depth-dependent absorption, backscatter and sky/sun terms; a computed reflectance ratio is overwritten in that variant and must not be treated as its final output. Observed · water writer and lighting consumer

What produces the complete animated water response?

Real wave/noise bindings, quality variants beyond the executed Low path, near-field ripple constants, complete deferred body colour and FakeWater chunk internals remain unresolved. River and lake absorption maps must remain distinct. Unknown

only in SWS

Water in Shaun White Skateboarding is a flag on the material, not a separate resource: the bool at byte 91 of the SKGenericMaterial body is set on exactly six distinct materials of the six levels (see the material body), each with a normal map, a specular map and a cube reflection and no diffuse map. Observed · SWS[all six levels]

The collision side is separate: a collision surface named Water exists (see surfaces), and the fountain materials carry its id in the collision-surface field of the material. No shader-template id, wave animation or reflection parameter is stored with the flag. Observed

The harbour water of level 01 (WaterPort) has the tint (41, 60, 71) of 255 with alpha 1; its entity is placed in the global cell Cell05460 at the source position (−296.95, 2.44, −11.0). Observed