PF Sandbox Manual

Controller Setup

Controller Support

You cannot use a keyboard as a controller, you must setup a controller as below.

WiiU adapter setup

Follow the steps for your OS, found under Installation at this Dolphin Wiki page. There is no need to perform the steps listed under Dolphin Setup.

Make sure your adapter is set to Wii U mode.

There is no need to perform any mapping.

Other Controller Setup

Your controller may or may not be already mapped to a Gamecube controller. If PF Sandbox isn't responding to your controller you may need to create a map for your controller.


Use a on your GC controller to: select package, select local, select characters, select stages and FIGHT! Use b on your GC controller to go to previous menus (keep pressing to reach package select screen)

The player outlines are used to signify which team they belong to, you can change teams on the character select screen.


Middle click to pan the camera. Scroll to zoom the camera. Press Backspace to return control of the camera to the game.


Packages are how unique games are made and shared in PF Sandbox. A package contains:

To add a package to PF Sandbox, download it, then click and drag it onto the PF Sandbox window.

PF Sandbox will unzip it and store it here:

You can safely copy fighter and stage files between packages.

You can use the :open_package $package_folder_name command on the menu to open the package stored at the specified folder name. If the package does not exist at that folder a new package is created there.


Always backup any packages you are working on. Due to the nature of the interface it is super easy to accidentally destroy work without realising.

To work through some examples check out the editor-tutorial.

The pause screen is where all the editing action occurs. Make sure you are on the pause screen to make use of the following tools.

Game Flow

Use the following keys to alter the flow of the game

Editor Selector

Before editing anything you must first select what you wish to edit:

Element Selection

Sometimes you need to make ANOTHER selection with your mouse. In different editor modes you can select different elements to modify them.


Debug Displays

While in the relevant editor mode (keys 0-9) you can toggle various debug displays. Textual debug output is also written to stdout every time a frame is changed or modified. Use F1-F12 to toggle them.

Fighter Editor (1-9)

Debug Displays

Frame editing

Collision Box editing

Most of these operations will apply to all selected colboxes:

Linking collision boxes allows them to be pivoted in pivot mode. Meld links combines collisionboxes into a single collisionbox.

Stage Editor (0)

Debug Displays

Element Editing

The following operations apply to all selected platforms and re/spawn points

Command line

Press '~' to open the command line in PF Sandbox. Alternatively you can use the pf_cli binary to send commands via your OS's terminal to PF Sandbox. Note that when using pf_cli you will need to escape characters that have special meaning to your shell. e.g. quotes

The PF Sandbox command line is very powerful, at the price of complexity. We recommend you work through the Command Line section of the Editor Tutorial if you have not yet worked with the PF Sandbox command line tool. You can then come back here if you ever need a reference.


Lets give a quick breakdown of an example command. This command sets the weight of someFighter in the package myPackage to 1.2:

package.fighters[base_fighter.json].weight:set 1.2

A command consists of:

  1. properties, indexes and keys to select an object.
  2. A command to do something to the selected object.
  3. Some commands require extra values to tell it what to do.


Different objects support different commands:

All objects support the following commands:


Get object properties with dot notation.


Sometimes an objects properties require an index or key to access them.


There are many contexts available that allow you to quickly access the object you want to modify. Setting a colbox to radius 10 can be done the primitive way. Objects are chained together with '.' and indexed by [] like this:

package.fighters["fighter.json"].actions[0].frames[0].colboxes[2].radius:set 10

However how are you supposed to know all of these indexes? o.0 Instead you can let PF Sandbox use context to know what you want to modify. Select the hitboxes you want in game then run:

pf package.fighters[?].actions[?].frames[?].colboxes[?].radius:set 10

Sharing a Package With a Friend

  1. Run package:publish
  2. Open the folder at C:\Users\USERNAME\AppData\Local\PF_Sandbox\publish\ or ~/.local/share/PF_Sandbox/publish/
  3. Send the most recent package*.zip file to your friend.
  4. Your friend then click and drags the package*.zip file to their PF Sandbox window.

Publishing a Package

Publishing a package allows your to easily keep your users up to date with the latest version of your package. Perform the following every time you want to publish a new version of your package.
  1. Add a source property to your package_meta, this is a URL where pf_sandbox will automatically download new versions of the package from. Run the commands:
    1. package.meta.source:insert
    2. package.meta.source:set (replace the URL with your own)
  2. Run package:publish
  3. Open the folder at C:\Users\USERNAME\AppData\Local\PF_Sandbox\publish\ or ~/.local/share/PF_Sandbox/publish/
  4. Upload package_meta.json and the latest package*.zip file to your webserver at the URL you specified in the source property.

Note: If PF Sandbox encounters any errors while updating a package, it will "silently" fail and continue loading the package as normal. This is because we dont want to prevent users playing local games due to network issues. However to troubleshoot issues with PF Sandbox downloading/updating your package you can check stdout for errors.