tiledef.h is included by 1900 objects, and each one was compiling a tentative
definition of gFullBaseTileValues rather than a declaration of it. The array
is defined once in TileDat.cpp, and every other global in the same block is
already declared extern; this one was missed.
MSVC accepts it and merges the tentative definitions, so nothing was visibly
broken. A conforming front end rejects it outright:
tiledef.h(180,12): error: definition of variable with array type needs
an explicit size or an initializer
which is what turned it up.
Verification: ninja -C build -k 0, all four applications link.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>