GoldenEye¶
GoldenEye (Sega 1996) is a VPW table built from a photo-stitched playfield by ebislit, featuring nFozzy physics, Lampz insert systems, a scripted satellite dish mechanism, and PWM solenoid support.
Build Notes¶
Playfield Source¶
The playfield was NOT scanned -- it was photo-stitched from multiple photos by ebislit, then warped to fit existing table geometry. The original had some egg-shaped inserts because correct dimensions were not prioritized in the older workflow. The image was assembled collage-style in Photoshop from dozens of perspective-corrected photos.
nFozzy Physics¶
Key settings:
- Playfield slope: 6.0-6.5 degrees (adjustable via difficulty setting in tweak menu)
- Playfield friction: 0.15 (later increased slightly in v42 to address fast ramp speed)
- Ball size: 50 with mass 1 (standard; original table used 51.8)
The tweak menu was added in v1.0.3 for user-adjustable settings.
Flupper Flasher Domes¶
Flupper flasher domes v2.2 were added from FlupperDomes2.2.vpx, which include fade timers for realistic flasher behavior.
Desktop Backglass¶
The desktop backglass uses GOLDENEYE letter lights connected to actual ROM switches, illuminating based on game progress. The B2S server must be present or inserts may not work (dependency bug found during development).
Ball Save Trajectory¶
The ball save magnet was launching the ball into the bottom of the left ramp instead of the left orbit. Fix: adjusted the bottom magnet position and kick angle slightly to the left. Reference video at the 12:00 mark was used for comparison.
VR Room¶
VR mega room updated by dardog81 with guard movement and birds flying. VR rooms hooked to day/night setting. VR view mode must be set to "Desktop" (not "Cabinet") or parts will be missing/colored wrong.
Scripting¶
Lampz Insert System¶
The Lampz insert system uses bloom lights with naming convention LL001 / LLb001. Insert brightness can be tuned live via the VPX debugger:
Insert DL tuning formula: y=2x+1 equation. Last number sets DL when GI is off. First number + last number = DL when GI is on.
Debug commands for GI control:
Insert Overlay Swapping for GI States¶
The table uses ON/OFF insert meshes that swap based on GI state. When GI is off, a darker overlay is shown; when GI is on, the brighter baked overlay appears. The DT/FSS image must be set to "none" to prevent rendering artifacts.
Satellite Dish Mechanism¶
Rebuilt by apophis79 to use a real ball in a kicker replacing the original primitive:
- A kicker acts as the "magnet" holding the ball
- Code places a ball on the kicker if the magnet is ON and a ball gets close
- Must bypass placement code if a ball is already being held
- Ball-ball collision detection (from LOTR's Destroy the Ring mode) knocks the ball off for Super Jackpot
BallInRadarLockflag must be checked before allowing another ball to be captured
Slingshot Correction¶
Apophis added slingshot correction code (revA) to make rebound angles match real machine behavior. Tuned based on comparison with real machine video footage. This is a reusable system applicable to other tables.
PWM Solenoid Conversion¶
PWM updates applied to inserts, GI, flashers, and VR backglass in v1.0.4. Converting older tables to PWM requires handling each subsystem separately.
Sound Volume Control¶
VPX 10.7 required for OGG file support (10.6 only supports WAV).
3D & Art¶
Wire Ramp and Plastic Ramp Retexturing¶
Tomate80 rebuilt ramp textures in Blender. Wire ramps required selecting all edges to create seams for proper UV unwrapping (each wire individually). Wire ramp color is gold (matching reference photos). Unused textures were deleted, cutting ~30MB from file size.
Ramp Difference Textures for GI Fade¶
ON and OFF baked textures are used for ramps, with primitives in an OFFPrims layer. Plastic ramps required separate ON/OFF texture bakes. Wire ramps can be controlled via script DL without needing separate bakes.
Troubleshooting¶
GI Surface Bug¶
HLightMesh01 surface at -18 z height caused lights at default height to not render. Fix: lights needed height 18+ to show above the mesh.
Playfield Material Shininess¶
Reduced from 1 to 0.1 to fix insert outline visibility. High shininess caused bright outlines around 3D insert cutouts.
Ramp Construction Issues¶
The left ramp had multiple overlapping physical ramps at different heights causing ball rocking, sticking, and acceleration issues. Fix (v1.1.2): cleaned up overlapping ramps, leaving just one "flat" ramp. Gate friction reduced from 0.3.
VPX 10.8 Flipper Stuck Bug¶
Flippers locked in upright position on game start with VPX 10.8.0 betas after build 1904. Root cause: table was missing vpmInit Me in Table_Init. Also affected Apollo 13 (same SEGA VBS scripts).
Texture Memory Crash (10.7)¶
Goldeneye was the only table that crashed randomly on VPX 10.7. Fixed in beta build 196 where niwak improved texture memory usage.
Satellite Multiball VPinMAME Bug¶
After PWM conversion (UseVPMModSol = 2), solenoid 33 (satellite magnet) stopped getting callback. Filed as GitHub issue #443 on vpinball/pinmame. Fixed in a later PinMAME build (confirmed Feb 2026).
Game Knowledge¶
Altsound vs PinSound¶
PinSound was reported to work better than AltSound for Goldeneye specifically. The "boater mix" AltSound pack (100% movie music, 95% replaced voice files) is available on VPUniverse.
Resources¶
- DOF entries 101/102 needed for flipper solenoid feedback (E commands from script, not ROM)
- Z offset plays an important role in POV for "long" tables
- Timer optimization (disabling unused timers) doubled the FPS
- VPW bot-based checkout system used for version management