map: a 1.12 zone sheet is opaque, so the feather belongs on
What was left after the stitch's geometry was hard rectangles at the zone zooms. Bisected with OpenMapClassic's own /omc layer switches: baked and gaps draw nothing on this build, zoneart draws them all. A zone's sheet is masked to its land only for ids in ZoneMaskIDs, the contiguous Classic range 1411-1452. On this realm that leaves thirty-four without one -- every city, the dungeons, and every zone the realm added of its own. Cities already decline to draw unmasked; zones do not, and Gilneas puts its whole sheet, painted sea and torn parchment border, over Silverpine. PlaceBase takes a feather for exactly this and the zone walk passed nil behind `(not era) and FEATHER`. Sound on Era, where a C_Map zone texture carries a transparent surround; not true here, where the realm's sheets are alpha 255 across every texel. The port passes it. PlaceBase prefers the land mask where there is one, so the forty masked zones are untouched -- 0.57% of pixels moved in a Dun Morogh view. scripts/make-map-feather.py generates the three masks as 256x256 uncompressed TGA. A feather is a smoothstep ramp, which upstream's own NOTICE calls generated rather than cut from art. A per-zone LAND mask was deliberately not attempted: on this art sea and land do not separate by colour (a sea patch reads R-B +28, a land patch +34) and the realm's zone bitmap is 13x13 cells for its largest zone. Either would be a guess dressed as art. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SgstFWtn1RxEJ5kVrpgYwn
This commit is contained in:
@@ -3015,3 +3015,49 @@ Both ends reachable, which is what "scroll all the way out to the world map and
|
||||
the minimap" asks for. Captured at zoom 1, 3, 9 and 40 with grom's own settings and no setup
|
||||
chunk: the world sheet with both continents, Eastern Kingdoms with its zones, Dun Morogh with its
|
||||
neighbours stitched in, and the minimap's terrain drawn through the map.
|
||||
|
||||
## The rectangles: a 1.12 zone sheet is opaque, and Era's is not
|
||||
|
||||
With the stitch's geometry right, what was left at the zone zooms was hard rectangles. Measured
|
||||
rather than guessed, with OpenMapClassic's own `/omc layer` switches as the bisect: turning
|
||||
`baked` or `gaps` off changed nothing (neither draws on this build), turning `zoneart` off took
|
||||
them all. So the rectangles are the per-zone sheets.
|
||||
|
||||
`PlaceBase` masks a zone's sheet to its land and says why: *"Full C_Map zone textures include
|
||||
parchment borders and painted sea; without a land mask they draw as overlapping rectangles."* The
|
||||
mask comes from `ZoneMask`, which answers only for ids in `S.ZoneMaskIDs` — the contiguous Classic
|
||||
range **1411–1452**, forty zones. On this realm that leaves **thirty-four** without one: every
|
||||
city, the dungeons, and every zone the realm added of its own (Gilneas, Hyjal, Alah'Thalas,
|
||||
Tel'Abim, Grim Reaches, Thalassian Highlands, Northwind, Balor, Gillijim's Isle …).
|
||||
|
||||
Cities are already handled — the code declines to draw one with no outline mask, naming Stormwind
|
||||
and Ironforge. The zones are not, and Gilneas is the clearest case: its whole 1002x668 sheet draws
|
||||
over Silverpine, painted sea, "THE GREAT SEA" lettering, compass rose and a torn parchment border
|
||||
and all.
|
||||
|
||||
### Why the feather was off, and why it belongs on here
|
||||
|
||||
`PlaceBase` takes a feather for exactly this and the zone walk passes `nil` for it, behind
|
||||
`(not era) and FEATHER`. The reason is sound on Era: a `C_Map` zone texture there carries a
|
||||
transparent surround, so a feather would do nothing. **It is not true of this client.** Measured
|
||||
on the realm's own art: `Interface\WorldMap\AlahThalas\AlahThalas1.blp` and its siblings are alpha
|
||||
255 across every texel. A 1.12 sheet is an opaque rectangle that paints its own sea.
|
||||
|
||||
So the port passes the feather. `PlaceBase` prefers the land mask when there is one, so the forty
|
||||
masked zones are untouched — measured, 0.57% of pixels moved in a Dun Morogh view, all of it at
|
||||
the edges where a neighbour now fades. Gilneas loses its border and blends into Silverpine.
|
||||
|
||||
### Generating the feather, and what was *not* generated
|
||||
|
||||
`scripts/make-map-feather.py` writes `MapFeather`, `MapFeatherThin` and `MapFeatherWide` as
|
||||
256x256 uncompressed 32-bit TGA, the format the shipped masks use. A feather is a smoothstep ramp
|
||||
in from each edge — upstream's own NOTICE calls these "generated from noise" rather than cut from
|
||||
art, so this reproduces them rather than imitating an artist.
|
||||
|
||||
A per-zone **land** mask is a different thing and was deliberately not attempted. Upstream bakes
|
||||
those by classifying painted sea against land by colour, and on this art the two do not separate:
|
||||
sampled on the Gilneas sheet, a sea patch reads `R−B +28` and a land patch `+34`, overlapping
|
||||
across the whole zone. The realm's own `<Continent>.zmp` is authoritative about territory but is
|
||||
128x128 over a continent — the largest zone on Azeroth owns 169 cells, about 13x13, which is a
|
||||
28-px block on a 256 mask. Either route would be a guess dressed as art. The feather is not: it is
|
||||
the mask the addon already asks for.
|
||||
|
||||
Reference in New Issue
Block a user