---
name: vfxsmith
description: Search, generate, refine and install pixel art game VFX and sprite sheets through the VfxSmith MCP server. Handle English and Chinese effect requests. Use for game effects, not audio or generic art.
---

# VfxSmith game effects

Use the authorized VfxSmith MCP connection at https://vfxsmith.com/mcp. No repository checkout is needed.
If disconnected, follow https://vfxsmith.com/agents/ and let the user approve browser consent.
Never request tokens in chat. The user controls the credit ceiling and expiry and can revoke at https://vfxsmith.com/agent/.
Read this skill before using generation tools. Reply in the user's language, including Chinese.

## Brief before generating

Inspect the intended game project first: engine configuration (for example project.godot), existing sprite
dimensions, palette, pixel scale, camera and the action that needs an effect. Inspect images, not just filenames.
Infer what these establish and label assumptions. Ask only for important details the project cannot establish.
State a short brief before spending, in the user's language:

> Subject & action: … | Genre / camera: … (side / top-down / isometric)
> Sprite: W×H px; existing game pixel scale: … | Palette / element: …
> Playback: one-shot / loop, … seconds at … fps | Beats: anticipation → impact frame/time → recovery
> Separately editable parts: … | Background: transparent | Pivot: … | Target engine: …

Use the MCP prompt `vfx_brief` if this checklist is not otherwise available.
Convert the brief into this house prompt; retain the user's intent when translating Chinese:

```text
[Subject] [action], for [genre], [camera] view.
[W×H] px at [game pixel scale], [palette/element], transparent background.
[One-shot/loop], [duration] seconds at [fps] fps.
Timing: [anticipation → impact frame/time → recovery].
Separate editable parts: [parts]. Pivot: [placement].
Target: [engine]. Preserve [constraints].
```

Do not invent a supported export for audio, characters or generic illustration. Keep requests scoped to pixel VFX.

## Reuse before spending

1. Call `search_assets` for owned generated effects. Follow `next` as `before`, even after an empty page.
2. Call free `search_library` for public effects by English name, category or tags. Translate Chinese search terms
   (火焰斩击 → fire slash); follow numeric `next` as `offset`. Returned options describe the effect's controls.
3. Reuse suitable owned assets with `export_asset`; reuse library PNG + JSON or Godot ZIP downloads for free.
   Keep library license and notice files. Library downloads are the published defaults; use its page for free edits.
4. When an owned effect is close, prefer refinement with its UUID as `baseAssetId` over a fresh generation.
   Public library IDs are not owned UUIDs; never pass them as `baseAssetId`.

## Generate and refine deliberately

- Call `account_usage` before spending; check wallet, grant budget, scopes, expiry and current prices.
  Standard is the default (5 credits); Enhanced is 15 and Ultra 40. Use a higher mode only when requested or authorized.
  Failed runs without delivery refund credits; a usable delivered version is charged even at a cost cap.
- Use explicit `maxCredits` within the user's authorization and a unique persistent `requestId` (8–128 letters,
  digits, underscores or hyphens). Save the ID and exact arguments locally before the call; save the returned job ID.
  Never store OAuth tokens in the project. One active job at a time.
- Call `generate_asset` only after the brief and reuse check. After an uncertain network outcome, retry with the
  SAME request ID and identical arguments. A different ID buys another run; changing arguments on the same ID conflicts.
- Poll `get_job` with the returned job ID until succeeded or failed; never regenerate to check progress.
  Respect Retry-After/rate limits; use a brief delay between polls. On terminal failure, report it before buying another run.
- Open the signed `previewUrl` / `contactUrl` in the result (or `inspect_asset` / `export_asset`). Inspect silhouette,
  palette, scale, clipping, timing, impact and transparent recovery before declaring done. If image viewing is unavailable,
  say visual review is incomplete. Refresh expired links by calling `export_asset` again.
- Refine by naming what changes and what remains: “Keep the silhouette, palette and pivot; shorten recovery to 0.2 s,
  move impact to frame 8, separate smoke and sparks.” Use `baseAssetId`, a new request ID and explicit credit limit.

## Install into the game

Call `export_asset` with the owned `assetId`, optional ready `revision` (1–3), and `target: "godot"` or `"spritesheet"`.
It returns a safe directory name, PNG download URLs and small inline text files. Download PNGs within ten minutes;
write text exactly, keeping all files together in a new folder inside the intended project. Reject path traversal and
do not overwrite user edits. Preserve LICENSE.txt, NOTICE.txt and ASSET-PROVENANCE.txt.
Never download or execute generated `effect.js`. The remote server cannot write local files; do that with local tools.
Exports represent the original rendered revision; saved browser palette/parameter/timing edits are not baked in.

For Godot 4:

- Find project.godot; place the returned folder under the project and import it with the editor.
- Instance the returned `.tscn`, which is an AnimatedSprite2D using `.tres` SpriteFrames and the trusted `.gd` template.
  Place it at the gameplay action point; its pivot is already encoded. Prefer whole-number display scaling.
- Connect `beat(index)` before adding the node to its parent; use it for impact timing, hit-stop or camera shake.
  Keep collision and damage logic in the game. If no beats exist, use explicit gameplay timing instead.
- One-shots free themselves when finished. Loops need explicit stop/queue_free when the gameplay state ends.
  The template's beat counter is for one-shot impacts; author loop events in game logic if needed.
- Import and run the actual scene. Report missing Godot/editor verification as a gap, never a pass.

For other engines, use the PNG and JSON: `frames[].frame` contains pixel rects, `duration` is milliseconds per frame,
and `meta.pixelfx` supplies fps, loop, pivot, frame size and beatSeconds. Configure nearest-neighbor sampling,
transparent blending and the intended display scale; wire frame timing and cleanup in the engine.

Report asset/revision, credits used, paths written, whether the preview was viewed, and game verification performed.

## Examples

Bad: “Make an awesome fire slash.” Missing scale, camera and timing.

Good: “Flaming sword sweeps right, for a side-view action platformer. 96×64 px at the existing 1 px art scale,
amber/orange palette, transparent background. One-shot, 0.6 seconds at 30 fps. Anticipation frames 0–3,
impact frame 5, embers fade through frame 18. Separate blade arc, sparks and smoke. Pivot (24,48). Target Godot 4.
Keep the player's 32×48 sprite readable.”

差：“做个炫酷冰爆。” 没有说明游戏视角、像素尺寸或命中时刻。

好：“俯视角动作游戏中的冰霜爆裂，64×64 像素，与项目 16×16 地砖保持相同像素密度，
青蓝与白色，透明背景。单次播放，0.8 秒，30 fps。前 3 帧聚能，第 4 帧命中，第 24 帧消散。
冰环、碎冰、雾气分别可编辑；中心锚点 (32,32)，用于 Godot 4。保留现有四色色板。”

先用中文复述简短需求，检索已有资产与免费库，再决定是否生成；不要把“好看一点”直接转换成付费调用。
