GodotUO

Classic Ultima Online on Godot 4 .NET


Project maintained by DatMoshu Hosted on GitHub Pages — Theme by mattgraham

Water

GUO can draw the sea, rivers and lakes as moving water instead of the still tiles of the original client. It is off by default: Classic tiles draws the water exactly as ClassicUO does.

Turn it on

What it does

The water keeps the tiles’ own colours, so hued water, night and the seasons look as they did. On top of that a slow swell crosses it, crests catch the light, and surf breaks where the water meets the shore. Anything in the water moves it: a creature or a wading character sends out rings, a boat under way leaves a bow wave and a wake, and something that lands in the water splashes. It changes only how water is coloured: what is drawn, in which order, and what a click picks are the same as with Classic tiles.

ClassicUO’s own Animated water effect option still works with Classic tiles. A water style replaces it while the style is on.

More styles from the Store

Four more styles come as Store packs:

Surf follows a continuous shore contour in all styles, with no surf below high cliffs.

Install one from the Store, select a deployment that contains it in the Store’s Configure deployment window, restart, then pick it under Options > Video > Water. A pack style is only numbers for one of the looks built into GUO: it carries no code. If its pack is removed, the water goes back to Classic tiles.

Coming next

A setting a shard owner can use to choose which styles their players may use. The decision behind all of it is ADR-0037 in docs/architecture/.

For testers

--water-style uo turns the style on for one run without saving it. The scenario client.render.water visits the Britain docks and the Trinsic bay, checks the draw list against ClassicUO’s, and takes stills. The perf probe has britain-docks and trinsic-bay scenes for frame time with the style off and on. For the pack styles, python tools/asset_store/water_packs.py --deploy DIR installs all four and prints what to set for the scenario client.render.water_pack, which is run once per style.

The pack scenario also checks a low sandy beach and holds the east docks shore and bay cameras for motion review. Run it with --var style=classic for the native comparison. The synthetic res://src/Render/Water/WaterShoreProbe.tscn checks 48 synthetic coast cases: axis-aligned and diagonal shores in four directions, mask windows at positive and negative world coordinates (including ring-texture seams), falloff, dry-art overlaps, and the beach/cliff cutoff at 8/9 units above three water heights. It also checks Classic byte parity with all five style models bound and verifies that setting the water bit reaches the hue core’s debug branch. These checks use rendered pixels; run it using godot-console --path godot/GUO --rendering-method forward_plus res://src/Render/Water/WaterShoreProbe.tscn and again with gl_compatibility. It needs a real renderer, without --headless.