Anima v0.6.0 — you can chop a tree, and the night is dark
A from-scratch, cross-platform (macOS + Windows) Ultima Online client.
Signed and notarized on macOS, so it opens without a Gatekeeper warning.
Downloads
- macOS (Apple Silicon) —
Anima_0.6.0_aarch64.dmg - Windows —
Anima_0.6.0_x64-setup.exe
What's new since v0.5.0
This release came out of re-reading ClassicUO against the shipped code rather
than against our own notes. Most of what follows is not a missing feature — it is
something that looked done and was not.
Night exists now. Dusk, night and dungeons never darkened, and the whole
light.mul shape-and-colour pass behind them had never once executed. The two
light levels the server sends are on opposite scales — 0x4F is a darkness, 0x4E
is a brightness floor that Night Sight raises — and we were comparing them with
min, which pinned the result to zero forever and made Night Sight darken the
screen. Torches, lamps and spell fields light the ground for the first time,
carried lights follow you, and a wall now blocks the glow behind it.
You can chop a tree, and mine a cave floor. Map statics were drawn but were
never click targets, and every ground target we sent hardcoded graphic 0 — so the
server built a "land" target and the harvest system, which needs a static,
could never match. Underneath it, tiledata.rs had been reading item height and
name from an offset four bytes wrong since forever: every static height was
really an ASCII character of its own name, and the "nodraw" placeholder cull had
never matched anything.
Find your party on the map. Party and guild positions (0xF0) were absent in
both directions, which is exactly the case a party needs — the server reports
only the members you cannot see.
Playing it feels different. Footsteps (no server sends them — the client has
to make them). Mobiles fidget when they stand still. Projectiles burst where they
land. Effects are depth-sorted into the world instead of painted over it, which
also stopped a bolt from revealing someone hidden behind a wall. Fierce storms
render instead of showing clear sky. Poisoned creatures are visibly green.
Interface. Macros are ordered sequences with delays, target-waits and mouse
or wheel bindings. Persistent name plates, including for ground items. Pinned
health bars with drag-select. Right-click closes a window. Context menus. Alt+click
to follow. Corpses open themselves. Last target, target self, one-key bandage.
Stat locks. Party tell, kick and loot permission. The target cursor now says
whether it is harmful or beneficial, and warns before an action that would flag
you criminal.
For contributors
The gate grew a step. Two workstreams independently declared a top-level const
of the same name in different files; the browser concatenates every script into
one scope, so that is a SyntaxError which aborts the later file and kills the
client — and node --check, which compiles each file alone, is structurally
blind to it. scripts/check-web-globals.mjs now compiles them together in the
page's real load order, in CI as well as locally.
docs/CLASSICUO_GAPS.md records what each change was verified against and, just
as deliberately, what it was not. Two things in this release are still not
verified and say so there: an effect light (no effect art on this data carries the
light flag) and the exact hand position of a carried light.