{"id":890,"date":"2026-10-10T12:58:09","date_gmt":"2026-10-10T11:58:09","guid":{"rendered":"https:\/\/retired-bricks.co.uk\/en\/clone-army-builder\/"},"modified":"2026-10-16T13:00:49","modified_gmt":"2026-10-16T12:00:49","slug":"clone-army-builder","status":"publish","type":"page","link":"https:\/\/retired-bricks.co.uk\/de\/clone-army-builder\/","title":{"rendered":"Clone Army Builder \u2014 Retired Bricks"},"content":{"rendered":"<p>[et_pb_section fb_built=&#8221;1&#8243; background_color=&#8221;#081320&#8243; custom_padding=&#8221;28px||40px||false|false&#8221;][et_pb_row width=&#8221;96%&#8221; max_width=&#8221;1440px&#8221;][et_pb_column type=&#8221;4_4&#8243;][et_pb_code]<\/p>\n<div id=\"rb-parade\">\n<style>\n#rb-parade{--gold:#dfbd7b;--ink:#081320;--panel:#122235;--line:#344b62;--muted:#afc1d3;color:#edf4fa;font:15px\/1.5 Arial,sans-serif;max-width:1440px;margin:auto}#rb-parade *{box-sizing:border-box}#rb-parade h1,#rb-parade h2,#rb-parade h3{color:#fff;margin:0}#rb-parade h1{font-size:clamp(28px,4vw,44px);line-height:1.15}#rb-parade h2{font-size:18px}#rb-parade h3{font-size:15px}#rb-parade p{margin:8px 0}#rb-parade .eyebrow{color:var(--gold);font-size:11px;letter-spacing:2px;margin-bottom:8px}#rb-parade .intro{display:flex;justify-content:space-between;align-items:center;gap:20px;margin-bottom:20px}#rb-parade .intro p{color:var(--muted);max-width:720px}#rb-parade a{color:var(--gold)}#rb-parade button,#rb-parade input,#rb-parade select{font:inherit}#rb-parade button{color:#eff5fb;background:#1b3046;border:1px solid #4b657e;border-radius:8px;padding:9px 12px;cursor:pointer;min-height:40px;transition:background .15s,border-color .15s}#rb-parade button:hover{background:#29445e;border-color:var(--gold)}#rb-parade button.primary{background:var(--gold);color:#081320;border-color:var(--gold);font-weight:700}#rb-parade button:disabled{opacity:.45;cursor:not-allowed}#rb-parade :focus-visible{outline:3px solid var(--gold);outline-offset:3px}#rb-parade input,#rb-parade select{background:#091725;color:white;border:1px solid #506a82;border-radius:7px;padding:9px 11px;min-width:0}#rb-parade input[type=number]{width:65px}#rb-parade input[type=range]{accent-color:var(--gold);padding:0;min-height:30px;width:100%}#rb-parade label{color:var(--muted);font-size:12px}#rb-parade .headstrip{display:flex;align-items:end;gap:20px;background:var(--panel);border:1px solid var(--line);padding:14px 18px;border-radius:12px;margin-bottom:14px}#rb-parade .namefield{flex:1;max-width:480px}#rb-parade .namefield label{display:block;margin-bottom:5px}#rb-parade .namefield input{width:100%}#rb-parade .metric{min-width:60px}#rb-parade .metric strong{display:block;color:var(--gold);font-size:24px;line-height:1.2}#rb-parade .metric small{color:var(--muted);font-size:11px}#rb-parade .capacity{flex:1;max-width:200px;color:var(--muted);font-size:12px}#rb-parade progress{width:100%;height:6px;accent-color:var(--gold);display:block;margin-top:6px}#rb-parade .workspace{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:16px;align-items:start}#rb-parade .box{background:var(--panel);border:1px solid var(--line);padding:17px;border-radius:12px;min-width:0}#rb-parade .stage-shell{background:#0a1726;border:1px solid var(--line);border-radius:12px;overflow:hidden;min-width:0}#rb-parade .stagebar{display:flex;align-items:center;gap:10px;padding:10px 14px;border-bottom:1px solid var(--line);flex-wrap:wrap}#rb-parade .stagebar strong{margin-right:auto;font-size:12px;color:var(--gold);letter-spacing:1px}#rb-parade .stagebar button{font-size:12px;min-height:34px;padding:5px 10px}#rb-parade .stage{aspect-ratio:16\/10;position:relative;overflow:hidden;isolation:isolate;background:#0a1929}#rb-parade canvas{display:block;width:100%;height:100%}#rb-parade .troops{position:absolute;inset:0}#rb-parade .troop-hit{position:absolute;background:transparent;border:0;padding:0;min-height:0;border-radius:8px;color:transparent}#rb-parade .troop-hit:hover{background:#dfbd7b16;border:1px solid #dfbd7baa}#rb-parade .troop-hit[aria-pressed=true]{border:1px solid var(--gold);background:#dfbd7b12}#rb-parade .stage-note{position:absolute;inset:45% 10% auto;text-align:center;background:#081321d9;border:1px solid var(--line);padding:16px;border-radius:12px;pointer-events:none}#rb-parade .stage-note[hidden]{display:none}#rb-parade .controlrow{display:flex;gap:12px;padding:12px 14px;align-items:center;flex-wrap:wrap;background:#102034}#rb-parade .controlrow .zoom{margin-left:auto;display:flex;align-items:center;gap:8px;max-width:190px}#rb-parade .controlrow .zoom input{width:100px}#rb-parade .speed{display:flex;align-items:center;gap:7px}#rb-parade .speed select{padding:6px}#rb-parade .toggle{display:inline-flex;align-items:center;gap:7px}#rb-parade .toggle input{accent-color:var(--gold)}#rb-parade .detail{min-height:112px;display:grid;grid-template-columns:60px minmax(0,1fr) auto;gap:12px;align-items:center;margin-top:14px;padding:12px 16px}#rb-parade .detail img{width:55px;height:85px;object-fit:contain}#rb-parade .detail small{display:block;color:var(--muted)}#rb-parade .detail .actions{display:flex;gap:6px;flex-wrap:wrap}#rb-parade .detail .actions button{font-size:12px}#rb-parade .detail .placeholder{grid-column:1\/-1;color:var(--muted)}#rb-parade .section-label{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px}#rb-parade .section-label small{color:var(--muted)}#rb-parade .unitcards{display:grid;grid-template-columns:1fr 1fr;gap:8px}#rb-parade .unitcard{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:9px 5px;min-height:130px;background:#0b1a2a;border-color:var(--line)}#rb-parade .unitcard img{width:51px;height:72px;object-fit:contain;margin-bottom:6px}#rb-parade .unitcard strong{font-size:12px}#rb-parade .unitcard small{color:var(--muted);font-size:10px}#rb-parade .unitcard[aria-pressed=true]{border:2px solid var(--gold);background:#20354a;padding:8px 4px}#rb-parade .unitcard[aria-pressed=true]:after{content:'\u2713';position:absolute;right:7px;top:4px;color:var(--gold)}#rb-parade .recruit-row{display:flex;gap:8px;align-items:center;margin-top:12px}#rb-parade .recruit-row button{flex:1}#rb-parade .quick{display:flex;gap:7px;margin:9px 0}#rb-parade .quick button{flex:1;padding:7px;font-size:12px}#rb-parade .hint{font-size:12px;color:var(--muted)}#rb-parade .notice{font-size:13px;color:var(--gold);margin:12px 0;min-height:24px}#rb-parade .config{margin-top:16px;display:grid;grid-template-columns:1fr 1fr;gap:16px}#rb-parade .scenegrid{display:grid;grid-template-columns:repeat(4,1fr);gap:7px}#rb-parade .scene{padding:0;overflow:hidden;background:#091725;border-color:var(--line)}#rb-parade .scene img{display:block;width:100%;height:57px;object-fit:cover}#rb-parade .scene span{display:block;padding:7px 4px;font-size:11px}#rb-parade .scene[aria-pressed=true]{outline:2px solid var(--gold);outline-offset:1px}#rb-parade .formations{display:grid;grid-template-columns:repeat(4,1fr);gap:7px}#rb-parade .formation{font-size:11px;padding:7px 3px;min-height:73px}#rb-parade .formation svg{display:block;margin:0 auto 5px;width:40px;height:25px;color:var(--gold)}#rb-parade .formation[aria-pressed=true]{border-color:var(--gold);background:#294057}#rb-parade details.box{margin-top:16px;padding:0;overflow:hidden}#rb-parade details>summary{padding:16px;cursor:pointer;font-size:17px;color:white;font-weight:700}#rb-parade .detailbody{padding:0 16px 16px}#rb-parade .roster{margin-top:16px}#rb-parade .roster-line{display:grid;grid-template-columns:36px minmax(0,1fr) auto;align-items:center;gap:10px;padding:9px 0;border-bottom:1px solid var(--line)}#rb-parade .roster-line img{height:47px;width:30px;object-fit:contain}#rb-parade .roster-line small{display:block;color:var(--muted);font-size:10px}#rb-parade .roster-actions{display:flex;gap:5px;align-items:center}#rb-parade .roster-actions button{padding:3px 9px;min-height:34px}#rb-parade .roster-actions strong{width:24px;text-align:center}#rb-parade .roster-actions .remove{font-size:11px;padding:3px 7px}#rb-parade .bottomgrid{display:grid;grid-template-columns:1fr 1fr;gap:16px}#rb-parade .archive-tools{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px}#rb-parade .archive-tools button{font-size:12px}#rb-parade .saved-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}#rb-parade .saved-card{border:1px solid var(--line);border-radius:10px;overflow:hidden;background:#0a1929}#rb-parade .saved-card>img{height:75px;width:100%;object-fit:cover}#rb-parade .saved-info{padding:10px}#rb-parade .saved-info input{width:100%;font-size:12px;margin-bottom:7px}#rb-parade .saved-info small{display:block;color:var(--muted);font-size:11px;margin:5px 0}#rb-parade .saved-info .actions{display:flex;gap:5px;flex-wrap:wrap}#rb-parade .saved-info button{font-size:11px;padding:5px 8px;min-height:32px}#rb-parade .saved-card.active{border-color:var(--gold)}#rb-parade .shop-item{padding:12px 0;border-bottom:1px solid var(--line)}#rb-parade .shop-item small{color:var(--muted);display:block}#rb-parade .shop-item a{font-weight:700}#rb-parade .shop-item .shop-action{display:inline-block;margin-top:6px;font-size:12px}#rb-parade .exporttools{display:flex;gap:12px;flex-wrap:wrap;margin:12px 0;align-items:center}#rb-parade .upload{width:100%;font-size:12px;margin-top:8px}#rb-parade .footnote{color:var(--muted);font-size:11px;line-height:1.6;margin-top:18px}#rb-parade .footnote a{color:#cdb889}#rb-parade .theater{position:fixed;inset:12px;z-index:2147483000;display:flex;flex-direction:column;box-shadow:0 0 0 30px #020810f0}#rb-parade .theater .stage{flex:1;aspect-ratio:auto;min-height:0}#rb-parade .stage-shell:fullscreen{display:flex;flex-direction:column;background:#081320;padding:10px}#rb-parade .stage-shell:fullscreen .stage{flex:1;aspect-ratio:auto;min-height:0}\n@media(max-width:1100px){#rb-parade .workspace{grid-template-columns:minmax(0,1fr) 280px}#rb-parade .config{grid-template-columns:1fr}#rb-parade .scene img{height:68px}}\n@media(max-width:800px){#rb-parade .workspace{display:flex;flex-direction:column}#rb-parade .display,#rb-parade .recruitment{width:100%}#rb-parade .unitcards{grid-template-columns:repeat(3,1fr)}#rb-parade .unitcard{min-height:120px}#rb-parade .headstrip{gap:12px;flex-wrap:wrap}#rb-parade .namefield{flex-basis:100%;max-width:none}#rb-parade .capacity{max-width:none}#rb-parade .bottomgrid{grid-template-columns:1fr}#rb-parade .intro{align-items:start}#rb-parade .intro>a{display:none}#rb-parade .recruitment summary{display:list-item}#rb-parade .controlrow{gap:8px}#rb-parade .detail{grid-template-columns:45px 1fr;min-height:135px}#rb-parade .detail .actions{grid-column:1\/-1}#rb-parade .stagebar strong{font-size:10px}#rb-parade .controlrow .zoom{margin-left:0}#rb-parade .stage{aspect-ratio:4\/3}#rb-parade .saved-grid{grid-template-columns:1fr 1fr}#rb-parade .theater{inset:5px}}\n@media(max-width:460px){#rb-parade .stagebar strong{width:100%}#rb-parade .scenegrid{grid-template-columns:repeat(2,1fr)}#rb-parade .scene img{height:65px}#rb-parade .formations{grid-template-columns:repeat(4,1fr)}#rb-parade .saved-grid{grid-template-columns:1fr}#rb-parade .roster-actions .remove{font-size:0;width:30px}#rb-parade .roster-actions .remove:after{content:'\u00d7';font-size:18px}#rb-parade .box{padding:13px}}\n@media(prefers-reduced-motion:reduce){#rb-parade *{scroll-behavior:auto;transition:none!important}}\nbody.page-id-890 #wp-chatbot-chat-container{display:none!important}body.page-id-890 .trp-floating-switcher{position:static!important;display:block!important;margin:16px auto!important;max-width:220px!important;inset:auto!important}#rb-parade .stage-shell.theater,#rb-parade .stage-shell:fullscreen{max-width:none}\n<\/style>\n<header class=\"intro\">\n<div>\n<div class=\"eyebrow\">RETIRED BRICKS \u00b7 REPUBLIC PARADE GROUND<\/div>\n<h1>Clone Army Builder<\/h1>\n<pee>Choose your troops, form your ranks and build an army worth displaying.<\/pee><\/div>\n<p><a href=\"\/en\/product-category\/star-wars\/\">Explore Star Wars \u2192<\/a><\/header>\n<div class=\"headstrip\">\n<div class=\"namefield\"><label for=\"rp-name\">Battalion name<\/label><input id=\"rp-name\" maxlength=\"48\" value=\"My Grand Army\"><\/div>\n<div class=\"metric\"><strong id=\"rp-count\">0<\/strong><small>Troops<\/small><\/div>\n<div class=\"metric\"><strong id=\"rp-types\">0<\/strong><small>Unit types<\/small><\/div>\n<div class=\"capacity\"><span id=\"rp-space\">60 spaces available<\/span><progress id=\"rp-progress\" max=\"60\" value=\"0\" aria-label=\"Army capacity\"><\/progress><\/div>\n<\/div>\n<div class=\"workspace\"><main class=\"display\"><\/p>\n<div class=\"stage-shell\" id=\"rp-shell\">\n<div class=\"stagebar\"><strong>REPUBLIC DISPLAY PLATFORM<\/strong><button id=\"rp-full\" aria-pressed=\"false\">\u26f6 Fullscreen<\/button><button id=\"rp-reset-view\">Reset view<\/button><\/div>\n<div class=\"stage\" id=\"rp-stage\"><canvas id=\"rp-canvas\" aria-hidden=\"true\"><\/canvas><\/p>\n<div class=\"troops\" id=\"rp-field\" aria-label=\"Army formation\"><\/div>\n<div id=\"rp-stage-note\" class=\"stage-note\">Preparing the parade ground\u2026<\/div>\n<\/div>\n<div class=\"controlrow\"><button id=\"rp-parade\" class=\"primary\" disabled>\u25b6 Start parade<\/button><label class=\"speed\">Speed <select id=\"rp-speed\"><option value=\".7\">Slow<\/option><option value=\"1\" selected>Normal<\/option><option value=\"1.4\">Brisk<\/option><\/select><\/label><label class=\"zoom\">Figure scale <input id=\"rp-zoom\" type=\"range\" min=\"85\" max=\"115\" value=\"100\" aria-label=\"Figure scale\"><span id=\"rp-zoom-value\">100%<\/span><\/label><label class=\"toggle\"><input id=\"rp-motion\" type=\"checkbox\">Reduce motion<\/label><label class=\"toggle\"><input id=\"rp-audio\" type=\"checkbox\">Sound<\/label><\/div>\n<\/div>\n<div id=\"rp-detail\" class=\"box detail\" aria-live=\"polite\">\n<div class=\"placeholder\">Select a troop on the platform to inspect, replace or remove it.<\/div>\n<\/div>\n<div class=\"config\">\n<section class=\"box\">\n<div class=\"section-label\">\n<h2>Choose a location<\/h2>\n<p><small id=\"rp-scene-label\">Republic hangar<\/small><\/div>\n<div id=\"rp-scenes\" class=\"scenegrid\"><\/div>\n<\/section>\n<section class=\"box\">\n<div class=\"section-label\">\n<h2>Choose a formation<\/h2>\n<\/div>\n<div id=\"rp-formations\" class=\"formations\"><\/div>\n<\/section>\n<\/div>\n<section class=\"box roster\">\n<div class=\"section-label\">\n<h2>Your army roster<\/h2>\n<div><button id=\"rp-undo\" disabled>Undo<\/button> <button id=\"rp-clear\" disabled>Clear army<\/button><\/div>\n<\/div>\n<div id=\"rp-roster\"><pee class=\"hint\">Recruit your first troops to start your roster.<\/pee><\/div>\n<\/section>\n<p><\/main><\/p>\n<aside class=\"recruitment\">\n<details class=\"box\" open style=\"margin-top:0\">\n<summary>Recruit your troops<\/summary>\n<div class=\"detailbody\"><pee class=\"hint\">Select a unit, then choose how many to recruit.<\/pee>\n<div class=\"unitcards\" id=\"rp-units\"><\/div>\n<div class=\"recruit-row\"><label for=\"rp-qty\">Qty<\/label><input type=\"number\" id=\"rp-qty\" min=\"1\" max=\"60\" value=\"1\"><button id=\"rp-recruit\" class=\"primary\" disabled>Recruit troops<\/button><\/div>\n<div class=\"quick\"><button id=\"rp-five\" disabled>+ 5<\/button><button id=\"rp-ten\" disabled>+ 10<\/button><button id=\"rp-fill\" disabled>Fill army<\/button><\/div>\n<pee class=\"hint\" id=\"rp-chosen\">Selected: 501st Legion \u00b7 Phase II<\/pee><button id=\"rp-retry\" hidden>Retry figure images<\/button><pee class=\"hint\">Virtual troops build your display. Buying options appear below.<\/pee><\/div>\n<\/details>\n<pee id=\"rp-status\" class=\"notice\" role=\"status\" aria-live=\"polite\">Loading figure photos\u2026<\/pee><\/aside>\n<\/div>\n<div class=\"bottomgrid\">\n<details class=\"box\" open>\n<summary>Saved armies &amp; downloads<\/summary>\n<div class=\"detailbody\">\n<div class=\"archive-tools\"><button id=\"rp-save\" class=\"primary\">Save new army<\/button><button id=\"rp-update\" disabled>Update loaded army<\/button><button id=\"rp-export\">Export squad<\/button><\/div>\n<div id=\"rp-saves\" class=\"saved-grid\"><\/div>\n<div class=\"exporttools\"><button id=\"rp-picture\">Download army picture<\/button><label class=\"toggle\"><input id=\"rp-clean\" type=\"checkbox\">Clean picture (small signature only)<\/label><\/div>\n<p><label for=\"rp-import\">Restore an exported squad<\/label><input class=\"upload\" id=\"rp-import\" type=\"file\" accept=\".json,application\/json\"><pee class=\"hint\">Saved armies stay in this browser. Export a squad to move it to another device.<\/pee><\/div>\n<\/details>\n<details class=\"box\" open>\n<summary>Shop your selected unit<\/summary>\n<div class=\"detailbody\"><pee class=\"hint\" id=\"rp-shop-title\">Current listings for 501st Legion<\/pee>\n<div id=\"rp-shop\" aria-live=\"polite\">Checking current stock\u2026<\/div>\n<pee class=\"hint\">Each listing states whether you are buying an individual figure or a complete set. Virtual army quantities do not reserve stock.<\/pee><\/div>\n<\/details>\n<\/div>\n<footer class=\"footnote\">Minifigure reference photos: <a href=\"https:\/\/www.bricklink.com\" target=\"_blank\" rel=\"noopener\">BrickLink catalogue<\/a>. Sourced scenery: <a href=\"https:\/\/wall.alphacoders.com\/big.php?i=1123938\" target=\"_blank\" rel=\"noopener\">Kamino<\/a> \u00b7 <a href=\"https:\/\/wallpapersafari.com\/w\/syUepM\" target=\"_blank\" rel=\"noopener\">Coruscant<\/a> \u00b7 <a href=\"https:\/\/www.belloflostsouls.net\/2021\/03\/star-wars-stunning-concept-art-of-the-prequel-trilogy.html\" target=\"_blank\" rel=\"noopener\">Geonosis \/ Ryan Church<\/a> \u00b7 <a href=\"https:\/\/www.pinterest.com\/pin\/the-republic-hanger-star-wars-concept-art--415105290624471025\/\" target=\"_blank\" rel=\"noopener\">Republic hangar<\/a>. An independent collector tool; not affiliated with the LEGO Group or Lucasfilm.<\/footer>\n<p><script>function geometry(n,mode,w,h,zoom=100){\nif(!n)return [];\nconst coords=[],maxCols=mode==='line'?Math.min(12,n):mode==='column'?Math.min(3,n):mode==='square'?Math.ceil(Math.sqrt(n)):Math.min(10,n<=8?n:Math.ceil(Math.sqrt(n*1.7)));\nif(mode==='wedge'||mode==='vanguard'){let row=0,start=0;const rows=Math.ceil((Math.sqrt(8*n+1)-1)\/2);for(let i=0;i<n;i++){while(start+row+1<=i){start+=row+1;row++}const span=mode==='vanguard'?.058:.066;coords.push({x:.5+((i-start)-row\/2)*span,y:rows===1?.84:.54+row*.35\/Math.max(1,rows-1)})}}\nelse if(mode==='circle'){for(let i=0;i<n;i++){const ring=Math.floor(i\/20),count=Math.min(20,n-ring*20),angle=(i%20)*Math.PI*2\/count;coords.push({x:.5+Math.cos(angle)*(.28-ring*.075),y:.745+Math.sin(angle)*(.145-ring*.039)})}}\nelse if(mode==='flank'){for(let i=0;i<n;i++){const side=i%2,index=Math.floor(i\/2),half=Math.ceil(n\/2),cols=Math.min(4,Math.ceil(Math.sqrt(half))),rows=Math.ceil(half\/cols);coords.push({x:(side?.65:.35)+((index%cols)-(cols-1)\/2)*.057,y:rows===1?.83:.61+Math.floor(index\/cols)*.27\/Math.max(1,rows-1)})}}\nelse{const cols=maxCols,rows=Math.ceil(n\/cols);for(let i=0;i<n;i++){const row=Math.floor(i\/cols),count=Math.min(cols,n-row*cols),span=Math.min(.078,.76\/Math.max(1,cols-1));coords.push({x:.5+((i%cols)-(count-1)\/2)*span,y:rows===1?.84:Math.max(.54,.89-(rows-1)*.075)+row*Math.min(.075,.35\/Math.max(1,rows-1))})}}\nlet base=Math.min(w*.161,h*.30,w*.16);\nfor(let i=0;i<n;i++)for(let j=0;j<i;j++){const dx=Math.abs(coords[i].x-coords[j].x)*w,dy=Math.abs(coords[i].y-coords[j].y)*h;const spacing=Math.max(dx\/0.68,dy\/0.88);base=Math.min(base,spacing)}\nreturn coords.map((p,i)=>{const depth=Math.max(0,Math.min(1,(p.y-.52)\/.39));const camera=Math.pow(depth,.82),perspective=.55+camera*1.45;const density=Math.min(1,Math.sqrt(32\/Math.max(1,n)));const scale=(zoom\/100)*(2.0+.45*density);const height=Math.min(h*.29,Math.max(w*.022,base*scale*perspective));const spread=1.02+depth*.11;const x=(.5+(p.x-.5)*spread)*w;const y=(.54+((p.y-.53)\/.36)*.40)*h;return {x:Math.max(w*.035,Math.min(w*.965,x)),y:Math.max(h*.53,Math.min(h*.96,y)),height,width:height*.68,z:Math.round(p.y*1000),i}});\n}\n(function(){function init(){\nconst root=document.getElementById('rb-parade');if(!root||root.dataset.ready)return;root.dataset.ready='1';\nconst $=id=>root.querySelector('#rp-'+id),MAX=60,key='retiredBricksArmyV2',archiveKey='retiredBricksArmyArchivesV2';\nconst photos={\"501st Trooper\":{\"id\":\"sw1094\",\"url\":\"https:\/\/retired-bricks.co.uk\/wp-content\/uploads\/2026\/10\/501st-Legion-Clone-Trooper-sw1094-\u2014-BrickLink-catalogue.png\"},\"212th Trooper\":{\"id\":\"sw1235\",\"url\":\"https:\/\/retired-bricks.co.uk\/wp-content\/uploads\/2026\/10\/212th-Trooper-sw1235-BrickLink-catalogue.png\"},\"Shock Trooper\":{\"id\":\"sw1305\",\"url\":\"https:\/\/retired-bricks.co.uk\/wp-content\/uploads\/2026\/10\/Shock-Trooper-sw1305-BrickLink-catalogue.png\"},\"332nd Trooper\":{\"id\":\"sw1278\",\"url\":\"https:\/\/retired-bricks.co.uk\/wp-content\/uploads\/2026\/10\/332nd-Trooper-sw1278-BrickLink-catalogue.png\"},\"Clone Commander\":{\"id\":\"sw1146\",\"url\":\"https:\/\/retired-bricks.co.uk\/wp-content\/uploads\/2026\/10\/Clone-Commander-sw1146-BrickLink-catalogue.png\"},\"Battle Droid\":{\"id\":\"sw0001c\",\"url\":\"https:\/\/retired-bricks.co.uk\/wp-content\/uploads\/2026\/10\/Battle-Droid-sw0001c-BrickLink-catalogue.png\"}};const backgrounds={\"kamino\":\"https:\/\/retired-bricks.co.uk\/wp-content\/uploads\/2026\/10\/Kamino-storm-platforms-sourced-backdrop.png\",\"geonosis\":\"https:\/\/retired-bricks.co.uk\/wp-content\/uploads\/2026\/10\/Geonosis-arena-Ryan-Church-concept-artwork.jpg\",\"coruscant\":\"https:\/\/retired-bricks.co.uk\/wp-content\/uploads\/2026\/10\/Coruscant-skyline-sourced-backdrop.jpg\",\"hangar\":\"https:\/\/retired-bricks.co.uk\/wp-content\/uploads\/2026\/10\/Republic-hangar-sourced-concept-backdrop.jpg\"};const cutouts=new Map();\nfunction cutout(name){if(cutouts.has(name))return cutouts.get(name);const task=new Promise((resolve,reject)=>{const original=new Image();original.onload=()=>{try{const w=original.naturalWidth,h=original.naturalHeight,c=document.createElement('canvas');c.width=w;c.height=h;const ctx=c.getContext('2d',{willReadFrequently:true});ctx.drawImage(original,0,0);const frame=ctx.getImageData(0,0,w,h),d=frame.data,N=w*h,outside=new Uint8Array(N),queue=new Int32Array(N);let head=0,tail=0;const white=i=>d[i*4+3]<15||(d[i*4]>(name==='Shock Trooper'?200:name==='332nd Trooper'?211:236)&&d[i*4+1]>(name==='Shock Trooper'?200:name==='332nd Trooper'?211:236)&&d[i*4+2]>(name==='Shock Trooper'?200:name==='332nd Trooper'?211:236)&&Math.max(d[i*4],d[i*4+1],d[i*4+2])-Math.min(d[i*4],d[i*4+1],d[i*4+2])<24);const add=i=>{if(!outside[i]&&white(i)){outside[i]=1;queue[tail++]=i}};for(let x=0;x<w;x++){add(x);add((h-1)*w+x)}for(let y=0;y<h;y++){add(y*w);add(y*w+w-1)}while(head<tail){const i=queue[head++],x=i%w;if(x)add(i-1);if(x<w-1)add(i+1);if(i>=w)add(i-w);if(i<N-w)add(i+w)}\nif(name==='Shock Trooper'||name==='332nd Trooper'){for(let y=Math.floor(h*.78);y<h;y++)for(let x=Math.floor(w*.72);x<w;x++)outside[y*w+x]=1}const seen=new Uint8Array(N);let best=[];for(let start=0;start<N;start++){if(outside[start]||seen[start])continue;head=0;tail=1;queue[0]=start;seen[start]=1;while(head<tail){const i=queue[head++],x=i%w;const visit=j=>{if(!outside[j]&&!seen[j]){seen[j]=1;queue[tail++]=j}};if(x)visit(i-1);if(x<w-1)visit(i+1);if(i>=w)visit(i-w);if(i<N-w)visit(i+w)}let sx=0,sy=0;for(let k=0;k<tail;k++){sx+=queue[k]%w;sy+=Math.floor(queue[k]\/w)}const mx=sx\/tail\/w,my=sy\/tail\/h;if(tail>12&&(my>.23||(mx>.25&&mx<.72)))best.push(...Array.from(queue.subarray(0,tail)))}\nif(!best.length)throw Error('No figure silhouette');const keep=new Uint8Array(N);let left=w,right=0,top=h,bottom=0;for(const i of best){keep[i]=1;const x=i%w,y=Math.floor(i\/w);left=Math.min(left,x);right=Math.max(right,x);top=Math.min(top,y);bottom=Math.max(bottom,y)}for(let i=0;i<N;i++)if(!keep[i])d[i*4+3]=0;ctx.putImageData(frame,0,0);const trimmed=document.createElement('canvas');trimmed.width=right-left+5;trimmed.height=bottom-top+5;trimmed.getContext('2d').drawImage(c,left,top,right-left+1,bottom-top+1,2,2,right-left+1,bottom-top+1);const result=new Image();result.onload=()=>resolve(result);result.onerror=reject;result.src=trimmed.toDataURL('image\/png')}catch(error){reject(error)}};original.onerror=reject;original.src=photos[name].url});cutouts.set(name,task);return task}\nconst unitInfo={\n'501st Trooper':{label:'501st Legion',phase:'Phase II',term:'501st',color:'#3986e3'},\n'212th Trooper':{label:'212th Battalion',phase:'Phase II',term:'212th',color:'#eca94a'},\n'Shock Trooper':{label:'Coruscant Guard',phase:'Phase II',term:'shock trooper',color:'#d95b59'},\n'332nd Trooper':{label:'332nd Company',phase:'Phase II',term:'332nd',color:'#e98d4d'},\n'Clone Commander':{label:'Clone Commander',phase:'Phase I',term:'clone commander',color:'#d5b345'},\n'Battle Droid':{label:'Battle Droid',phase:'B1 Separatist',term:'battle droid',color:'#b4a277'}};\nconst scenes={kamino:'Kamino',coruscant:'Coruscant',geonosis:'Geonosis',hangar:'Republic hangar'};\nconst forms={ranks:'Battle ranks',line:'Defensive line',column:'Column',wedge:'Assault wedge',circle:'Defensive ring',flank:'Flanking wings',square:'Command square',vanguard:'Vanguard'};\nlet army=[],scene='hangar',mode='ranks',chosen='501st Trooper',selected=-1,archives=[],activeArchive=-1,history=[],zoom=100,marching=false,speed=1,raf=0,assetsBusy=true,shopController,shopToken=0,audio;\nconst figures=new Map(),scenery=new Map(),loadingScenes=new Map();\nconst status=t=>$('status').textContent=t;\nconst button=(text,fn,cls)=>{const b=document.createElement('button');b.type='button';b.textContent=text;if(cls)b.className=cls;b.onclick=fn;return b};\nconst label=(parent,text)=>{const s=document.createElement('small');s.textContent=text;parent.append(s);return s};\nconst snapshot=()=>({name:$('name').value.trim()||'My Grand Army',scene,formation:mode,army:army.slice(),zoom});\nfunction normalise(a,strict=false){if(!a||!Array.isArray(a.army)||typeof a.name!=='string'||a.name.length>48||a.army.length>MAX||!a.army.every(n=>Object.hasOwn(unitInfo,n)))return null;if(strict&&(!Object.hasOwn(scenes,a.scene)||!Object.hasOwn(forms,a.formation)))return null;return {name:a.name||'My Grand Army',scene:Object.hasOwn(scenes,a.scene)?a.scene:'hangar',formation:Object.hasOwn(forms,a.formation)?a.formation:'ranks',army:a.army.slice(),zoom:Number.isFinite(a.zoom)?Math.max(85,Math.min(115,a.zoom)):100}}\nfunction persist(){try{localStorage.setItem(key,JSON.stringify(snapshot()))}catch(e){status('Browser storage is unavailable. Export your squad to keep it.')}}\nfunction storeArchives(){try{localStorage.setItem(archiveKey,JSON.stringify(archives));return true}catch(e){status('Unable to save here. Export your squad instead.');return false}}\nfunction checkpoint(){history.push(snapshot());if(history.length>35)history.shift()}\nfunction load(a){army=a.army.slice();scene=a.scene;mode=a.formation;zoom=a.zoom||100;$('name').value=a.name;selected=-1;stop();render();loadScene(scene)}\ntry{const saved=normalise(JSON.parse(localStorage.getItem(key)||'null'));if(saved){army=saved.army;scene=saved.scene;mode=saved.formation;zoom=saved.zoom;$('name').value=saved.name}else{const old=JSON.parse(localStorage.getItem('retiredBricksArmyDraft')||'[]');if(Array.isArray(old))army=old.filter(n=>Object.hasOwn(unitInfo,n)).slice(0,MAX)}}catch(e){}\ntry{const saved=JSON.parse(localStorage.getItem(archiveKey)||'[]');if(Array.isArray(saved))archives=saved.map(a=>normalise(a)).filter(Boolean).slice(0,8)}catch(e){}\nfunction reduced(){return $('motion').checked||matchMedia('(prefers-reduced-motion:reduce)').matches}\nfunction stop(){marching=false;cancelAnimationFrame(raf);raf=0;$('parade').textContent='\u25b6 Start parade';$('parade').setAttribute('aria-pressed','false');paint()}\nfunction sound(){if(!$('audio').checked)return;try{audio=audio||new(window.AudioContext||window.webkitAudioContext)();audio.resume();const o=audio.createOscillator(),g=audio.createGain(),t=audio.currentTime;o.type='triangle';o.frequency.setValueAtTime(220,t);o.frequency.exponentialRampToValueAtTime(150,t+.15);g.gain.setValueAtTime(.035,t);g.gain.exponentialRampToValueAtTime(.001,t+.18);o.connect(g);g.connect(audio.destination);o.start();o.stop(t+.2)}catch(e){}}\nfunction loadImage(url){return new Promise((resolve,reject)=>{const image=new Image();image.onload=()=>resolve(image);image.onerror=reject;image.src=url})}\nfunction loadScene(s){if(scenery.has(s)){paint();return Promise.resolve(scenery.get(s))}if(loadingScenes.has(s))return loadingScenes.get(s);const task=loadImage(backgrounds[s]).then(img=>{scenery.set(s,img);loadingScenes.delete(s);paint();return img}).catch(()=>{loadingScenes.delete(s);status('This scene could not load. Choose another location or retry.');$('retry').hidden=false;paint();return null});loadingScenes.set(s,task);paint();return task}\nfunction photograph(img,name){img.hidden=true;cutout(name).then(source=>{img.src=source.src;img.hidden=false}).catch(()=>{img.alt='Image unavailable';img.hidden=false})}\nasync function prepareFigures(){assetsBusy=true;$('retry').hidden=true;status('Preparing accurate figure cutouts\u2026');syncRecruit();const outcomes=await Promise.allSettled(Object.keys(unitInfo).map(async name=>{const image=await cutout(name);figures.set(name,image)}));assetsBusy=false;const failures=outcomes.filter(o=>o.status==='rejected').length;$('retry').hidden=!failures;status(failures?'Some photos could not load. Retry images to restore those troops.':'Ready. Choose a unit and recruit your troops.');syncRecruit();paint()}\nfunction syncRecruit(){const unavailable=!figures.has(chosen)||assetsBusy;for(const id of ['recruit','five','ten','fill'])$(id).disabled=unavailable||army.length>=MAX;$('parade').disabled=!army.length||assetsBusy||reduced();$('clear').disabled=!army.length;$('picture').disabled=!army.length||assetsBusy;$('undo').disabled=!history.length;$('update').disabled=activeArchive<0;$('chosen').textContent='Selected: '+unitInfo[chosen].label+' \u00b7 '+unitInfo[chosen].phase;$('units').querySelectorAll('button').forEach(b=>b.setAttribute('aria-pressed',String(b.dataset.unit===chosen)))}\nfunction choose(name){chosen=name;syncRecruit();showDetail();shop(name)}\nfunction recruit(n){if(assetsBusy)return;if(!Number.isInteger(n)||n<1||n>MAX){status('Choose a quantity from 1 to 60.');return}if(!figures.has(chosen)){status('This unit photo is unavailable. Retry images first.');return}const count=Math.min(n,MAX-army.length);if(!count){status('The army is full. Remove troops to make space.');return}checkpoint();army.push(...Array(count).fill(chosen));selected=-1;stop();render();sound();status('Recruited '+count+' '+unitInfo[chosen].label+' troop'+(count===1?'':'s')+'. '+(MAX-army.length)+' spaces remain.')}\nfunction removeSelected(){if(selected<0)return;checkpoint();army.splice(selected,1);selected=-1;stop();render();status('Troop removed. Use Undo to restore it.')}\nfunction showDetail(){const box=$('detail');box.replaceChildren();if(selected<0||selected>=army.length){const p=document.createElement('div');p.className='placeholder';p.textContent='Select a troop on the platform to inspect, replace or remove it.';box.append(p);return}\nconst name=army[selected],info=unitInfo[name],img=document.createElement('img');img.alt=info.label+' '+photos[name].id;photograph(img,name);box.append(img);const desc=document.createElement('div'),title=document.createElement('strong');title.textContent=info.label+' \u00b7 Troop '+(selected+1);desc.append(title);label(desc,info.phase+' \u00b7 '+photos[name].id);const a=document.createElement('a');a.href='https:\/\/www.bricklink.com\/v2\/catalog\/catalogitem.page?M='+photos[name].id;a.target='_blank';a.rel='noopener';a.textContent='Figure reference \u2197';a.style.fontSize='11px';desc.append(a);box.append(desc);const actions=document.createElement('div');actions.className='actions';const replacement=button('Replace with '+unitInfo[chosen].label,()=>{if(!figures.has(chosen))return;checkpoint();army[selected]=chosen;stop();render();shop(chosen);status('Selected troop replaced.')});replacement.disabled=name===chosen||!figures.has(chosen);actions.append(replacement,button('Remove',removeSelected),button('Close',()=>{selected=-1;showDetail();paint();updateHits()}));box.append(actions)}\nfunction roster(){const box=$('roster');box.replaceChildren();const tally={};army.forEach(n=>tally[n]=(tally[n]||0)+1);if(!army.length){const p=document.createElement('p');p.className='hint';p.textContent='Recruit your first troops to start your roster.';box.append(p);return}Object.keys(tally).forEach(name=>{const row=document.createElement('div');row.className='roster-line';const image=document.createElement('img');image.alt='';photograph(image,name);row.append(image);const info=document.createElement('div'),strong=document.createElement('strong');strong.textContent=unitInfo[name].label;info.append(strong);label(info,unitInfo[name].phase+' \u00b7 '+photos[name].id);row.append(info);const controls=document.createElement('div');controls.className='roster-actions';const minus=button('\u2212',()=>{checkpoint();army.splice(army.lastIndexOf(name),1);selected=-1;stop();render()});minus.setAttribute('aria-label','Remove one '+unitInfo[name].label);const qty=document.createElement('strong');qty.textContent=tally[name];const plus=button('+',()=>{if(army.length>=MAX||!figures.has(name))return;checkpoint();army.push(name);selected=-1;stop();render()});plus.disabled=army.length>=MAX||!figures.has(name);plus.setAttribute('aria-label','Add one '+unitInfo[name].label);const remove=button('Remove all',()=>{checkpoint();army=army.filter(n=>n!==name);selected=-1;stop();render();status('Removed all '+unitInfo[name].label+' troops.')},'remove');remove.setAttribute('aria-label','Remove all '+unitInfo[name].label);controls.append(minus,qty,plus,remove);row.append(controls);box.append(row)})}\nfunction updateHits(){const field=$('field'),r=$('stage').getBoundingClientRect(),p=geometry(army.length,mode,r.width,r.height,zoom);field.replaceChildren();army.forEach((name,i)=>{const g=p[i],b=button('',()=>{selected=i;showDetail();paint();$('field').querySelectorAll('button').forEach((el,j)=>el.setAttribute('aria-pressed',String(j===selected)));shop(name)},'troop-hit');b.setAttribute('aria-label',unitInfo[name].label+' troop '+(i+1)+': inspect');b.setAttribute('aria-pressed',String(selected===i));b.style.cssText='left:'+(g.x-g.width\/2)+'px;top:'+(g.y-g.height)+'px;width:'+g.width+'px;height:'+g.height+'px;z-index:'+g.z;field.append(b)})}\nfunction render(){const n=army.length;$('count').textContent=n;$('types').textContent=new Set(army).size;$('space').textContent=(MAX-n)+' spaces available';$('progress').value=n;$('zoom').value=zoom;$('zoom-value').textContent=zoom+'%';$('scene-label').textContent=scenes[scene];$('scenes').querySelectorAll('button').forEach(b=>b.setAttribute('aria-pressed',String(b.dataset.scene===scene)));$('formations').querySelectorAll('button').forEach(b=>b.setAttribute('aria-pressed',String(b.dataset.formation===mode)));syncRecruit();roster();showDetail();updateHits();paint();persist()}\nfunction draw(ctx,w,h,time=0,clean=false){\nctx.clearRect(0,0,w,h);ctx.fillStyle='#091726';ctx.fillRect(0,0,w,h);const bg=scenery.get(scene);\nif(bg){const crop=scene==='coruscant'?1.12:scene==='geonosis'?1.08:1.02,scale=Math.max(w\/bg.naturalWidth,h\/bg.naturalHeight)*crop;const bw=bg.naturalWidth*scale,bh=bg.naturalHeight*scale;const x=(w-bw)\/2,y=(h-bh)*(scene==='hangar'?.33:.45);ctx.save();ctx.filter='blur('+Math.max(.25,w\/2200)+'px)';ctx.drawImage(bg,x,y,bw,bh);ctx.restore()}\nif(time&&!reduced()){ctx.save();ctx.globalCompositeOperation='screen';const drift=Math.sin(time*.00027)*w*.10;const light=ctx.createRadialGradient(w*.53+drift,h*.36,0,w*.53+drift,h*.36,w*.47);light.addColorStop(0,'rgba(173,198,223,.085)');light.addColorStop(.55,'rgba(119,153,195,.035)');light.addColorStop(1,'rgba(119,153,195,0)');ctx.fillStyle=light;ctx.fillRect(0,0,w,h);ctx.restore()}const veil=ctx.createLinearGradient(0,0,0,h);veil.addColorStop(0,'rgba(4,13,24,.30)');veil.addColorStop(.46,'rgba(4,13,24,.35)');veil.addColorStop(1,'rgba(4,13,24,.66)');ctx.fillStyle=veil;ctx.fillRect(0,0,w,h);\nconst floor=ctx.createLinearGradient(0,h*.52,0,h);floor.addColorStop(0,'rgba(44,51,60,.45)');floor.addColorStop(.10,'rgba(44,51,60,.85)');floor.addColorStop(.60,'rgba(32,39,49,.97)');floor.addColorStop(1,'rgba(16,23,33,1)');ctx.fillStyle=floor;ctx.fillRect(0,h*.52,w,h*.48);const horizon=ctx.createLinearGradient(0,h*.48,0,h*.62);horizon.addColorStop(0,'rgba(188,199,209,0)');horizon.addColorStop(.52,'rgba(188,199,209,.11)');horizon.addColorStop(1,'rgba(188,199,209,0)');ctx.fillStyle=horizon;ctx.fillRect(0,h*.48,w,h*.14);\nconst runway=ctx.createLinearGradient(0,h*.49,0,h);runway.addColorStop(0,'rgba(255,220,153,.025)');runway.addColorStop(.65,'rgba(255,211,144,.07)');runway.addColorStop(1,'rgba(255,206,129,.13)');ctx.fillStyle=runway;ctx.fillRect(0,h*.49,w,h*.51);ctx.strokeStyle='rgba(191,207,218,.16)';ctx.lineWidth=Math.max(.6,w\/1000);for(let x=-w;x<=w*2;x+=w\/7){ctx.beginPath();ctx.moveTo(w*.5+(x-w*.5)*.16,h*.49);ctx.lineTo(x,h);ctx.stroke()}for(const y of [.53,.60,.70,.83,.98]){ctx.beginPath();ctx.moveTo(0,h*y);ctx.lineTo(w,h*y);ctx.stroke()}ctx.strokeStyle='rgba(223,189,123,.32)';ctx.beginPath();ctx.moveTo(w*.08,h*.94);ctx.lineTo(w*.92,h*.94);ctx.stroke();\nctx.save();ctx.globalAlpha=.35;const shine=ctx.createLinearGradient(0,h*.50,w,h);shine.addColorStop(0,'rgba(255,211,147,0)');shine.addColorStop(.65,'rgba(255,210,145,.10)');shine.addColorStop(1,'rgba(255,199,112,.02)');ctx.fillStyle=shine;ctx.beginPath();ctx.moveTo(w*.44,h*.5);ctx.lineTo(w*.62,h*.5);ctx.lineTo(w*.94,h);ctx.lineTo(w*.05,h);ctx.closePath();ctx.fill();ctx.restore();const pos=geometry(army.length,mode,w,h,zoom);pos.slice().sort((a,b)=>a.z-b.z).forEach(g=>{const name=army[g.i],image=figures.get(name);ctx.save();const sunlight=Math.max(.15,1-g.y\/h);ctx.save();ctx.translate(g.x,g.y);ctx.transform(1,-.13,-.65,.28,0,0);const shadow=ctx.createRadialGradient(g.height*.26,0,1,g.height*.26,0,g.height*.85);shadow.addColorStop(0,'rgba(0,0,0,.45)');shadow.addColorStop(1,'rgba(0,0,0,0)');ctx.fillStyle=shadow;ctx.beginPath();ctx.ellipse(g.height*.26,0,g.height*.85,Math.max(3,g.width*.22),0,0,Math.PI*2);ctx.fill();ctx.restore();ctx.fillStyle='rgba(0,0,0,.40)';ctx.beginPath();ctx.ellipse(g.x,g.y+1,g.width*.39,Math.max(2,g.height*.045),0,0,Math.PI*2);ctx.fill();if(!clean&&g.i===selected){ctx.strokeStyle='#dfbd7b';ctx.lineWidth=2;ctx.beginPath();ctx.ellipse(g.x,g.y+1,g.width*.48,g.height*.07,0,0,Math.PI*2);ctx.stroke()}if(image){const iw=g.height*image.naturalWidth\/image.naturalHeight,sway=marching&&!reduced()?Math.sin(time*.009*speed+g.i%2*Math.PI)*.65:0;ctx.translate(g.x,g.y);ctx.rotate(sway*Math.PI\/180);ctx.drawImage(image,-iw\/2,-g.height,iw,g.height)}else{ctx.fillStyle='#e3c58b';ctx.font=Math.max(8,g.height*.13)+'px Arial';ctx.textAlign='center';ctx.fillText('Loading\u2026',g.x,g.y-g.height*.5)}ctx.restore()});\nif(!clean){ctx.fillStyle='rgba(5,15,27,.66)';ctx.fillRect(w*.025,h*.027,w*.75,h*.105);ctx.textAlign='left';ctx.fillStyle='#dfbd7b';ctx.font='bold '+Math.max(9,w*.012)+'px Arial';ctx.fillText(scenes[scene].toUpperCase()+' \u00b7 '+forms[mode].toUpperCase(),w*.045,h*.065);ctx.fillStyle='#fff';ctx.font='bold '+Math.max(14,w*.024)+'px Arial';ctx.fillText(snapshot().name,w*.045,h*.11,w*.7);ctx.textAlign='right';ctx.fillStyle='#dfbd7b';ctx.font=Math.max(10,w*.015)+'px Arial';ctx.fillText(army.length+' \/ 60',w*.96,h*.08)}\nctx.fillStyle='rgba(235,216,180,.70)';ctx.font=Math.max(8,w*.010)+'px Arial';ctx.textAlign='left';ctx.fillText('RETIRED BRICKS',w*.035,h*.977);ctx.textAlign='right';ctx.fillStyle='rgba(211,224,234,.55)';ctx.font=Math.max(7,w*.008)+'px Arial';ctx.fillText('Figure reference photos: BrickLink',w*.965,h*.977)}\nfunction paint(time=0){const canvas=$('canvas'),r=$('stage').getBoundingClientRect();if(!r.width||!r.height)return;const ratio=Math.min(2,devicePixelRatio||1);if(canvas.width!==Math.round(r.width*ratio)||canvas.height!==Math.round(r.height*ratio)){canvas.width=Math.round(r.width*ratio);canvas.height=Math.round(r.height*ratio)}const ctx=canvas.getContext('2d');ctx.setTransform(ratio,0,0,ratio,0,0);draw(ctx,r.width,r.height,time);const note=$('stage-note');note.hidden=!!army.length&&!assetsBusy&&scenery.has(scene);if(!army.length){note.hidden=false;note.textContent='Your parade ground is ready. Choose a unit and recruit your first troops.'}else if(assetsBusy)note.textContent='Preparing your figure photos\u2026';else if(!scenery.has(scene))note.textContent='Loading location\u2026'}\nfunction frame(t){if(!marching)return;paint(t);raf=requestAnimationFrame(frame)}\nfunction buildControls(){Object.keys(unitInfo).forEach(name=>{const info=unitInfo[name],b=button('',()=>choose(name),'unitcard');b.dataset.unit=name;b.setAttribute('aria-label','Choose '+info.label+' '+info.phase);b.setAttribute('aria-pressed',String(name===chosen));const image=document.createElement('img');image.alt='';photograph(image,name);const title=document.createElement('strong');title.textContent=info.label;b.append(image,title);label(b,info.phase);$('units').append(b)});\nObject.keys(scenes).forEach(s=>{const b=button('',()=>{if(s===scene)return;checkpoint();scene=s;stop();render();loadScene(s)},'scene');b.dataset.scene=s;b.setAttribute('aria-pressed',String(s===scene));b.setAttribute('aria-label','Scene: '+scenes[s]);const image=document.createElement('img');image.src=backgrounds[s];image.alt='';image.loading='lazy';const text=document.createElement('span');text.textContent=scenes[s];b.append(image,text);$('scenes').append(b)});\nObject.keys(forms).forEach(f=>{const b=button('',()=>{if(f===mode)return;checkpoint();mode=f;stop();render()},'formation');b.dataset.formation=f;b.setAttribute('aria-label','Formation: '+forms[f]);b.setAttribute('aria-pressed',String(f===mode));const dots=geometry(10,f,90,55,100).map(p=>'<circle cx=\"'+(p.x\/90*40)+'\" cy=\"'+((p.y\/55-.45)*45)+'\" r=\"1.4\" fill=\"currentColor\"\/>').join('');b.innerHTML='<svg viewBox=\"0 0 40 25\" aria-hidden=\"true\">'+dots+'<\/svg>';const text=document.createElement('span');text.textContent=forms[f];b.append(text);$('formations').append(b)})}\nfunction savedCards(){const box=$('saves');box.replaceChildren();if(!archives.length){const p=document.createElement('p');p.className='hint';p.textContent='No saved armies yet. Save your first battalion here.';box.append(p);return}archives.forEach((a,i)=>{const card=document.createElement('div');card.className='saved-card'+(i===activeArchive?' active':'');const image=document.createElement('img');image.src=backgrounds[a.scene];image.alt='';image.loading='lazy';card.append(image);const info=document.createElement('div');info.className='saved-info';const title=document.createElement('strong');title.textContent=a.name;info.append(title);label(info,a.army.length+' troops \u00b7 '+scenes[a.scene]+' \u00b7 '+forms[a.formation]);const actions=document.createElement('div');actions.className='actions';actions.append(button('Load',()=>{checkpoint();activeArchive=i;load(a);savedCards();status('Loaded '+a.name+'. Use Update loaded army to save edits.')}),button('Rename',()=>{const input=document.createElement('input');input.value=a.name;input.maxLength=48;input.setAttribute('aria-label','Rename '+a.name);info.insertBefore(input,actions);input.focus();const finish=button('Save name',()=>{a.name=input.value.trim()||'Battalion';if(storeArchives())savedCards()});actions.replaceChildren(finish,button('Cancel',savedCards))}),button('Delete',()=>{if(!confirm('Delete saved army \"'+a.name+'\"?'))return;archives.splice(i,1);if(activeArchive===i)activeArchive=-1;else if(activeArchive>i)activeArchive--;if(storeArchives()){savedCards();syncRecruit();status('Saved army deleted.')}}));info.append(actions);card.append(info);box.append(card)})}\nfunction download(blob,name){const url=URL.createObjectURL(blob),a=document.createElement('a');a.href=url;a.download=name;a.click();setTimeout(()=>URL.revokeObjectURL(url),2000)}\nasync function shop(name){if(shopController)shopController.abort();shopController=new AbortController();const token=++shopToken,box=$('shop');$('shop-title').textContent='Current listings for '+unitInfo[name].label;box.textContent='Checking live prices and availability\u2026';try{const response=await fetch('\/wp-json\/wc\/store\/v1\/products?per_page=5&search='+encodeURIComponent(unitInfo[name].term),{credentials:'omit',signal:shopController.signal});if(!response.ok)throw Error();const products=await response.json();if(token!==shopToken)return;box.replaceChildren();if(!products.length){box.append(document.createTextNode('No matching listings currently. '));const a=document.createElement('a');a.href='\/en\/find-my-lego\/';a.textContent='Request this unit \u2192';box.append(a);return}products.forEach(p=>{const item=document.createElement('div');item.className='shop-item';const title=document.createElement('a');title.href=p.permalink;title.textContent=p.name;item.append(title);const isSet=\/battle pack|set\\s*\\(?\\d|753\\d|752\\d\/i.test(p.name),isFigure=\/minifigure|mini.figure|sw\\d{3}\/i.test(p.name);label(item,isSet?'Complete set \/ battle pack':isFigure?'Individual minifigure':'Check listing contents');const amount=Number(p.prices.price)\/Math.pow(10,p.prices.currency_minor_unit),price=p.prices.price?new Intl.NumberFormat('en-GB',{style:'currency',currency:p.prices.currency_code}).format(amount):'Price to be confirmed';label(item,price+' \u00b7 '+(p.is_in_stock?'In stock':'Out of stock'));const link=document.createElement('a');link.className='shop-action';link.href=p.permalink;link.textContent=p.is_in_stock&&p.is_purchasable?'View buying options \u2192':'View listing \u2192';item.append(link);box.append(item)})}catch(e){if(e.name==='AbortError')return;if(token===shopToken){box.textContent='Unable to check current listings. ';const a=document.createElement('a');a.href='\/en\/shop\/';a.textContent='Browse the shop \u2192';box.append(a)}}}\n$('recruit').onclick=()=>recruit(Number($('qty').value));$('five').onclick=()=>recruit(5);$('ten').onclick=()=>recruit(10);$('fill').onclick=()=>recruit(MAX-army.length);\n$('clear').onclick=()=>{if(!army.length||!confirm('Clear this army? You can restore it with Undo.'))return;checkpoint();army=[];selected=-1;stop();render();status('Army cleared. Undo is available.')};\n$('undo').onclick=()=>{if(!history.length)return;load(history.pop());status('Previous army restored.');syncRecruit()};\n$('name').oninput=()=>{paint();persist()};$('zoom').oninput=()=>{zoom=Number($('zoom').value);$('zoom-value').textContent=zoom+'%';updateHits();paint();persist()};\n$('reset-view').onclick=()=>{zoom=100;render();status('Figure scale reset to 100%.')};\n$('speed').onchange=()=>{speed=Number($('speed').value)};\n$('motion').checked=matchMedia('(prefers-reduced-motion:reduce)').matches;\n$('motion').onchange=()=>{if(reduced())stop();syncRecruit();status(reduced()?'Reduced motion enabled. Parade animation is paused.':'Parade animation is available.')};\nmatchMedia('(prefers-reduced-motion:reduce)').addEventListener('change',()=>{if(reduced())stop();syncRecruit()});\n$('parade').onclick=()=>{if(!army.length||reduced())return;if(marching){stop();status('Parade paused.')}else{marching=true;$('parade').textContent='\u2161 Pause parade';$('parade').setAttribute('aria-pressed','true');sound();raf=requestAnimationFrame(frame);status('Parade marching in place. Adjust the speed or press Pause.')}};\n$('retry').onclick=()=>{for(const name of Object.keys(unitInfo))if(!figures.has(name))cutouts.delete(name);prepareFigures().then(()=>{root.querySelectorAll('.unitcard img').forEach((img,i)=>photograph(img,Object.keys(unitInfo)[i]));render()});loadScene(scene)};\n$('save').onclick=()=>{if(!army.length){status('Recruit troops before saving.');return}if(archives.length>=8){status('Your eight archive slots are full. Update a loaded army or delete one to save another.');return}archives.unshift(snapshot());activeArchive=0;if(storeArchives()){savedCards();syncRecruit();status('New army saved in this browser.')}};\n$('update').onclick=()=>{if(activeArchive<0||!army.length){status('Load a saved army and recruit troops before updating.');return}archives[activeArchive]=snapshot();if(storeArchives()){savedCards();status('Saved army updated.')}};\n$('export').onclick=()=>{download(new Blob([JSON.stringify(snapshot(),null,2)],{type:'application\/json'}),'retired-bricks-clone-army.json');status('Squad exported. Import it to restore this army on another device.')};\n$('import').onchange=async e=>{const file=e.target.files[0];if(!file)return;try{if(file.size>50000)throw Error();const state=normalise(JSON.parse(await file.text()),true);if(!state)throw Error();checkpoint();activeArchive=-1;load(state);savedCards();status('Squad imported. Save new army to add it to your archive.')}catch(e){status('This is not a valid exported squad. Choose an army JSON with up to 60 recognised troops.')}e.target.value=''};\n$('picture').onclick=async()=>{if(!army.length||assetsBusy)return;stop();$('picture').disabled=true;status('Preparing your army picture\u2026');try{await loadScene(scene);if(!scenery.has(scene)||army.some(n=>!figures.has(n)))throw Error();const r=$('stage').getBoundingClientRect(),canvas=document.createElement('canvas');canvas.width=1800;canvas.height=Math.round(1800*r.height\/r.width);draw(canvas.getContext('2d'),canvas.width,canvas.height,0,$('clean').checked);canvas.toBlob(blob=>{if(blob){download(blob,'retired-bricks-army-picture.png');status('Army picture downloaded with the same formation and scenery.')}else status('Unable to prepare the picture.');syncRecruit()},'image\/png')}catch(e){status('A scene or figure image is unavailable. Retry images before downloading.');syncRecruit()}};\nfunction fullState(){const active=document.fullscreenElement===$('shell')||$('shell').classList.contains('theater');$('full').textContent=active?'\u26f6 Exit fullscreen':'\u26f6 Fullscreen';$('full').setAttribute('aria-pressed',String(active));requestAnimationFrame(()=>{updateHits();paint()})}\n$('full').onclick=async()=>{const shell=$('shell');if(document.fullscreenElement===shell){await document.exitFullscreen()}else if(shell.classList.contains('theater')){shell.classList.remove('theater');restoreRoot()}else{try{if(!shell.requestFullscreen)throw Error();await shell.requestFullscreen()}catch(e){root._theaterParent=root.parentNode;root._theaterNext=root.nextSibling;document.body.append(root);root.style.position='relative';root.style.zIndex='2147483647';shell.classList.add('theater')}}fullState()};\nfunction restoreRoot(){if(root._theaterParent){root._theaterParent.insertBefore(root,root._theaterNext&&root._theaterNext.parentNode===root._theaterParent?root._theaterNext:null);delete root._theaterParent;delete root._theaterNext;root.style.position='';root.style.zIndex=''}}document.addEventListener('fullscreenchange',fullState);document.addEventListener('keydown',e=>{if(e.key==='Escape'&&$('shell').classList.contains('theater')){$('shell').classList.remove('theater');restoreRoot();fullState()}});\nnew ResizeObserver(()=>{updateHits();paint()}).observe($('stage'));\nbuildControls();render();savedCards();loadScene(scene);prepareFigures().then(()=>render());shop(chosen);\n}if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',init);else init()})();<\/script><\/div>\n<p>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"nf_dc_page":"","_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":"","om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"class_list":["post-890","page","type-page","status-publish","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"RETIRED BRICKS \u00b7 REPUBLIC PARADE GROUNDClone Army BuilderChoose your troops, form your ranks and build an army worth displaying. Explore Star Wars \u2192Battalion name0Troops0Unit types60 spaces availableREPUBLIC DISPLAY PLATFORM\u26f6 FullscreenReset viewPreparing the parade ground\u2026\u25b6 Start paradeSpeed SlowNormalBriskFigure scale 100%Reduce motionSoundSelect a troop on the platform to inspect, replace or remove it.Choose a locationRepublic hangarChoose a\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/retired-bricks.co.uk\/de\/clone-army-builder\/\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Retired Bricks - Genuine retired and collectible LEGO in the UK\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Clone Army Builder \u2014 Retired Bricks - Retired Bricks\" \/>\n\t\t<meta property=\"og:description\" content=\"RETIRED BRICKS \u00b7 REPUBLIC PARADE GROUNDClone Army BuilderChoose your troops, form your ranks and build an army worth displaying. Explore Star Wars \u2192Battalion name0Troops0Unit types60 spaces availableREPUBLIC DISPLAY PLATFORM\u26f6 FullscreenReset viewPreparing the parade ground\u2026\u25b6 Start paradeSpeed SlowNormalBriskFigure scale 100%Reduce motionSoundSelect a troop on the platform to inspect, replace or remove it.Choose a locationRepublic hangarChoose a\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/retired-bricks.co.uk\/de\/clone-army-builder\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-10-10T11:58:09+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-10-16T12:00:49+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Clone Army Builder \u2014 Retired Bricks - Retired Bricks\" \/>\n\t\t<meta name=\"twitter:description\" content=\"RETIRED BRICKS \u00b7 REPUBLIC PARADE GROUNDClone Army BuilderChoose your troops, form your ranks and build an army worth displaying. Explore Star Wars \u2192Battalion name0Troops0Unit types60 spaces availableREPUBLIC DISPLAY PLATFORM\u26f6 FullscreenReset viewPreparing the parade ground\u2026\u25b6 Start paradeSpeed SlowNormalBriskFigure scale 100%Reduce motionSoundSelect a troop on the platform to inspect, replace or remove it.Choose a locationRepublic hangarChoose a\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/retired-bricks.co.uk\\\/de\\\/clone-army-builder\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/retired-bricks.co.uk\\\/de\\\/#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/retired-bricks.co.uk\\\/de\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/retired-bricks.co.uk\\\/de\\\/clone-army-builder\\\/#listItem\",\"name\":\"Clone Army Builder \\u2014 Retired Bricks\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/retired-bricks.co.uk\\\/de\\\/clone-army-builder\\\/#listItem\",\"position\":2,\"name\":\"Clone Army Builder \\u2014 Retired Bricks\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/retired-bricks.co.uk\\\/de\\\/#listItem\",\"name\":\"Home\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/retired-bricks.co.uk\\\/de\\\/#organization\",\"name\":\"Retired Bricks\",\"description\":\"Genuine retired and collectible LEGO in the UK\",\"url\":\"https:\\\/\\\/retired-bricks.co.uk\\\/de\\\/\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/retired-bricks.co.uk\\\/de\\\/clone-army-builder\\\/#webpage\",\"url\":\"https:\\\/\\\/retired-bricks.co.uk\\\/de\\\/clone-army-builder\\\/\",\"name\":\"Clone Army Builder \\u2014 Retired Bricks - Retired Bricks\",\"description\":\"RETIRED BRICKS \\u00b7 REPUBLIC PARADE GROUNDClone Army BuilderChoose your troops, form your ranks and build an army worth displaying. Explore Star Wars \\u2192Battalion name0Troops0Unit types60 spaces availableREPUBLIC DISPLAY PLATFORM\\u26f6 FullscreenReset viewPreparing the parade ground\\u2026\\u25b6 Start paradeSpeed SlowNormalBriskFigure scale 100%Reduce motionSoundSelect a troop on the platform to inspect, replace or remove it.Choose a locationRepublic hangarChoose a\",\"inLanguage\":\"de-DE\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/retired-bricks.co.uk\\\/de\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/retired-bricks.co.uk\\\/de\\\/clone-army-builder\\\/#breadcrumblist\"},\"datePublished\":\"2026-10-10T12:58:09+01:00\",\"dateModified\":\"2026-10-16T13:00:49+01:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/retired-bricks.co.uk\\\/de\\\/#website\",\"url\":\"https:\\\/\\\/retired-bricks.co.uk\\\/de\\\/\",\"name\":\"Retired Bricks\",\"description\":\"Genuine retired and collectible LEGO in the UK\",\"inLanguage\":\"de-DE\",\"publisher\":{\"@id\":\"https:\\\/\\\/retired-bricks.co.uk\\\/de\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Clone Army Builder \u2014 Retired Bricks - Retired Bricks","description":"RETIRED BRICKS \u00b7 REPUBLIC PARADE GROUNDClone Army BuilderChoose your troops, form your ranks and build an army worth displaying. Explore Star Wars \u2192Battalion name0Troops0Unit types60 spaces availableREPUBLIC DISPLAY PLATFORM\u26f6 FullscreenReset viewPreparing the parade ground\u2026\u25b6 Start paradeSpeed SlowNormalBriskFigure scale 100%Reduce motionSoundSelect a troop on the platform to inspect, replace or remove it.Choose a locationRepublic hangarChoose a","canonical_url":"https:\/\/retired-bricks.co.uk\/de\/clone-army-builder\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BreadcrumbList","@id":"https:\/\/retired-bricks.co.uk\/de\/clone-army-builder\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/retired-bricks.co.uk\/de\/#listItem","position":1,"name":"Home","item":"https:\/\/retired-bricks.co.uk\/de\/","nextItem":{"@type":"ListItem","@id":"https:\/\/retired-bricks.co.uk\/de\/clone-army-builder\/#listItem","name":"Clone Army Builder \u2014 Retired Bricks"}},{"@type":"ListItem","@id":"https:\/\/retired-bricks.co.uk\/de\/clone-army-builder\/#listItem","position":2,"name":"Clone Army Builder \u2014 Retired Bricks","previousItem":{"@type":"ListItem","@id":"https:\/\/retired-bricks.co.uk\/de\/#listItem","name":"Home"}}]},{"@type":"Organization","@id":"https:\/\/retired-bricks.co.uk\/de\/#organization","name":"Retired Bricks","description":"Genuine retired and collectible LEGO in the UK","url":"https:\/\/retired-bricks.co.uk\/de\/"},{"@type":"WebPage","@id":"https:\/\/retired-bricks.co.uk\/de\/clone-army-builder\/#webpage","url":"https:\/\/retired-bricks.co.uk\/de\/clone-army-builder\/","name":"Clone Army Builder \u2014 Retired Bricks - Retired Bricks","description":"RETIRED BRICKS \u00b7 REPUBLIC PARADE GROUNDClone Army BuilderChoose your troops, form your ranks and build an army worth displaying. Explore Star Wars \u2192Battalion name0Troops0Unit types60 spaces availableREPUBLIC DISPLAY PLATFORM\u26f6 FullscreenReset viewPreparing the parade ground\u2026\u25b6 Start paradeSpeed SlowNormalBriskFigure scale 100%Reduce motionSoundSelect a troop on the platform to inspect, replace or remove it.Choose a locationRepublic hangarChoose a","inLanguage":"de-DE","isPartOf":{"@id":"https:\/\/retired-bricks.co.uk\/de\/#website"},"breadcrumb":{"@id":"https:\/\/retired-bricks.co.uk\/de\/clone-army-builder\/#breadcrumblist"},"datePublished":"2026-10-10T12:58:09+01:00","dateModified":"2026-10-16T13:00:49+01:00"},{"@type":"WebSite","@id":"https:\/\/retired-bricks.co.uk\/de\/#website","url":"https:\/\/retired-bricks.co.uk\/de\/","name":"Retired Bricks","description":"Genuine retired and collectible LEGO in the UK","inLanguage":"de-DE","publisher":{"@id":"https:\/\/retired-bricks.co.uk\/de\/#organization"}}]},"og:locale":"de_DE","og:site_name":"Retired Bricks - Genuine retired and collectible LEGO in the UK","og:type":"article","og:title":"Clone Army Builder \u2014 Retired Bricks - Retired Bricks","og:description":"RETIRED BRICKS \u00b7 REPUBLIC PARADE GROUNDClone Army BuilderChoose your troops, form your ranks and build an army worth displaying. Explore Star Wars \u2192Battalion name0Troops0Unit types60 spaces availableREPUBLIC DISPLAY PLATFORM\u26f6 FullscreenReset viewPreparing the parade ground\u2026\u25b6 Start paradeSpeed SlowNormalBriskFigure scale 100%Reduce motionSoundSelect a troop on the platform to inspect, replace or remove it.Choose a locationRepublic hangarChoose a","og:url":"https:\/\/retired-bricks.co.uk\/de\/clone-army-builder\/","article:published_time":"2026-10-10T11:58:09+00:00","article:modified_time":"2026-10-16T12:00:49+00:00","twitter:card":"summary_large_image","twitter:title":"Clone Army Builder \u2014 Retired Bricks - Retired Bricks","twitter:description":"RETIRED BRICKS \u00b7 REPUBLIC PARADE GROUNDClone Army BuilderChoose your troops, form your ranks and build an army worth displaying. Explore Star Wars \u2192Battalion name0Troops0Unit types60 spaces availableREPUBLIC DISPLAY PLATFORM\u26f6 FullscreenReset viewPreparing the parade ground\u2026\u25b6 Start paradeSpeed SlowNormalBriskFigure scale 100%Reduce motionSoundSelect a troop on the platform to inspect, replace or remove it.Choose a locationRepublic hangarChoose a"},"aioseo_meta_data":{"post_id":"890","title":null,"description":null,"keywords":null,"keyphrases":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_custom_url":null,"og_image_custom_fields":null,"og_image_url":null,"og_image_width":null,"og_image_height":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_image_url":null,"twitter_title":null,"twitter_description":null,"schema_type":"default","schema_type_options":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null,"created":"2026-10-10 12:57:29","updated":"2026-10-16 12:07:05"},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/retired-bricks.co.uk\/de\/\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tClone Army Builder \u2014 Retired Bricks\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/retired-bricks.co.uk\/de\/"},{"label":"Clone Army Builder \u2014 Retired Bricks","link":"https:\/\/retired-bricks.co.uk\/de\/clone-army-builder\/"}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/retired-bricks.co.uk\/de\/wp-json\/wp\/v2\/pages\/890","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/retired-bricks.co.uk\/de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/retired-bricks.co.uk\/de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/retired-bricks.co.uk\/de\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/retired-bricks.co.uk\/de\/wp-json\/wp\/v2\/comments?post=890"}],"version-history":[{"count":20,"href":"https:\/\/retired-bricks.co.uk\/de\/wp-json\/wp\/v2\/pages\/890\/revisions"}],"predecessor-version":[{"id":2138,"href":"https:\/\/retired-bricks.co.uk\/de\/wp-json\/wp\/v2\/pages\/890\/revisions\/2138"}],"wp:attachment":[{"href":"https:\/\/retired-bricks.co.uk\/de\/wp-json\/wp\/v2\/media?parent=890"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}