Skip to the guide
Pixx Suite

Pixx Suite · Advanced

Game engine hand-offs — Advanced

How work from every Pixx app reaches Godot, Unity, GameMaker, Phaser, LÖVE and Defold via Pixxizi: sprites, hitboxes, levels, fonts, sound and dialogue.

#What you'll learn

  • Which Pixx app produces each piece of game data, and how it travels to Pixxizi.
  • Exactly what Pixxizi writes for each engine: sprites, hitboxes, shadows, levels, UI, fonts, sound and dialogue.
  • Where the coordinate systems differ between engines.
  • How to set up a pipeline that you can re-export in one click when art changes.

#Before you start

  • You know Pixxizi's basics from the Pixxizi guide.
  • You're comfortable moving work between apps; see Working across apps — Intermediate.
  • You know which engine (and version) you're targeting. Pixxizi writes Godot 4, Unity, GameMaker, Phaser 3, LÖVE, Defold and a Generic set.

#Where the data comes from

DataMade inLibrary kindArrives in the engine as
Animations and sheetsPixxivi, Pixxani, Pixxifo, Pixxava, Pixxulaframes, sheetEach engine's animated sprite format
Hitboxes, pivots, attach points, frame eventsPixxetameta on frames/sheetEngine scripts and data files (below)
ShadowsPixxado (shadow layer only)frames, sheetA separate <name>_shadow sprite
LevelsPixxoritilemapEngine levels with collision and objects
UI panels and buttonsPixxicoui-frameNine-slice resources
Bitmap fontsPixxypo, the Pixx font libraryfontBMFont (.fnt) and font strips
Music and sound effectsPixxune, Pixxibusound (with loop points)WAV files with loop settings
ConversationsPixxaradialogueJSON + Yarn Spinner (+ Ren'Py in Generic)
PalettesPixxulo and otherspalette.hex, .gpl or .json

Send each of these to Pixxizi (it accepts every kind), or add them from its own Library button.

#What each engine gets

EngineSpritesHitboxes and eventsLevelsFonts, sound, dialogue
Godot 4SpriteFrames (.tres) + a ready AnimatedSprite2D scene (.tscn); one shared atlas per group<name>_gameplay.json applied each frame by pixx/pixx_sprite.gd: Area2D children named hit, hurt, collide and trigger, and a frame_event signalA scene with TileMap layers, merged collision shapes and object markers, plus a TileSet.fnt (imports as a font), WAV with loop import settings, dialogue as .json + .yarn. Also a runnable project.godot
UnitySliced sprites with .meta files (pivots, point filter, uncompressed), one sheet per sprite; .anim clips<name>_gameplay.json + Scripts/PixxGameplay.cs, which builds BoxCollider2D per frame; frame events call OnPixxEvent(string)Tiled .tmx + .tsx (import with SuperTiled2Unity)BMFont .fnt + PNG, WAV + audio_loops.json, .json + .yarn for Yarn Spinner
GameMakerA folder per sprite: numbered frame PNGs, a _stripN strip and a JSON with origin, size, speed and bounding boxscripts/scr_pixx_gameplay.gml → pixx_gameplay(sprite_name, frame)Tiled .tmj + per-layer grids as JSONFont strips for font_add_sprite_ext, WAV + sounds/loops.json, dialogue .json + Yarn
Phaser 3A multi-atlas (assets/atlas.json) + assets/animations.json; a runnable index.htmlassets/gameplay.jsonTiled JSONBMFont XML (bitmapFont), an audio sprite (audioSprite), dialogue files
LÖVEOne atlas + assets.lua (quads, animations in seconds, pivots, hitboxes) + a pixx.lua helper and sample main.luaIncluded in assets.luaA Tiled-format Lua map for STIIncluded alongside
DefoldAn .atlas per sprite with its animations (separate frame PNGs; Defold packs them)pixx/gameplay.jsonA .tilemap + .tilesource, with collision and objects in a JSON file.fnt + .font, .wav + .sound
GenericA packed PNG per sprite + a JSON with frames, animations and durations, pivots, hitboxes, sockets and eventsIn the same JSONTiled .tmj and .tmx + the original mapBMFont .fnt, WAV + loops.json, palettes (.hex, .gpl, .json), dialogue (.json, .yarn, .rpy)

Every export also contains pixx_manifest.json (what's in the package and where it came from), README.txt (how to bring it into that engine) and CREDITS.txt.

#How-tos

#How to carry hitboxes from Pixxeta into your engine

  1. In Pixxeta, add boxes, the pivot, attach points and frame events to your animation.
  2. Send to App → Pixxizi (or to Pixxula first to pack a sheet; the data travels with the frames).
  3. In Pixxizi, click Export, choose your engine(s) and click Build.
  4. In the engine, use the script or data file from the table above. For Unity, add PixxGameplay.cs next to the SpriteRenderer and assign the gameplay JSON; for Godot, the generated scene already has the hitbox script attached.

#How to add Pixxado shadows as their own sprite

  1. In Pixxado, send your animation's Shadow layer only to Pixxizi, along with the sprite itself (plain, or Lit art only).
  2. Pixxizi pairs the shadow with its sprite (same frame count and size, preferring the same name). If it can't tell, choose the sprite in the shadow's Shadow of setting.
  3. Export. The shadow becomes <name>_shadow with the same animations, frames and pivot. In Godot it's already a Shadow node behind the sprite; elsewhere, draw it at the sprite's position, behind it.

#How to export a level from Pixxori

  1. In Pixxori, Send to App → Pixxizi. The level arrives as a tilemap with its tile layers, collision and objects.
  2. Check it in Pixxizi's preview, which overlays collision and objects.
  3. Export. Each engine gets the level format in the table above. Object positions are in pixels, and collision is merged into as few rectangles as possible.

#How to ship bitmap fonts and UI frames

  1. Send a font from Pixxypo (or pick one from the Pixx font library) and UI frames from Pixxico to Pixxizi.
  2. Export. Fonts become BMFont files (with kerning pairs) and font strips; nine-slice frames keep their margins, for example as a Godot StyleBoxTexture plus a NinePatchRect scene.

#How to loop music correctly

  1. Set loop points in Pixxune (or Pixxibu) before you send the sound.
  2. In Pixxizi, check the loop in the sound's preview. Music of 8 seconds or longer without loop points loops end to end by default, marked "auto".
  3. Export. Sound is always WAV, with the loop settings each engine uses (for example Godot's import settings, or a loops JSON file).

#Workflows

#One-click rebuilds as art changes

  1. Build your package in Pixxizi once, with all your engines ticked.
  2. When an artist updates a sprite, send the new version to Pixxizi and remove the old copy from the package (a second copy gets a number added to its name).
  3. Open the Builds tab to see what changed since the last export, then export only what changed; see the Pixxizi guide.

#A Flow pipeline that ends in the engine

  1. In Flow, start from the Game character or Game level template. Both end in Pixxizi.
  2. Each step opens its app with the previous result loaded, and the final step builds the engine files.
  3. See Pixx Flow — Advanced for gates that stop bad art before it's packaged.

#Dialogue scene end to end

  1. Animate portraits in Pixxara, write the conversation with voice blips and music cues, and send the dialogue to Pixxizi.
  2. Export: JSON for every engine, Yarn Spinner files for the engine targets, and Ren'Py in Generic.

#Tips and shortcuts

  • Ctrl+S in Pixxizi exports engine-ready projects.
  • Unity gets untrimmed frames, so the pivot in the .meta is exact.
  • GameMaker and Defold get separate frame PNGs because those engines pack atlases themselves.
  • Pixxizi runs Pixxoku's art rules on every sprite before export. Art findings are warnings, never blockers.
  • Godot's TileMap node imports fine in Godot 4.3 and later, which converts it to TileMapLayer.
  • For the exact files inside a .pxasset (gameplay fields, loop points, dialogue script), see Pixx asset files.

#Troubleshooting

  • Hitboxes are upside down in Unity or Defold. Use the generated scripts and data as they are; they're already converted to y-up. Don't flip them again.
  • The shadow appears in front of the character. Draw the _shadow sprite before (behind) the main sprite, at the same position.
  • A level's tiles are shifted by one. Tile numbers count from 1 (0 is empty), which matches Tiled. Make sure your own loader does the same.
  • Music doesn't loop. Set loop points in Pixxune, or check that your engine reads the loop settings Pixxizi wrote.
  • The engine can't find a font. Keep the .fnt and its PNG together in the same folder; the .fnt refers to the PNG by name.