Skip to content

Terminator 2: Judgment Day

Terminator 2 (Williams, 1991) has one of the longest VPW development histories, evolving through numerous hands over several years. Starting from g5k's original VPX project, it passed through contributions from Benji, Skitso, iaakki, oqqsan, apophis, Niwak, Sixtoe, tomate80, mcarter78, and DaRdog before its December 2024 release. The table demonstrates the evolution of VPW techniques from early Skitso-style inserts through Flupper 3D inserts, PWM modulation, and split GI with overlay hacks.

Build Notes

Version History

Key milestones in the build chain:

  • Base: g5k original (first VPX project, 2018)
  • v002: Benji - nFozzy physics (flipper polarity, rubber dampening)
  • v003: Skitso - Skitso-style inserts, flashers, LUT
  • v004: iaakki - Reworked inserts with DL code, fading curves
  • v005: oqqsan - Flupper-style 3D inserts, all lights hooked up
  • Lite Update: apophis - RothFozzy physics, Fleep sounds, VPW dynamic shadows
  • PWM: Niwak - Modulated lamp/flasher/GI outputs
  • v1.16: Sixtoe - Split GI, Flupper pop bumpers, GI-off overlay hack
  • v1.19: DaRdog - Mega VR room with T-800 topper
  • Released by g5k on VPUniverse, December 2024

Flupper 3D Insert Workflow

  1. Cut insert holes in playfield texture with alpha transparency
  2. Use playfield alpha mask setting (experiment per table)
  3. Place insert text on separate flasher primitives
  4. Use two VPX lights per insert: one for ball reflection (intensity 3-8 at height -3), one for secondary glow
  5. Insert "ON" texture from Flupper's demo table provides the starburst pattern
  6. Depth bias prevents VPX light from incorrectly lighting the insert primitive

Insert Light Colors

Do not use pure RGB values. Use something like RGB(255,32,0) for red so that when DisableLighting increases, the texture gets orange highlights rather than washing out. Red bleeds through more than other colors and needs lower intensity. Blue requires higher intensity. VPX lamp colors should never be FF0000; add some green and blue (e.g., FF0505).

GI-Off Hack Using Flasher Overlay

For tables with baked GI in textures (no separate off-state renders):

  1. Add a dark flasher overlay covering the entire playfield
  2. When GI is off, activate the dark overlay to dim the table
  3. For lights that should punch through, increase their depth bias to render on top
  4. Split GI correctly into left/right overlays per real machine wiring

Importing Primitives with Correct Pivot Points

  1. Export from Blender with table origin (0,0,0) as "dummy" position references
  2. Import dummies into VPX with all transformation values at zero
  3. Export same primitives again with their local rotation axis
  4. Import rotation-axis versions and move onto dummies using live editor
  5. Delete dummies when positioned (Z-fighting indicates alignment)

Fleep Sound Package

Fleep sounds add realistic mechanical audio with individual volume dials. Raw mechanical sounds were recorded from g5k's real machine with a Zoom recorder. The difference between tables with and without Fleep sounds is dramatic.

VPW Protocol for Original Authors

  1. First attempt: contact the original author and have them lead/approve changes
  2. Authors release under their own name, not VPW, unless they prefer otherwise
  3. Workshop channels capture tweaks, not secret builds
  4. Always assume original authors will eventually read discussions

Scripting

NF Lampz vs JP Fading Lamps

These systems do not mix well. If using JP lamps (identified by NfadeL calls), use the JP-compatible approach for BlendDisableLighting. For multiple lights per insert: first calls must be NfadeLm (does not reset fading level), and the last one is NfadeL.

BlendDisableLighting for Insert Primitives

The VPX light object is NOT meant to directly illuminate insert primitives. Use BlendDisableLighting on the primitive to control brightness via script. Lights are only for ball reflection and hotspot glow. Depth bias prevents direct illumination.

Insert Lamp Fading

Reduced lamp timer interval from 5ms to 8ms for slower fading without performance penalty. Remove any debug.print statements from fade subs as they significantly impact performance.

PWM Support

When the game's speech plays, the ROM dims the GI, creating a visual effect. PWM uses modulated outputs from PinMAME. Change lights to "no fading" mode for proper PWM behavior. Applied to lamps, flashers, and GI strings.

