<!-- NEW4 — TEST 4 · THE QUILT · part 438 -->
ture, CubeReflectionMapping, CubeRefractionMapping, CubeTexture, CubeUVReflectionMapping, CullFaceBack, CullFaceFront, CullFaceNone, CustomBlending, CustomToneMapping, Data3DTexture, DataArrayTexture, DataTexture, DepthFormat, DepthStencilFormat, DepthTexture, DoubleSide, DstAlphaFactor, DstColorFactor, EqualCompare, EqualDepth, EquirectangularReflectionMapping, EquirectangularRefractionMapping, EventDispatcher, ExternalTexture, Float32BufferAttribute, FloatType, FrontSide, Frustum, GLSL3, GreaterCompare, GreaterDepth, GreaterEqualCompare, GreaterEqualDepth, HalfFloatType, IntType, Layers, LessCompare, LessDepth, LessEqualCompare, LessEqualDepth, LinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, LinearSRGBColorSpace, LinearToneMapping, LinearTransfer, Matrix3, Matrix4, MaxEquation, Mesh, MeshBasicMaterial, MeshDepthMaterial, MeshDistanceMaterial, MinEquation, MirroredRepeatWrapping, MixOperation, MultiplyBlending, MultiplyOperation, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NeutralToneMapping, NeverCompare, NeverDepth, NoBlending, NoColorSpace, NoToneMapping, NormalBlending, NotEqualCompare, NotEqualDepth, ObjectSpaceNormalMap, OneFactor, OneMinusConstantAlphaFactor, OneMinusConstantColorFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, OrthographicCamera, PCFShadowMap, PCFSoftShadowMap, PMREMGenerator, PerspectiveCamera, Plane, PlaneGeometry, R11_EAC_Format, RED_GREEN_RGTC2_Format, RED_RGTC1_Format, REVISION, RG11_EAC_Format, RGBAFormat, RGBAIntegerFormat, RGBA_ASTC_10x10_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_BPTC_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGBFormat, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGB_S3TC_DXT1_Format, RGFormat, RGIntegerFormat, RawShaderMaterial, RedFormat, RedIntegerFormat, ReinhardToneMapping, RepeatWrapping, ReverseSubtractEquation, SIGNED_R11_EAC_Format, SIGNED_RED_GREEN_RGTC2_Format, SIGNED_RED_RGTC1_Format, SIGNED_RG11_EAC_Format, SRGBColorSpace, SRGBTransfer, ShaderChunk, ShaderLib, ShaderMaterial, ShortType, SrcAlphaFactor, SrcAlphaSaturateFactor, SrcColorFactor, SubtractEquation, SubtractiveBlending, TangentSpaceNormalMap, Texture, Uint16BufferAttribute, Uint32BufferAttribute, UniformsLib, UniformsUtils, UnsignedByteType, UnsignedInt101111Type, UnsignedInt248Type, UnsignedInt5999Type, UnsignedIntType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShortType, VSMShadowMap, Vector2, Vector3, Vector4, WebGLCoordinateSystem, WebGLCubeRenderTarget, WebGLRenderTarget, WebGLRenderer, WebGLUtils, WebXRController, ZeroFactor, createCanvasElement, error, log, warn, warnOnce };


===== FILE: public/new4/mapdata4.js =====
// mapdata4.js — TEST 4 · THE QUILT. Every tile a form, no empty land:
// Twin Rivers NW, the Bend (downtown) N, Canal City NE, the Crossing SW,
// the Waterfront S, suburbs and the Great Park SE — one river threads them.
import { line, arc, join } from './worldmap.js';

const river = join(
  line([-1680, -880], [-1350, -430], 8),
  line([-1350, -430], [-786, -578], 8),
  arc(0, -430, 800, Math.PI * 1.06, Math.PI * 1.94, 36),
  line([786, -578], [1400, -560], 10),
  line([1400, -560], [1520, -300], 6),
  line([1520, -300], [1520, 200], 6),
  line([1520, 200], [420, 640], 12)
);
const reach = line([-280, 700], [-1700, 700], 16);
export const MAP = {
  id: 'new4', name: 'THE QUILT', sub: 'Test 4 · every tile a form', size: 3400,
  spawn: { x: 0, z: -60, yaw: Math.PI },
  water: {
    rivers: [
      { pts: line([-1100, -950], [-1350, -430], 8), width: 30 },
      { pts: river, width: 46 },
      { pts: reach, width: 44 },
      { pts: line([950, -880], [950, -60], 8), width: 22 },
      { pts: line([700, -475], [1500, -475], 8), width: 22 },
    ],
    lakes: [{ x: 0, z: 720, r: 290 }, { x: 1250, z: 620, r: 70 }],
  },
  streets: [
    { a: [-550, -950], b: [-550, 950], w: 16 },
    { a: [550, -950], b: [550, 950], w: 16 },
    { a: [-1700, 20], b: [1700, 20], w: 18 },
    { a: [-1350, -950], b: [-1350, 0], w: 14 },
    { a: [0, -950], b: [0, 950], w: 16 },
    { a: [1400, -950], b: [1400, 200], w: 14 },
    { a: [-1700, 745], b: [300, 745], w: 15 },
    { a: [-1700, -640], b: [-730, -640], w: 14 },
    { a: [730, -640], b: [1700, -640], w: 14 },
    { a: [1134, -880], b: [1134, -60], w: 12 },
    { a: [-1100, 300], b: [-1100, 950], w: 14 },
  ],
  regions: [
    { kind: 'suburb', name: 'Twin Rivers Homes', x: -880, z: -470, w: 520, d: 740, seed: 21 },
  