PageSourceSearch

https://mock-dream.net/assets/FxSection-DBeNld7n.js

js mock-dream.net collected 2026-10-02 02:04:10 UTC 9,702 bytes, 1 lines download raw bytes

1import{r as d,j as f}from"./index-CDarmjNK.js";import{C as g}from"./CatalogCard-udQmjOKi.js";import{M as b}from"./MicroSimCanvas-DiXBUn6m.js";import{S as u}from"./SectionHeader-D3Bfjg4J.js";import{d as k}from"./mascot-HKzT898Z.js";const T="#f5f0e6",m="#0a0a0a";function y(o){const s=o.kind;return{init:({width:a,height:e})=>({kind:s,w:a,h:e,px:a*.32,py:e*.55,ex:a*.7,ey:e*.55,phase:0,cd:.4,rings:[],dmg:[],shakeT:0,flashT:0,hitstopT:0,enemyFlash:0,burnT:0,freezeT:0,wetT:0,inkPath:[],bossCueT:0,levelUpT:0}),resize:(a,e,r)=>{a.w=e,a.h=r,a.px=e*.32,a.py=r*.55,a.ex=e*.7,a.ey=r*.55},tick:(a,e)=>{const r=a.hitstopT>0?0:e;if(a.phase+=r,a.cd-=e,a.hitstopT=Math.max(0,a.hitstopT-e),a.shakeT=Math.max(0,a.shakeT-e),a.flashT=Math.max(0,a.flashT-e),a.enemyFlash=Math.max(0,a.enemyFlash-e*3),a.burnT=Math.max(0,a.burnT-e),a.freezeT=Math.max(0,a.freezeT-e),a.wetT=Math.max(0,a.wetT-e),a.bossCueT=Math.max(0,a.bossCueT-e),a.levelUpT=Math.max(0,a.levelUpT-e),a.freezeT<=0&&(a.ey=a.h*.55+Math.sin(a.phase*1.4)*8),a.kind==="ink-trail"){a.px=a.w*.5+Math.cos(a.phase*.8)*60,a.py=a.h*.55+Math.sin(a.phase*.8)*30,a.inkPath.push([a.px,a.py,0]),a.inkPath.length>60&&a.inkPath.shift();for(const n of a.inkPath)n[2]+=e;a.inkPath=a.inkPath.filter(n=>n[2]<2.5)}a.cd<=0&&(a.cd=1.4,v(a));for(const n of a.rings)n.age+=e;a.rings=a.rings.filter(n=>n.age<n.maxAge);for(const n of a.dmg)n.age+=e;a.dmg=a.dmg.filter(n=>n.age<1.2)},draw:(a,e)=>{let r=0,n=0;if(a.shakeT>0){const i=a.shakeT/.4;r=(Math.random()-.5)*12*i,n=(Math.random()-.5)*12*i}e.save(),e.translate(r,n),e.fillStyle=T,e.fillRect(-20,-20,a.w+40,a.h+40);const p=a.kind==="halftone"?.14:.04;e.fillStyle=`rgba(10,10,10,${p})`;const t=a.kind==="halftone"?6:8;for(let i=4;i<a.h;i+=t)for(let l=i/t%2===0?4:4+t/2;l<a.w;l+=t)e.beginPath(),e.arc(l,i,a.kind==="halftone"?1.1:.7,0,Math.PI*2),e.fill();if(a.kind==="scanlines"){e.fillStyle="rgba(10,10,10,0.08)";for(let i=0;i<a.h;i+=3)e.fillRect(0,i,a.w,1)}if(a.kind==="ink-trail"){e.strokeStyle=m,e.lineWidth=3.5,e.lineCap="round";for(let i=1;i<a.inkPath.length;i++){const l=a.inkPath[i-1],h=a.inkPath[i],c=h[2];e.globalAlpha=Math.max(0,1-c/2.5)*.7,e.beginPath(),e.moveTo(l[0],l[1]),e.lineTo(h[0],h[1]),e.stroke()}e.globalAlpha=1}for(const i of a.rings){const l=i.age/i.maxAge,h=i.r0+(i.r1-i.r0)*l;e.globalAlpha=1-l,e.strokeStyle=i.color,e.lineWidth=i.w,e.beginPath(),e.arc(a.ex,a.ey,h,0,Math.PI*2),e.stroke()}e.globalAlpha=1,k(e,a.px,a.py,14,a.phase,{variant:"classic",aimDx:a.ex-a.px,aimDy:a.ey-a.py,glow:a.kind==="level-up"&&a.levelUpT>0?a.levelUpT*1.5:0}),M(e,a.ex,a.ey,a),a.burnT>0&&S(e,a.ex,a.ey,a.phase),a.freezeT>0&&P(e,a.ex,a.ey),a.wetT>0&&A(e,a.ex,a.ey,a.phase);for(const i of a.dmg){const l=1-i.age;e.globalAlpha=l,e.fillStyle=i.color,e.strokeStyle=m,e.lineWidth=2.5,e.font=`bold ${i.size}px ui-monospace, monospace`,e.textAlign="center";const h=i.y-i.age*32;e.strokeText(i.text,i.x,h),e.fillText(i.text,i.x,h),e.globalAlpha=1}if(a.kind==="vignette"){const i=e.createRadialGradient(a.w/2,a.h/2,a.h*.2,a.w/2,a.h/2,a.h*.7);i.addColorStop(0,"rgba(0,0,0,0)"),i.addColorStop(1,"rgba(0,0,0,0.55)"),e.fillStyle=i,e.fillRect(0,0,a.w,a.h)}if(a.kind==="boss-cue"&&a.bossCueT>0){e.save(),e.globalAlpha=Math.min(1,a.bossCueT*2),e.fillStyle="#c0392b";for(let i=-a.h;i<a.w;i+=24)e.beginPath(),e.moveTo(i,0),e.lineTo(i+14,0),e.lineTo(i+14+a.h,a.h),e.lineTo(i+a.h,a.h),e.closePath(),e.fill();e.restore()}if(a.kind==="level-up"&&a.levelUpT>0){e.save(),e.globalAlpha=a.levelUpT,e.strokeStyle="#c89a2a",e.lineWidth=2;for(let i=0;i<8;i++){const l=i/8*Math.PI*2+a.phase*.5;e.beginPath(),e.moveTo(a.px+Math.cos(l)*16,a.py+Math.sin(l)*16),e.lineTo(a.px+Math.cos(l)*60,a.py+Math.sin(l)*60),e.stroke()}e.restore()}a.flashT>0&&(e.fillStyle=`rgba(255,255,255,${Math.min(.9,a.flashT*2.2)})`,e.fillRect(0,0,a.w,a.h)),a.kind==="hitstop"&&a.hitstopT>0&&(e.fillStyle=m,e.font="bold 11px ui-monospace, monospace",e.textAlign="center",e.fillText("⏸ HITSTOP",a.w/2,18)),e.strokeStyle=m,e.lineWidth=1.2,e.strokeRect(2,2,a.w-4,a.h-4),e.restore()}}}function v(o){const s="#c0392b",a="#c89a2a",e="#2a4a8a",r="#2a6a5a";switch(o.kind){case"ring-pulse":o.rings.push({age:0,maxAge:.55,r0:6,r1:56,color:s,w:2.4}),o.rings.push({age:0,maxAge:.45,r0:3,r1:38,color:m,w:1.2}),o.enemyFlash=1;break;case"hitstop":o.hitstopT=.5,o.enemyFlash=1,o.rings.push({age:0,maxAge:.35,r0:4,r1:30,color:a,w:2});break;case"screen-shake":o.shakeT=.4,o.enemyFlash=1;break;case"screen-flash":o.flashT=.4;break;case"damage-numbers":{const n=[m,m,a,s],p=[12,13,15,18],t=["7","12","24","CRIT 48"],i=Math.random()*4|0;o.dmg.push({age:0,x:o.ex+(Math.random()-.5)*30,y:o.ey-12,text:t[i],color:n[i],size:p[i]}),o.enemyFlash=1;break}case"burn":o.burnT=1.2,o.enemyFlash=.5;break;case"freeze":o.freezeT=1.2,o.rings.push({age:0,maxAge:.5,r0:4,r1:32,color:e,w:2});break;case"wet-slow":o.wetT=1.2,o.rings.push({age:0,maxAge:.5,r0:4,r1:36,color:e,w:1.6});break;case"ink-trail":o.enemyFlash=0;break;case"boss-cue":o.bossCueT=.8;break;case"level-up":o.levelUpT=1,o.flashT=.25,o.rings.push({age:0,maxAge:.7,r0:6,r1:80,color:a,w:2.4}),o.rings.push({age:0,maxAge:.5,r0:4,r1:50,color:r,w:1.6});break}}function M(o,s,a,e){o.save(),o.fillStyle="rgba(0,0,0,0.32)",o.beginPath(),o.ellipse(s,a+16,14,4,0,0,Math.PI*2),o.fill();const r=e.enemyFlash;o.fillStyle=r>0?`rgba(255,255,255,${.4+r*.6})`:"#1a1a1a",o.strokeStyle=m,o.lineWidth=1.6,o.beginPath(),o.arc(s,a,14,0,Math.PI*2),o.fill(),o.stroke(),o.fillStyle="#f5f0e6",o.beginPath(),o.arc(s-4,a-2,2,0,Math.PI*2),o.arc(s+4,a-2,2,0,Math.PI*2),o.fill(),o.restore(
1)}function S(o,s,a,e){o.save(),o.fillStyle="#d97a2c";for(let r=0;r<5;r++){const n=e*4+r,p=s+Math.cos(n)*8,t=a-14-(e*60+r*14)%28;o.globalAlpha=.6,o.beginPath(),o.arc(p,t,3+Math.sin(n)*.8,0,Math.PI*2),o.fill()}o.restore()}function P(o,s,a){o.save(),o.strokeStyle="#2a4a8a",o.lineWidth=1.5,o.globalAlpha=.85;for(let e=0;e<6;e++){const r=e/6*Math.PI*2;o.beginPath(),o.moveTo(s+Math.cos(r)*6,a+Math.sin(r)*6),o.lineTo(s+Math.cos(r)*18,a+Math.sin(r)*18),o.stroke()}o.fillStyle="rgba(42,74,138,0.18)",o.beginPath(),o.arc(s,a,16,0,Math.PI*2),o.fill(),o.restore()}function A(o,s,a,e){o.save(),o.strokeStyle="#2a4a8a",o.globalAlpha=.7;for(let r=0;r<3;r++){const n=8+r*6+Math.sin(e*3+r)*1.5;o.beginPath(),o.arc(s,a+14,n,Math.PI*.1,Math.PI-.1),o.stroke()}o.restore()}const C=[{id:"ring-pulse",name:"Ring Pulse",kana:"リン",rarity:"cinnabar",flavor:"Toda morte deixa um anel. O catálogo da violência.",mechanic:"Ring duplo: cor + tinta",impact:"Marca o ponto de impacto."},{id:"hitstop",name:"Hitstop",kana:"トマ",rarity:"mustard",flavor:"O tempo trava 80ms. Você sente o peso.",mechanic:"Frame freeze · pulso pequeno",impact:"Peso de bombas e crits."},{id:"screen-shake",name:"Screen Shake",kana:"ユレ",rarity:"cinnabar",flavor:"A câmera treme. Foi forte.",mechanic:"Translate aleatório com decay",impact:"Bombas, bosses, kitsune."},{id:"screen-flash",name:"Screen Flash",kana:"ヒカ",rarity:"mustard",flavor:"Branco. Você pisca. Tudo mudou.",mechanic:"Overlay branco com fade",impact:"Level-up, boss-spawn, kitsune."},{id:"damage-numbers",name:"Damage Numbers",kana:"ダメ",rarity:"common",flavor:"Os números sobem. O combate é coreografia.",mechanic:"Float vertical · cor por tier",impact:"Feedback de cada hit."},{id:"burn",name:"Burn DoT",kana:"ヤケ",rarity:"mustard",flavor:"Brasas sobem da carne morta. Continua tirando dano.",mechanic:"Partículas laranja · DPS contínuo",impact:"Hanabi · queima por DOT."},{id:"freeze",name:"Freeze Stun",kana:"コオ",rarity:"cobalt",flavor:"Cristais cobalto. O inimigo deixa de existir por 1s.",mechanic:"Cristais radiais · velocidade 0",impact:"Status raro · controle pesado."},{id:"wet-slow",name:"Wet Slow",kana:"ヌレ",rarity:"cobalt",flavor:"Pingos de chuva. Tudo desacelera.",mechanic:"Ondas azuis · velocidade −40%",impact:"Tako · sopro molhado em cone."},{id:"ink-trail",name:"Ink Trail",kana:"スミ",rarity:"common",flavor:"A pintura escorre. Quem pisa, sangra.",mechanic:"Caminho persistente · DoT por contato",impact:"Sumi-no-Michi · trilha do MD."},{id:"vignette",name:"Vignette",kana:"カゲ",rarity:"violet",flavor:"As bordas escurecem. A arena se fecha.",mechanic:"Gradiente radial preto",impact:"Setado pelo bioma (templo afundado, beco)."},{id:"halftone",name:"Halftone",kana:"ハフ",rarity:"common",flavor:"A textura do papel. Grão de mangá impresso.",mechanic:"Grid de pontos com offset",impact:"DNA visual do Mock Dream."},{id:"scanlines",name:"Scanlines",kana:"スキ",rarity:"common",flavor:"Faixas horizontais. Como xerox de fanzine.",mechanic:"Linhas 1px a cada 3px",impact:"Modo retro · easter eggs."},{id:"boss-cue",name:"Boss Cue",kana:"ボス",rarity:"cinnabar",flavor:"Listras cinabre. Algo enorme tá chegando.",mechanic:"Stripes diagonais · 0.8s",impact:"Telegraph universal de boss."},{id:"level-up",name:"Level Up",kana:"アガ",rarity:"jade",flavor:"Raios mostarda. O MD cresce. Você escolhe.",mechanic:"Beams radiais · flash + ring duplo",impact:"Marca o momento de escolha."}];function O(){const o=d.useMemo(()=>C.map(s=>({meta:s,hooks:y({kind:s.id})})),[]);return f.jsxs("section",{className:"mb-10",children:[f.jsx(u,{sprint:"Sprint CAT-7",title:"FX · 14 efeitos · vocabulário visual",subtitle:"Cada card isola UM efeito do engine: rings, hitstop, shake, flash, status (burn/freeze/wet/ink), vignette, halftone, scanlines, boss-cue e level-up."}),f.jsx("div",{className:"grid gap-4 grid-cols-1 sm:grid-cols-2 lg:grid-cols-3",children:o.map(s=>f.jsx(g,{title:s.meta.name,kana:s.meta.kana,rarity:s.meta.rarity,aspect:"square",sim:f.jsx(b,{hooks:s.hooks,options:{fps:30},liveBadge:!0}),flavor:s.meta.flavor,mechanic:s.meta.mechanic,impact:s.meta.impact},s.meta.id))})]})}export{O as default};

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.