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
_Slingshotsubs 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
_Slingshotevent 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
UserValueproperty (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
SolModCallbackinstead ofSolCallbackfor 0-255 intensity values. StandardSolCallbackonly 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¶
- DE FastFlips solenoid mapping (solenoid 47) was documented here
- Slingshot correction via _Slingshot sub instead of solenoid callbacks was validated here
- Insert brightness boost when GI off using UserValue storage was developed here
- VR room integration checklist was compiled during this build
See Also¶
- VBScript Patterns -- FastFlips, SolModCallback
- GI and Flashers -- PWM flashers, spotlight subtlety
- VR Development -- TransmissionScale, light positioning