No shapes file loaded - letters & digits available
Source: load a table bitmap here for JSON Builder.
| Section | Generated DOF String |
|---|
Welcome to the complete reference for the DOF Pro-Series application a browser-based digital twin of your virtual pinball cabinet's lighting and toy system, combined with a powerful multi-layer DOF effect designer.
Load your cabinet configuration files, select a ROM table, and watch your DOF lighting effects render in real time no hardware required.
Design custom multi-layer DOF effects with a visual editor. Configure colors, timing, area, motion, sparkle, and shapes then generate the code string for your tables.
Import JSON configs, edit trigger layers line-by-line in cards, add new effects, and export updated configuration sets.
Learn the complete workflow: build effects in the Builder, test them in the Simulator, then deploy them to your physical cabinet via the online DOF Config Tool.
Full DOF parameter reference, INI file structure, color chart, links to community resources, and acknowledgements.
The DOF Pro-Series Simulator is a browser-based digital twin of your virtual pinball cabinet's lighting and toy system. It parses the same configuration files used by the DirectOutput Framework (DOF) and renders your LED matrix effects, addressable LED strips, RGB toys, and physical toy indicators in real time no hardware required.
Load your cabinet configuration files, select a ROM table, fire triggers with a click, and watch your exact DOF lighting design play out on screen exactly as it would on the physical cabinet.
File loader for your Cabinet.xml, Cabinet.json and DirectOutputConfig*.ini files, and Pinup Popper Menu Animation Simulator assets. The session confirmation gate validates your core files before anything runs.
Table View lets you select a ROM and manually fire its W/S/E triggers. Animation Simulator visualizes the Pinup Popper menu animation effects for each E-code in your effects file.
Real-time pixel-accurate rendering of DOF matrix effects color fills, moving bars, comet trails, sparkle fields, and shape sprites on a grid scaled to your cabinet dimensions.
Visual representations of all toys found in your config files flashers, strobes, shape sprites, letter indicators, RGB toys color-matched to their active effect.
The live DOF effect string for the selected table. Editable changes apply immediately to all visual outputs. Also the hub for Format View, Anim Sim Grid, Code Sim, and Code Reference.
Visual representation of your LED strips (pixel-for-pixel), RGB toy indicators, and physical toy checkboxes the right panel mirrors your actual hardware layout.
Two floating analysis panels: the Layer Inspector isolates effects by Z-layer for a single trigger; the Toy Inspector shows all triggers that affect a specific toy and the layers they operate on.
Theme selector, Stats summary, Inspector active indicator, and this Help & Reference. Version number is displayed in the brand area top-left.
C:\DirectOutput\Config\).DOF Mod Files or VPB Mod Files. The current folder-first ingest flow is built around importing that one folder, and it also makes Resume Last Workspace / Start Clean workflows much easier to manage.
This software is provided free of charge for the virtual pinball community. It is not affiliated with or endorsed by the DirectOutput Framework project, VPUniverse, PinUp Popper, or any other third-party platform or community referenced herein.
The simulator requires your actual DOF configuration files to operate. These are generated by the online DOF Config Tool hosted at VPUniverse and stored in your local DOF installation. The typical path on a Windows-based virtual pinball cabinet is C:\DirectOutput\Config\. Sample files also available in the Resources section.
The Configuration panel is built around a folder-first DOF workflow. Choose your DirectOutput config folder, load the standard DOF files in one pass, then use the manual slots only when you need to add or replace a specific file.
Import DOF Folder to scan the selected folder root for the standard DOF install files.[Config DOF] structure and channel signatures.Defines your cabinet's physical hardware layout: LED matrix dimensions (width height), LED strip definitions with pixel counts, and the output-to-toy mapping for every LedWiz-equivalent output. Without this file, the matrix grid cannot be rendered and no output routing is possible.
Source: C:\DirectOutput\ folder. File name does not need to match exactly you can rename it.
Your primary output configuration file for physical toys. Contains the [Config DOF] section with trigger-to-toy assignments for physical devices: solenoids, flashers, strobes, and contactors. Required to populate the Physical Toys panel and trigger physical toy indicators.
Source: Online DOF Config Tool download. Any .ini filename is accepted; file content determines role.
Secondary configuration file - for RGB toys (undercab lighting, button illuminators, etc.). When loaded, the RGB Toys panel populates and RGB toy indicators display the correct effect colors. Also provides additional named colors to the color resolution system.
Source: Online DOF Config Tool download. Any .ini filename is accepted; file content determines role.
The WS2811 addressable LED controller configuration. Contains the [Config DOF] section with the full effect string matrix for every ROM table, plus the [Colors DOF] section defining your custom named colors. This is the primary data source for the ROM table selector and all matrix/strip/toy effect routing.
Source: Online DOF Config Tool download. Any .ini filename is accepted; file content determines role.
Cabinet JSON definition file. Provides combo toy group definitions allows effects that target a named combo (a logical grouping of multiple toys) to be correctly resolved and visualized across all member toys.
To export this file: in the online DOF Config Tool, navigate to Cabinet Manage Actions Export Cabinet. The downloaded JSON file is your Cabinet.json.
The DOF shape sprite library XML. Defines each shape's name, coordinates, and size within the atlas image. Without this file, any effect using a SHP parameter (e.g. SHPRoundPulse, SHPArrowLeft) will render as a blank area.
Source: Online DOF Config Tool download.
The sprite sheet (atlas image) containing pixel data for all DOF shapes. Both XML and PNG are required for shape rendering loading only one will not work.
Source: Online DOF Config Tool download.
Optional SQLite database from your Pinup Popper installation. Its primary role in this simulator is to provide the ROM-to-E-code relationship required to correctly associate each table's effects with the pinupmenu section of your DirectOutputConfig*.ini files. Without it, the simulator cannot map which E-code fires which table's menu animation, and entries are listed by E-code number and spreadsheet name only.
Source: Pinup Popper root directory on your cabinet
The main effects spreadsheet that describes bitmaps and DOF effects for the Pinup Popper menu system. Each row defines an E-code entry with GIF frame references and effect output assignments for LED strips, RGB toys, and the matrix. This is what drives the Animation Simulator.
The animation sprite file containing all bitmap frames for every E-code entry. The simulator decodes each frame in-browser (no external tool required) and renders it on the LED matrix as the bitmap ground layer. Frame references are specified in the Pinup Menu Effects spreadsheet's .gif version# column.
| Action | What It Does | When To Use It |
|---|---|---|
| Resume Last Workspace | Restores the most recent cached simulator/builder session, including previously loaded configuration files and Anim Sim session data when available. | Use this when you want to continue where you left off without reloading every file by hand. |
| Start Clean | Clears the current workspace session state, cached file references, imported DOF folder index, and Builder/Anim Sim session bindings. | Use this before loading a completely different cabinet, when cached file labels look suspicious, or when you want to guarantee a fresh ingest. |
When you import a table JSON into the DOF JSON Builder, the app now checks the currently imported DOF folder for a GIF whose filename matches the table's ROM name. If a matching ROM.gif exists in the folder root, it is loaded automatically into the Builder bitmap source.
flashgdn will auto-load flashgdn.gif if that file exists in the imported DOF folder root.The Confirm Files & Continue button is the session gate. It requires the Addressable/MX INI slot (f-ini) to be loaded with valid [Config DOF] data, then unlocks table selection and collapses the Configuration panel for workspace room.
Once collapsed, the panel can be reopened with [+]. The INI Guide button in the Configuration header remains available so you can verify role mapping/format rules while loading or troubleshooting files.
Table View is the primary operating mode. After confirming your files, it lets you select any ROM from your Config30 and manually fire its DOF triggers to observe the resulting effects in real time.
Virtual pinball games are identified by their ROM name the filename of the original arcade ROM image that the game emulates. The DOF Config Tool indexes every table by its ROM name, not its display title. For example, AC/DC may have ROM variants such as acd_168hc, acd_170, acd_170hc, and several others. Each ROM variant can have distinctly different trigger assignments, color schemes, and effect definitions reflecting differences between game versions or regional variants of the original hardware.
Each table's DOF code is driven by trigger events that correspond to events on the physical (emulated) pinball machine. The simulator presents these as clickable buttons in the Triggers panel:
| Code | Type | Description |
|---|---|---|
| ON | Always Active | Effect fires unconditionally while the table is loaded used for idle lighting, constant undercab glow, and always-lit toys. |
| Sn | Solenoid | Fires when solenoid #n activates flippers, bumpers, slingshots, knockers. The most common trigger type for physical toy effects. |
| Wn | Switch | Fires on switch #n ramp sensors, trough sensors, button switches. Functionally identical to S codes; the letter designation comes from different numbering schemes in DOF. |
| En | Event | Fires on virtual game event #n multiball start, mode begin, bonus count, high score, etc. Used primarily for LED matrix animation effects and Pinup Popper integration. |
| Ln | Lamp | Fires when lamp #n is lit on the lamp matrix. Tracks the playfield's physical lamp state as reported by the ROM emulator. |
Lxx appears at the end of an effect layer string (e.g. Red ADR AS300 L5), it is a layer parameter (Z-order), not a lamp trigger. The simulator correctly distinguishes these using word-boundary context. Never manually add a bare Lxx at the end of a layer string expecting it to fire as a lamp trigger.
Each trigger button supports two firing modes:
A highlighted badge with a number (e.g. [3]) on a trigger button indicates that this trigger drives effects on that many distinct Z-layers simultaneously. Multiple layers allow complex composed effects for example, a red fill on layer 1, a sparkle overlay on layer 3, and a comet on layer 5, all fired by the same trigger. Click the badge to open the Layer Inspector for that trigger. See the Inspectors section for full details.
A single trigger (e.g. S10) frequently drives multiple physical outputs simultaneously a flasher on output 3, a solenoid on output 7, and a matrix effect on output 13 may all fire from the same event. The simulator renders all of them in parallel, giving you an accurate picture of the full cabinet response to any given game event.
The Animation Simulator lets you browse and preview all animation E-code entries in the pinupmenu section of your DirectOutputConfig30.ini file. For each entry it renders the corresponding GIF animation frame on the LED matrix and simultaneously fires the associated LED strip and RGB toy effect outputs giving you a pixel-accurate preview of how your cabinet will react during each Pinup Popper menu animation.
Click Load Effects & Enable Selector to parse the uploaded effects file and GIF. The app will extract all E-code entries, decode every GIF frame in-browser, and resolve display names from the PUPDatabase.db if it was loaded. This process may take a few seconds for large files. Once complete, the load bar collapses and the entry list becomes active. A Files loaded / Reload bar replaces it click this to re-open the file loader if you need to swap files.
Before any LED strip or toy effects will display, you must map the spreadsheet's effect output columns (e.g. "PF Left MX HD", "Left Side MX HD") to your cabinet's actual hardware outputs using the OUTPUT MAPPING panel. Each checkbox row associates one effect output column with a specific output on your cabinet. This mapping is persisted to localStorage you only need to configure it once. The panel is collapsible via its header; click again to toggle between expanded, docked, and hidden states.
Entries are listed with type and status badges:
= dimension mismatch (silently clamped), * = out-of-range frame indexFilter buttons allow you to show Tables, Playlists, or Both. The sort button toggles between E-code order and alphabetical order. The search box filters by name or E-code number in real time.
When a single E-code has multiple variant effects assigned to different ROM tables, it shows a N badge. Clicking it expands a sub-selector row of buttons, one per variant ROM. Each button shows the table/ROM name; clicking it renders that specific variant's bitmap and LED strip/toy effects.
Switching to Anim Sim mode changes the Code Monitor's [ Anim Sim ] button to show a live spreadsheet grid of the loaded effects file. As you select entries from the Anim Sim list, this grid auto-highlights the corresponding row. The grid is read-only (pasting is not allowed) but you can double-click any cell to copy its content. Column headers describe each data field; effects begin with the Custom MX1 column and continue rightward through all effect output columns (LED strip and toy assignments) to the right. The Compact/Expanded toggle button adjusts row height for density vs readability. This view is read-only no pasting is permitted.
The LED Matrix Display is a pixel-accurate representation of your cabinet's WS2811 LED matrix. Its dimensions (width height in LEDs) are read directly from your Cabinet.xml file the grid you see has exactly as many cells as your physical matrix has addressable LEDs.
Every active effect is rendered at ~60 fps using the browser's requestAnimationFrame loop. The simulator evaluates all DOF parameters in real time: position (AL/AT), size (AW/AH), motion (AS + direction), fade (FU/FD), blink (rate + BPW), sparkle (AFDEN), and shape sprites (SHP). The result is a faithful reproduction of what your actual hardware would display.
Adjusts the visual intensity of all lit pixels using a CSS filter multiplier (0.5 to 3). This has no effect on the underlying effect calculations it is purely a display aid for different ambient lighting conditions. Default is 1.0.
Adds physical pixel spacing between LED cells (0 to 6 px). At 0, pixels are flush giving a solid color fill appearance consistent with high-density matrices. Increasing the gap creates a more visually distinct "LED grid" look that better approximates lower-density physical installations. Default is 0 px.
The Trim slider is a global preview-only bitmap calibration control. It adjusts how aggressively soft edge pixels from GIF-backed bitmap effects are trimmed before rendering to the matrix. Lower values preserve more edge information; higher values produce a tighter, thinner rendered bitmap. Trim does not modify the authored DOF string.
The status bar beneath the matrix groups live non-matrix activity by family: RGB Toys, Flashers, Bumpers, Strobes, Solenoids, Buttons/Inputs, and Other. These indicators help you understand what else is firing alongside the matrix image without opening another panel.
The Active Toys & Indicators panel displays a visual indicator for every toy defined in your cabinet configuration that appears in the loaded table's code. Indicators activate when their corresponding trigger fires and display in the color specified by the active DOF effect string.
SHP parameter to render a sprite on that output.Each indicator lights up in the exact color resolved from the DOF effect string including custom colors defined in your [Colors DOF] section, the full 122-color DOF named palette, and inline hex values. If a toy's effect uses Blink, the indicator will pulse accordingly. Fade parameters (FU/FD) affect the color intensity in real time.
Click any toy indicator to open the Toy Inspector for that toy. See the Inspectors section for full details. When the inspector is open, the Active Toys panel suspends normal trigger-driven updates only the inspected toy's effects are shown.
The legend is displayed in the section header bar: =Tag =Shape italic=Multi-layer (Click Icon to Inspect Triggers). The activity LED (small dot) in the section header pulses when any toy in the panel is currently active.
The Code Monitor is the heart of Table View. It displays the raw DOF effect string for the currently selected ROM table, exactly as it appears in DirectOutputConfig30.ini after all @variable@ macros have been expanded. The monitor is live-editable any change you type takes effect immediately on all visual outputs.
DOF's configuration file stores effect strings in CSV format. Each comma-separated column maps to one hardware output. The simulator resolves which physical toy each column drives using the output-to-toy mapping from Cabinet.xml. Effects within a column are slash-separated layers: S4 Red/ON Blue FD200/.
Each CSV column in the Code Monitor is highlighted in a distinct color that matches the corresponding output's color in the Format View legend and in the strip rack. This makes it visually straightforward to identify which column of code drives which physical output.
Toggles the Code Monitor between its raw editable form and a Formatted Code View. The formatted view separates each layer onto its own line and labels it with the output name and color ideal for reading complex multi-layer effect strings. Editing is not possible in Format View; return to the normal Code Monitor to make changes.
Toggles the Anim Sim Spreadsheet Grid in place of the Code Monitor. This is a live color-coded grid view of the loaded Anim Sim effects file (20 columns). Selecting an entry in the Anim Sim list auto-highlights the corresponding row. Double-click any cell to copy its content. Column headers describe each field; effect data begins at the Custom MX1 column and continues through all effect output columns (LED strip and toy assignments) to the right. The Compact/Expanded toggle button adjusts row height for density vs readability. This view is read-only no pasting is permitted.
Opens the Code Simulator floating panel. See the full Code Sim description below.
Opens the DOF Code Reference floating panel a quick-reference popup with tabbed documentation covering Triggers, Area parameters, Motion parameters, Color names, Timing/fade parameters, Special Effects, and a pre-built Examples library. This panel is draggable and resizable. The Examples tab contains ready-made effect strings you can copy and experiment with in the Code Sim or adapt for your own effects.
The Code Sim is a floating, draggable panel for quick effect prototyping. Paste any valid DOF effect string and fire it against any combination of output targets no trigger code required. It is completely independent of the loaded table.
S1, ON, etc.). A plain effect string like Cyan FD500 AL0 AW100 AT40 AH20 ADR AS300 will fire directly. This makes it ideal for quickly testing effect parameters without needing to craft a full DOF code line.
The right panel is the visual representation of your cabinet's actual hardware layout. Every strip, RGB toy, and physical toy shown here corresponds to a real device in your installation.
Each LED strip is rendered as a horizontal row of individual LEDs, with exactly as many cells as the strip has addressable pixels (as defined in Cabinet.xml). Active effects scroll, fade, and blink in real time the strip display is fully synchronized with the matrix rendering loop. Strip name and LED count are displayed in the strip rack header.
The 1PX toggle switch collapses any multi-LED strip down to a single pixel, emulating a one-pixel strip. This is useful for testing how your DOF effect code would look on a single-output RGB device since many RGB toys behave as a single addressable pixel, 1PX mode lets you preview exactly what that toy would display. Area, motion, and sparkle parameters become irrelevant in 1PX mode, so the strip simply shows the resolved base color of the active effect.
RGB toys (loaded from DirectOutputConfig2.ini) are physical devices driven by three independent LED channels (R, G, B). The simulator resolves the effective color by examining the active DOF channels for each toy and either applies the named color directly (when all channels share the same color name) or blends the channels by their physical diode position. The indicator lamp for each RGB toy displays this resolved color in real time.
Physical toys (loaded from DirectOutputConfig.ini) are listed with a checkbox labeled Check to Activate. This checkbox controls only whether the visual indicator lights up when the toy's trigger fires. It has absolutely no bearing on the actual DOF code, the routing of signals, or any hardware behavior it is a purely visual on/off switch for the indicator lamp in the simulator.
This is useful because many DOF configs include always-on channels a lit "Start" or "Exit" button that is permanently active at the table level. With the checkbox unchecked, that toy's indicator remains dark, preventing it from creating visual noise; you can then enable it selectively when you want to see it respond to specific triggers.
The simulator provides two floating analysis panels that give you surgical visibility into complex multi-layer, multi-trigger effect configurations. Both inspectors are draggable, resizable, and take precedence over all other display modes while open.
The Layer Inspector is opened by clicking the highlighted [#] badge on any trigger button that shows a layer count. It shows all effects associated with that specific trigger, organized by Z-layer.
[4] indicates 4 layers). The Layer Inspector opens.L1, L3, L5) to isolate just that layer. The matrix display updates to show only that layer's effect.The Toy Inspector is opened by clicking any toy indicator in the Active Toys & Indicators panel. It shows all triggers that affect that specific toy, and allows you to examine the effect each trigger produces on each layer.
L2) to filter the trigger list to only those triggers that have an effect on that specific layer for this toy.The current version is displayed in the DOF PRO SIMULATOR brand area in the top-left corner of the header. Updates and release notes are maintained in the embedded JavaScript source for each build.
When either the Layer Inspector or the Toy Inspector is open, a pulsing INSPECTOR ACTIVE badge appears in the header. This is a visual reminder that the display is in inspection mode and not reflecting normal trigger-driven operation. All outputs are currently filtered through the inspector's logic.
Clicking the DOF Builder button switches the application from the Simulator view to the DOF Builder view a dedicated multi-layer effect designer workspace. While the Builder is active, the simulator's three-panel layout is replaced by the Builder's own layout (effect controls, matrix preview, and staged output table). The simulator's rendering loop pauses. Click the button again (labeled Simulator when in Builder mode) to return to the simulator. Builder state is persisted via localStorage your layers, section configs, and E codes are preserved between sessions. See the DOF Builder tab in this help document for full details.
Nine color themes are available from the dropdown:
Theme selection is not currently persisted between sessions you will need to re-select your preferred theme on each load. The DOF Builder uses a fixed amber/navy palette and is not affected by theme changes.
The Stats button opens a live summary of all data loaded in the current session:
[Colors DOF] sections[Variables DOF]Opens this document. The Help & Reference is the primary resource for all aspects of the simulator and builder. The Technical Reference section contains the full DOF parameter table, INI file structure documentation, and deep links for further research.
The DOF Builder is a multi-layer visual effect designer that generates DOF code strings. Instead of hand-typing complex effect codes, you configure layers with a visual interface pick colors, adjust timing sliders, set area coverage, add motion and sparkle and the Builder generates the exact DOF string you need.
The Builder replaces the simulator's three-panel layout with a dedicated effect design workspace.
The left column contains all the controls for building your effect, organized into collapsible accordion sections:
The center area shows your effect rendering in real time:
The matrix and LED strip previews can be individually shown or hidden using their visibility toggle buttons. Hiding the matrix lets you focus on strip-only effects; hiding the strips gives maximum space for the matrix preview. Visibility has no effect on code generation output the Generated DOF String always includes all parameters regardless of what is displayed.
The LED strips panel includes a checkmark selector that lets you choose which strips are visible in the preview. This is useful when working on effects destined for a specific strip hide the others to reduce visual clutter.
Both the matrix and LED strips can be scaled up or down by 10% from the dimensions read from your Cabinet.xml file. Use the + and buttons to resize the display. This is purely visual it does not affect the effect parameters or generated code.
The matrix preview also has Brightness, Gap, and Trim controls. Brightness adjusts overall visual intensity (0.5 to 3), Gap sets pixel spacing (06px) to simulate different LED panel densities, and Trim is a global bitmap-preview calibration slider that thins or preserves soft bitmap edges without changing the authored DOF code.
The lower matrix legend is a live status bar for non-matrix outputs. It groups currently active RGB toys, flashers, bumpers, strobes, solenoids, and buttons/inputs so you can see at a glance which non-matrix families are contributing to the current preview scene.
The Builder workspace supports global layout and table layout saving. Global layout applies your preferred card order/geometry across all tables, while table layout stores a table-specific arrangement for the currently imported JSON. Use the Save/Reset buttons beneath the preview to keep whichever layout mode matches your workflow.
Multiple panes in the Builder are vertically resizable, including the Generated DOF String window and card/list regions. Resize grips let you tune the workspace density without affecting any authored data.
The Builder starts with 6 independent layers and supports dynamic layer management. Use Add, Copy, and Delete to grow or reduce the stack as needed. Each layer can have its own color, effect type, timing, area coverage, motion, sparkle, and shape. Layers are composited using a painter's algorithm higher Z-order layers paint on top of lower ones.
Layer tabs sit below the Generated DOF String. They initialize at L1L6 and expand dynamically as you add or copy layers. Each tab shows:
Click a tab to switch to that layer's controls. Click Clear Layer to reset the active layer.
Each active layer generates a segment of the DOF string. Multiple layers are joined with / separators:
The Color section displays the complete DOF named color palette recognized by the DirectOutput Framework. Click any swatch to set the active layer's color.
Red, Lawn_green, White_smoke) is what appears in the generated DOF string. The simulator maps these names to their hex equivalents for rendering.When a bitmap-backed layer is selected, the Use source art toggle tells the Builder to preserve the bitmap's original pixel colors instead of tinting the bitmap through the selected DOF color. This is useful for logos, artwork, and menu-style GIF frames where the source image already contains the intended palette.
Showing a representative subset. The full named-color palette is available in the Builder's Color section and in the DOF Parameter Reference.
The BITMAP accordion is the Builder control set for GIF-backed matrix imagery. It lets you assign a sprite sheet to the active Builder session, crop a portion of that GIF, choose which frames to play, and map the result to any MX-capable target section.
ROM.gif from the imported DOF folder when one exists.| Control | DOF Token(s) | Purpose |
|---|---|---|
| Load Table Bitmap / Clear Bitmap | Preview source only | Assign or remove the GIF sprite sheet used by Builder preview for the current table. |
| Hold Preview | Preview only | Keeps the current bitmap row visible while you edit crop/frame values. |
| Loop | Preview override | Forces looped preview playback even when the authored row is effectively one-shot. |
| Resolved Frame | ABF | Scrub or set the current source frame used by the bitmap row. |
| Crop XY | ABL, ABT | Left/top pixel position inside the GIF. |
| Size WH | ABW, ABH | Width and height of the cropped source rectangle. |
| Base Frame | ABF | Starting frame number for bitmap playback. |
| Anim Count | AAC | How many frames to play starting from ABF. |
| AAF | AAF | Playback speed in frames per second. Higher = faster playback. |
| Step Dir | AAD | Bitmap animation step direction or stepping mode. |
| AAS | AAS | Step size used with the step direction/mode. |
| Behaviour | AAB | Bitmap playback behavior such as loop or one-shot. |
The Builder currently follows the authored DOF bitmap timing, not the original embedded GIF timing. In practice that means:
AAC controls how many frames are played.AAF controls how fast they are played.AAF is present, playback falls back to the simulator's default bitmap frame timing.AAF. If you want the cycle to end sooner, reduce AAC or increase AAF.ROM.gif.ABF to find the source frame you want.ABL, ABT, ABW, and ABH to crop the exact region of the GIF you want to display.AAC, AAF, AAD, AAS, and AAB if the bitmap should animate instead of staying on a single frame.This section controls how the layer's color behaves over time.
| Type | Behavior | DOF Output |
|---|---|---|
| Static (Solid) | Color stays on at constant brightness. Can use FU/FD for gradual fade in/out. | Red FU500 FD1000 |
| On | Simple on/off. Uses F (simple fade) parameter. | Red On F200 |
| Blink | Alternates on/off at a set interval. BPW controls duty cycle. | Red Blink 200 BPW30 |
| Pulse | Smooth fade up then fade down, continuously cycling. Uses FU/FD only. | Red FU1000 FD1000 |
| Flicker | Rapid irregular blink (simulates fire/electrical). Automatic blink+BPW. | Red Blink 80 BPW30 |
| Plasma | Animated plasma field layer using valid plasma tokens. FU/FD still control fade behavior. | Blue APS32 APD120 APC1 FU120 FD220 |
| Parameter | Slider Label | Description |
|---|---|---|
FU | Fade Up ms | Milliseconds for the color to ramp from off to full brightness. |
FD | Fade Down ms | Milliseconds for the color to ramp from full brightness to off. |
F | Fade In F ms | Simple fade-in time (for Static and On types only). |
W | Wait W ms | Delay before the effect starts after trigger fires. |
M | Min Hold M ms | Minimum time the effect stays active after trigger releases. |
MAX | Max Duration | Hard cutoff effect dies after this many ms regardless of trigger. |
Max | Intensity Max | Maximum brightness (0255). 255 = full, lower values cap peak brightness. |
L | Z-Layer | Compositing order. Higher Z layers paint on top. Negative values allowed. |
| Token | Usage | Description |
|---|---|---|
APS<n> | Plasma layer output | Plasma speed control for animation movement. |
APD<n> | Plasma layer output | Plasma density/detail control for field complexity. |
APC... | Optional plasma extension | Profile/channel token retained in layer text (for example APC1, APCWarm). |
APS, APD, and APC. Do not use a literal PLASMA token in effect rows.Plasma is available in the Builder Effect Design controls and generates DOF plasma tokens directly in the output string. Use it for animated flowing fields on matrix/strip targets.
| Builder Control | DOF Token | What It Does | Example |
|---|---|---|---|
| Plasma Speed slider | APS<n> | Sets plasma animation speed. | APS32 |
| Plasma Density slider | APD<n> | Sets plasma field density/detail. | APD120 |
| Plasma second color picker | APC... | Adds optional channel/profile extension. | APC1, APCWarm |
APS, APD, and optional APC. Do not use a literal PLASMA token in output rows.Area & Motion controls define where the effect appears on the matrix and how it moves.
| Parameter | Range | Description |
|---|---|---|
AL | 0100% | Left edge position of the effect area. |
AW | 0100% | Width of the effect area. |
AT | 0100% | Top edge position of the effect area. |
AH | 0100% | Height of the effect area. |
| Parameter | Description |
|---|---|
AS | Analog Speed how fast the effect scrolls (higher = faster). |
ADL / ADR / ADU / ADD | Analog Direction: Left, Right, Up, Down. Combined with AS for scrolling effects. |
| Control | DOF Token | Description |
|---|---|---|
| Step ASS | ASS | Discrete step size per movement cycle. Use this when you want motion to jump in defined increments instead of purely analog scrolling. |
| Time ASSMS | ASSMS | Time-based stepping interval in milliseconds. Useful when you want the movement cadence defined by time instead of by the blink cycle. |
| Accel ASA | ASA | Acceleration / deceleration bias for stepped motion. Positive values increase movement over time; negative values taper it down. |
AS is continuous analog travel, while ASS, ASSMS, and ASA are for controlled stepped movement. Use them when you want an effect to march, sweep, or accelerate in discrete jumps.Sparkle creates a random per-pixel twinkle effect individual pixels randomly turn on and off, creating a glittering or twinkling appearance. This is commonly used for star fields, electrical sparking, or adding visual texture to solid fills.
| Parameter | Description |
|---|---|
AFDEN | Sparkle Density percentage of pixels lit at any moment (1100). Lower = sparse twinkle, higher = dense shimmer. |
AFMIN | Minimum on-time per pixel in ms. How briefly a pixel can flash. |
AFMAX | Maximum on-time per pixel in ms. How long a pixel can stay lit. |
This creates a sparse white sparkle 8% of pixels lit at any time, each staying on for 150250ms.
Shapes (SHP) are predefined pixel patterns from the DirectOutputShapes library. They render as sprites on the matrix within the layer's area, adding visual complexity beyond solid fills and sparkle.
Open the Shapes accordion, enable the checkbox, and select a shape from the dropdown. The shape renders immediately in the preview. Common shapes include:
SHPLetterAZ, SHPDigit09 Alphabet and number charactersSHPRoundPulse, SHPSquarePlop Animated expanding patternsSHPRoundAndRound Rotating circular animationSHPArrowLeft, SHPArrowRight Directional arrowsSHPFillLeftRight, SHPFillTopBottom Progressive fillsDirectOutputShapes.xml and DirectOutputShapes.png to be loaded in the simulator's config panel. Without these files, shape effects will be invisible.The Target Section buttons above the matrix preview determine where your effect will be staged. Each section corresponds to an output column in your DOF configuration.
You can isolate any target section by clicking its button directly, or narrow the button bar using the Builder filters above it. This makes it easier to work on only MX matrix/strip sections, only RGB toys, only flashers, or just cards that are modified/edited.
Sections containing "MX" in their name are addressable LED outputs. They receive the complete generated DOF string with all effects, timing, area, motion, sparkle, and shapes:
| Custom MX 1 | PF Left Effects MX HD | PF Right Effects MX HD |
| Flipper Button MX | Magnasave Left MX | Magnasave Right MX |
| Fire MX | RGB Undercab Complex MX |
Sections without "MX" are single-color RGB toys. They can only display one color at a time no effects, timing, or spatial parameters. The Builder automatically strips the output to just E{code} {color}:
| RGB Undercab Smart | RGB Flipper | RGB Left Magnasave |
| RGB Right Magnasave | RGB Fire Button |
The matrix preview toolbar includes a LINK SYNC toggle. When sync is enabled, linked cards can fire together so you can preview the same trigger across multiple related sections at once. In JSON Builder, each card also has its own Sync checkbox. A card must be checked into Sync before it participates in linked preview firing.
Below the strips, the Staged Output table shows all 13 sections with their current generated DOF strings. As you apply effects to sections, they populate here. Use Generate CSV to export all staged sections, or Clear Session to start over.
The Generated DOF String window at the top of the left column shows the live DOF code being built from your active layers. This updates in real time as you adjust any parameter.
This string is what you'll paste into the online DOF Config Tool for each table. In the Config Tool, you'll assign this effect string to a specific trigger code (E code) for a specific ROM table. The Config Tool then generates the INI files that the DirectOutput Framework reads on your physical cabinet.
| Action | Description |
|---|---|
| Apply Layers to Section | Stages the current effect (with E code) to the active Target Section. |
| Send to Code Sim | Copies the generated string to the Code Sim panel in the simulator for live testing. See below for details. |
| Generate CSV | Exports finalized string that would be pasted into the compiled DirectOutputConfig30.ini file. ONLY RECOMMENDED FOR VERY ADVANCED USERS most users should use the generated string for copy/paste in the online DOF Config Tool only. |
Send to Code Sim copies the Builder's generated DOF string into the Code Sim panel in the Simulator window. This lets you visualize your Builder-designed effect layered over existing effects for example, effects already playing from a loaded ROM table, or over Anim Sim (Pinup Popper menu effects) bitmap output. This is the fastest way to see how your custom effect will look alongside what's already running on the cabinet.
The Code Sim panel uses M/L fire controls plus Loop behavior controls:
| Mode | Behavior |
|---|---|
| Momentary | The effect plays once for as long as you hold the trigger button, then stops. Equivalent to a solenoid pulse press and release. |
| Latched | Click once to activate the effect, click again to deactivate. The effect stays active until you toggle it off. Useful for testing sustained effects like background fills or ambient lighting. |
| Loop | When enabled, Code Sim auto-replays timed effects after they expire. Untimed permanent effects do not block loop cycling. |
The DOF JSON Builder is the table-specific editing workspace for imported DOF Config Tool JSON files. It combines the same Builder controls used for green-field effect design with trigger-scoped card editing, live preview, and JSON export so you can work on one table at a time without manually copying strings around the online tool.
Think of the JSON Builder as a round-trip editor: export one table from the online DOF Config Tool, import that JSON here, tune or rebuild the effects, export the edited JSON, then re-import it back into the DOF Config Tool.
A table JSON is the online DOF Config Tool's export format for one table configuration. It contains the toy list, toy IDs/ports, trigger rows, and the public/user values that make up that table's DOF effects. The JSON Builder reads that data, turns each toy into a card, then exposes each trigger/effect row for scoped editing and preview.
Because the JSON carries table context, toy IDs, and row groupings, it is the safest way to make table-specific edits without manually reconstructing every string from the DOF Config Tool UI.
| Export Public Configuration | Export only modded toys (sections highlighted in green) | Result |
| ON | OFF | Exports FULL public AND user configuration |
| ON | ON | Exports ONLY modded toys with BOTH public AND user entries |
| OFF | ON | Exports ONLY modded toys with ONLY user entries |
| OFF | OFF | Exports FULL user configuration WITHOUT public configuration |
If you are editing a table for the first time, export the full public + user configuration so the Builder has the complete card set. Once you have an established custom version, exporting only modded toys can produce a tighter editing session focused on the rows you already changed.
Import JSON: click the Import JSON button at the bottom of the Builder window. The file is parsed into cards by toy, with each card showing the toy name and the DOF toy ID (P:###) so you can confirm you are editing the correct destination.
Variable support: JSON rows can preserve variable references and extra tokens. The Builder keeps those intact while still letting you edit the supported DOF parameters through the left-side controls.
Export JSON: once you finish editing, click Export JSON and save the file. That exported file is what you bring back into the online DOF Config Tool.
DirectOutputConfig*.ini files your cabinet actually runs.| Area | Purpose |
|---|---|
| Header Row 1 | Drag grip, toy name, port/category badge, and card actions (Max/Edit). |
| Header Row 2 | M/L fire controls, + New button, Sync checkbox, activity indicator. |
| Trigger Bar | Trigger chips per card (S/W/E/etc.) with quick fire and selection boxes. |
| Layer Rows | Checkbox, index, editable raw effect line, preview button, and conditional delete button. |
:: grip (prevents accidental drag while editing text).Use Save Table Layout when you want the current card order/geometry to stay with the active table, or Save Global Layout when you want the arrangement to become your default Builder workspace across tables.
The filter bar can limit both cards and section buttons by category, import delta state, and live edit state.
| Filter | Typical Targets |
|---|---|
| All | Entire imported set. |
| * Modified | Cards where imported public and user values differ. |
| ~ Edited | Cards edited after import (shown even when count is 0). |
| MX Matrix/Strip | Matrix outputs and MX strip sections. |
| RGB Toys | RGB channels (buttons/undercab/magna, etc.). |
| Flashers/Bumpers/Solenoids/Buttons/Other | Physical and non-dimensional toy groups. |
Use Show empty to include or hide cards with no user effect payload.
| Control | Meaning |
|---|---|
| M | Momentary preview. Fires the current card's selected trigger once through its normal cycle. |
| L | Latched preview. Toggles the card on/off for sustained inspection. |
| + New | Creates a new trigger/effect row in that card. |
| Sync | Opts the card into linked trigger preview when the matrix toolbar is in LINK SYNC mode. |
| FX | Opens the Effects Library / helper tooling for that card context. |
Each row is editable text. To edit existing content:
Enter to commit parse/update.>) to validate output before export.NOTE: Checked rows define what the active section writes back when syncing with Builder controls.
S2, W45, E112).NOTE: New layers insert after the last layer using that same trigger so trigger groups stay contiguous.
Within Builder controls, you can manage layers while JSON mode is active:
The FX button opens the Builder's effects helper/library context for the active card. Use it to browse known effect patterns, copy token combinations, or jump-start a new row before fine-tuning it with the left-side controls.
Rows can preserve and parse extra tokens such as variable references and modifiers, including @name@ and nobool payloads.
Use the strip mode toggle to switch between:
The Pin control keeps matrix preview fixed at the top while card content scrolls independently. Use this for long-card editing sessions so visual feedback remains constantly visible.
| Control | Purpose |
|---|---|
| Pause / Restart | Temporarily freeze or restart the current Builder preview cycle. |
| LINK SYNC | Determines whether synced cards fire together or the active card stays isolated. |
| Brightness / Gap / Trim | Preview-only matrix display calibration. Trim is especially useful for tightening or preserving soft bitmap edges while authoring GIF-backed effects. |
| Hide / Pin | Hide the matrix entirely or pin it while card rows continue scrolling. |
Per-card Sync check boxes control whether a card participates in linked trigger firing during global sync operations. To enable synced display of linked triggers, the "UNLINK/LINK SYNC" button above the LED matrix must be turned on - (LINK SYNC ON) - when synced, activating a trigger on any card will fire the trigger on all synced cards.
The DOF Pro-Series application combines a Simulator (for viewing and testing existing DOF effects) with a Builder (for designing new ones). Together they form a complete workflow for creating, testing, and deploying custom LED effects to your virtual pinball cabinet.
Use Import DOF Folder to load and classify your standard DOF files from one folder root. If you are continuing a recent session, Resume Last Workspace restores cached files and Builder state. If you are changing cabinets or want a guaranteed clean session, use Start Clean first.
Open the DOF Builder/JSON Builder and configure your multi-layer effect. Select colors, set timing, add shapes, plasma, bitmap rows, or sparkle. The live matrix preview shows you exactly what the effect will look like on your cabinet's LED panel.
View in the Builder interface or click Send to Code Sim to transfer your generated DOF string to the simulator's Code Sim panel. Latch it, enable Loop for timed effects, and verify it renders correctly on the full matrix with your cabinet's actual dimensions and strip configuration.
The Code Sim renders your Builder effect layered over any existing effects already playing in the simulator whether from a loaded ROM table's trigger codes or from Anim Sim bitmap and effects output (Pinup Popper menu effects). This lets you see exactly how your custom effect will interact with what's already running on the cabinet before committing it to your configuration.
If using the JSON Builder, you can export directly to JSON for easy import to the online DOF Config Tool, or you can copy the generated DOF string (or export as CSV from the Staged Output) and paste it into the DOF Config Tool section for that toy. Assign it to the correct E code for your target ROM table. The Config Tool generates the INI files that the DirectOutput Framework reads.

