OpenZT2 reads the original game content and renders it through a new Rust, Bevy and wgpu implementation. We’re trying to reproduce the original appearance with a different renderer.

We compare the same scene in Zoo Tycoon 2 and OpenZT2. The third panel is an amplified pixel-difference heatmap. Brighter magenta marks a larger difference. The count covers the whole frame, so text, camera placement and interface layout can contribute alongside the material itself.

O · Original is on the left, N · OpenZT2 is in the centre, and the amplified difference map is on the right.

Original and OpenZT2 world-selection globes with blue oceans, land, clouds and orange flags, beside the pixel-difference heatmap.

Globe textures and layered materials

The Earth surface, clouds and orange flags now render together. The earlier build showed a white sphere. Cloud shading and the selected-location marker still differ.

Before the globe material corrections
Earlier comparison: the original textured globe beside OpenZT2’s untextured white sphere and a difference heatmap.
The earlier capture of the same checkpoint. Material projection, lighting and draw-order corrections restored the Earth’s appearance.

Restoring the globe took corrections to texture projection and layered materials, along with lighting and draw order. With the textures back, we could examine the cloud shading and location marker more closely.

Original and OpenZT2 grassland-filtered globes with American Prairie selected, followed by the pixel-difference heatmap.

Biome shading and lighting

The filtered globe retains its blue ocean and green grassland highlight after its material changes. Cloud appearance, marker placement and text wrapping remain visible differences.

Original and OpenZT2 main-menu panels followed by a difference heatmap.

Main-menu layout and controls

The authored logo, panel, buttons and profile controls retain the original menu’s familiar layout. Both captures use the same background. The heatmap highlights remaining text and panel differences, along with OpenZT2’s additional archive controls.

Original and OpenZT2 overhead terrain with grass, dirt, slopes and the gameplay HUD, beside the pixel-difference heatmap.

Terrain textures and material balance

Grass, dirt and slopes render through the restored material pipeline. Texture detail, colour balance and lighting still differ. Camera framing and foliage placement also vary, so this heatmap includes more than material differences.

Two more interface comparisons

Added 6 September: these captures use the same coastal background in both games. The settings panel and Freeform button hover are close in overall layout, with differences in text and control state still visible. The placement captures we checked have larger gaps, so they aren’t examples of a nearly finished result yet.

Original and OpenZT2 Freeform button hover states, with the illuminated button and help text beside their difference heatmap.

Freeform button hover

The blue button highlight and green arrow appear in both captures. Text sizing and wrapping still differ. OpenZT2’s archive controls and extra panel outlines also contribute to the heatmap.

Original and OpenZT2 video and sound settings panels over the same coastal background, beside the difference heatmap.

Video and sound settings

The panel shape, checkboxes and slider artwork are close. This capture has different volume values, fullscreen and message-of-the-day selections, and an enabled confirmation button in OpenZT2. Those state differences are included alongside the remaining text layout and shading differences.

Reading the differences

We use the shape of the differences to narrow down the cause. A large patch of colour can point to a wrong blend mode or texture stage, while thin outlines can suggest a projection or camera mismatch. Differences around the letters give us somewhere to start checking text rendering.

The changed-pixel count includes all of these differences, so we check the captures before deciding which part of the renderer to work on next.