DisableLighting for Collections

Sub DisableLightingColl(coll, DLintensity, ByVal aLvl)
    For Each p In coll
        DisableLighting p, DLintensity, aLvl
    Next
End Sub

Usage: Lampz.Callback(110) = "DisableLightingColl ColTest, 25,"

GI Implementation

PinMAME returns 8 dim values (0-8, with 8 clamped to 7) for GI via Controller.ChangedGIStrings. Basic scripts may only implement on/off. NF Lampz provides proper fading with Lampz.Callback assignments per string.

Rubber Dampening with NF Physics

Separate rubber objects into collections:

Sub dPosts_Hit(idx)
    RubbersD.dampen Activeball
    RubbersHit
End Sub

Sub dSleeves_Hit(idx)
    SleevesD.Dampen Activeball
    RubbersHit
End Sub

NFozzy dampening uses scripted elasticity fall-off curves based on real-world testing.

3D & Art

Splitting Primitives in Blender

To split a combined primitive:

  1. Import the OBJ from VPX (File > Import, not File > Open)
  2. Edit mode, select and delete one half, save as prim1
  3. Ctrl+Z to undo, delete the other half, save as prim2
  4. In VPX, copy/paste the existing primitive, import each part

Texture map references are preserved automatically.

Skitso-Style Insert Requirement

Skitso-style inserts require playfield reflections to be enabled in VPX settings. Without reflections, inserts appear dark. This is a VPX limitation that cannot be fixed. Add to release notes.

Insert Text Anti-Aliasing

When rotating insert text, enable bicubic interpolation and rotate in one step. In GIMP, change rotation interpolation mode (try NoHalo). Best practice: find the original font and recreate text. Font used for T2 inserts: "Bitwise" from ffonts.net.

Insert Realism

Two approaches:

  1. Old/worn look: Rougher surface, spread light, starburst barely visible off. Add noise to normal map. Easier to simulate.
  2. Sharp/clear look: Requires caustic simulation, bevels on starburst edges, speckles. Harder to simulate in realtime.

Vector Redrawn Plastics

Phreezie spent weeks redrawing all T2 plastics in Adobe Illustrator as vectors. Available as .AI files on request. Vector format allows scaling to any resolution.

VR Room Optimization

  • T2 mega room reduced from 675K to 513K faces
  • A topper model was 250K polys alone -- reduced to ~30K with decimation
  • 8000x8000 64MB PNG floor texture replaced with 4000x4000 4MB JPG
  • Target: 6-8 GB VRAM sufficient for any table

Troubleshooting

Ambient Occlusion Ball Halos

Dark borders around the ball are caused by ambient occlusion being enabled. Disable AO to remove the artifact.

PinMAME Directory Corruption

If tables fail after a VPX update (all lights on full, configs lost), delete the PinMAME directory and let it regenerate.

Ramps Visible Despite Settings

Ramps set to not visible in the editor may still appear if the script overrides visibility on table load. Check both editor settings and script initialization.

Game Knowledge

GI String Mapping (Real Machine Verified)

Verified from real machine test menu:

  1. Insert Top (Backbox)
  2. Insert Bottom (Backbox)
  3. Playfield Right
  4. CPU (inserts)
  5. Playfield Left

Note

The T2 manual lists GI assignments twice and they contradict each other. The second listing is more accurate. The actual wiring was changed after the manual was printed.

Insert Construction

The team voted for classic warm (incandescent) lighting over LED. Blue inserts are particularly hard to reproduce correctly. Reference photos of aged inserts can be misleading -- inserts fade over time.

Physics Calibration

Record side-by-side comparison video of VPX table and real machine (PAPA footage works well). Compare ball speed off flippers, roll-back speed, and slingshot power. For T2, flipper speed was accurate but ball rolled back slightly too fast.

Resources

Flupper's Blender Ramp Tutorial

Available at MEGA (59.76 MB). Good starting point for learning Blender basics for VPX modeling. Ignore Octane-specific steps.

Flasher Locations

  • Two small #89 bulbs above the kicker hole behind a metal plate = target flashers (solenoid 25)
  • One large flasher bulb = left lock flasher (solenoid 20)
  • Gun targets themselves have no dedicated flashers, only insert lighting (L31-L35)