GoldenEye (Sega 1996)¶
A complete VPW Lite update from physics integration through release, rich in insert techniques, GI ramp texture differencing, timer performance optimization, and the altsound-in-table concept. Collaborative build between apophis79, oqqsan, sixtoe, fluffhead35, iaakki, astronasty, and others.
Build Story¶
GoldenEye was a Lite project focused on physics integration, sound, and insert lighting upgrades without a full toolkit rebuild. The project produced the worst FPS of any VPW table (~80 FPS on modest hardware) before timer optimization doubled it to 150+, establishing important timer performance standards.
Table-Specific Details¶
Mechanisms & Hardware¶
- Satellite dish ball lock rebuild: The original used a fake ball lock (ball image swapped to "swirly" texture). Rebuilt with a real ball in an invisible kicker inside the dish, rotating naturally with the mechanism. Kicker releases on ROM events. This eliminated the visual artifact of ball texture changing.
- Plunger lane stuck ball: A collidable post near the exit caught the ball on bounces back, and the ball release gate poked outside the lane wall. Fix: realign walls to match post positions and move gate inside the lane.
Art & Visuals¶
- GI lights on negative-Z surface: All GI lights were assigned to a surface at z=-18, making them render below the playfield. Fix: remove the surface reference from all GI lights.
- Playfield material shininess: Set to 1.0 from the original table, causing dark outlines around insert cutouts when GI was on. Reduced to 0.1 (matching Black Mamba settings) to eliminate the contrast.
- Insert bloom dual-light setup: Under-playfield white light for core illumination + over-playfield colored light with very dark full-on color to prevent cloudiness. Naming convention
LL001/LLb001enables VPX auto-increment on copy-paste. - Insert Z-position at -0.1: Prevents z-fighting with the playfield surface when inserts sit at exactly z=0.
- GI ramp texture differencing: Technique to extract a fadeable GI layer from pre-baked ON/OFF ramp textures using Difference blend mode in GIMP/PSP. The difference image is applied as a separate primitive with Lampz-controlled opacity for smooth GI fading, enabling dynamic color changes.
Physics & Gameplay¶
- Playfield slope from manual: 6.5 degrees designed; 6.2 degrees felt better in VPX. Set min and max slope to the same value during testing.
- Right ramp nearly unshootable due to metal bracket primitives not flush with ramp entry. Cross-referenced the Sega manual to verify brackets should be totally flush.
Known Issues¶
- B2S dependency bug:
lamptimer_timersub had a guard checking for B2S being active -- if B2S was off, the entire lamp update loop was skipped, breaking all inserts. Fix: remove the B2S guard. - Timer interval performance: Multiple timers at
interval = 1(1ms) withGetBallscalls caused ~80 FPS. Changing tointerval = -1(per-frame) doubled FPS to 150+.
Techniques Developed Here¶
- Timer interval optimization -- interval 1 vs -1 yielding 2x FPS improvement
- GI ramp texture differencing for fadeable GI layers
- Altsound-in-table concept -- baking altsound into VPX script via "sound command listener" function, eliminating PinSound dependency. OGG format in VPX 10.7+ reduces file size dramatically.
- VolumeDial connection requirement for all mechanical sound effects --
PlaySound "fx_relay", 1, VolumeDial - Insert bloom color technique -- very dark full-on color prevents cloudy appearance
See Also¶
- Best Practices -- timer performance, testing standards
- Insert Lighting -- bloom technique, z-fighting fix
- GI and Flashers -- ramp differencing, GI fading
- Software Setup -- altsound integration