Skip to content

Tommy (Data East 1994)

Data East build notable for documenting DE-specific FastFlips (solenoid 47 instead of Williams' 22), backglass power-draw dimming simulation, slingshot correction via _Slingshot subs instead of solenoid callbacks, and VR light positioning requirements. Shipped with both ROM 400 (official) and ROM 500 (unofficial mod).

Build Story

Tommy was a long-running build (2021-2023) led by apophis79 and wylte, with sixtoe, o0skitso0o, .rawd, and iaakki contributing VR, lighting, and physics work. The table served as a key testbed for Data East platform differences from Williams, particularly around flipper solenoid numbering and staged flipper implementation.

Table-Specific Details

Mechanisms & Hardware

  • DE FastFlips solenoid mapping: Data East uses solenoid 47 for flippers, not Williams' solenoid 22. Must set vpmFlips.FlipperSolNumber(2) = 47. Without this, flipper response uses the slower ROM callback path. See FastFlips guide.
  • Staged flipper implementation: DE uses different coil mappings than Williams, so staged flipper code cannot be directly copied. The stage trigger solenoid assignments must be remapped for DE ROMs.
  • Slingshot correction: Real slingshots deflect at an angle but VPX applies force perpendicular. Correction code adds 6-7 degrees of rotational force. Must use _Slingshot event subs, NOT solenoid callbacks -- solenoid callbacks have a built-in cooldown where rapid re-fires are suppressed, causing missed animations and sounds. See slingshot correction.
  • ROM 400 vs 500: ROM 400 is the official Data East release. ROM 500 is an unofficial mod by Soren (Danish developer) with scoring changes and more blinder usage. ROM 500 has reported bugs: modes not ending through drain, blinder staying deployed permanently. VPW shipped 500 as default with 400 available via script option.

Art & Visuals

  • Backglass power-draw dimming: Counts lit insert lamps (summing IntensityScale values) and dims backglass TOMMY letter primitives via BlendDisableLighting. Replicates voltage sag from many simultaneously-lit lamps loading the transformer. Creates a subtle breathing effect.
  • Insert brightness boost when GI off: Update insert intensity dynamically based on GI level. Base intensity stored in each light's UserValue property (VBScript arrays not accessible from Lampz callbacks due to initialization timing). See insert brightening.
  • Insert style selection: Use 3D primitive inserts when the transparent lens is visible; use Skitso-style when insert artwork covers the lens completely. Maintain warm GI color tone -- don't use pure white.
  • Desktop backdrop brightness: A backdrop brighter than the table makes the table look dark. Use dark, subdued backdrop images so the table is the visual star.

Physics & Gameplay

  • Rubberizer R1 vs R2: R2 introduces spin reversal on rubber/post contact. R1 feels more predictable. The choice should be validated against real machine footage per table.
  • PWM flashers: Requires SolModCallback instead of SolCallback for 0-255 intensity values. Standard SolCallback only sees binary on/off.

Known Issues

  • VR light swimming: Caused by playfield opacity not set to 1. Also caused by TransmissionScale on insert lights. Fix for inserts: set TransmissionScale to 0 in VR; for GI lights, set to 0.01. See VR development.
  • VR shadow-casting lights: Lights positioned above the playfield cause unnatural shadow movement in VR when the player moves their head. Fix: drop to playfield height in VR mode. See GI and flashers.
  • VUK ball floating: Insufficient subway depth for ball to clear hole edge before hitting kicker. Minimum subway depth must accommodate playfield thickness (~24 units) plus ball diameter (50 units).

Techniques Developed Here

See Also