[
  {
    "name": "town-hill-1-street",
    "page": "settlement.html",
    "js": [
      "await window.__show('town','hill',1,'walk','auto'); window.__walkStreet();",
      "Object.defineProperty(window,'__mats',{configurable:true,get:()=>({stats:window.__stats,fps:window.__fps,ground:window.__built().group.children.find(m=>m.name==='ground-grass')?.userData.groundTimings})});"
    ],
    "wait": 3000
  },
  {
    "name": "town-hill-1-curve",
    "page": "settlement.html",
    "js": [
      "const p=window.__plan(),r=p.roads.find(r=>r.kind==='main'),i=Math.min(r.pts.length-2,Math.floor(r.pts.length*.35)),a=r.pts[i],b=r.pts[Math.min(i+9,r.pts.length-1)]; window.__view('walk'); window.__walkTo(a[0],a[1],Math.atan2(b[1]-a[1],b[0]-a[0]),.03);"
    ],
    "wait": 1500
  },
  {
    "name": "town-hill-1-square",
    "page": "settlement.html",
    "js": [
      "const s=window.__plan().squares[0],c=s.poly.reduce((a,b)=>[a[0]+b[0]/s.poly.length,a[1]+b[1]/s.poly.length],[0,0]); window.__view('walk'); window.__walkTo(c[0]-8,c[1]-3,.1,.02);"
    ],
    "wait": 1500
  },
  {
    "name": "town-hill-1-parvis",
    "page": "settlement.html",
    "js": [
      "const l=window.__plan().plots.find(p=>p.use==='church'||p.use==='cathedral'); window.__view('walk');window.__walkTo(l.x-l.w/2-9,l.z,0,.03);"
    ],
    "wait": 1500
  },
  {
    "name": "town-hill-1-junction",
    "page": "settlement.html",
    "js": [
      "const p=window.__plan(),j=p.junctions?.find(j=>!p.squares.some(s=>Math.hypot(j.x-s.poly[0][0],j.z-s.poly[0][1])<10)),r=p.roads.find(r=>r.kind==='stair')||p.roads.find(r=>r.kind==='lane')||p.roads[1],q=j?[j.x,j.z]:r.pts[0]; window.__view('walk');window.__walkTo(q[0]-4,q[1]+2,Math.atan2(-2,4),.03);"
    ],
    "wait": 1500
  },
  {
    "name": "town-hill-1-top",
    "page": "settlement.html",
    "js": [
      "const c=window.__plan().rect;window.__cam(c.x-120,210,c.z+180,c.x,15,c.z);"
    ],
    "wait": 1500
  },
  {
    "name": "town-hill-5-street",
    "page": "settlement.html",
    "js": [
      "await window.__show('town','hill',5,'walk','auto'); window.__walkStreet();",
      "Object.defineProperty(window,'__mats',{configurable:true,get:()=>({stats:window.__stats,fps:window.__fps,ground:window.__built().group.children.find(m=>m.name==='ground-grass')?.userData.groundTimings})});"
    ],
    "wait": 3000
  },
  {
    "name": "town-hill-5-curve",
    "page": "settlement.html",
    "js": [
      "const p=window.__plan(),r=p.roads.find(r=>r.kind==='main'),i=Math.min(r.pts.length-2,Math.floor(r.pts.length*.35)),a=r.pts[i],b=r.pts[Math.min(i+9,r.pts.length-1)]; window.__view('walk'); window.__walkTo(a[0],a[1],Math.atan2(b[1]-a[1],b[0]-a[0]),.03);"
    ],
    "wait": 1500
  },
  {
    "name": "town-hill-5-square",
    "page": "settlement.html",
    "js": [
      "const s=window.__plan().squares[0],c=s.poly.reduce((a,b)=>[a[0]+b[0]/s.poly.length,a[1]+b[1]/s.poly.length],[0,0]); window.__view('walk'); window.__walkTo(c[0]-8,c[1]-3,.1,.02);"
    ],
    "wait": 1500
  },
  {
    "name": "town-hill-5-parvis",
    "page": "settlement.html",
    "js": [
      "const l=window.__plan().plots.find(p=>p.use==='church'||p.use==='cathedral'); window.__view('walk');window.__walkTo(l.x-l.w/2-9,l.z,0,.03);"
    ],
    "wait": 1500
  },
  {
    "name": "town-hill-5-junction",
    "page": "settlement.html",
    "js": [
      "const p=window.__plan(),j=p.junctions?.find(j=>!p.squares.some(s=>Math.hypot(j.x-s.poly[0][0],j.z-s.poly[0][1])<10)),r=p.roads.find(r=>r.kind==='stair')||p.roads.find(r=>r.kind==='lane')||p.roads[1],q=j?[j.x,j.z]:r.pts[0]; window.__view('walk');window.__walkTo(q[0]-4,q[1]+2,Math.atan2(-2,4),.03);"
    ],
    "wait": 1500
  },
  {
    "name": "town-hill-5-top",
    "page": "settlement.html",
    "js": [
      "const c=window.__plan().rect;window.__cam(c.x-120,210,c.z+180,c.x,15,c.z);"
    ],
    "wait": 1500
  },
  {
    "name": "village-hill-1-street",
    "page": "settlement.html",
    "js": [
      "await window.__show('village','hill',1,'walk','auto'); window.__walkStreet();",
      "Object.defineProperty(window,'__mats',{configurable:true,get:()=>({stats:window.__stats,fps:window.__fps,ground:window.__built().group.children.find(m=>m.name==='ground-grass')?.userData.groundTimings})});"
    ],
    "wait": 3000
  },
  {
    "name": "village-hill-1-curve",
    "page": "settlement.html",
    "js": [
      "const p=window.__plan(),r=p.roads.find(r=>r.kind==='main'),i=Math.min(r.pts.length-2,Math.floor(r.pts.length*.35)),a=r.pts[i],b=r.pts[Math.min(i+9,r.pts.length-1)]; window.__view('walk'); window.__walkTo(a[0],a[1],Math.atan2(b[1]-a[1],b[0]-a[0]),.03);"
    ],
    "wait": 1500
  },
  {
    "name": "village-hill-1-square",
    "page": "settlement.html",
    "js": [
      "const s=window.__plan().squares[0],c=s.poly.reduce((a,b)=>[a[0]+b[0]/s.poly.length,a[1]+b[1]/s.poly.length],[0,0]); window.__view('walk'); window.__walkTo(c[0]-8,c[1]-3,.1,.02);"
    ],
    "wait": 1500
  },
  {
    "name": "village-hill-1-parvis",
    "page": "settlement.html",
    "js": [
      "const l=window.__plan().plots.find(p=>p.use==='church'||p.use==='cathedral'); window.__view('walk');window.__walkTo(l.x-l.w/2-9,l.z,0,.03);"
    ],
    "wait": 1500
  },
  {
    "name": "village-hill-1-junction",
    "page": "settlement.html",
    "js": [
      "const p=window.__plan(),j=p.junctions?.find(j=>!p.squares.some(s=>Math.hypot(j.x-s.poly[0][0],j.z-s.poly[0][1])<10)),r=p.roads.find(r=>r.kind==='stair')||p.roads.find(r=>r.kind==='lane')||p.roads[1],q=j?[j.x,j.z]:r.pts[0]; window.__view('walk');window.__walkTo(q[0]-4,q[1]+2,Math.atan2(-2,4),.03);"
    ],
    "wait": 1500
  },
  {
    "name": "village-hill-1-top",
    "page": "settlement.html",
    "js": [
      "const c=window.__plan().rect;window.__cam(c.x-120,210,c.z+180,c.x,15,c.z);"
    ],
    "wait": 1500
  },
  {
    "name": "city-river-1-street",
    "page": "settlement.html",
    "js": [
      "await window.__show('city','river',1,'walk','auto'); window.__walkStreet();",
      "Object.defineProperty(window,'__mats',{configurable:true,get:()=>({stats:window.__stats,fps:window.__fps,ground:window.__built().group.children.find(m=>m.name==='ground-grass')?.userData.groundTimings})});"
    ],
    "wait": 3000
  },
  {
    "name": "city-river-1-curve",
    "page": "settlement.html",
    "js": [
      "const p=window.__plan(),r=p.roads.find(r=>r.kind==='main'),i=Math.min(r.pts.length-2,Math.floor(r.pts.length*.35)),a=r.pts[i],b=r.pts[Math.min(i+9,r.pts.length-1)]; window.__view('walk'); window.__walkTo(a[0],a[1],Math.atan2(b[1]-a[1],b[0]-a[0]),.03);"
    ],
    "wait": 1500
  },
  {
    "name": "city-river-1-square",
    "page": "settlement.html",
    "js": [
      "const s=window.__plan().squares[0],c=s.poly.reduce((a,b)=>[a[0]+b[0]/s.poly.length,a[1]+b[1]/s.poly.length],[0,0]); window.__view('walk'); window.__walkTo(c[0]-8,c[1]-3,.1,.02);"
    ],
    "wait": 1500
  },
  {
    "name": "city-river-1-parvis",
    "page": "settlement.html",
    "js": [
      "const l=window.__plan().plots.find(p=>p.use==='church'||p.use==='cathedral'); window.__view('walk');window.__walkTo(l.x-l.w/2-9,l.z,0,.03);"
    ],
    "wait": 1500
  },
  {
    "name": "city-river-1-junction",
    "page": "settlement.html",
    "js": [
      "const p=window.__plan(),j=p.junctions?.find(j=>!p.squares.some(s=>Math.hypot(j.x-s.poly[0][0],j.z-s.poly[0][1])<10)),r=p.roads.find(r=>r.kind==='stair')||p.roads.find(r=>r.kind==='lane')||p.roads[1],q=j?[j.x,j.z]:r.pts[0]; window.__view('walk');window.__walkTo(q[0]-4,q[1]+2,Math.atan2(-2,4),.03);"
    ],
    "wait": 1500
  },
  {
    "name": "city-river-1-top",
    "page": "settlement.html",
    "js": [
      "const c=window.__plan().rect;window.__cam(c.x-120,210,c.z+180,c.x,15,c.z);"
    ],
    "wait": 1500
  },
  {
    "name": "village-plain-2-street",
    "page": "settlement.html",
    "js": [
      "await window.__show('village','plain',2,'walk','auto'); window.__walkStreet();",
      "Object.defineProperty(window,'__mats',{configurable:true,get:()=>({stats:window.__stats,fps:window.__fps,ground:window.__built().group.children.find(m=>m.name==='ground-grass')?.userData.groundTimings})});"
    ],
    "wait": 3000
  },
  {
    "name": "village-plain-2-curve",
    "page": "settlement.html",
    "js": [
      "const p=window.__plan(),r=p.roads.find(r=>r.kind==='main'),i=Math.min(r.pts.length-2,Math.floor(r.pts.length*.35)),a=r.pts[i],b=r.pts[Math.min(i+9,r.pts.length-1)]; window.__view('walk'); window.__walkTo(a[0],a[1],Math.atan2(b[1]-a[1],b[0]-a[0]),.03);"
    ],
    "wait": 1500
  },
  {
    "name": "village-plain-2-square",
    "page": "settlement.html",
    "js": [
      "const s=window.__plan().squares[0],c=s.poly.reduce((a,b)=>[a[0]+b[0]/s.poly.length,a[1]+b[1]/s.poly.length],[0,0]); window.__view('walk'); window.__walkTo(c[0]-8,c[1]-3,.1,.02);"
    ],
    "wait": 1500
  },
  {
    "name": "village-plain-2-parvis",
    "page": "settlement.html",
    "js": [
      "const l=window.__plan().plots.find(p=>p.use==='church'||p.use==='cathedral'); window.__view('walk');window.__walkTo(l.x-l.w/2-9,l.z,0,.03);"
    ],
    "wait": 1500
  },
  {
    "name": "village-plain-2-junction",
    "page": "settlement.html",
    "js": [
      "const p=window.__plan(),j=p.junctions?.find(j=>!p.squares.some(s=>Math.hypot(j.x-s.poly[0][0],j.z-s.poly[0][1])<10)),r=p.roads.find(r=>r.kind==='stair')||p.roads.find(r=>r.kind==='lane')||p.roads[1],q=j?[j.x,j.z]:r.pts[0]; window.__view('walk');window.__walkTo(q[0]-4,q[1]+2,Math.atan2(-2,4),.03);"
    ],
    "wait": 1500
  },
  {
    "name": "village-plain-2-top",
    "page": "settlement.html",
    "js": [
      "const c=window.__plan().rect;window.__cam(c.x-120,210,c.z+180,c.x,15,c.z);"
    ],
    "wait": 1500
  },
  {
    "name": "town-hill-1-plan-top",
    "page": "settlement.html",
    "js": [
      "await window.__show('town','hill',1,'top','auto');"
    ],
    "wait": 2000
  }
]