1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4198],{4046:(e,t,a)=>{"use strict";a.d(t,{BotTuningWorkbench:()=>e_});var n=a(4716),i=a(4560),r=a(5433),s=a(6109),l=a(8150),o=a(6115),c=a.n(o);function d(e){let{botView:t,activeSkillIds:a,activeSkillName:i,pressedKeys:r,onWriteGeneratedSettings:s,writeGeneratedPending:o,writeGeneratedMessage:d}=e,{text:u,getRoleLabel:h}=(0,l.Km)(),g=t.controls.filter(e=>"move"===e.tone),m=t.controls.filter(e=>"skill"===e.tone);return(0,n.jsxs)("div",{className:c().controlsCard,children:[(0,n.jsxs)("div",{className:c().statusBar,children:[(0,n.jsxs)("span",{children:[u.statusRole," ",h(t.bot.id)]}),(0,n.jsxs)("span",{children:[u.statusWeight," ",t.performance.totalWeight]}),(0,n.jsxs)("span",{children:[u.statusForward," ",t.performance.moveSpeedForward.toFixed(1)]}),(0,n.jsx)("span",{className:i?c().statusActive:"",children:i?u.previewingSkill(i):u.waitingForSkill})]}),(0,n.jsxs)("div",{className:c().sectionHeader,children:[(0,n.jsx)("div",{children:(0,n.jsx)("h2",{className:c().sectionTitle,children:u.keysTitle})}),(0,n.jsxs)("div",{className:c().tuningActionGroup,children:[(0,n.jsx)("button",{type:"button",className:"".concat(c().rangeToggle," tuning-btn"),onClick:s,disabled:o,children:o?u.writingSettings:u.writeSettings}),d?(0,n.jsx)("p",{className:c().tuningWriteHint,children:d}):(0,n.jsx)("p",{className:c().tuningWriteHint,children:u.writeGeneratedHint})]})]}),(0,n.jsx)("div",{className:c().keyGroup,children:g.map(e=>(0,n.jsxs)("div",{className:"".concat(c().keyCap," ").concat(r[e.code]?c().keyCapPressed:"").trim(),children:[(0,n.jsx)("strong",{children:e.display}),(0,n.jsx)("span",{children:e.label})]},e.id))}),(0,n.jsx)("div",{className:c().keyGroup,children:m.map((e,i)=>{var s,l,o;let d=t.skills[i],h=d?!!r[d.keyCode]:r[e.code],g=a.includes(d.id);return(0,n.jsxs)("div",{className:"".concat(c().keyCap," ").concat(c().skillKeyCap," ").concat(h||g?c().keyCapPressed:"").trim(),children:[(0,n.jsx)("strong",{children:null!=(s=null==d?void 0:d.keyDisplay)?s:e.display}),(0,n.jsx)("span",{children:null!=(l=null==d?void 0:d.slotLabel)?l:e.label}),(0,n.jsx)("em",{children:null!=(o=null==d?void 0:d.name)?o:u.notConfigured})]},e.id)})})]})}let u=e=>Number.isInteger(e)?"".concat(e):e.toFixed(2);function h(e){var t,a,i;let{zones:r,selectedZoneId:s,onSelectZone:o,onChangeZone:d,onChangeOutputPart:h,onAddZone:g,onRemoveZone:m}=e,{text:p,partTypeLabels:f,shapeLabels:x}=(0,l.Km)(),b=null!=(a=null!=(t=r.find(e=>e.id===s))?t:r[0])?a:null;return b?(0,n.jsxs)("div",{className:c().rangeEditor,children:[(0,n.jsxs)("div",{className:c().rangeEditorToolbar,children:[r.map((e,t)=>(0,n.jsx)("button",{type:"button",className:"".concat(c().rangeEditorChip," tuning-btn ").concat(e.id===b.id?c().rangeEditorChipActive:"").trim(),onClick:()=>o(e.id),children:0===t?p.mainZone:p.zone(t)},e.id)),r.length<3?(0,n.jsx)("button",{type:"button",className:"".concat(c().rangeEditorAction," tuning-btn"),onClick:g,children:p.addZone}):null,r.length>1?(0,n.jsx)("button",{type:"button",className:"".concat(c().rangeEditorAction," tuning-btn"),onClick:()=>m(b.id),children:p.deleteZone}):null]}),(0,n.jsxs)("div",{className:c().rangeEditorGrid,children:[(0,n.jsxs)("label",{className:c().rangeEditorField,children:[(0,n.jsx)("span",{children:p.outputPart}),(0,n.jsxs)("select",{value:null!=(i=b.outputPart)?i:"weapon",onChange:e=>h(b.id,e.target.value),children:[(0,n.jsx)("option",{value:"armorLeft",children:f.armorLeft}),(0,n.jsx)("option",{value:"armorRight",children:f.armorRight}),(0,n.jsx)("option",{value:"weapon",children:f.weapon}),(0,n.jsx)("option",{value:"chassis",children:f.chassis})]})]}),(0,n.jsxs)("label",{className:c().rangeEditorField,children:[(0,n.jsx)("span",{children:p.shape}
1),(0,n.jsxs)("select",{value:b.shape,onChange:e=>d(b.id,{shape:e.target.value}),children:[(0,n.jsx)("option",{value:"forwardBox",children:x.forwardBox}),(0,n.jsx)("option",{value:"radial",children:x.radial}),(0,n.jsx)("option",{value:"forwardCone",children:x.forwardCone})]})]}),(0,n.jsxs)("label",{className:c().rangeEditorField,children:[(0,n.jsx)("span",{children:p.reach}),(0,n.jsx)("input",{type:"number",min:"0.3",max:"12",step:"0.1",value:u(b.reach),onChange:e=>d(b.id,{reach:Number(e.target.value)})})]}),"radial"!==b.shape?(0,n.jsxs)("label",{className:c().rangeEditorField,children:[(0,n.jsx)("span",{children:p.width}),(0,n.jsx)("input",{type:"number",min:"0.3",max:"12",step:"0.1",value:u(b.width),onChange:e=>d(b.id,{width:Number(e.target.value)})})]}):null,"forwardCone"===b.shape?(0,n.jsxs)("label",{className:c().rangeEditorField,children:[(0,n.jsx)("span",{children:p.angle}),(0,n.jsx)("input",{type:"number",min:"10",max:"360",step:"1",value:u(b.angleDeg),onChange:e=>d(b.id,{angleDeg:Number(e.target.value)})})]}):null,(0,n.jsxs)("label",{className:c().rangeEditorField,children:[(0,n.jsx)("span",{children:p.offsetX}),(0,n.jsx)("input",{type:"number",min:"-8",max:"8",step:"0.1",value:u(b.offsetX),onChange:e=>d(b.id,{offsetX:Number(e.target.value)})})]}),(0,n.jsxs)("label",{className:c().rangeEditorField,children:[(0,n.jsx)("span",{children:p.offsetZ}),(0,n.jsx)("input",{type:"number",min:"-8",max:"8",step:"0.1",value:u(b.offsetZ),onChange:e=>d(b.id,{offsetZ:Number(e.target.value)})})]})]})]}):null}let g="#ff5454",m=e=>Number.isInteger(e)?"".concat(e):e.toFixed(2),p=e=>{var t;return"forwardCone"!==e.shape?Math.PI:"number"==typeof e.angleDeg?e.angleDeg*Math.PI/180:null!=(t=e.angleRad)?t:Math.PI},f=(e,t,a,n,i)=>{let r=a/2,s=n/2,l=i(e-r,t-s),o=i(e+r,t-s),c=i(e+r,t+s),d=i(e-r,t+s);return"M ".concat(l.x," ").concat(l.y," L ").concat(o.x," ").concat(o.y," L ").concat(c.x," ").concat(c.y," L ").concat(d.x," ").concat(d.y," Z")},x=(e,t)=>{let a=t?.86:1;return{width:e.frame[0]*a,depth:e.frame[2]*a}};function b(e){var t,a,r,s,o,d,u;let{attack:h,skillName:b,scenario:k,editableZones:v,editing:j=!1,selectedZoneId:w=null,onSelectZone:y,onChangeZone:M}=e,{text:_}=(0,l.Km)(),C=(0,i.useId)(),S="".concat(C,"-radial"),I="".concat(C,"-forward"),N=(0,i.useRef)(null),R=(0,i.useRef)(null),[,D]=(0,i.useState)(0);if(!h||!k.resolvedRange)return(0,n.jsxs)("div",{className:c().rangeEmpty,children:[(0,n.jsx)("strong",{children:b}),(0,n.jsx)("span",{children:_.noDirectHitRange})]});let T=k.resolvedRange,P=null!=v?v:T.zones,A=x(k.sourceGeometry,j),W=x(k.targetGeometry,j),{forwardSpan:B,gridSteps:E,originY:H,project:Z,unitsToPixels:L}=((e,t,a,n,i)=>{let r=!a&&"TAICHI"===e.botId&&"overcharge"===e.skillId,s=a?1.8:r?1.6:.8,l=Math.max(.8*n.width,Math.abs(e.targetPosition[0])+.72*i.width,...t.map(e=>Math.abs(e.offsetX)+("radial"===e.shape?e.reach:.7*e.width))),o=Math.max(Math.abs(e.targetPosition[2])+.72*i.depth,.84*n.depth,...t.map(e=>"radial"===e.shape?1.08*Math.max(0,e.reach-e.offsetZ):Math.max(0,e.reach-e.offsetZ))),c=Math.max(.72*n.depth,...t.map(e=>"radial"===e.shape?.44*Math.max(0,e.reach+e.offsetZ):Math.max(0,e.offsetZ))),d=Math.max(o,c)+.6,u=a||r?d:o,h=a||r?d:c,g=Math.min(200/(2*l+s),144/(u+h+s)),m=a?88:160-h*g,p=Math.ceil(Math.max(l,u,h));return{forwardSpan:u,gridSteps:p,originY:m,project:(e,t)=>({x:120+e*g,y:m+t*g}),unitsToPixels:g}})(k,P,j,A,W),G=f(0,0,A.width,A.depth,Z),z=f(k.targetPosition[0],k.targetPosition[2],W.width,W.depth,Z),O=null!=(r=T.zones[0])?r:T,U="2CLAWS"===k.botId&&"quickTurn"===k.skillId||"BLUNT"===k.botId&&"armorUp"===k.skillId,F=[k.targetPosition[0],0,k.targetPosition[2]],X=null!=(o=null!=(s=null==(t=k.hitResolution)?void 0:t.position)?s:null==(a=k.hitCheck)?void 0:a.position)?o:F,q=U?F:X;null!=P.find(e=>e.id===w)||P[0];let K=null!=(u=null!=(d=null==v?void 0:v.find(e=>e.id===w))?d:null==v?void 0:v[0])?u:null,V=Z(0,-(.72*A.depth)),Y=Z(0,-B),J=(0,i.useMemo)(()=>((e,t)=>{if(!e)return null;let a=t(e.offsetX,e.offsetZ),n="radial"===e.shape?t(e.offsetX+e.reach,e.offsetZ):t(e.offsetX,e.offsetZ-e.reach),i="forwardBox"===e.shape?t(e.offsetX+e.width/2,e.offsetZ-e.reach/2):null;return{angleHandle:"forwardCone"===e.shape?t(e.offsetX+Math.sin(p(e)/2)*e.reach,e.offsetZ-Math.cos(p(e)/2)*e.reach):null,center:a,reachHandle:n,widthHandle:i}})(K,Z),[K,Z]),Q=(e,t,a)=>{e.preventDefault(),e.stopPropagation(),R.current={handle:a,zoneId:t}};return(0,n.jsxs)("div",{className:c().rangeDiagram,children:[(0,n.jsxs)("svg",{ref:N,viewBox:"0 0 ".concat(240," ").concat(188),className:c().rangeSvg,role:"img","aria-label":"".concat(b," range preview"),onPointerMove:e=>{R.current&&(e.preventDefault(),(e=>{var t,a,n,i,r,s,l,o;if(!R.current||!K||!M)return;let c=N.current?(t=e.clientX,a=e.clientY,n=N.current.getBoundingClientRect(),i=H,r=L,{x:((t-n.left)/n.width*240-120)
1/r,z:((a-n.top)/n.height*188-i)/r}):null;if(!c)return;let{handle:d,zoneId:u}=R.current,h=(s=K,l=d,o=c,"center"===l?{offsetX:o.x,offsetZ:o.z}:"reach"===l?"radial"===s.shape?{reach:Math.hypot(o.x-s.offsetX,o.z-s.offsetZ)}:{reach:s.offsetZ-o.z}:"width"===l&&"forwardBox"===s.shape?{width:2*Math.abs(o.x-s.offsetX)}:"angle"===l&&"forwardCone"===s.shape?{angleDeg:360*Math.atan2(Math.abs(o.x-s.offsetX),Math.max(1e-4,-(o.z-s.offsetZ)))/Math.PI}:null);h&&M(u,h)})(e))},onPointerUp:()=>{R.current=null,D(e=>e+1)},onPointerLeave:()=>{R.current=null,D(e=>e+1)},children:[(0,n.jsxs)("defs",{children:[(0,n.jsxs)("radialGradient",{id:S,cx:"50%",cy:"56%",r:"64%",children:[(0,n.jsx)("stop",{offset:"0%",stopColor:g,stopOpacity:"0.34"}),(0,n.jsx)("stop",{offset:"52%",stopColor:g,stopOpacity:"0.16"}),(0,n.jsx)("stop",{offset:"100%",stopColor:g,stopOpacity:"0.04"})]}),(0,n.jsxs)("linearGradient",{id:I,x1:"50%",y1:"100%",x2:"50%",y2:"0%",children:[(0,n.jsx)("stop",{offset:"0%",stopColor:g,stopOpacity:"0.22"}),(0,n.jsx)("stop",{offset:"42%",stopColor:g,stopOpacity:"0.16"}),(0,n.jsx)("stop",{offset:"100%",stopColor:g,stopOpacity:"0.04"})]})]}),(0,n.jsx)("g",{className:c().rangeGrid,children:Array.from({length:2*E+1},(e,t)=>{let a=-E+t,i=Z(a,0).x,r=Z(0,-a).y;return(0,n.jsxs)("g",{children:[(0,n.jsx)("line",{x1:i,y1:16,x2:i,y2:160}),(0,n.jsx)("line",{x1:20,y1:r,x2:220,y2:r})]},"grid-".concat(a))})}),P.map((e,t)=>{let a=p(e),i="forwardBox"===e.shape?f(e.offsetX,e.offsetZ-e.reach/2,e.width,e.reach,Z):"forwardCone"===e.shape?((e,t,a)=>{let n=t/2,i=a(0,0),r=Array.from({length:37},(i,r)=>{let s=-n+r/36*t;return a(Math.sin(s)*e,-Math.cos(s)*e)});return["M ".concat(i.x," ").concat(i.y),...r.map(e=>"L ".concat(e.x," ").concat(e.y)),"Z"].join(" ")})(e.reach,a,(t,a)=>Z(t+e.offsetX,a+e.offsetZ)):null,r=Z(e.offsetX,e.offsetZ),s=e.reach*L,l="radial"===e.shape?S:I;return"radial"===e.shape?(0,n.jsx)("circle",{cx:r.x,cy:r.y,r:s,fill:"url(#".concat(l,")"),stroke:g,strokeWidth:0===t?"2.2":"1.8",opacity:0===t?1:.78,className:j?c().rangeEditableShape:void 0,onPointerDown:()=>null==y?void 0:y(e.id)},e.id):i?(0,n.jsx)("path",{d:i,fill:"url(#".concat(l,")"),stroke:g,strokeWidth:0===t?"2.2":"1.8",opacity:0===t?1:.78,className:j?c().rangeEditableShape:void 0,onPointerDown:()=>null==y?void 0:y(e.id)},e.id):null}),(0,n.jsx)("path",{d:G,className:c().rangeSource}),(0,n.jsx)("path",{d:z,className:c().rangeTarget}),(0,n.jsx)("line",{x1:120,y1:H,x2:V.x,y2:V.y,className:c().rangeFacing}),(0,n.jsx)("text",{x:Y.x,y:Math.max(28,Y.y+10),className:c().rangeAxisLabel,textAnchor:"middle",children:_.forwardAxis}),q?(0,n.jsx)("circle",{cx:Z(q[0],q[2]).x,cy:Z(q[0],q[2]).y,r:4.2,fill:g,className:c().rangeHitPoint}):null,j&&K&&J?(0,n.jsxs)("g",{className:c().rangeEditorHandles,children:[(0,n.jsx)("circle",{cx:J.center.x,cy:J.center.y,r:6,className:c().rangeEditorHandleCenter,onPointerDown:e=>{null==y||y(K.id),Q(e,K.id,"center")}}),(0,n.jsx)("circle",{cx:J.reachHandle.x,cy:J.reachHandle.y,r:5.2,className:c().rangeEditorHandle,onPointerDown:e=>Q(e,K.id,"reach")}),J.widthHandle?(0,n.jsx)("circle",{cx:J.widthHandle.x,cy:J.widthHandle.y,r:5.2,className:c().rangeEditorHandle,onPointerDown:e=>Q(e,K.id,"width")}):null,J.angleHandle?(0,n.jsx)("circle",{cx:J.angleHandle.x,cy:J.angleHandle.y,r:5.2,className:c().rangeEditorHandle,onPointerDown:e=>Q(e,K.id,"angle")}):null]}):null]}),(0,n.jsxs)("div",{className:c().rangeLegend,children:[(0,n.jsx)("span",{children:_.resolvedRange}),(0,n.jsxs)("span",{children:[_.reach," ",m(O.reach)]}),(0,n.jsxs)("span",{children:[_.width," ",m(O.width)]}),(0,n.jsxs)("span",{children:[_.angle," ",Math.round(180*O.angleRad/Math.PI),"\xb0"]}),T.zones.length>1?(0,n.jsx)("span",{children:_.additionalRanges(T.zones.length-1)}):null,U?(0,n.jsx)("span",{children:_.dummyCenter}):(0,n.jsx)("span",{children:_.contactPoint}),(0,n.jsxs)("span",{children:[_.dummyX," ",m(k.targetPosition[0])]}),(0,n.jsxs)("span",{children:[_.dummyZ," ",m(Math.abs(k.targetPosition[2]))]}),k.hitResolution?(0,n.jsxs)("span",{children:[_.hitDamage," ",m(k.hitResolution.damage)]}):null]})]})}var k=a(2215),v=a(8324),j=a(9146),w=a(8408),y=a(8889),M=a(8260);let _=e=>[Math.max(1.4,.92*e.frame[0]),Math.max(1.1,4.2*e.frame[1]),Math.max(1.4,.92*e.frame[2])],C=(e,t,a,n,i)=>{var r,s;let[l,,o]=_(n),c=l/2,d=o/2,u=a.previewBands.map(t=>({minX:e[0]-(t.halfWidth+c+.42),maxX:e[0]+(t.halfWidth+c+.42),minZ:e[2]+t.minZ-(d+.42),maxZ:e[2]+t.maxZ+(d+.42)})),h=t,g=null!=(r=null==i?void 0:i[0])?r:0,m=null!=(s=null==i?void 0:i[2])?s:0,p=Math.abs(m)>=Math.abs(g)?"z":"x",f="z"===p?Math.sign(m):Math.sign(g);for(let t=0;t<6;t+=1){let[t,a,n]=h,i=u.filter(e=>t>e.minX&&t<e.maxX&&n>e.minZ&&n<e.maxZ);if(0===i.length)break;let r=null,s=1/0,l=new Set,o=new Set;for(let e of i)l.add(e.minX),l.add(e.maxX),o.add(e.minZ),o.add(e.maxZ);let c=[...[...l].map(e=>[e,a,n]),...[...o].map(e=>[t,a,e])];for(let e of l)for(let t of o)c.push([e,a,t]);for(let a of c){if(!u.every(e=>a[0]<=e.minX||a[0]>=e.maxX||a[2]<=e.minZ||a[2]>=e.maxZ))continue;let i=Math.hypot(a[0]-t,a[2]-n),l="z"===p?Math.sign(a[2]-e[2]):Math.sign(a[0]-e[0]),o=1e4*(0!==f&&0!==l&&l!==f),c="z"===p?Math.abs(a[2]-e[2]):Math.abs(a[0]-e[0]),d="z"===p?Math.abs(a[0]-e[0]):Math.abs(a[2]-e[2]),h=5e3*(0!==f&&d>c);i+o+h<s&&(s=i+o+h,r=a)}if(!r)break;h=r}return h},S=(e,t,a)=>{let[,,n]=_(t),i=a?I(.34*a.reach,.72,1.12):1.1;return C([0,0,0],[0,0,-(e.bodyHalfLength+n/2+i+2)],e,t)},I=(e,t,a)=>Math.min(a,Math.max(t,e)),N=(e,t,a)=>{if(!t||!a||"TAICHI"===e.botId&&"armorUp"===t)return a;let n=e.stats.skillAttacks[t];return n?{...a,damage:Math.max(a.damage,n.damage.minDamage)}:a},R=(e,t)=>{let a=(0,w.Lp)(e.botId,t,(0,v.tR)(e.botId,t));if(a)return Math.round((a.hitWindowStartMs+a.hitWindowEndMs)/2);let n=e.stats.skillTimings[t];return n.startupMs+Math.round(.5*n.activeMs)},D=(e,t,a,n)=>1.3*a.damageScale+.45*a.quality-.03*Math.abs(n[0])-.015*Math.max(0,Math.abs(n[2])-3.2)+((e,t,a)=>{let[n,,i]=a;return"TAICHI"===e&&"overcharge"===t?(i<0?2.6:-2.2)-.22*Math.abs(n)-.04*Math.max(0,i):"TAICHI"===e&&"armorUp"===t?(i<0?2.4:-2.2)-.28*Math.abs(n)-.18*Math.abs(Math.abs(i)-2.7):"RONIN"===e&&"spinStrike"===t?(i<0?2.1:-.3)-.26*Math.abs(n)-.04*Math.max(0,i):"2CLAWS"===e&&"quickTurn"===t?-(.06*Math.abs(n)):0})(e,t,n),T=(e,t,a)=>{var n;let i=(0,w.zM)((0,j.bG)(e),t),r=(0,j.bG)(e),s=(0,k.r)(e),l=(0,k.r)(e),o=S(s,l,null);if(i.position=[0,0,0],i.rotationY=0,!t)return{botId:e,skillId:t,sourceBot:i,targetBot:{...r,position:o},sourceGeometry:s,targetGeometry:l,resolvedRange:null,targetPosition:o,hitCheck:null,hitResolution:null,hitDelayMs:0};let c=(0,y.py)(i,t,a),d=S(s,l,c);if(!c)return{botId:e,skillId:t,sourceBot:i,targetBot:{...r,position:d},sourceGeometry:s,targetGeometry:l,resolvedRange:null,targetPosition:d,hitCheck:null,hitResolution:null,hitDelayMs:R(i,t)};let{position:u}=((e,t,a,n,i)=>{let r=S(n,i,a),s=(0,y.JH)(e,{...t,position:r},a),l="radial"===a.shape?.34*a.reach:Math.max(.2*a.width,.36),o="radial"===a.shape?[.44,.5,.58,.66,.74,.86,.96]:[.42,.5,.58,.66,.74,.82,.9],c="forwardCone"===a.shape?[0,-.18,.18,-.32,.32]:[0,-.16,.16],d=null,u=r=>{let s=C([0,0,0],r,n,i),l={...t,position:s},o=(0,y.JH)(e,l,a);if(!o)return;let c=D(e.botId,a.skillId,o,s);(!d||c>d.score)&&(d={position:s,hit:o,score:c})};for(let t of(s&&(d={position:r,hit:s,score:D(e.botId,a.skillId,s,r)}),a.zones))u([t.offsetX,0,t.offsetZ]),"radial"!==t.shape&&u([t.offsetX,0,t.offsetZ-.58*t.reach]);for(let e of o)for(let t of c)u([l*t*2,0,-a.reach*e]);if(d)return{position:d.position,hit:d.hit};let h=C([0,0,0],(e=>{var t;let a=null!=(t=e.zones[0])?t:e;return[0,0,-Math.max(.96,"radial"===a.shape?.58*a.reach:"forwardCone"===a.shape?.66*a.reach:.72*a.reach)]})(a),n,i);return{position:h,hit:(0,y.JH)(e,{...t,position:h},a)}})(i,r,c,s,l),h={...r,position:C([0,0,0],u,s,l)},g=(0,y.JH)(i,h,c),m=R(i,t),p=(0,M.VK)(i,t,1e4),f=(0,y.PT)([p,h],1e4+m);return{botId:e,skillId:t,sourceBot:i,targetBot:h,sourceGeometry:s,targetGeometry:l,resolvedRange:c,targetPosition:h.position,hitCheck:g,hitResolution:N(i,t,null!=(n=f.hits[0])?n:null),hitDelayMs:m}};var P=a(7156),A=a(7303),W=a(6196),B=a(1340),E=a(4290);let H=["TAICHI","BLUNT","2CLAWS","RONIN"],Z={KeyW:"W",KeyA:"A",KeyS:"S",KeyD:"D",Digit6:"6",Digit7:"7",Digit8:"8",Digit9:"9",KeyC:"C",KeyF:"F",KeyV:"V",KeyB:"B",KeyN:"N",ShiftLeft:"Shift",KeyK:"K",KeyM:"M",Comma:",",Period:".",Slash:"/",ArrowUp:"â",ArrowLeft:"â",ArrowDown:"â",ArrowRight:"â"},L=["forward","left","backward","right","boost","skill1","skill2","skill3","skill4"],G=["skill1","skill2","skill3","skill4"],z=e=>{var t;
1return null!=(t=Z[e])?t:e},O=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return Number.isInteger(e)?"".concat(e):e.toFixed(t)},U=e=>"".concat(Math.round(100*e),"%"),F=e=>"".concat((e/1e3).toFixed(2)," s"),X=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"en",a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:P.U6,n=W.B[e],i=(0,j.bG)(e),r=(0,j.JF)(i),s=(0,l.DF)(t),o=(0,l.en)(t),c=L.map(e=>({id:e,label:s[e],code:a[e],display:z(a[e]),tone:e.startsWith("skill")?"skill":"move"})),d=n.skills.map((i,r)=>{var s,c;let d=(0,w.mW)(e,i,n.stats.skillTimings[i]),u=(0,w.Lp)(e,i,(0,v.tR)(e,i)),h=B.f[i],g=null!=(s=G[r])?s:"skill4",m=(0,A.t)(a,g),p=(0,w._Q)(e,i);return{id:i,keyCode:m,keyDisplay:z(m),slotLabel:o.skillSlot(r),name:(0,E.oY)(e,i,t),description:(0,l.By)(e,i,t),cooldownMs:(0,w.gd)(e,i,n.stats.cooldowns[i]),energyCost:(0,w.wn)(e,i,n.stats.energyCosts[i]),castMs:d.startupMs+d.activeMs+d.recoveryMs,attack:(0,w.uH)(e,i,n.stats.skillAttacks[i]),timing:d,tags:h.tags,animationDurationMs:null!=(c=null==u?void 0:u.durationMs)?c:null,hitWindowMs:u?[u.hitWindowStartMs,u.hitWindowEndMs]:null,hasValueOverride:!!p}});return{bot:n,performance:r,controls:c,skills:d,parts:n.parts}},q=["#ffd54a","#72f29e","#69c8ff","#ff8d6f"];function K(e){let{label:t,value:a,onChange:i,min:r,max:s,step:l=1}=e;return(0,n.jsxs)("label",{className:c().rangeEditorField,children:[(0,n.jsx)("span",{children:t}),(0,n.jsx)("input",{type:"number",value:a,min:r,max:s,step:l,onChange:e=>i(Number(e.target.value))})]})}function V(e){let{value:t,onChange:a}=e,{text:i,partTypeLabels:r}=(0,l.Km)();return(0,n.jsxs)("label",{className:c().rangeEditorField,children:[(0,n.jsx)("span",{children:i.outputPart}),(0,n.jsx)("select",{value:t,onChange:e=>a(e.target.value),children:Object.entries(r).map(e=>{let[t,a]=e;return(0,n.jsx)("option",{value:t,children:a},t)})})]})}function Y(e){let{value:t,onChange:a}=e,{text:i,shapeLabels:r}=(0,l.Km)();return(0,n.jsxs)("label",{className:c().rangeEditorField,children:[(0,n.jsx)("span",{children:i.shape}),(0,n.jsxs)("select",{value:t,onChange:e=>a(e.target.value),children:[(0,n.jsx)("option",{value:"forwardBox",children:r.forwardBox}),(0,n.jsx)("option",{value:"forwardCone",children:r.forwardCone}),(0,n.jsx)("option",{value:"radial",children:r.radial})]})]})}function J(e){let{botView:t,selectedSkillId:a,activeSkillIds:i,activeSkillName:r,pressedKeys:o,onWriteGeneratedSettings:u,writeGeneratedPending:g,writeGeneratedMessage:m,skillRangeDraft:p,onStartRangeEdit:f,onCancelRangeEdit:x,onSaveRangeEdit:k,onSelectDraftZone:v,onChangeDraftZone:j,onChangeDraftOutputPart:w,onAddDraftZone:y,onRemoveDraftZone:M,onSetSkillValueOverride:_,onClearSkillValueOverride:C,onToggleSkillRange:S}=e,{text:I,partTypeLabels:N,partStatusLabels:R,shapeLabels:D}=(0,l.Km)(),P=(e,a)=>{var n,i,r,s;_(t.bot.id,e.id,a({cooldownMs:e.cooldownMs,energyCost:e.energyCost,timing:{...e.timing},animation:null!==e.animationDurationMs?{durationMs:e.animationDurationMs,hitWindowStartMs:null!=(r=null==(n=e.hitWindowMs)?void 0:n[0])?r:e.timing.startupMs,hitWindowEndMs:null!=(s=null==(i=e.hitWindowMs)?void 0:i[1])?s:e.timing.startupMs+e.timing.activeMs}:null,attack:e.attack?{...e.attack,damage:{...e.attack.damage,outputParts:e.attack.damage.outputParts?[...e.attack.damage.outputParts]:void 0}}:null}))};return(0,n.jsxs)("section",{className:c().panelColumn,children:[(0,n.jsx)(d,{botView:t,activeSkillIds:i,activeSkillName:r,pressedKeys:o,onWriteGeneratedSettings:u,writeGeneratedPending:g,writeGeneratedMessage:m}),(0,n.jsxs)("div",{className:c().infoCard,children:[(0,n.jsx)("div",{className:c().sectionHeader,children:(0,n.jsx)("h2",{className:c().sectionTitle,children:I.botSectionTitle})}),(0,n.jsxs)("div",{className:c().metricGrid,children:[(0,n.jsxs)("article",{className:c().metricTile,children:[(0,n.jsx)("span",{children:"HP"}),(0,n.jsx)("strong",{children:O(t.bot.stats.hp,1)})]}),(0,n.jsxs)("article",{className:c().metricTile,children:[(0,n.jsx)("span",{children:I.battery}),(0,n.jsx)("strong",{children:t.bot.stats.battery})]}),(0,n.jsxs)("article",{className:c().metricTile,children:[(0,n.jsx)("span",{children:I.forward}),(0,n.jsx)("strong",{children:O(t.performance.moveSpeedForward)})]}),(0,n.jsxs)("article",{className:c().metricTile,children:[(0,n.jsx)("span",{children:I.reverse}),(0,n.jsx)("strong",{children:O(t.performance.moveSpeedBackward)})]}),(0,n.jsxs)("article",{className:c().metricTile,children:[(0,n.jsx)("span",{children:I.turn}),(0,n.jsx)("strong",{children:O(t.performance.turnSpeed,2)})]}),(0,n.jsxs)("article",{className:c().metricTile,children:[(0,n.jsx)("span",{children:I.weaponDamage}),(0,n.jsx)("strong",{children:O(t.performance.weaponDamage)})]}),(0,n.jsxs)("article",{className:c().metricTile,children:[(0,n.jsx)("span",{children:I.defense}),(0,n.jsx)("strong",{children:O(t.performance.defense)})]}),(0,n.jsxs)("article",{className:c().metricTile,children:[(0,n.jsx)("span",{children:I.impact}),(0,n.jsx)("strong",{children:O(t.performance.impactPower)}
1)]}),(0,n.jsxs)("article",{className:c().metricTile,children:[(0,n.jsx)("span",{children:I.stability}),(0,n.jsx)("strong",{children:O(t.performance.stability)})]}),(0,n.jsxs)("article",{className:c().metricTile,children:[(0,n.jsx)("span",{children:I.evade}),(0,n.jsx)("strong",{children:U(t.bot.stats.evadeChance)})]}),(0,n.jsxs)("article",{className:c().metricTile,children:[(0,n.jsx)("span",{children:I.burst}),(0,n.jsx)("strong",{children:U(t.bot.stats.burstChance)})]}),(0,n.jsxs)("article",{className:c().metricTile,children:[(0,n.jsx)("span",{children:I.weight}),(0,n.jsx)("strong",{children:t.performance.totalWeight})]})]})]}),(0,n.jsxs)("details",{className:c().infoCard,children:[(0,n.jsx)("summary",{className:c().collapsibleSummary,children:I.partsTitle}),(0,n.jsx)("div",{className:c().partList,children:t.parts.map(e=>{var t;return(0,n.jsxs)("article",{className:c().partCard,children:[(0,n.jsxs)("div",{className:c().partHeader,children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:N[e.type]}),(0,n.jsx)("span",{children:e.id})]}),(0,n.jsxs)("span",{className:c().partWeight,children:[I.weight," ",e.weight]})]}),(0,n.jsxs)("div",{className:c().partMetrics,children:[(0,n.jsxs)("span",{children:["HP ",e.currentHp," / ",e.maxHp]}),(0,n.jsxs)("span",{children:[I.defense," ",O(e.defenseModifier,2)]}),(0,n.jsxs)("span",{children:[I.attack," ",O(e.attackModifier,2)]}),(0,n.jsx)("span",{children:R[e.status]})]}),(null==(t=e.subParts)?void 0:t.length)?(0,n.jsx)("div",{className:c().subPartList,children:e.subParts.map(e=>(0,n.jsxs)("div",{className:c().subPartItem,children:[(0,n.jsx)("strong",{children:e.id}),(0,n.jsxs)("span",{children:["HP ",e.currentHp," / ",e.maxHp]}),(0,n.jsxs)("span",{children:[I.defense," ",O(e.defenseModifier,2)]}),(0,n.jsxs)("span",{children:[I.attack," ",O(e.attackModifier,2)]})]},e.id))}):null]},e.id)})})]}),(0,n.jsxs)("div",{className:c().infoCard,children:[(0,n.jsx)("div",{className:c().sectionHeader,children:(0,n.jsx)("h2",{className:c().sectionTitle,children:I.skillsTitle})}),(0,n.jsx)("div",{className:c().skillList,children:t.skills.map((e,i)=>{var r,l,o,d;let u=a===e.id,g=(0,s.w7)(t.bot.id,e.id,e.attack),m=(null==p?void 0:p.skillId)===e.id,_=m?p.zones:g,R=T(t.bot.id,e.id,m?p.zones:null),A=R.resolvedRange,W=null!=(l=null==A?void 0:A.zones[0])?l:null;return(0,n.jsxs)("article",{className:c().skillCard,style:{"--skill-tone":q[i%q.length]},children:[(0,n.jsxs)("div",{className:c().skillHeader,children:[(0,n.jsxs)("div",{children:[(0,n.jsxs)("div",{className:c().skillTitleRow,children:[(0,n.jsx)("span",{className:c().skillSlot,children:e.slotLabel}),(0,n.jsx)("strong",{children:e.name}),e.hasValueOverride?(0,n.jsx)("span",{className:c().skillChangedBadge,children:I.changed}):null]}),(0,n.jsx)("p",{className:c().skillDescription,children:e.description})]}),(0,n.jsxs)("div",{className:c().skillActionRow,children:[(0,n.jsx)("button",{type:"button",className:"".concat(c().rangeToggle," tuning-btn ").concat(u?c().rangeToggleActive:"").trim(),onClick:()=>S(e.id),children:I.range}),e.attack?m?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("button",{type:"button",className:"".concat(c().rangeToggle," tuning-btn"),onClick:k,children:I.saveRange}),(0,n.jsx)("button",{type:"button",className:"".concat(c().rangeToggle," tuning-btn"),onClick:x,children:I.cancel})]}):(0,n.jsx)("button",{type:"button",className:"".concat(c().rangeToggle," tuning-btn"),onClick:()=>{u||S(e.id),f(e.id)},children:I.editRange}):null,e.hasValueOverride?(0,n.jsx)("button",{type:"button",className:"".concat(c().rangeToggle," tuning-btn"),onClick:()=>C(t.bot.id,e.id),children:I.restoreDefault}):null]})]}),(0,n.jsxs)("div",{className:c().skillMetaRow,children:[(0,n.jsxs)("span",{children:[I.keybind," ",e.keyDisplay]}),(0,n.jsxs)("span",{children:[I.cooldown," ",F(e.cooldownMs)]}),(0,n.jsxs)("span",{children:[I.energyCost," ",e.energyCost]}),(0,n.jsxs)("span",{children:[I.totalCast," ",F(e.castMs)]}),W?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("span",{children:[I.reach," ",O(W.reach,2)]}),(0,n.jsxs)("span",{children:[I.width," ",O(W.width,2)]}),(0,n.jsxs)("span",{children:[I.angle," ",O(180*W.angleRad/Math.PI,0),"\xb0"]})]}):null]}),(0,n.jsxs)("div",{className:c().skillEditorSection,children:[(0,n.jsx)("div",{className:c().skillSectionLabel,children:I.common}),(0,n.jsxs)("div",{className:c().skillEditorGrid,children:[(0,n.jsx)(K,{label:I.cooldownMs,value:e.cooldownMs,min:0,step:100,onChange:t=>P(e,e=>({...e,cooldownMs:t}))}),(0,n.jsx)(K,{label:I.energyCost,value:e.energyCost,min:0,step:1,onChange:t=>P(e,e=>({...e,energyCost:t}))}),(0,n.jsx)(K,{label:I.startup,value:e.timing.startupMs,min:0,step:10,onChange:t=>P(e,e=>({...e,timing:{...e.timing,startupMs:t}}))}),(0,n.jsx)(K,{label:I.active,value:e.timing.activeMs,min:0,step:10,onChange:t=>P(e,e=>({...e,timing:{...e.timing,activeMs:t}}))}),(0,n.jsx)(K,{label:I.recovery,value:e.timing.recoveryMs,min:0,step:10,onChange:t=>P(e,e=>({...e,timing:{...e.timing,recoveryMs:t}}))}),null!==e.animationDurationMs?(0,n.jsx)(K,{label:I.animation,value:e.animationDurationMs,min:0,step:10,onChange:t=>P(e,a=>{var n,i,r,s;return{...a,animation:a.animation?{...a.animation,durationMs:t}:{durationMs:t,hitWindowStartMs:null!=(r=null==(n=e.hitWindowMs)?void 0:n[0])?r:e.timing.startupMs,hitWindowEndMs:null!=(s=null==(i=e.hitWindowMs)?void 0:i[1])?s:e.timing.startupMs+e.timing.activeMs}}})}):null,e.hitWindowMs?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(K,{label:I.hitWindowStart,value:e.hitWindowMs[0],min:0,step:10,onChange:t=>P(e,e=>({...e,animation:e.animation?{...e.animation,hitWindowStartMs:t}:null}))}),(0,n.jsx)(K,{label:I.hitWindowEnd,value:e.hitWindowMs[1],min:0,step:10,onChange:t=>P(e,e=>({...e,animation:e.animation?{...e.animation,hitWindowEndMs:t}:null}))})]}):null,e.attack?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(K,{label:I.minDamage,value:Math.round(e.attack.damage.minDamage),min:0,step:1,onChange:t=>P(e,e=>({...e,attack:e.attack?{...e.attack,damage:{...e.attack.damage,minDamage:t}}:null}))}),(0,n.jsx)(K,{label:I.maxDamage,value:Math.round(e.attack.damage.maxDamage),min:0,step:1,onChange:t=>P(e,e=>({...e,attack:e.attack?{...e.attack,damage:{...e.attack.damage,maxDamage:t}}:null}))})]}):null]})]}),e.attack?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("details",{className:c().skillAdvanced,children:[(0,n.jsx)("summary",{className:c().collapsibleSummary,children:I.damageCoefficients}),(0,n.jsxs)("div",{className:c().skillEditorGrid,children:[(0,n.jsx)(K,{label:I.baseMultiplier,value:e.attack.damage.damageMultiplier,step:.01,onChange:t=>P(e,e=>({...e,attack:e.attack?{...e.attack,damage:{...e.attack.damage,damageMultiplier:t}}:null}))}),(0,n.jsx)(K,{label:I.weaponRatio,value:e.attack.damage.weaponRatio,step:.01,onChange:t=>P(e,e=>({...e,attack:e.attack?{...e.attack,damage:{...e.attack.damage,weaponRatio:t}}:null}))}),(0,n.jsx)(K,{label:I.impactRatio,value:e.attack.damage.impactRatio,step:.01,onChange:t=>P(e,e=>({...e,attack:e.attack?{...e.attack,damage:{...e.attack.damage,impactRatio:t}}:null}))}),(0,n.jsx)(K,{label:I.defenseRatio,value:e.attack.damage.defenseRatio,step:.01,onChange:t=>P(e,e=>({...e,attack:e.attack?{...e.attack,damage:{...e.attack.damage,defenseRatio:t}}:null}))}),(0,n.jsx)(K,{label:I.recoilRatio,value:e.attack.damage.recoilRatio,step:.01,onChange:t=>P(e,e=>({...e,attack:e.attack?{...e.attack,damage:{...e.attack.damage,recoilRatio:t}}:null}))}),(0,n.jsx)(K,{label:I.batteryDamage,value:e.attack.damage.batteryDamage,step:.1,onChange:t=>P(e,e=>({...e,attack:e.attack?{...e.attack,damage:{...e.attack.damage,batteryDamage:t}}:null}))})]})]}),(0,n.jsxs)("details",{className:c().skillAdvanced,children:[(0,n.jsx)("summary",{className:c().collapsibleSummary,children:I.rangeParameters}),(0,n.jsxs)("div",{className:c().skillEditorGrid,children:[(0,n.jsx)(Y,{value:e.attack.shape,onCh
1ange:t=>P(e,e=>({...e,attack:e.attack?{...e.attack,shape:t}:null}))}),(0,n.jsx)(K,{label:I.extraReach,value:e.attack.extraReach,step:.01,onChange:t=>P(e,e=>({...e,attack:e.attack?{...e.attack,extraReach:t}:null}))}),(0,n.jsx)(K,{label:I.widthScale,value:e.attack.widthScale,step:.01,onChange:t=>P(e,e=>({...e,attack:e.attack?{...e.attack,widthScale:t}:null}))}),(0,n.jsx)(K,{label:I.minWidth,value:e.attack.minWidth,step:.01,onChange:t=>P(e,e=>({...e,attack:e.attack?{...e.attack,minWidth:t}:null}))}),(0,n.jsx)(K,{label:I.angle,value:e.attack.angleDeg,step:1,onChange:t=>P(e,e=>({...e,attack:e.attack?{...e.attack,angleDeg:t}:null}))}),(0,n.jsx)(K,{label:I.targetRadiusScale,value:e.attack.targetRadiusScale,step:.01,onChange:t=>P(e,e=>({...e,attack:e.attack?{...e.attack,targetRadiusScale:t}:null}))}),(0,n.jsx)(K,{label:I.feedbackWeight,value:e.attack.feedbackScoreBonus,step:.01,onChange:t=>P(e,e=>({...e,attack:e.attack?{...e.attack,feedbackScoreBonus:t}:null}))}),(0,n.jsx)(V,{value:e.attack.damage.outputPart,onChange:t=>P(e,e=>({...e,attack:e.attack?{...e.attack,damage:{...e.attack.damage,outputPart:t,outputParts:void 0}}:null}))})]}),(0,n.jsxs)("div",{className:c().tagRow,children:[e.tags.map(t=>(0,n.jsx)("span",{className:c().tag,children:t},"".concat(e.id,"-").concat(t))),(0,n.jsx)("span",{className:c().tag,children:I.damageByHitPosition}),(0,n.jsxs)("span",{className:c().tag,children:[I.output," ",(null==(r=e.attack.damage.outputParts)?void 0:r.length)?e.attack.damage.outputParts.map(e=>N[e]).join(" / "):N[e.attack.damage.outputPart]]})]})]})]}):null,e.attack&&u?(0,n.jsxs)("div",{className:c().skillRangeSection,children:[(0,n.jsxs)("div",{className:c().skillMetaRow,children:[(0,n.jsxs)("span",{children:[I.resolvedShape," ",D[null!=(o=null==W?void 0:W.shape)?o:e.attack.shape]]}),W?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("span",{children:[I.actualReach," ",O(W.reach,2)]}),(0,n.jsxs)("span",{children:[I.actualWidth," ",O(W.width,2)]}),(0,n.jsxs)("span",{children:[I.actualAngle," ",O(180*W.angleRad/Math.PI,0),"\xb0"]})]}):null]}),(0,n.jsx)(b,{attack:e.attack,skillName:e.name,scenario:R,editableZones:_,editing:m,selectedZoneId:null!=(d=null==p?void 0:p.selectedZoneId)?d:null,onSelectZone:v,onChangeZone:j}),m?(0,n.jsx)(h,{zones:p.zones,selectedZoneId:p.selectedZoneId,onSelectZone:v,onChangeZone:j,onChangeOutputPart:w,onAddZone:y,onRemoveZone:M}):null]}):null]},e.id)})})]})]})}var Q=a(1360),$=a.n(Q),ee=a(625),et=a(5100),ea=a(8333),en=a(4823),ei=a(6414);let er=(e,t,a)=>Math.min(a,Math.max(t,e)),es=e=>1-Math.pow(1-er(e,0,1),3),el=e=>{if("BLUNT"===e.botId&&"armorUp"===e.skillId)return e.startedAtMs+220;if("BLUNT"===e.botId&&"impactSlam"===e.skillId)return e.startedAtMs+e.hitDelayMs+280;if("2CLAWS"===e.botId&&"overcharge"===e.skillId)return e.startedAtMs+e.hitDelayMs+60;if("RONIN"===e.botId)switch(e.skillId){case"boostDash":case"spinStrike":return e.startedAtMs+e.hitDelayMs+40;case"quickTurn":return e.startedAtMs+e.hitDelayMs+100;case"overcharge":return e.startedAtMs+e.hitDelayMs+20}if("TAICHI"===e.botId)switch(e.skillId){case"armorUp":return e.startedAtMs+e.hitDelayMs+20;case"impactSlam":return e.startedAtMs+e.hitDelayMs+40;case"quickTurn":return e.startedAtMs+e.hitDelayMs+10;case"overcharge":return e.startedAtMs+e.hitDelayMs+50}return e.startedAtMs+e.hitDelayMs};var eo=a(8130);let ec=Math.PI/2,ed={BLUNT:{baseY:0,modelScale:1.84,cameraPosition:[0,7.6,9.1],lookAt:[0,.92,-.36]},RONIN:{baseY:0,modelScale:1.72,cameraPosition:[0,7.2,8.7],lookAt:[0,.74,-.4]},"2CLAWS":{baseY:0,modelScale:1.76,cameraPosition:[0,7,8.45],lookAt:[0,.7,-.42]},TAICHI:{baseY:0,modelScale:1.78,cameraPosition:[0,7.55,9.15],lookAt:[0,.8,-.64]}},eu="#ff5454";function eh(e){let{basePosition:t,lookAt:a,zoomRef:n}=e,i=(0,et.C)(e=>e.camera);return(0,et.D)(()=>{let e=n.current,r=t[0],s=t[1]-1.6*e,l=t[2]-4.8*e;i.position.x+=(r-i.position.x)*.16,i.position.y+=(s-i.position.y)*.16,i.position.z+=(l-i.position.z)*.16,i.lookAt(a[0],a[1],a[2])}),null}function eg(e){let{scenario:t,activeGlow:a}=e,r=t.resolvedRange,s=(0,i.useRef)(null);(0,et.D)(e=>{let{clock:t}=e;if(!s.current)return;let n=a?.48+(.5*Math.sin(8.4*t.elapsedTime)+.5)*.22:0;
1s.current.children.forEach(e=>{let t=e.material;"number"==typeof t.opacity&&(t.opacity=n)})});let l=(0,i.useMemo)(()=>{if(!r||"forwardCone"!==r.shape)return null;let e=r.angleRad/2,t=new en.ypk;t.moveTo(0,0);for(let a=0;a<=40;a+=1){let n=-e+a/40*r.angleRad,i=Math.sin(n)*r.reach,s=Math.cos(n)*r.reach;t.lineTo(i,s)}return t.lineTo(0,0),t},[r]);return r?(0,n.jsx)("group",{children:r.zones.map((e,t)=>{let i=(a?.32:.18)*(0===t?1:.74),r=.72*(0===t?1:.86);return"forwardBox"===e.shape?(0,n.jsxs)("group",{position:[e.offsetX,.028,e.offsetZ-e.reach/2],children:[0===t?(0,n.jsx)("group",{ref:s,children:(0,n.jsxs)("mesh",{rotation:[-Math.PI/2,0,0],scale:[1.04*e.width,1.04*e.reach,1],children:[(0,n.jsx)("planeGeometry",{args:[1,1]}),(0,n.jsx)("meshBasicMaterial",{color:eu,transparent:!0,opacity:0,depthWrite:!1,blending:en.EZo})]})}):null,(0,n.jsxs)("mesh",{rotation:[-Math.PI/2,0,0],scale:[e.width,e.reach,1],children:[(0,n.jsx)("planeGeometry",{args:[1,1]}),(0,n.jsx)("meshBasicMaterial",{color:eu,transparent:!0,opacity:i,depthWrite:!1})]}),(0,n.jsxs)("mesh",{rotation:[-Math.PI/2,0,0],scale:[e.width,e.reach,1.002],children:[(0,n.jsx)("planeGeometry",{args:[1,1]}),(0,n.jsx)("meshBasicMaterial",{color:eu,transparent:!0,opacity:r,wireframe:!0,depthWrite:!1})]})]},e.id):"radial"===e.shape?(0,n.jsxs)("group",{position:[e.offsetX,.028,e.offsetZ],children:[0===t?(0,n.jsx)("group",{ref:s,children:(0,n.jsxs)("mesh",{rotation:[-Math.PI/2,0,0],scale:[1.04,1.04,1],children:[(0,n.jsx)("circleGeometry",{args:[e.reach,60]}),(0,n.jsx)("meshBasicMaterial",{color:eu,transparent:!0,opacity:0,depthWrite:!1,blending:en.EZo})]})}):null,(0,n.jsxs)("mesh",{rotation:[-Math.PI/2,0,0],children:[(0,n.jsx)("circleGeometry",{args:[e.reach,60]}),(0,n.jsx)("meshBasicMaterial",{color:eu,transparent:!0,opacity:i,depthWrite:!1})]}),(0,n.jsxs)("mesh",{rotation:[-Math.PI/2,0,0],children:[(0,n.jsx)("circleGeometry",{args:[e.reach,60]}),(0,n.jsx)("meshBasicMaterial",{color:eu,transparent:!0,opacity:r,wireframe:!0,depthWrite:!1})]})]},e.id):l?(0,n.jsxs)("group",{position:[e.offsetX,.028,e.offsetZ],children:[0===t?(0,n.jsx)("group",{ref:s,children:(0,n.jsxs)("mesh",{rotation:[-Math.PI/2,0,0],scale:[1.04,1.04,1],children:[(0,n.jsx)("shapeGeometry",{args:[l]}),(0,n.jsx)("meshBasicMaterial",{color:eu,transparent:!0,opacity:0,side:en.$EB,depthWrite:!1,blending:en.EZo})]})}):null,(0,n.jsxs)("mesh",{rotation:[-Math.PI/2,0,0],children:[(0,n.jsx)("shapeGeometry",{args:[l]}),(0,n.jsx)("meshBasicMaterial",{color:eu,transparent:!0,opacity:i,side:en.$EB,depthWrite:!1})]}),(0,n.jsxs)("mesh",{rotation:[-Math.PI/2,0,0],children:[(0,n.jsx)("shapeGeometry",{args:[l]}),(0,n.jsx)("meshBasicMaterial",{color:eu,transparent:!0,opacity:r,side:en.$EB,wireframe:!0,depthWrite:!1})]})]},e.id):null})}):null}function em(e){let{position:t,accentColor:a}=e;return(0,n.jsxs)("group",{position:t,children:[(0,n.jsxs)("mesh",{rotation:[-Math.PI/2,0,0],position:[0,.04,0],children:[(0,n.jsx)("ringGeometry",{args:[.14,.22,28]}),(0,n.jsx)("meshBasicMaterial",{color:a,transparent:!0,opacity:.86,depthWrite:!1})]}),(0,n.jsxs)("mesh",{position:[0,.34,0],children:[(0,n.jsx)("cylinderGeometry",{args:[.018,.018,.54,12]}),(0,n.jsx)("meshBasicMaterial",{color:a,transparent:!0,opacity:.44,depthWrite:!1})]})]})}function ep(e){let{position:t,size:a,hitStartedAtMs:r,onDragStart:s,isDragging:l,onDragEnd:o}=e,c=(0,i.useRef)(null),d=(0,i.useRef)(null);(0,et.D)(()=>{let e=Date.now(),t=null===r?0:Math.max(0,1-(e-r)/420),n=Math.sin((1-t)*Math.PI)*t;if(c.current){let e=c.current.material;e.emissive.set("#ffdf9e"),e.emissiveIntensity=.88*t,c.current.position.y=.5*a[1]+.18*n,c.current.rotation.z=.06*n}d.current&&d.current.scale.set(1+.02*n,1+.02*n,1+.02*n)});let u=e=>{var t,a;e.stopPropagation(),s(),null==(t=(a=e.target).setPointerCapture)||t.call(a,e.pointerId)},h=e=>{var t,a;l&&(e.stopPropagation(),o(),null==(t=(a=e.target).releasePointerCapture)||t.call(a,e.pointerId))};return(0,n.jsxs)("group",{position:t,children:[(0,n.jsxs)("mesh",{ref:c,castShadow:!0,receiveShadow:!0,position:[0,.5*a[1],0],onPointerDown:u,onPointerUp:h,onPointerCancel:h,children:[(0,n.jsx)("boxGeometry",{args:a}),(0,n.jsx)("meshStandardMaterial",{color:"#ffffff",transparent:!1,emissive:"#ffffff",emissiveIntensity:.08,roughness:.18,metalness:.12})]}),(0,n.jsxs)("mesh",{ref:d,rotation:[-Math.PI/2,0,0],position:[0,.02,0],onPointerDown:u,onPointerUp:h,onPointerCancel:h,children:[(0,n.jsx)("ringGeometry",{args:[.44*Math.max(a[0],a[2]),.5*Math.max(a[0],a[2]),28]}),(0,n.jsx)("meshBasicMaterial",{color:"#ffffff",transparent:!0,opacity:.3,depthWrite:!1})]})]})}function ef(e){var t,a,r;let{botView:s,focusedSkillId:l,activeSkillIds:o,skillPreview:d,skillZoneOverrides:u,rotationYRef
1:h,blockViewportDragRef:g}=e,m=(0,eo.U)(e=>e.revision),p=ed[s.bot.id],f=(0,i.useMemo)(()=>T(s.bot.id,l,u),[s.bot.id,l,u,m]),[x,b]=(0,i.useState)(f.targetPosition),v=(0,i.useMemo)(()=>((e,t,a,n)=>{var i;let r=(0,w.zM)((0,j.bG)(e),t),s=(0,j.bG)(e),l=(0,k.r)(e),o=(0,k.r)(e);if(r.position=[0,0,0],r.rotationY=0,!t)return{botId:e,skillId:t,sourceBot:r,targetBot:{...s,position:a},sourceGeometry:l,targetGeometry:o,resolvedRange:null,targetPosition:a,hitCheck:null,hitResolution:null,hitDelayMs:0};let c=(0,y.py)(r,t,n);if(!c)return{botId:e,skillId:t,sourceBot:r,targetBot:{...s,position:a},sourceGeometry:l,targetGeometry:o,resolvedRange:null,targetPosition:a,hitCheck:null,hitResolution:null,hitDelayMs:R(r,t)};let d={...s,position:C([0,0,0],a,l,o)},u=R(r,t),h=(0,M.VK)(r,t,1e4),g=(0,y.PT)([h,d],1e4+u);return{botId:e,skillId:t,sourceBot:r,targetBot:d,sourceGeometry:l,targetGeometry:o,resolvedRange:c,targetPosition:d.position,hitCheck:(0,y.JH)(r,d,c),hitResolution:N(r,t,null!=(i=g.hits[0])?i:null),hitDelayMs:u}})(s.bot.id,l,x,u),[s.bot.id,l,x,u,m]),D=I(Math.max(Math.max(2.8*(r=v).sourceGeometry.frame[0],2.8*r.sourceGeometry.frame[2],2.8*Math.abs(r.targetPosition[2]),5.4*Math.abs(r.targetPosition[0])),r.resolvedRange?r.resolvedRange.zones.reduce((e,t)=>Math.max(e,"radial"===t.shape?2.8*t.reach:2.7*t.reach,2.2*t.width),0):0,7.6),7.6,13.2),P=2.2*D,A=2.6*D,W=Math.max(20,Math.round(2*D)),[B,E]=(0,i.useState)(null),[H,Z]=(0,i.useState)(null),[L,G]=(0,i.useState)(!1),z=(0,i.useRef)(null),O=(0,i.useRef)(null),U=(0,i.useRef)(null),F=(0,i.useRef)(null),X=(0,i.useRef)(null);return(0,i.useEffect)(()=>{b(S(f.sourceGeometry,f.targetGeometry)),E(null),Z(null),F.current=null,X.current=null},[s.bot.id]),(0,i.useEffect)(()=>{if(!d||!v.skillId||d.skillId!==v.skillId)return;let e="".concat(d.skillId,":").concat(d.startedAtMs);if(F.current===e)return;F.current=e,X.current={botId:s.bot.id,skillId:v.skillId,startedAtMs:d.startedAtMs,durationMs:d.durationMs,hitDelayMs:v.hitDelayMs,targetBasePosition:[...v.targetPosition],hitResolution:v.hitResolution?{normal:[...v.hitResolution.normal]}:null};let t=Date.now()-d.startedAtMs,a=Math.max(0,el(X.current)-d.startedAtMs-t),n=window.setTimeout(()=>{var e,t;let a=Date.now(),n=null!=(t=null==(e=v.hitResolution)?void 0:e.damage)?t:0,i=!!v.hitResolution;Z(i?a:null),E({id:"".concat(v.skillId,"-").concat(a),label:i?"-".concat(Math.max(1,Math.round(n))):"MISS",position:[v.targetPosition[0],2.5,v.targetPosition[2]],tone:i?"hit":"miss"})},a);return()=>window.clearTimeout(n)},[v,d]),(0,i.useEffect)(()=>{if(!B)return;let e=window.setTimeout(()=>{E(e=>(null==e?void 0:e.id)===B.id?null:e)},920);return()=>window.clearTimeout(e)},[B]),(0,et.D)(()=>{if(!z.current)return;z.current.rotation.y=h.current;let e=Date.now(),t=((e,t)=>{if(!e)return[0,0,0];if("TAICHI"===e.botId&&"armorUp"===e.skillId){let a=e.startedAtMs+Math.max(60,.2*e.hitDelayMs),n=e.startedAtMs+Math.max(e.hitDelayMs+120,.56*e.durationMs),i=e.startedAtMs+e.durationMs;return t<=a?[0,0,0]:t<n?[0,0,-2.2*es((t-a)/Math.max(1,n-a))]:t<i?[0,0,-2.2*(1-es((t-n)/Math.max(1,i-n)))]:[0,0,0]}let a="BLUNT"===e.botId?"armorUp"===e.skillId?2:"boostDash"===e.skillId?5:"overcharge"===e.skillId?-3:0:"RONIN"===e.botId?"overcharge"===e.skillId?-5:0:"TAICHI"===e.botId?"quickTurn"===e.skillId?-2:"impactSlam"===e.skillId?-1.4:0:0;if(0===a)return[0,0,0];let n="BLUNT"===e.botId&&"armorUp"===e.skillId?e.startedAtMs+Math.max(140,.45*e.hitDelayMs):"RONIN"===e.botId?e.startedAtMs+Math.max(60,.2*e.hitDelayMs):e.startedAtMs+Math.max(80,.35*e.hitDelayMs),i=e.startedAtMs+e.durationMs,r=e.startedAtMs+e.durationMs+3e3;return t<=n?[0,0,0]:t<i?[0,0,a*es((t-n)/Math.max(1,i-n))]:t<=r?[0,0,a]:[0,0,0]})(X.current,e),a=C(t,L?v.targetPosition:((e,t,a)=>{if(!(null==e?void 0:e.hitResolution))return a;let n=((e,t)=>{if("BLUNT"===e)switch(t){case"armorUp":return 2.4;case"impactSlam":return 4.8;case"boostDash":return 2.8;case"overcharge":return 2.2;default:return 0}if("RONIN"===e)switch(t){case"boostDash":return 1.1;case"spinStrike":return 3.2;case"quickTurn":return 1.6;case"overcharge":return 4.6;default:return 0}if("TAICHI"===e)switch(t){case"armorUp":return 1.8;case"impactSlam":return 3.4;case"quickTurn":return 1.5;case"overcharge":return 2.9;default:return 0}if("2CLAWS"===e)switch(t){case"impactSlam":return 3.2;case"overcharge":return 2.2;default:return 0}switch(t){case"impactSlam":return 3.2;case"boostDash":return 1.8;case"overcharge":return 1.6;default:return 0}})(e.botId,e.skillId);if(n<=0)return a;let i=el(e),r=i+(e=>{if("BLUNT"===e.botId&&"armorUp"===e.skillId)return 140;
1if("RONIN"===e.botId)switch(e.skillId){case"boostDash":return 210;case"spinStrike":case"quickTurn":return 180;case"overcharge":return 140}if("2CLAWS"===e.botId&&"overcharge"===e.skillId)return 260;if("TAICHI"===e.botId)switch(e.skillId){case"armorUp":case"quickTurn":return 180;case"impactSlam":return 200;case"overcharge":return 240}return 220})(e),s=e.startedAtMs+e.durationMs+3e3,[l,,o]=e.hitResolution.normal;if(t<=i)return a;let c=t<r?n*es((t-i)/Math.max(1,r-i)):t<=s?n:0,d=(e=>{if("2CLAWS"===e.botId&&"overcharge"===e.skillId)return 1.75;if("RONIN"!==e.botId)return 0;switch(e.skillId){case"boostDash":return 1.1;case"spinStrike":return 1.45;case"quickTurn":return 1.12;default:return 0}})(e),u=t<r?(t-i)/Math.max(1,r-i):1,h=t<r?Math.sin(er(u,0,1)*Math.PI)*d:0;return[a[0]+l*c,a[1]+h,a[2]+o*c]})(X.current,e,v.targetPosition),v.sourceGeometry,v.targetGeometry,v.targetPosition);O.current&&O.current.position.set(t[0],t[1],t[2]),U.current&&U.current.position.set(a[0],a[1],a[2])}),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("color",{attach:"background",args:["#070b11"]}),(0,n.jsx)("fog",{attach:"fog",args:["#070b11",22,40]}),(0,n.jsx)("ambientLight",{intensity:1.72}),(0,n.jsx)("hemisphereLight",{intensity:1.24,color:"#eff7ff",groundColor:"#0a1117"}),(0,n.jsx)("directionalLight",{castShadow:!0,position:[6.4,10.8,6.8],intensity:3.1,"shadow-mapSize-width":1024,"shadow-mapSize-height":1024,"shadow-camera-near":.5,"shadow-camera-far":28,"shadow-camera-left":-8,"shadow-camera-right":8,"shadow-camera-top":8,"shadow-camera-bottom":-8}),(0,n.jsx)("directionalLight",{position:[-5.8,7.8,-5.2],intensity:1.5,color:"#d7ecff"}),(0,n.jsx)("spotLight",{position:[-6.2,7.1,-3.2],intensity:22,angle:.48,penumbra:.82,color:"#79c7ff"}),(0,n.jsx)("spotLight",{position:[5.2,7.4,2.8],intensity:26,angle:.52,penumbra:.7,color:"#ffd18a"}),(0,n.jsx)("pointLight",{position:[0,4.8,-2.4],intensity:18,distance:18,decay:1.6,color:"#c9f7ff"}),(0,n.jsxs)("mesh",{receiveShadow:!0,rotation:[-Math.PI/2,0,0],position:[0,-.02,0],children:[(0,n.jsx)("planeGeometry",{args:[P,P]}),(0,n.jsx)("meshStandardMaterial",{color:"#0d131b",roughness:.92,metalness:.08})]}),(0,n.jsxs)("mesh",{rotation:[-Math.PI/2,0,0],position:[0,.06,0],onPointerMove:e=>{if(!L)return;e.stopPropagation();let t=e.point;b(((e,t)=>{let a,n=h.current,i=Math.cos(n),r=Math.sin(n);return C([0,0,0],[Math.min(.84*D,Math.max(-(.84*D),(a=[e*i-t*r,0,e*r+t*i])[0])),0,Math.min(.76*D,Math.max(-(.84*D),a[2]))],v.sourceGeometry,v.targetGeometry)})(t.x,t.z))},onPointerUp:e=>{L&&(e.stopPropagation(),G(!1),g.current=!1)},onPointerCancel:e=>{L&&(e.stopPropagation(),G(!1),g.current=!1)},children:[(0,n.jsx)("planeGeometry",{args:[A,A]}),(0,n.jsx)("meshBasicMaterial",{transparent:!0,opacity:0,depthWrite:!1})]}),(0,n.jsx)("gridHelper",{args:[P,W,"#7df0ab","#243344"],position:[0,.001,0]}),(0,n.jsxs)("mesh",{rotation:[-Math.PI/2,0,0],position:[0,.01,0],children:[(0,n.jsx)("ringGeometry",{args:[.34*D,.35*D,48]}),(0,n.jsx)("meshBasicMaterial",{color:s.bot.accentColor,transparent:!0,opacity:.18,depthWrite:!1})]}),(0,n.jsxs)("group",{ref:z,children:[(0,n.jsxs)("group",{ref:O,children:[(0,n.jsxs)("mesh",{rotation:[-Math.PI/2,0,0],position:[0,.036,0],scale:[v.sourceGeometry.frame[0],v.sourceGeometry.frame[2],1],children:[(0,n.jsx)("planeGeometry",{args:[1,1]}),(0,n.jsx)("meshBasicMaterial",{color:"#f5fbff",transparent:!0,opacity:.86,wireframe:!0,depthWrite:!1})]}),(0,n.jsx)("group",{position:[0,p.baseY,0],children:(0,n.jsx)("group",{scale:p.modelScale,children:(0,n.jsx)(ei.H,{botId:s.bot.id,accentColor:s.bot.accentColor,activeSkillIds:o,skillPreview:d,pulseOffset:.3})})})]}),(0,n.jsx)(eg,{scenario:v,activeGlow:!!(d&&v.skillId&&d.skillId===v.skillId&&Date.now()-d.startedAtMs<d.durationMs)}),v.hitCheck?(0,n.jsx)(em,{position:null!=(a=null==(t=v.hitResolution)?void 0:t.position)?a:v.hitCheck.position,accentColor:s.bot.accentColor}):null,(0,n.jsx)("group",{ref:U,position:v.targetPosition,children:(0,n.jsx)(ep,{position:[0,0,0],size:_(v.targetGeometry),hitStartedAtMs:H,isDragging:L,onDragStart:()=>{G(!0),g.current=!0},onDragEnd:()=>{G(!1),g.current=!1}})}),B?(0,n.jsx)(ee.E,{position:B.position,center:!0,distanceFactor:8,sprite:!0,transform:!1,children:(0,n.jsx)("div",{className:"".concat(c().previewDamageNumber," ").concat("miss"===B.tone?c().previewMissNumber:"").trim(),children:B.label})},B.id):null]})]})}function ex(e){let{botView:t,focusedSkillId:a,activeSkillIds:r,skillPreview:s,skillZoneOverrides:l}=e,o=ed[t.bot.id],d=(0,i.useRef)(ec),u=(0,i.useRef)(-2.6),h=(0,i.useRef)(!1),g=(0,i.useRef)(!1),m=(0,i.useRef)(null),p=(0,i.useRef)(0),f=(0,i.useRef)(ec),[x,b]=(0,i.useState)(!1);(0,i.useEffect)(()=>{d.current=ec,u.current=-2.6,f.current=ec,p.current=0,m.current=null,h.current=!1,b(!1)},[t.bot.id]);let k=e=>{if(m.current===e.pointerId){var t;(t=e.currentTarget)&&null!==m.current&&t.hasPointerCapture(m.current)&&t.releasePointerCapture(m.current),m.current=null,h.current=!1,b(!1)}};return(0,n.jsx)("div",{className:"".concat(c().tuningArenaViewport," ").concat(x?c().tuningArenaDragging:"").trim(),onPointerDown:e=>{g.current||("mouse"!==e.pointerType||0===e.button)&&(e.preventDefault(),m.current=e.pointerId,p.current=e.clientX,f.current=d.current,h.current=!0,b(!0),e.currentTarget.setPointerCapture(e.pointerId))},onPointerMove:e=>{if(g.current||!h.current||m.current!==e.pointerId)return;let t=e.clientX-p.current;d.current=f.current+.014*t},onPointerUp:k,onPointerCancel:k,onLostPointerCapture:k,onWheel:e=>{e.preventDefault(),u.current=Math.min(1.6,Math.max(-4.4,u.current-.0022*e.deltaY))},children:(0,n.jsxs)(ea.Hl,{shadows:!0,dpr:[1,1.5],camera:{position:o.cameraPosition,fov:36,near:.1,far:42},gl:{antialias:!0,alpha:!0,powerPreference:"high-performance"},onCreated:e=>{let{gl:t,camera:a}=e;t.setClearColor("#000000",0),t.toneMapping=en.FV,t.toneMappingExposure=1.04,t.shadowMap.enabled=!0,t.shadowMap.type=en.Wk7,a.lookAt(...o.lookAt)},children:[(0,n.jsx)(eh,{basePosition:o.cameraPosition,lookAt:o.lookAt,zoomRef:u}),(0,n.jsx)(ef,{botView:t,focusedSkillId:a,activeSkillIds:r,skillPreview:s,skillZoneOverrides:l,rotationYRef
1:d,blockViewportDragRef:g})]})})}function eb(e){let{botView:t,currentIndex:a,totalBots:i,activeSkillIds:r,focusedSkillId:s,skillPreview:o,skillZoneOverrides:d,onPrev:u,onNext:h}=e,{text:g,getBotDescription:m}=(0,l.Km)();return(0,n.jsx)("section",{className:c().viewportColumn,children:(0,n.jsxs)("div",{className:c().heroCard,style:{"--bot-accent":t.bot.accentColor},children:[(0,n.jsxs)("div",{className:c().heroHeader,children:[(0,n.jsxs)("div",{className:c().heroIntro,children:[(0,n.jsx)("h1",{className:c().heroTitle,children:t.bot.displayName}),(0,n.jsx)("p",{className:c().heroSubtitle,children:m(t.bot.id)}),(0,n.jsxs)("div",{className:c().pageSwitchInline,children:[(0,n.jsx)("button",{type:"button",className:"".concat(c().pageSwitchButton," tuning-btn"),onClick:u,children:g.previousBot}),(0,n.jsx)("div",{className:c().pageDots,"aria-hidden":"true",children:Array.from({length:i}).map((e,t)=>(0,n.jsx)("span",{className:"".concat(c().pageDot," ").concat(t===a?c().pageDotActive:"").trim()},"bot-page-".concat(t)))}),(0,n.jsx)("button",{type:"button",className:"".concat(c().pageSwitchButton," tuning-btn"),onClick:h,children:g.nextBot})]})]}),(0,n.jsxs)("div",{className:c().heroActions,children:[(0,n.jsx)($(),{href:"/",className:"".concat(c().secondaryLink," secondary-button"),children:g.backToMenu}),(0,n.jsxs)("span",{className:c().pageBadge,children:[a+1," / ",i]})]})]}),(0,n.jsx)("div",{className:c().viewportFrame,children:(0,n.jsx)(ex,{botView:t,focusedSkillId:s,activeSkillIds:r,skillPreview:o,skillZoneOverrides:d})})]})})}var ek=a(148),ev=a(839),ej=a(7982);let ew=(e,t,a)=>Math.min(a,Math.max(t,e)),ey={BLUNT:"/effects/blunt.mp3",RONIN:"/effects/ronin.mp3","2CLAWS":"/effects/2claws.mp3",TAICHI:"/effects/taichi.mp3"},eM=e=>({...e});function e_(){var e,t,a,o,d;(0,eo.U)(e=>e.revision);let u=(0,eo.U)(e=>e.setSkillZoneOverride),h=(0,eo.U)(e=>e.clearSkillOutputPartOverride),g=(0,eo.U)(e=>e.setSkillValueOverride),m=(0,eo.U)(e=>e.clearSkillValueOverride),p=(0,ej.n)(e=>e.soundsEnabled),f=(0,i.useRef)(p);f.current=p;let x=(0,i.useRef)(new Map),{language:b,text:k}=(0,l.Km)(),[v,j]=(0,i.useState)(0),[w,y]=(0,i.useState)(null),[M,_]=(0,i.useState)({}),[C,S]=(0,i.useState)(null),[I,N]=(0,i.useState)(null),[R,D]=(0,i.useState)(null),[T,P]=(0,i.useState)(!1),[A,W]=(0,i.useState)(null),B=(0,ev.O)(e=>e.p1),E=H[v],Z=X(E,b,B);(0,i.useEffect)(()=>{var e,t;y(null!=(t=null==(e=Z.skills[0])?void 0:e.id)?t:null),_({}),S(null),N(null),D(null),W(null)},[E]),(0,i.useEffect)(()=>{if(!C)return;let e=window.setTimeout(()=>{S(e=>(null==e?void 0:e.skillId)===C.skillId?null:e)},Math.max(0,C.endsAtMs-Date.now()));return()=>window.clearTimeout(e)},[C]),(0,i.useEffect)(()=>{if(!I)return;let e=window.setTimeout(()=>{N(e=>(null==e?void 0:e.startedAtMs)===I.startedAtMs?null:e)},I.durationMs+140);return()=>window.clearTimeout(e)},[I]),(0,i.useEffect)(()=>{let e=e=>{e.repeat||_(t=>{var a;let n=t[e.code]?t:{...t,[e.code]:!0},i=Z.skills.find(t=>t.keyCode===e.code&&!!n[t.keyCode]);if(!i)return n;e.preventDefault();let r=Date.now(),s=null!=(a=i.animationDurationMs)?a:i.castMs;return y(i.id),S({skillId:i.id,endsAtMs:r+s}),N({skillId:i.id,startedAtMs:r,durationMs:s}),(e=>{if(!f.current)return;let t=ey[e],a=x.current.get(t),n=a?a.cloneNode(!0):new Audio(t);a||x.current.set(t,new Audio(t)),n.volume=.576,n.currentTime=0,n.play().catch(()=>{})})(Z.bot.id),n})},t=e=>{_(t=>t[e.code]?{...t,[e.code]:!1}:t)};return window.addEventListener("keydown",e),window.addEventListener("keyup",t),()=>{window.removeEventListener("keydown",e),window.removeEventListener("keyup",t)}},[E]);let L=C&&null!=(t=null==(e=Z.skills.find(e=>e.id===C.skillId))?void 0:e.name)?t:null,G=C?[C.skillId]:[],z=null!=(a=null==C?void 0:C.skillId)?a:w,O=null!=(o=null==R?void 0:R.skillId)?o:null,U=z&&O===z&&null!=(d=null==R?void 0:R.zones)?d:null,F=async()=>{if(!T&&window.confirm(k.confirmWriteGenerated(Z.bot.displayName))){P(!0),W(null);try{let e={botId:Z.bot.id,...((e,t)=>{var a,n,i;let r=eo.U.getState(),s=Object.fromEntries(Object.entries(null!=(a=r.skillZoneOverrides[e])?a:{}).map(e=>{let[t,a]=e;return[t,(null!=a?a:[]).map(eM)]})),l={...null!=(n=r.skillOutputPartOverrides[e])?n:{}},o=Object.fromEntries(Object.entries(null!=(i=r.skillValueOverrides[e])?i:{}).map(e=>{let t,[a,n]=e;return[a,{cooldownMs:(t=n).cooldownMs,energyCost:t.energyCost,timing:{...t.timing},animation:t.animation?{...t.animation}:null,attack:t.attack?{...t.attack,damage:{...t.attack.damage,outputParts:t.attack.damage.outputParts?[...t.attack.damage.outputParts]:void 0}}:null}]}));return(null==t?void 0:t.skillId)&&(s[t.skillId]=t.zones.map(eM),delete l[t.skillId]),{skillZoneOverrides:s,skillOutputPartOverrides:l,skillValueOverrides:o}})(Z.bot.id,R)},t=await fetch("/api/bot-tuning/generated-overrides",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw Error("write_failed_".concat(t.status));R&&(u(Z.bot.id,R.skillId,R.zones),h(Z.bot.id,R.skillId),D(null)),W(k.writeGeneratedSuccess)}catch(e){W(k.writeGeneratedError)}finally{P(!1)}}};return(0,n.jsxs)("main",{className:c().page,children:[(0,n.jsx)(r.M,{}),(0,n.jsxs)("div",{className:c().shell,children:[(0,n.jsx)(eb,{botView:Z,currentIndex:v,totalBots:H.length,activeSkillIds:G,focusedSkillId:z,skillPreview:I,skillZoneOverrides:U,onPrev:()=>j(e=>{let t;return(e-1+(t=H.length))%t}),onNext:()=>j(e=>{let t;return(e+1+(t=H.length))%t})}),(0,n.jsx)(J,{botView:Z,selectedSkillId:w,activeSkillIds:G,activeSkillName:L,pressedKeys:M,onWriteGeneratedSettings:F,writeGeneratedPending:T,writeGeneratedMessage:A,skillRangeDraft:R,onStartRangeEdit:e=>{var t,a;let n=Z.bot.stats.skillAttacks[e],i=(0,s.w7)(Z.bot.id,e,n);y(e),D({skillId:e,selectedZoneId:null!=(a=null==(t=i[0])?void 0:t.id)?a:null,zones:i}
1)},onCancelRangeEdit:()=>{D(null)},onSaveRangeEdit:()=>{R&&(u(Z.bot.id,R.skillId,R.zones),h(Z.bot.id,R.skillId),D(null))},onSelectDraftZone:e=>{D(t=>t?{...t,selectedZoneId:e}:t)},onChangeDraftZone:(e,t)=>{D(a=>a?{...a,zones:a.zones.map(a=>a.id===e?((e,t)=>{var a,n,i,r,s,l,o,c;let d=null!=(a=t.shape)?a:e.shape,u=ew(null!=(n=t.reach)?n:e.reach,.3,12),h="radial"===d?2*u:ew(null!=(i=t.width)?i:e.width,.3,12),g="forwardCone"===d?ew(null!=(r=t.angleDeg)?r:e.angleDeg,10,360):360*("radial"===d);return(0,ek.ck)({...e,...t,shape:d,reach:u,width:h,angleDeg:g,offsetX:ew(null!=(s=t.offsetX)?s:e.offsetX,-8,8),offsetZ:ew(null!=(l=t.offsetZ)?l:e.offsetZ,-8,8),qualityMultiplier:null!=(o=t.qualityMultiplier)?o:e.qualityMultiplier,qualityFloor:null!=(c=t.qualityFloor)?c:e.qualityFloor})})(a,t):a)}:a)},onChangeDraftOutputPart:(e,t)=>{D(a=>a?{...a,zones:a.zones.map(a=>a.id===e?{...a,outputPart:t}:a)}:a)},onAddDraftZone:()=>{D(e=>{var t;let a,n,i;if(!e||e.zones.length>=3)return e;let r=(a="forwardBox",n=e.zones.length,i=null==(t=e.zones[0])?void 0:t.outputPart,{id:"zone-".concat(n+1),shape:a,reach:2.4,width:2.2,angleDeg:0,offsetX:0,offsetZ:0,qualityMultiplier:0===n?1:.76,qualityFloor:0===n?.72:.56,outputPart:i});return{...e,selectedZoneId:r.id,zones:[...e.zones,r]}})},onRemoveDraftZone:e=>{D(t=>{var a,n;if(!t||t.zones.length<=1)return t;let i=t.zones.filter(t=>t.id!==e);return{...t,selectedZoneId:null!=(n=null==(a=i[0])?void 0:a.id)?n:null,zones:i}})},onSetSkillValueOverride:g,onClearSkillValueOverride:m,onToggleSkillRange:e=>y(t=>t===e?null:e)})]})]})}},6115:e=>{e.exports={page:"bot-tuning_page__ZAD_n",shell:"bot-tuning_shell__gKi8I",viewportColumn:"bot-tuning_viewportColumn__4hfsp",panelColumn:"bot-tuning_panelColumn__FD1t9",heroCard:"bot-tuning_heroCard__ca0z0",controlsCard:"bot-tuning_controlsCard__SRwSS",infoCard:"bot-tuning_infoCard__xEREY",heroHeader:"bot-tuning_heroHeader__Oic3f",sectionHeader:"bot-tuning_sectionHeader__OzGse",skillHeader:"bot-tuning_skillHeader__3ZdI_",partHeader:"bot-tuning_partHeader__9tIYe",heroIntro:"bot-tuning_heroIntro__7Vtuq",eyebrow:"bot-tuning_eyebrow__TccKI",heroTitle:"bot-tuning_heroTitle__wGdbs",sectionTitle:"bot-tuning_sectionTitle__BOkKd",heroSubtitle:"bot-tuning_heroSubtitle__17uQ_",sectionHint:"bot-tuning_sectionHint__dQTwr",skillDescription:"bot-tuning_skillDescription__xNZRU",heroActions:"bot-tuning_heroActions__53Jcl",secondaryLink:"bot-tuning_secondaryLink__MfB_x",pageSwitchButton:"bot-tuning_pageSwitchButton__iQIsR",rangeToggle:"bot-tuning_rangeToggle__BllAa",pageBadge:"bot-tuning_pageBadge__v_Qjk",pageSwitch:"bot-tuning_pageSwitch__oZUBm",pageSwitchInline:"bot-tuning_pageSwitchInline__9IPBs",tuningActionGroup:"bot-tuning_tuningActionGroup__o_0kO",tuningWriteHint:"bot-tuning_tuningWriteHint__w6teT",pageDots:"bot-tuning_pageDots__P4qBr",pageDot:"bot-tuning_pageDot__pyfV4",pageDotActive:"bot-tuning_pageDotActive__p608c",viewportFrame:"bot-tuning_viewportFrame__l4J_G",tuningArenaViewport:"bot-tuning_tuningArenaViewport__uXBas",tuningArenaDragging:"bot-tuning_tuningArenaDragging__vBY_D",tuningArenaHud:"bot-tuning_tuningArenaHud___81sb",previewDamageNumber:"bot-tuning_previewDamageNumber___We6m",previewDamageRise:"bot-tuning_previewDamageRise__03HLk",previewMissNumber:"bot-tuning_previewMissNumber__MxM_p",tuningArenaDummyTag:"bot-tuning_tuningArenaDummyTag__x60Q4",statusBar:"bot-tuning_statusBar__ndyMm",skillMetaRow:"bot-tuning_skillMetaRow__8y0vx",partMetrics:"bot-tuning_partMetrics__jXFlN",attackMetrics:"bot-tuning_attackMetrics__6Evrm",rangeLegend:"bot-tuning_rangeLegend__Js_A8",subPartList:"bot-tuning_subPartList__TSxa_",skillActionRow:"bot-tuning_skillActionRow__xsWq4",subPartItem:"bot-tuning_subPartItem__y2rg0",partWeight:"bot-tuning_partWeight__5tmvZ",statusActive:"bot-tuning_statusActive__FC3la",keyGroup:"bot-tuning_keyGroup__hlBZq",keyCap:"bot-tuning_keyCap__DExMW",skillKeyCap:"bot-tuning_skillKeyCap__1lPHl",keyCapPressed:"bot-tuning_keyCapPressed__9IRwJ",metricGrid:"bot-tuning_metricGrid__ja7Q9",metricTile:"bot-tuning_metricTile__nmOeL",partCard:"bot-tuning_partCard__cwXZA",skillCard:"bot-tuning_skillCard__U0baq",rangeEmpty:"bot-tuning_rangeEmpty__i_NYv",partList:"bot-tuning_partList__m3Sx0",skillList:"bot-tuning_skillList___zp6J",collapsibleSummary:"bot-tuning_collapsibleSummary__wyN2X",skillTitleRow:"bot-tuning_skillTitleRow__JwhAq",skillSlot:"bot-tuning_skillSlot__vv6hj",skillChangedBadge:"bot-tuning_skillChangedBadge__5o3ep",rangeToggleActive:"bot-tuning_rangeToggleActive__dwJ9z",tagRow:"bot-tuning_tagRow__RtUd4",tag:"bot-tuning_tag__AHGl9",attackBlock:"bot-tuning_attackBlock__vY_gq",skillEditorSection:"bot-tuning_skillEditorSection__s_Upu",skillRangeSection:"bot-tuning_skillRangeSection__WWIRS",skillSectionLabel:"bot-tuning_skillSectionLabel__dS4Pw",skillEditorGrid:"bot-tuning_skillEditorGrid___KBU_",skillAdvanced:"bot-tuning_skillAdvanced__6VuWU",rangeDiagram:"bot-tuning_rangeDiagram__oVpGH",rangeSvg:"bot-tuning_rangeSvg__pw_gN",rangeEditableShape:"bot-tuning_rangeEditableShape__Iee_V",rangeGridBg:"bot-tuning_rangeGridBg__WD6yn",rangeGrid:"bot-tuning_rangeGrid__4Hkhl",rangeTarget:"bot-tuning_rangeTarget__SEByl",rangeSource:"bot-tuning_rangeSource__uRI2G",rangeFacing:"bot-tuning_rangeFacing__1a6PD",rangeAxisLabel:"bot-tuning_rangeAxisLabel__Ehj_e",rangeHitPoint:"bot-tuning_rangeHitPoint__gn9Oh",rangeEditorHandles:"bot-tuning_rangeEditorHandles__zrBDM",rangeEditorHandle:"bot-tuning_rangeEditorHandle__a_5QZ",rangeEditorHandleCenter:"bot-tuning_rangeEditorHandleCenter__8tzWq",rangeEditor:"bot-tuning_rangeEditor__jbspo",rangeEditorToolbar:"bot-tuning_rangeEditorToolbar__Dr2tC",rangeEditorChip:"bot-tuning_rangeEditorChip__XvqIO",rangeEditorAction:"bot-tuning_rangeEditorAction__ypuwO",rangeEditorChipActive:"bot-tuning_rangeEditorChipActive__lLmdZ",rangeEditorGrid:"bot-tuning_rangeEditorGrid__abQJ3",rangeEditorField:"bot-tuning_rangeEditorField__tb6Rg"}},6763:(e,t,a)=>{Promise.resolve().then(a.bind(a,4046))},7303:(e,t,a)=>{"use strict";a.d(t,{t:()=>n,w:()=>i});let n=(e,t)=>e[t],i=(e,t)=>!!e[t]},8150:(e,t,a)=>{"use strict";a.d(t,{By:()=>g,DF:()=>h,Km:()=>m,en:()=>u});var n=a(5769);let i={"zh-TW":{statusRole:"å®ä½",statusWeight:"éé",statusForward:"åé²",previewingSkill:e=>"æ¼ç¤ºä¸ ".concat(e),waitingForSkill:"çå¾
æè½è§¸ç¼",keysTitle:"éµä½",writeSettings:"寫å
¥è¨å®",writingSettings:"寫å
¥ä¸...",writeGeneratedHint:"寫å
¥çæè¨å®",botSectionTitle:"æ©é«",partsTitle:"é¶ä»¶",skillsTitle:"æè½",battery:"é»
1é",forward:"åé²",reverse:"å¾é",turn:"è½å",weaponDamage:"æ¦å·",defense:"é²ç¦¦",impact:"ææ",stability:"ç©©å®",evade:"éé¿",burst:"çç¼",weight:"éé",attack:"æ»æ",changed:"å·²æ¹",range:"å¤å®ç¯å",saveRange:"å²åç¯å",cancel:"åæ¶",editRange:"編輯ç¯å",restoreDefault:"éåé è¨",keybind:"éµä½",cooldown:"å·å»",energyCost:"è½è",totalCast:"總æ½å±",common:"常ç¨",cooldownMs:"å·å» ms",startup:"åæ",active:"çæ",recovery:"徿",animation:"åç«",hitWindowStart:"å½ä¸çªèµ·é»",hitWindowEnd:"å½ä¸çªçµé»",minDamage:"æå°å·å®³",maxDamage:"æå¤§å·å®³",damageCoefficients:"å·å®³ä¿æ¸",baseMultiplier:"åºç¤åç",weaponRatio:"æ¦å¨ä¿æ¸",impactRatio:"ææä¿æ¸",defenseRatio:"é²ç¦¦ä¿æ¸",recoilRatio:"åè¡ä¿æ¸",batteryDamage:"é»éå·å®³",rangeParameters:"å¤å®åæ¸",outputPart:"輸åºé¨ä»¶",shape:"å¤å®å½¢ç",extraReach:"é¡å¤è·é¢",widthScale:"å¯¬åº¦ä¿æ¸",minWidth:"æå°å¯¬åº¦",angle:"è§åº¦",targetRadiusScale:"ç®æ¨åå¾ä¿æ¸",feedbackWeight:"åé¥å æ¬",damageByHitPosition:"å°æµæ¿å·ä¾å½ä¸ä½ç½®",output:"輸åº",resolvedShape:"å¤å®å½¢ç",actualReach:"實éè·é¢",actualWidth:"實é寬度",actualAngle:"實éè§åº¦",previousBot:"ä¸ä¸å°",nextBot:"ä¸ä¸å°",backToMenu:"è¿å主é¸å®",noDirectHitRange:"ç¶åæ©é«æ²æé
ç½®ç´æ¥å½ä¸å¤å®ï¼é è¦½å ´åªä¿çåä½èé²å®çªå£ã",forwardAxis:"åæ¹",resolvedRange:"ç實解æç¯å",additionalRanges:e=>"éå ç¯å ".concat(e),dummyCenter:"ç´
é»çº Dummy ä¸å¿",contactPoint:"ç´
é»çºæ¥è§¸é»",dummyX:"Dummy X",dummyZ:"Dummy Z",hitDamage:"å½ä¸å·å®³",mainZone:"主å",zone:e=>"åå ".concat(e+1),addZone:"+ åå",deleteZone:"åªé¤",reach:"è·é¢",width:"寬度",offsetX:"åç§» X",offsetZ:"åç§» Z",notConfigured:"æªé
ç½®",skillSlot:e=>"æè½ ".concat(e+1),confirmWriteGenerated:e=>"確èªå° ".concat(e," ç¶åé å·²å¯ç·¨è¼¯è¨å®å¯«å
¥çæè¨å®åï¼\né䏿¥åªææ´æ°çææªæ¡ï¼ä¸æè¦èæå¯«æ£å¼è¨å®ã"),writeGeneratedSuccess:"已寫å
¥çæè¨å®ï¼æçµæå¯«æ£å¼è¨å®è«çå
¨é¨é©è宿å¾å確èªå寫ã",writeGeneratedError:"寫å
¥çæè¨å®å¤±æï¼è«é試ã"},en:{statusRole:"Role",statusWeight:"Weight",statusForward:"Forward",previewingSkill:e=>"Previewing ".concat(e),waitingForSkill:"Waiting For Skill Trigger",keysTitle:"Keys",writeSettings:"Write Settings",writingSettings:"Writing...",writeGeneratedHint:"Write generated config",botSectionTitle:"Bot",partsTitle:"Parts",skillsTitle:"Skills",battery:"Battery",forward:"Forward",reverse:"Reverse",turn:"Turn",weaponDamage:"Weapon DMG",defense:"Defense",impact:"Impact",stability:"Stability",evade:"Evade",burst:"Burst",weight:"Weight",attack:"Attack",changed:"Changed",range:"Range",saveRange:"Save Range",cancel:"Cancel",editRange:"Edit Range",restoreDefault:"Restore Default",keybind:"Keys",cooldown:"Cooldown",energyCost:"Energy",totalCast:"Total Cast",common:"Core",cooldownMs:"Cooldown ms",startup:"Startup",active:"Active",recovery:"Recovery",animation:"Animation",hitWindowStart:"Hit Start",hitWindowEnd:"Hit End",minDamage:"Min Damage",maxDamage:"Max Damage",damageCoefficients:"Damage Coefficients",baseMultiplier:"Base Multiplier",weaponRatio:"Weapon Ratio",impactRatio:"Impact Ratio",defenseRatio:"Defense Ratio",recoilRatio:"Recoil Ratio",batteryDamage:"Battery Damage",rangeParameters:"Range Parameters",outputPart:"Output Part",shape:"Shape",extraReach:"Extra Reach",widthScale:"Width Scale",minWidth:"Min Width",angle:"Angle",targetRadiusScale:"Target Radius Scale",feedbackWeight:"Feedback Weight",damageByHitPosition:"Enemy damage follows hit part",output:"Output",resolvedShape:"Resolved Shape",actualReach:"Actual Reach",actualWidth:"Actual Width",actualAngle:"Actual Angle",previousBot:"Prev Bot",nextBot:"Next Bot",backToMenu:"Back To Menu",noDirectHitRange:"This bot has no direct-hit range configured. The preview keeps motion and defense windows only.",forwardAxis:"FORWARD",resolvedRange:"Resolved Range",additionalRanges:e=>"Extra Zones ".concat(e),dummyCenter:"Red dot is dummy center",contactPoint:"Red dot is contact point",dummyX:"Dummy X",dummyZ:"Dummy Z",hitDamage:"Hit Damage",mainZone:"Main Zone",zone:e=>"Zone ".concat(e+1),addZone:"+ Zone",deleteZone:"Delete",reach:"Reach",width:"Width",offsetX:"Offset X",offsetZ:"Offset Z",notConfigured:"Not Set",skillSlot:e=>"Skill ".concat(e+1),confirmWriteGenerated:e=>"Write the editable settings on ".concat(e,"'s current page into the generated config?\nThis only updates generated files and will not overwrite the handwritten source config."),writeGeneratedSuccess:"Generated config updated. Keep the handwritten config untouched until final verification is done.",writeGeneratedError:"Failed to write the generated config. Please retry."}},r={"zh-TW":{armorLeft:"å·¦è£ç²",armorRight:"å³è£ç²",weapon:"æ¦å¨",chassis:"åºç¤"},en:{armorLeft:"Left Armor",armorRight:"Right Armor",weapon:"Weapon",chassis:"Chassis"}},s={"zh-TW":{forward:"åé²",backward:"å¾é",left:"å·¦è½",right:"å³è½",boost:"æ¨é²",skill1:"æè½ 1",skill2:"æè½ 2",skill3:"æè½ 3",skill4:"æè½ 4"},en:{forward:"Forward",backward:"Reverse",left:"Turn Left",right:"Turn Right",boost:"Boost",skill1:"Skill 1",skill2:"Skill 2",skill3:"Skill 3",skill4:"Skill 4"}},l={"zh-TW":{forwardBox:"æ¹å½¢",radial:"åå½¢",forwardCone:"æå½¢"},en:{forwardBox:"Box",radial:"Radial",forwardCone:"Cone"}},o={"zh-TW":{healthy:"å®å¥½",damaged:"åæ",critical:"屿¥",destroyed:"æ¯å£"},en:{healthy:"Healthy",damaged:"Damaged",critical:"Critical",destroyed:"Destroyed"}},c={"zh-TW":{BLUNT:"éåå£å¶ãè¿«æåæ¨é²åå¦å
ã",RONIN:"é«è¼¸åºå壿±ºé¬¥æ©ãéæ»åæ§å ´ã","2CLAWS":"èåééå£å¶æ©ï¼é å
ç è¿è·é¢å£è¿«éæ»ç©ºéã",TAICHI:"ç©©å®å
¨è½åï¼å
¼å
·å¯¦ç¨æå¼èååæ§å¶ã"},en:{BLUNT:"Heavy suppressor. Mortar and thrust tank.",RONIN:"High-output front-pressure duelist. Fast-attack controller.","2CLAWS":"Wasteland clamp buggy that crushes spacing with brutal close-range pressure.",TAICHI:"Stable all-rounder with good utility and zone control."}},d={"zh-TW":{BLUNT:{boostDash:"BLUNT å忍é²è«å°ï¼æéè·é¢æä»¥åæ¨è¡æéé貼身追æè
ã",spinStrike:"BLUNT æªé
ç½®æ¤æè½ã",armorUp:"å·¦å³è·ç¾å±éæè¿èº«é²ååï¼å¼·å硬å交æè貼身åéè½åã",impactSlam:"主ç®åå£éæï¼å½ä¸å¾æåºé«è¡æèæé¡¯ç©ºééç½®æã",quickTurn:"BLUNT æªé
ç½®æ¤æè½ã",overcharge:"主ç®èè·ç¾ååç¶ è²å£å¶åï¼å½¢æå¼·çç¯å¥å£è¿«è追æçªå£ã"},RONIN:{boostDash:"éé¤éç¤ï¼æ®å·å°æ¹ä¸¦å°å°æ¹å½é¢å°é¢ã",spinStrike:"çéæè½ 3 ç§ï¼æ»æå°æµäººæï¼
1å°æµäººå½åæé èã",armorUp:"RONIN æªé
ç½®æ¤æè½ã",impactSlam:"RONIN æªé
ç½®æ¤æè½ã",quickTurn:"çé å½åºéæå°æ¹ï¼è·é¢è¶è¿å·å®³è¶é«ã",overcharge:"è¡åå°æ¹ä½¿ç¨ï¼é度è¶é«å·å®³è¶é«ã"},"2CLAWS":{boostDash:"2CLAWS æªé
ç½®æ¤æè½ã",spinStrike:"2CLAWS æªé
ç½®æ¤æè½ã",armorUp:"æ®å·å°æ¹ï¼ä¸¦æçº 5 ç§è®å°æ¹é»åä¸é 10%ã",impactSlam:"鿻尿¹ï¼ä¸¦å°å°æ¹å½éï¼é æçæ«é失衡ã",quickTurn:"ééå·¦å³é£æï¼æ®å·å°æ¹å·¦å³æ©ç²ã",overcharge:"é夾尿ï¼å°å°æ¹ç ¸å°å°é¢å¾åå½åé«ç©ºã"},TAICHI:{boostDash:"TAICHI æªé
ç½®æ¤æè½ã",spinStrike:"TAICHI æªé
ç½®æ¤æè½ã",armorUp:"å±é忹弧形è·å¢ï¼å¸éæ£é¢è¡å¢ä¸¦å°è¿èº«æµäººåè½æ¨åºã",impactSlam:"éåå±éå¾åä¸ç·éåï¼éæä¸¦å°å°ææ¨åºç¯å¥ä½ã",quickTurn:"éå靿¥æ»åï¼å¿«éè½å¢ä¿®è§ä¸¦å鿣忹ã",overcharge:"éå大å¹
å±éé«éæè½ï¼å½¢æçæååå°è¿èº«æµäººæ´é«å¤æ¨ã"}},en:{BLUNT:{boostDash:"BLUNT reverses out of pressure and blasts away nearby pursuers while creating space.",spinStrike:"BLUNT does not use this skill.",armorUp:"The side shields deploy into a close-range counter zone for harder trades and point-blank rebounds.",impactSlam:"The main cannon drives forward with a heavy strike that lands high impact and a clear spacing reset.",quickTurn:"BLUNT does not use this skill.",overcharge:"The main cannon and shields ignite a green suppression field that creates relentless pressure and chase windows."},RONIN:{boostDash:"Clears obstacles, deals standard damage, and pops the target off the ground.",spinStrike:"Spins at top speed for 3 seconds and launches enemies to max distance on hit.",armorUp:"RONIN does not use this skill.",impactSlam:"RONIN does not use this skill.",quickTurn:"The dog-head unit snaps out for a heavy hit; the closer the target, the higher the damage.",overcharge:"Rushes straight at the target; higher speed means higher damage."},"2CLAWS":{boostDash:"2CLAWS does not use this skill.",spinStrike:"2CLAWS does not use this skill.",armorUp:"Deals standard damage and drains 10% of the target's energy over 5 seconds.",impactSlam:"Heavy strike that knocks the target back and causes a short severe imbalance.",quickTurn:"The twin claws chain left-right hits for standard damage across the target's side armor.",overcharge:"Grabs and slams the target into the ground before bouncing it high into the air."},TAICHI:{boostDash:"TAICHI does not use this skill.",spinStrike:"TAICHI does not use this skill.",armorUp:"Unfolds a forward guarding arc that redirects frontal pressure and pushes nearby enemies off line.",impactSlam:"The twin blades open and shock-cut through center line, landing a heavy hit and resetting pace.",quickTurn:"The twin blades step through a quick sliding cut to retake angle and slice the lane ahead.",overcharge:"The twin blades spread wide and spin at high speed, creating a short push-out zone around the bot."}}},u=e=>i[e],h=e=>s[e],g=(e,t,a)=>d[a][e][t];function m(){let{language:e,getRoleLabel:t}=(0,n.s)();return{language:e,text:u(e),partTypeLabels:r[e],controlLabels:h(e),shapeLabels:l[e],partStatusLabels:o[e],getRoleLabel:t,getBotDescription:t=>c[e][t],getSkillDescription:(t,a)=>g(t,a,e)}}}},e=>{e.O(0,[6358,6667,4562,970,9769,1360,5616,5670,6414,8889,5433,556,9525,2618,7358],()=>e(e.s=6763)),_N_E=e.O()}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.