Download the updated INI files from the DOF Config Tool and place them in your DirectOutput configuration folder. Launch the table in your pinball front-end (Pinup Popper, PinballX, etc.) and your custom effect will fire on the physical hardware.
Design unique LED effects for specific tables. Instead of using the default DOF effects, create custom multi-layer compositions tailored to each table's theme matching colors, timing, and visual style to the table art and gameplay.
The Animation Simulator loads your Pinup Popper menu effects spreadsheet. Use it to preview and modify menu effects then use the Builder to design replacement effects for specific E codes in your effects CSV.
Even without a physical cabinet, you can use the Builder + Simulator to prototype effects. The Code Sim's Loop button makes it easy to iterate on timed effects adjust timing, watch the cycle, refine until perfect.
Export your Staged Output as CSV or JSON and share with other users. They can import your DOF strings or JSON files into their own DOF Config Tool entries. The effects are hardware-independent - they'll render the same on any cabinet with a compatible matrix and toy configuration.
Build your effect from the bottom up. Layer 1 at Z:0 is usually a solid color fill that covers the whole matrix. Then add overlays shapes, sparkle, scrolling text on higher Z layers.
Multi-layer effects with different W values create cascading animations. Three layers with W0, W200, and W400 will appear one after another, each 200ms apart.
Remember that RGB-only toys (RGB Flipper, RGB Magnasave, RGB Fire Button, etc.) can only show one color. Design your MX effects first, then set matching accent colors on the RGB sections.
The simulator's Code Monitor is editable. For small tweaks to an existing table's effects, you can modify the DOF string directly in the monitor and see the result instantly.
When designing effects with Fade Up/Down timing, always use the Code Sim Loop button to verify the full cycle. What looks good on paper might feel too fast or slow in practice.
When you are editing one specific table, export its JSON from the online DOF Config Tool, work in JSON Builder, then export the edited JSON back into the Config Tool. This preserves toy IDs, trigger grouping, and table context much more safely than manual copy/paste alone.
Cabinet.xml. Effects will preview at your exact cabinet's resolution.This section is the complete DOF parameter reference. It is intended as a self-contained resource if you want to understand what any parameter does at the implementation level, you should not need to go anywhere else.
| Builder Control | Token(s) | Practical Use |
|---|---|---|
| Static / On | F, FU, FD | Base color layers with temporal fade behavior. |
| Blink / Pulse / Flicker | Blink, BPW, FU, FD | Cyclic flashes, pulse ramps, and strobe-like effects. |
| Plasma | APS, APD, APC | Animated plasma field with optional extension/profile token. |
| Bitmap | ABL, ABT, ABW, ABH, ABF, AAC, AAF, AAD, AAS, AAB | GIF-backed bitmap crop, frame selection, animation speed, and playback behavior. |
| Area | AL, AT, AW, AH | Defines the matrix render rectangle. |
| Motion | AS, ADR/ADL/ADU/ADD | Controls movement speed and direction. |
| Step Motion | ASS, ASSMS, ASA | Discrete movement stepping, timed stepping cadence, and acceleration. |
| Sparkle | AFDEN, AFMIN, AFMAX | Randomized twinkle density and cycle timing. |
| Shape | SHP<name> | Applies sprite shapes from Shapes XML/PNG. |
| Timing | W, M, Max | Delay, hold, and hard-stop duration behavior. |
| Z Layer | L<n> | Compositing order for overlapping layers. |
A DOF output column in the Config INI contains one or more layers separated by forward slashes (/). Each layer is a space-separated sequence of parameters:
[Trigger] Color [Duration] [AreaParams] [MotionParams] [FadeParams] [BlinkParams] [SparkleParams] [SHPname] [Lx]
All parameters except the trigger and color are optional and have defaults. Parameters are case-insensitive. Order within a layer is flexible the parser identifies each parameter by its prefix token.
| Token | Type | Behavior |
|---|---|---|
| ON | Always active | Fires unconditionally. Always rendered at table load. |
| Sn | Solenoid | Fires when solenoid #n activates. |
| Wn | Switch (alt) | Alternate solenoid scheme; functionally identical to S. |
| En | Event | Fires on game event #n (mode, multiball, score, etc.). |
| Ln | Lamp or Layer | Fires when lamp #n is lit. Context-sensitive Lxx at end of layer = layer parameter, not trigger. |
| 0 | Disabled | Output explicitly disabled for this ROM. |
| Token | Default | Description |
|---|---|---|
| In | 48 | Intensity on 0-48 scale. Uses DOF's native intensity scale for LedWiz outputs. |
| Param | Default | Description |
|---|---|---|
| ALn | 0 | Area Left X offset of effect's left edge as % of matrix width (0=left, 100=right). |
| ATn | 0 | Area Top Y offset of effect's top edge as % of matrix height (0=top, 100=bottom). |
| AWn | 100 | Area Width effect width as % of matrix width. Critical for scrolling effects: AW should match AH for moving box effects. AW100 on a scrolling effect always fills the full width regardless of scroll position. |
| AHn | 100 | Area Height effect height as % of matrix height. |
| Ln | 0 | Layer Z-order. Lower layers drawn first; higher layers paint on top. Negative values allowed. Must appear at end of layer string to be recognized as layer parameter. |
| Param | Default | Description |
|---|---|---|
| ASn | 0 | Animation Speed scroll rate in DOF units/sec. Each unit = 0.1% of matrix per second. AS200 = 20%/sec. Effects wrap at matrix edges. |
| ADR | Direction Right (). Used with AS. | |
| ADL | Direction Left (). Used with AS. | |
| ADU | Direction Up (). Used with AS. | |
| ADD | Direction Down (). Used with AS. |
| Param | Default | Description |
|---|---|---|
| {ms} | 0 | Bare numeric duration first pure-digit token. Effect is on for this many ms then off. Minimum effective value: 17ms (one render frame at 60fps). |
| {ms} {n} | Two bare numerics: first=total duration, second=blink count. Effective blink interval = dur count. | |
| Mn | 0 | Minimum duration effect holds visible for at least n ms after its trigger releases. |
| Maxn | 0 | Maximum duration hard cutoff; effect goes off after n ms regardless of trigger state. |
| Wn | 0 | Wait delay in ms before this layer becomes active. Used to stagger layers for sequential effects. |
| Param | Default | Description behavior differs for static vs. moving effects |
|---|---|---|
| Fn / FUn | 0 | Static (AS=0): Temporal fade-in effect brightens from 0full over n ms, then holds. Moving (AS>0): Spatial ramp pixels near leading edge are at full brightness, pixels farther from it are dimmer. |
| FDn | 0 | Static (AS=0): Temporal fade-out 1-shot: dims 10 over n ms then permanently off. Moving (AS>0): Spatial comet tail pixels behind leading edge dim based on distance. FU+FD, no blink, no dur: One-shot pulse (ramp up then down). |
| Param | Default | Description |
|---|---|---|
| Blink n | 0 | Blink interval in ms. Effect cycles on/off at this rate. "Blink" alone (no number) = continuous breathing cycle using FU+FD. |
| BPWn | 50 | Blink Pulse Width duty cycle percentage. BPW20 = 20% on, 80% off per cycle. Applied within each blink interval. Default 50 = equal on/off. |
| Param | Default | Description |
|---|---|---|
| APSn | 0 | Plasma speed parameter generated by the Builder Plasma Speed control. |
| APDn | 0 | Plasma density/detail parameter generated by the Builder Plasma Density control. |
| APC... | Optional plasma extension/profile token generated from the Plasma second-color/profile control (example: APCYellow). |
| Param | Default | Description |
|---|---|---|
| AFDENn | 0 | Sparkle density percentage of pixels that participate in random flickering per frame. AFDEN50 = approximately half the effect area flickers. |
| AFMinn | 0 | Minimum sparkle cycle duration in ms for each participating pixel. |
| AFMaxn | 0 | Maximum sparkle cycle duration in ms. Each pixel randomly picks a cycle duration in [AFMin, AFMax]. |
| Param | Description |
|---|---|
| SHPname | Shape sprite from DirectOutputShapes.xml/PNG atlas. Scaled to the effect's AL/AT/AW/AH area. All fade, blink, and sparkle parameters apply normally. Requires Shapes XML and PNG to be loaded. |
Common shape names include: SHPRoundPulse, SHPSquarePlop, SHPDiamondBoxPulse, SHPArrowLeft, SHPArrowRight, SHPFillLeftRight, SHPFillTopBottom, SHPUpDown, SHPRoundAndRound, SHPLetterAZ, SHPDigit09. Download the shapes files from the Resources section.
| App Control | DOF Token(s) | Description |
|---|---|---|
| Effect Type: Static / On | F, FU, FD | Static and On modes use fade/timing controls with standard fade tokens. |
| Effect Type: Blink / Pulse / Flicker | Blink, ASS, BPW, FU, FD | Blink cadence and duty cycle; pulse/flicker behavior is produced by timing combinations. |
| Effect Type: Plasma | APS, APD, APC | Animated plasma field with optional extension/profile token. |
| Fade Up / Fade Down / Fade In | FU, FD, F | Temporal or spatial fade behavior depending on whether motion is present. |
| Wait / Min Hold / Max Duration | W, M, Max | Start delay, post-trigger hold time, and hard duration cutoff. |
| Intensity | In | Caps peak brightness output without changing color identity. |
| Z-Layer | Ln | Controls layer compositing order in multi-layer effects. |
| Area Controls | AL, AT, AW, AH | Defines the render rectangle for matrix-targeted effects. |
| Plasma | APS, APD, APC | Animated plasma field with optional extension/profile token. |
| Motion Controls | AS, ADR/ADL/ADU/ADD | Sets scroll speed and direction vectors. |
| Sparkle Controls | AFDEN, AFMIN, AFMAX | Randomized pixel flicker density and cycle timing. |
| Shape Picker | SHPname | Applies a shape sprite from DirectOutputShapes XML/PNG atlas. |
DOF configuration INI files use a section-based format. The sections the simulator reads are:
| Section Header | File | Content |
|---|---|---|
| [Colors DOF] | DirectOutputConfig##.ini | Named color definitions: ColorName=#RRGGBBAA. Colors from this section override the built-in DOF palette. Alpha byte is stripped. |
| [Config DOF] | All config files | ROM-keyed effect strings: romname,col1,col2,...,colN. Columns map sequentially to hardware outputs. This is the primary data source for the table selector and all effect routing. |
| [Variables DOF] | DirectOutputConfig##.ini | Global @macro@ variable definitions: varname=effect string. Expanded before rendering in all tables that reference them. |
| [TableVariables] | DirectOutputConfig##.ini | Per-ROM variable overrides: romname:varname=effect string. Applied before global [Variables DOF] during substitution. |
The simulator uses a hybrid sparse/sequential rule to map CSV column index to hardware output number:
This correctly handles both the 6-column WS2811 tables that dominate most cabinets and the larger multi-output tables (8, 10, 12 columns) used by tables like Diner, Twilight Zone, etc.
All DOF named colors bundled in this app are listed below. Use the exact name (including underscores) in your effect strings. Each swatch shows the rendered color, name, and hex value.
Filenames do not need to match exactly. The simulator reads each INI by role and validates content.
Each INI contains the standard DOF CSV format under the [Config DOF]section: quoted output headers, then ROM rows with the listed effects.
To determine which "DirectOutputConfig#.ini" file controls which toys - open the file in Notepad, look at the [Config DOF] section, and compare it to the sections below.
| Action | Purpose |
|---|---|
| Resume Last Workspace | Restores the most recent cached session, including previously loaded configuration files and Builder/Anim Sim context when available. |
| Start Clean | Clears the current workspace session so you can safely load a different cabinet or rebuild a broken session from scratch. |
Physical Toys (Almost always DirectOutputConfig.ini) drives contactors, flashers, shaker, knocker, and other non-addressable toys.
[Config DOF] # "Rom","Flipper Left","Flipper Right","Slingshot Right","Slingshot Left","10 Bumper Middle Left","10 Bumper Middle Center","10 Bumper Middle Right","10 Bumper Back Left","10 Bumper Back Center","10 Bumper Back Right","Knocker","Combo1-Bell Large","Combo2-Bell Small","Gear","Shaker","Strobe","Authentic Launch Ball","Start Button","Exit"
RGB Toys (typically DirectOutputConfig2.ini) drives RGB toy channels like undercab and button lighting.
[Config DOF] # "Rom","RGB Flippers","","","RGB Flippers","","","RGB Left Magnasave","","","RGB Right Magnasave","","","RGB Fire Button","","","RGB Undercab Smart","","","RGB Undercab Smart"
Addressable/MX Toys (typically DirectOutputConfig30/51.ini) drives matrix and strip rendering and is required for table playback.
[Config DOF] # "Rom","PF Left Effects MX HD","","","PF Left Flashers MX","","","PF Right Flashers MX","","","Combo3-Back Strobe","","","Combo4-Custom MX1","","","PF Right Effects MX HD"
| Input | Validation |
|---|---|
| INI slots | .ini extension + file must include [Config DOF]. |
| Cabinet XML | Must contain cabinet structure tags, rejects shapes XML content. |
| Shapes XML | Must contain shapes structure tags, rejects cabinet XML content. |
| Shapes PNG | Must be a .png image. |
| Cabinet JSON | Must parse as valid JSON. |
These are the device ID numbers assigned by the online DOF Config Tool, and the controller ID number will be appended to the DirectOutputConfig.ini files you download from the online tool.
For instance:
Both system's configuration files will contain the same information.
| ID | Device |
|---|---|
| 1 | Ledwiz |
| 8 | FRDM-KL25Z |
| 11 | PinOne |
| 19 | PacDrive |
| 20 | PacLed |
| 27 | Ultimate/IO |
| 30 | WS2811 |
| 40 | SainSmart |
| 51 | Pinscape |
| 70 | Philips_Hue |
| 80 | Pincontrol1 |
| 85 | Pincontrol2 |
| 90 | DudesCab |
| 100 | Artnet |
| 120 | PinscapePico |
All toys have an ID number that is used by the DOF Config Tool to identify the exact toy and to map the effects properly. This tool uses that ID as the "P:###" that is shown on the top of each card in the JSON Builder. This allows you to insure your effects are being routed to the proper toy.
| id | name |
| 1 | Start Button |
| 2 | Launch Button |
| 3 | Extra Ball |
| 4 | Coin |
| 5 | How to play |
| 6 | Genre |
| 8 | Flipper Left |
| 9 | Flipper Right |
| 10 | 8 Bumper Center |
| 11 | 8 Bumper Left |
| 12 | 8 Bumper Right |
| 13 | 8 Bumper Back |
| 14 | Knocker |
| 15 | Shaker |
| 16 | Gear |
| 17 | Slingshot Left |
| 18 | Slingshot Right |
| 19 | Strobe |
| 20 | 3 Flasher Left |
| 21 | 3 Flasher Center |
| 22 | 3 Flasher Right |
| 23 | 5 Flasher Outside Left |
| 24 | 5 Flasher Left |
| 25 | 5 Flasher Center |
| 26 | 5 Flasher Right |
| 27 | 5 Flasher Outside Right |
| 28 | RGB Flippers |
| 29 | Exit |
| 30 | Beacon |
| 31 | RGB Undercab Smart |
| 32 | Fan |
| 33 | 10 Bumper Middle Left |
| 34 | 10 Bumper Middle Center |
| 35 | 10 Bumper Middle Right |
| 36 | 10 Bumper Back Left |
| 37 | 10 Bumper Back Center |
| 38 | 10 Bumper Back Right |
| 39 | Custom Output 1 |
| 40 | Custom Output 2 |
| 41 | Custom RGB 1 |
| 42 | Custom RGB 2 |
| 43 | Authentic Launch Ball |
| 62 | Topper Bell |
| 65 | Table Variables |
| 67 | Hellball Color |
| 68 | Hellball Motor |
| 69 | Chime Unit High Tone |
| 70 | Chime Unit Mid Tone |
| 71 | Chime Unit Low Tone |
| 72 | RGB Undercab Complex |
| 73 | RGB Left Magnasave |
| 74 | PF Left Flashers MX |
| 75 | PF Right Flashers MX |
| 76 | PF Back Flashers MX |
| 77 | Chime Unit Extra-Low Tone |
| 78 | Chime 5 |
| 79 | ZB Launch Ball |
| 80 | PF Left Effects MX |
| 81 | PF Right Effects MX |
| 82 | PF Back Strobe MX |
| 83 | PF Back Effects MX |
| 84 | PF Back Beacon MX |
| 85 | Flipper Button MX |
| 86 | Flipper Button PBX MX |
| 87 | PF Back PBX MX |
| 89 | Fire Button |
| 90 | RGB Right Magnasave |
| 91 | Magnasave Left MX |
| 92 | Magnasave Right MX |
| 93 | Custom Output 3 |
| 94 | Custom Output 4 |
| 96 | RGB Undercab Complex MX |
| 97 | Custom Output 5 |
| 98 | Custom Output 6 |
| 99 | Custom Output 7 |
| 100 | Custom Output 8 |
| 101 | Custom RGB 3 |
| 102 | Custom RGB 4 |
| 103 | Shell Bell Small |
| 104 | Shell Bell Large |
| 105 | Repeating Bell |
| 106 | RGB Fire Button |
| 107 | Fire MX |
| 108 | Launch Ball MX |
| 109 | Extra Ball MX |
| 110 | Custom MX 1 |
| 111 | Custom MX 2 |
| 112 | Start MX |
| 113 | Exit MX |
| 114 | Speaker MX |
| 115 | Speaker |
| 116 | PF Left Effects MX HD |
| 117 | PF Right Effects MX HD |
| 118 | PF Back Effects MX HD |
| 119 | PF Logo Effects MX HD |
| 120 | PF Logo Effects MX SD |
| 121 | PF Left Flashers MX HD |
| 122 | PF Right Flashers MX HD |
| 123 | PF Back Flashers MX HD |
| 124 | Custom MX 3 |
| 125 | Custom MX 4 |
The following resources are the primary reference points for the DOF ecosystem, virtual pinball software, and LED control. These are the same sources used during development of this simulator.
The DOF Pro-Series Simulator would not exist without the work of the following projects, creators, and communities. Their contributions to the virtual pinball ecosystem are the foundation on which this tool was built.
Filenames do not need to match exactly. The simulator reads each INI by role and validates content.
Each INI contains the standard DOF CSV format under the [Config DOF]section: quoted output headers, then ROM rows with the listed effects.
To determine which "DirectOutputConfig#.ini" file controls which toys - open the file in Notepad, look at the [Config DOF] section, and compare it to the sections below.
| Action | Purpose |
|---|---|
| Resume Last Workspace | Restores the most recent cached session, including previously loaded configuration files and Builder/Anim Sim context when available. |
| Start Clean | Clears the current workspace session so you can safely load a different cabinet or rebuild a broken session from scratch. |
Physical Toys (Almost always DirectOutputConfig.ini) drives contactors, flashers, shaker, knocker, and other non-addressable toys.
[Config DOF] # "Rom","Flipper Left","Flipper Right","Slingshot Right","Slingshot Left","10 Bumper Middle Left","10 Bumper Middle Center","10 Bumper Middle Right","10 Bumper Back Left","10 Bumper Back Center","10 Bumper Back Right","Knocker","Combo1-Bell Large","Combo2-Bell Small","Gear","Shaker","Strobe","Authentic Launch Ball","Start Button","Exit"
RGB Toys (typically DirectOutputConfig2.ini) drives RGB toy channels like undercab and button lighting.
[Config DOF] # "Rom","RGB Flippers","","","RGB Flippers","","","RGB Left Magnasave","","","RGB Right Magnasave","","","RGB Fire Button","","","RGB Undercab Smart","","","RGB Undercab Smart"
Addressable/MX Toys (typically DirectOutputConfig30/51.ini) drives matrix and strip rendering and is required for table playback.
[Config DOF] # "Rom","PF Left Effects MX HD","","","PF Left Flashers MX","","","PF Right Flashers MX","","","Combo3-Back Strobe","","","Combo4-Custom MX1","","","PF Right Effects MX HD"
| Input | Validation |
|---|---|
| INI slots | .ini extension + [Config DOF] section. |
| Cabinet XML | Cabinet tags required; shapes XML rejected. |
| Shapes XML | Shapes tags required; cabinet XML rejected. |
| Shapes PNG | Must be .png. |
| Cabinet JSON | Must parse as valid JSON. |
| ID | Device |
|---|---|
| 1 | Ledwiz |
| 8 | FRDM-KL25Z |
| 11 | PinOne |
| 19 | PacDrive |
| 20 | PacLed |
| 27 | Ultimate/IO |
| 30 | WS2811 |
| 40 | SainSmart |
| 51 | Pinscape |
| 70 | Philips_Hue |
| 80 | Pincontrol1 |
| 85 | Pincontrol2 |
| 90 | DudesCab |
| 100 | Artnet |
| 120 | PinscapePico |
Triggers tell DOF when an effect fires. Multiple triggers in one layer are combined with logic OR any match fires the effect.
| Token | Type | Description | Example |
|---|---|---|---|
ON | Always-on | Effect is always active no trigger needed. Used for idle glow, constant undercab, always-lit toys. | ON Red |
Sn | Solenoid / Switch | Fires when solenoid or switch #n activates. Most bumpers, slingshots, and flippers use S codes. | S10 Blue |
Wn | Solenoid (alt) | Alternate solenoid numbering scheme used by some ROM types. Functions identically to S codes. | W5 White |
En | Event | Fires on ROM event #n (score events, mode starts, multiball, bonus). High-level game triggers. | E301 Cyan |
Ln | Lamp | Fires when lamp #n is lit. Tracks the physical lamp matrix state from the ROM. | L14 Yellow |
Ln nobool | Lamp (no boolean) | The output is permanently driven by lamp #n bypasses boolean logic. | L59 nobool |
0 | Disabled | Column is explicitly disabled for this ROM. Output stays off regardless of other layers. | 0 |
Area parameters define the rectangular region on the LED matrix where an effect is rendered. All values are percentages (0100) of the matrix dimensions.
| Param | Axis | Description | Example |
|---|---|---|---|
ALn | X (horizontal) | Animation Left X offset of the effect's left edge. 0 = far left, 100 = far right. | AL40 |
ATn | Y (vertical) | Animation Top Y offset of the effect's top edge. 0 = top row, 100 = bottom row. | AT0 |
AWn | X (width) | Animation Width width of the effect as a percentage of matrix width. AW100 = full width. | AW20 |
AHn | Y (height) | Animation Height height of the effect as percentage of matrix height. AH100 = full height. | AH100 |
Ln | Z (depth) | Layer Z-order for overlapping effects. Higher = painted on top. Negative values allowed. | L3 |
Full-width center stripe, middle third of matrix:E10 Blue AL0 AT33 AW100 AH34 | |||
Motion parameters animate effects across the matrix. Speed (AS) sets rate in DOF units/sec; direction vectors set the axis. Effects wrap at matrix edges.
| Param | Description | Example |
|---|---|---|
ASn | Animation Speed units per second (each unit = 0.1% of matrix per second). AS500 = 50% per second. | AS400 |
ADR | Direction Right moves the effect rightward (). Used with AS. | ADR AS300 |
ADL | Direction Left moves the effect leftward (). Used with AS. | ADL AS300 |
ADU | Direction Up moves the effect upward (). Used with AS. | ADU AS200 |
ADD | Direction Down moves the effect downward (). Used with AS. | ADD AS200 |
ASDR / ASDL | Alternate direction aliases for ADR/ADL accepted by some DOF versions. | ASDR AS100 |
Comet: staggered sweeps right, layered colors:E301 Red AL0 AW20 AH100 ADR AS500 L5 / E301 Orange W50 AL0 AW20 AH100 ADR AS500 L4 | ||
Colors can be named DOF colors, hex values, or resolved from the cabinet's color palette. Named colors are case-insensitive. The full 140-color DOF palette is loaded from Config2's [Colors DOF] section.
| Format | Description | Example |
|---|---|---|
Red | Standard named color. Basic set: Red, Green, Blue, White, Yellow, Cyan, Magenta, Purple, Orange, Lime, Pink, Gold, Silver, Teal. | S5 Red |
Dark_orange | Extended named colors use underscore for spaces. Defined in [Colors DOF] section of Config2.ini. | E10 Dark_orange |
#RRGGBB | Hex color direct RGB value. Cabinet.xml colors are often in this format. | ON #ff8800 |
In | Intensity level on DOF's 0-48 scale. 48 = full brightness, 0 = off. | ON Red I24 |
| ⓘ RGB toys (Config2/LedWiz 2): each column drives one physical diode. If all active channels share the same named color, that color is used directly. Otherwise channels blend by diode position. | ||
Timing parameters control when effects start, how they fade in/out, and how they blink. All time values are in milliseconds.
| Param | Description | Example |
|---|---|---|
Wn | Wait delay before the effect starts (ms). Lookbehind prevents collision with AW. | W100 |
Fn | Fade-in time in ms for the effect to ramp from 0% to 100% opacity on activation. | F200 |
FUn | Fade Up duration of the rise phase in a repeating pulse cycle (ms). Use with FD. | FU300 |
FDn | Fade Down duration of the fall phase in a repeating pulse cycle (ms). Use with FU. | FD400 |
MAXn | Max duration of effect length (ms). | MAX500 |
Blink n | Blink at n ms interval. Blink alone (no number) = continuous pulse with FU/FD. | Blink 200 |
Slow breathe: ON Blue Blink FU800 FD800 Fast strobe: E5 White Blink 80 | ||
Special effects control sparkle density, shape overlays, and variable substitution. These are advanced parameters used in matrix-heavy tables.
| Param | Description | Example |
|---|---|---|
SHPName | Shape renders a named sprite from DirectOutputShapes.png/xml onto the matrix. Shape is scaled to AWAH area. | SHPLetterA |
@VarName@ | Variable token substituted at load time from [Variables DOF] / [TableVariables] sections. | @strblft@ |
AFDENn | Analog Fade Density percentage (0100) of pixels to randomly illuminate. Creates sparkle/noise effect. | AFDEN40 |
AFMINn | Analog Fade Min minimum flicker duration (ms) per sparkle cycle. | AFMIN100 |
AFMAXn | Analog Fade Max maximum flicker duration (ms) per sparkle cycle. | AFMAX250 |
Sparkle fill (40% density): E10 White AH100 AW100 AFDEN40 AFMIN100 AFMAX250 | ||