Batman (Data East)¶
Full table rebuild lifecycle of Data East's 1991 Batman, from rescuing a skewed playfield through v1.1.1 release. The project is rich in playfield alignment techniques, plastic bevel baking, primitive insert workflows, nFozzy physics integration, depth bias debugging, and VR tuning. Key contributors include cyberpez, sixtoe, iaakki, benji084, o0skitso0o, apophis79, and oqqsan.
Build Notes¶
Playfield Alignment from Bare Wood Scan¶
A sanded-down bare wood playfield photograph proved invaluable for alignment, showing every hole position, insert cutout, and screw location without artwork distortion. No two playfield redraws matched because the original manufacturing had loose tolerances, making the bare wood scan the most reliable reference.
The redraw was traced from a scan but was the wrong physical size. The approach: stretch the bare wood photo to fill the VPX playfield, then scale the redraw artwork to fit over it. Collidable object placement is more critical than perfect artwork alignment.
Table Rescaling¶
Use the VPX scale feature: select all objects, right-click, choose Scale, enter the ratio. This moves and scales ~90% of objects correctly. Primitives and triggers may need manual adjustment afterward. Always verify ball size (50) and mass (1.0) after rescaling.
Playfield Mesh Issues¶
Small holes or loop cuts in the playfield mesh can cause the ball to get stuck or float when at low speed. Fixes: avoid unnecessary cuts in the flipper area, place a thin wall at height 0.01 to cover problematic mesh seams, use transparent mesh sections for rollover switches instead of cut holes.
Layer Organization Convention¶
Standard layer organization: Layers 1-3 for collidable elements, Layers 4-6 for visual primitives and inserts, Layers 7-9 for lights, Layers 10-11 for VR-specific objects and playfield-sized flashers.
Depth Bias Ordering¶
Depth bias works like a deck of cards: the object you want on top needs the biggest negative number (e.g., -10000), objects underneath need positive numbers. It is inverted from intuition.
Live Adjustment
In F5 mode, press D and type plastic001.depthbias = -800 to see changes immediately for real-time tuning.
Joker Ramp Rebuild¶
The Joker ramp was separated into three parts: collidable (Col), decal layer (Decals), and visible decorative (Pretty). The wall trough underneath was preferred over a primitive trough because the primitive version caused ball loss. Scanned decal proportions provided accurate dimensions for the three eye/mouth openings.
nFozzy Physics as Recruitment Task¶
Adding nFozzy physics is a structured task suitable for new contributors. The table must be at correct physical dimensions first -- physics tuned to an incorrectly-sized table will play completely differently once fixed.
Scripting¶
Museum VUK Dual-Switch Implementation¶
When implementing a dual-switch VUK (switches 52 and 53), using InRect to detect ball position requires careful filtering. If both balls trigger the InRect check, one continuously toggles the switch off, causing the ROM to restart timers. Fix: track which ball is in the kicker and exclude it from InRect checks.
Ball Rolling Sound Persistence After Multiball¶
After multiball ball deletion, rolling sounds can persist if: (1) the ball fell through a playfield mesh hole and is rolling in "Narnia" below the table, or (2) the FlipperPolarity Balls array retains a dangling reference. Implement BallInNarnia detection and ball cleanup code.
LUT Changer Filename Collision¶
When copying the LUT changer from another table, change the save filename to be unique per table. If two tables share the same save filename, changing the LUT on one overrides the other.
Shot Tester Debug Tool¶
gtxjoe's shot tester fires balls at specific table locations using keyboard keys while flipper keys adjust angle. This dramatically speeds up testing. Important: remove or disable the debug code before release.
3D & Art¶
Plastic Bevel Baking (C4D with Octane)¶
benji084's workflow for realistic baked plastics:
- Model plastic outline as a spline
- Use two Extrude modifiers -- one flat-face with UV map, one beveled for the 3D edge
- Loop-select the top ring of points and pin for UV relaxing
- Assign emissive material to top face, specular material (0.001 roughness, 1.2 IOR) to bevels
- Bake with Octane camera directly overhead
- Bevels painted with vertex painting for gradual falloff
Plastic bevel sizing should be visible enough that it shows in VPX -- if too subtle, the 3D effect is lost in-game.
3-Prim Insert System¶
The insert system uses ON, OFF, and BULB primitives, each with its own material per color. Tuning approach: set VPX light intensity to 0 first, adjust OFF prim (dark, high opacity), tune BULB prim (visible hotspot), balance ON prim for insert spoke texture when lit, then add VPX light at z=-3 for ball reflections only.
Insert Normal Maps¶
Normal-mapped inserts look good in VR (visible insert spoke reflections) but can create bright pixel specks in desktop mode. Make normal maps a toggleable option, disabled by default.
Font Identification for Data East Inserts¶
Gotham font with a stroke applied was the closest match for Batman DE insert text, though the "S" character differed. Many DE tables of this era used similar fonts.
Troubleshooting¶
Ball Shadow Blackout on Insert Primitives¶
Ball shadows can black out insert primitives even when depth bias seems correct. Fix: set shadow primitive height below 0.17, give each shadow a slightly different Z value (differing by 0.001).
BlendDisableLighting White Reflection Blobs¶
White reflection blobs from certain angles are caused by BDL set to 1.0 on shiny materials. Reducing BDL from 1.0 to ~0.5-0.77 eliminates the artifact.
VRRoom Left On¶
VRRoom=1 (or 2) causes significant frame rate drops (20-40 fps) even in desktop mode. Always set VRRoom=0 before uploading development builds.
Data East Latched Relays¶
Data East tables from the Batman/Hook era use latched relays on some solenoids that act like a "shift key." A backglass light effect at game end might be driven by the same solenoid that fires playfield flashers during normal play. Tracing circuit diagrams is sometimes needed.
VPX_GL Shader Version Issues¶
Different VPX_GL shader versions can cause 3D insert primitives to render with blocky/aliased text in VR. Switching to a different shader release fixes the issue -- this is shader-version dependent, not hardware/driver dependent.
Game Knowledge¶
Sub-Playfield Collision Sound Disable¶
Disable collision sounds for balls below Z=0 to prevent constant clicking sounds during multiball ball staging or VUK operation.
Resources¶
- Batman DE released as hybrid Desktop/Cabinet/VR package on VPUniverse under "VPX - Hybrid Releases" category
- Flasher images required for VPX 10.7 compatibility -- flashers that worked without images in 10.6 appear pure white in 10.7