Overview
Legacy evidence identifies this candidate as Data East (1992). The information below is preserved for recreation work but is not automatically treated as validated physical-machine fact.
Playfield devices
Switch, lamp/GI, and controlled-device candidates are in the adjacent machine definition. Source-specific implementation notes are retained below.
Custom mechanisms
No custom mechanism conclusion has been validated. Manuals, schematics, PinMAME source, and gameplay evidence still need to be checked.
Ball-state transitions
Ball paths, trough ordering, locks, kickouts, and causal transitions have not yet been normalized. Relevant source notes follow under Evidence notes.
Controller interactions
Controller callbacks and bindings are candidate evidence only until reconciled against PinMAME and physical documentation.
Service and setup information
Unknown; locate operator/service documentation.
Timing and tuning observations
Source timing values may describe a particular VPX implementation rather than physical hardware and require review.
Recreation guidance
Do not treat this partial definition as a complete authoring specification. Resolve every coverage requirement and conflict before promotion.
Evidence notes
games/hook.json#/switches/0._note: vpmNudge.TiltSwitch = 1games/hook.json#/switches/1._note: bsTrough.EntrySw = 10. Trigger1_Hit decrements BallsOnPlayfield.games/hook.json#/switches/2._note: bsTrough.InitSwitches Array(13,12,11) — sw11 is position 3 (nearest eject). Size=3.games/hook.json#/switches/3._note: bsTrough.InitSwitches Array(13,12,11) — sw12 is position 2.games/hook.json#/switches/4._note: bsTrough.InitSwitches Array(13,12,11) — sw13 is position 1 (nearest drain).games/hook.json#/switches/5._note: Sw14_Hit/UnHit — tracks BIPL (BallInPlungerLane) variable. Controller.Switch(14) on/off.games/hook.json#/switches/6._note: Controller.Switch(17) on/off.games/hook.json#/switches/7._note: Controller.Switch(18) on/off.games/hook.json#/switches/8._note: Controller.Switch(19) on/off.games/hook.json#/switches/9._inferred_type: standup_targetgames/hook.json#/switches/9._note: vpmTimer.PulseSw 20 in Sw20_Hit. MoveTarget20 animates target depression.games/hook.json#/switches/10._note: Controller.Switch(21) on/off.games/hook.json#/switches/11._note: Controller.Switch(22) on/off.games/hook.json#/switches/12._note: Controller.Switch(23) on/off.games/hook.json#/switches/13._note: Controller.Switch(24) on/off.games/hook.json#/switches/14._inferred_type: drop_targetgames/hook.json#/switches/14._note: sw25_dropped() calls dtLDrop.Hit 1. cvpmDropTarget bank of 4.games/hook.json#/switches/15._inferred_type: drop_targetgames/hook.json#/switches/15._note: sw26_dropped() calls dtLDrop.Hit 2.games/hook.json#/switches/16._inferred_type: drop_targetgames/hook.json#/switches/16._note: sw27_dropped() calls dtLDrop.Hit 3.games/hook.json#/switches/17._inferred_type: drop_targetgames/hook.json#/switches/17._note: sw28_dropped() calls dtLDrop.Hit 4.games/hook.json#/switches/18._note: Controller.Switch(29) on/off.games/hook.json#/switches/19._note: Controller.Switch(30) on/off.games/hook.json#/switches/20._note: Controller.Switch(31) on/off.games/hook.json#/switches/21._inferred_type: kickergames/hook.json#/switches/21._note: Sw32_Hit adds ball to SkillShotR (cvpmBallStack). InitSaucer Sw32,32. Sw32_UnHit fires plunger release animation.games/hook.json#/switches/22._inferred_type: bumpergames/hook.json#/switches/22._note: Bumper1B_Hit pulses sw33. Sw33_Hit also pulses sw33 with MoveTarget33 — same switch used for both bumper and stand-up target.games/hook.json#/switches/23._inferred_type: bumpergames/hook.json#/switches/23._note: Bumper3B_Hit pulses sw34. Sw34_Hit also pulses sw34 with MoveTarget34.games/hook.json#/switches/24._inferred_type: bumpergames/hook.json#/switches/24._note: Bumper2B_Hit pulses sw35. Sw35_Hit also pulses sw35 with MoveTarget35.games/hook.json#/switches/25._note: Sw36_Hit/UnHit — Controller.Switch(36) on/off. UnHit applies speed adjustment for ramp boost.games/hook.json#/switches/26._note: Controller.Switch(37) on/off. Hit triggers LEDFlash.games/hook.json#/switches/27._note: Controller.Switch(40) on/off. Hit applies speed dampening.games/hook.json#/switches/28._inferred_type: standup_targetgames/hook.json#/switches/28._note: vpmTimer.PulseSw 41 in Sw41_Hit. MoveTarget41 animation.games/hook.json#/switches/29._inferred_type: standup_targetgames/hook.json#/switches/29._note: vpmTimer.PulseSw 42 in Sw42_Hit. MoveTarget42 animation.games/hook.json#/switches/30._inferred_type: standup_targetgames/hook.json#/switches/30._note: vpmTimer.PulseSw 43 in Sw43_Hit. MoveTarget43 animation.games/hook.json#/switches/31._inferred_type: standup_targetgames/hook.json#/switches/31._note: vpmTimer.PulseSw 44 in Sw44_Hit. MoveTarget44 animation.games/hook.json#/switches/32._inferred_type: standup_targetgames/hook.json#/switches/32._note: vpmTimer.PulseSw 45 in Sw45_Hit. MoveTarget45 animation.games/hook.json#/switches/33._inferred_type: standup_targetgames/hook.json#/switches/33._note: vpmTimer.PulseSw 46 in Sw46_Hit. MoveTarget46 animation.games/hook.json#/switches/34._inferred_type: triggergames/hook.json#/switches/34._note: vpmTimer.PulseSw 47 in Sw47_Hit. Enables Sw48 kicker. Ball enters subway.games/hook.json#/switches/35._inferred_type: kickergames/hook.json#/switches/35._note: Controller.Switch(48) on/off. SolKickout (coil 6) ejects. Ball arrives from subway (sw47).games/hook.json#/switches/36._note: vpmTimer.PulseSw 49 in Sw49_Hit.games/hook.json#/switches/37._note: Controller.Switch(50) on/off.games/hook.json#/switches/38._inferred_type: kickergames/hook.json#/switches/38._note: Controller.Switch(51) on/off. SolVUKKick (coil 3) ejects. SoundSaucerLock on hit.games/hook.json#/switches/39._inferred_type: slingshotgames/hook.json#/switches/39._note: LeftSlingShot_Slingshot pulses sw52. VPX built-in slingshot object.games/hook.json#/switches/40._inferred_type: slingshotgames/hook.json#/switches/40._note: RightSlingShot_Slingshot pulses sw53. VPX built-in slingshot object.games/hook.json#/coils/0._vbscript_callback: bsTrough.SolIngames/hook.json#/coils/0._inferred_type: troughgames/hook.json#/coils/0._note: cvpmTrough SolIn — stacks ball into trough.games/hook.json#/coils/1._vbscript_callback: bsTrough.SolOutgames/hook.json#/coils/1._inferred_type: troughgames/hook.json#/coils/1._note: cvpmTrough SolOut — ejects ball to shooter lane. InitExit BallRelease, 90, 6.games/hook.json#/coils/2._vbscript_callback: SolVUKKickgames/hook.json#/coils/2._inferred_type: kickergames/hook.json#/coils/2._note: sw51.kick 60,100. Ejects ball from left VUK upward.games/hook.json#/coils/3._vbscript_callback: SolKickbackgames/hook.json#/coils/3._inferred_type: kickergames/hook.json#/coils/3._note: Calls SkillShotR.ExitSol_On — ejects ball from skill shot saucer (sw32).games/hook.json#/coils/4._vbscript_callback: dtLDrop.SolDropUpgames/hook.json#/coils/4._inferred_type: drop_target_resetgames/hook.json#/coils/4._note: cvpmDropTarget.SolDropUp — resets 4-target bank (sw25-28).games/hook.json#/coils/5._vbscript_callback: SolKickoutgames/hook.json#/coils/5._inferred_type: kickergames/hook.json#/coils/5._note: sw48.kick 35,65. Ejects ball from PowerScoop (sw48).games/hook.json#/coils/6._inferred_type: unusedgames/hook.json#/coils/6._note: Commented out: 'Ticket Dispenser (Unused)games/hook.json#/coils/7._vbscript_callback: Solknockergames/hook.json#/coils/7._inferred_type: knockergames/hook.json#/coils/7._note: KnockerSolenoid called when enabled.games/hook.json#/coils/8._vbscript_callback: SolFlash9games/hook.json#/coils/8._inferred_type: flashergames/hook.json#/coils/8._note: Custom flash sub with opacity fade. Originally SetLamp 109 but replaced with direct flash handler.games/hook.json#/coils/9._inferred_type: unusedgames/hook.json#/coils/9._note: Commented out: 'L/R Coil Select Relaygames/hook.json#/coils/10._vbscript_callback: SolGIgames/hook.json#/coils/10._inferred_type: gi_relaygames/hook.json#/coils/10._note: Inverted logic: enabled=true calls GiOFF, enabled=false calls GiON. DE A-board GI relay.games/hook.json#/coils/11._vbscript_callback: SolFlash12games/hook.json#/coils/11._inferred_type: flashergames/hook.json#/coils/11._note: Custom flash sub with opacity fade. Originally SetLamp 112 but replaced with direct handler.games/hook.json#/coils/12._vbscript_callback: SolFlashSkullgames/hook.json#/coils/12._inferred_type: flashergames/hook.json#/coils/12._note: Skull flasher with custom fade. FlasherSkull/FlasherSkulla/FlasherSkullb opacity. Also affects skullP blenddisablelighting.games/hook.json#/coils/13._vbscript_callback: SetLamp 114,games/hook.json#/coils/13._inferred_type: flashergames/hook.json#/coils/13._note: Lamp 114 driven by solenoid 14. NFadeLm 114, s114 / s114a in lamp update.games/hook.json#/coils/14._vbscript_callback: SolAutoPlungegames/hook.json#/coils/14._inferred_type: ball_launchgames/hook.json#/coils/14._note: LaserKick.Enabled toggled. Kicks ball from shooter lane into play.games/hook.json#/coils/15._vbscript_callback: SolRdivgames/hook.json#/coils/15._inferred_type: divertergames/hook.json#/coils/15._note: DivOpen/DivClose walls toggle. DivP primitive rotates. 1500ms timer auto-close.games/hook.json#/coils/16._vbscript_callback: SolFlash1Bgames/hook.json#/coils/16._inferred_type: flashergames/hook.json#/coils/16._note: Custom flash sub. Flasher25/25a/25b/25c1/25c2/25c3 IntensityScale fade. PirateTownP blenddisablelighting.games/hook.json#/coils/17._vbscript_callback: SetLamp 92,games/hook.json#/coils/17._inferred_type: flashergames/hook.json#/coils/17._note: Lamp 92 driven by solenoid 26. NFadeLm 92, f2b1 / NFadeL 92, f2b2 in lamp update.games/hook.json#/coils/18._vbscript_callback: SolFlash3Bgames/hook.json#/coils/18._inferred_type: flashergames/hook.json#/coils/18._note: Custom flash sub. Flasherf3a/f3b opacity and f3a/f3b IntensityScale fade.games/hook.json#/coils/19._vbscript_callback: SolFlash4Bgames/hook.json#/coils/19._inferred_type: flashergames/hook.json#/coils/19._note: Custom flash sub. Flasherf4a/f4b opacity and f4a/f4b IntensityScale fade.games/hook.json#/coils/20._vbscript_callback: SetLamp 95,games/hook.json#/coils/20._inferred_type: flashergames/hook.json#/coils/20._note: Lamp 95 driven by solenoid 29. NFadeL 95, f5b in lamp update.games/hook.json#/coils/21._vbscript_callback: SolFlash6Bgames/hook.json#/coils/21._inferred_type: flashergames/hook.json#/coils/21._note: Custom flash sub with fade.games/hook.json#/coils/22._vbscript_callback: SolFlash7Bgames/hook.json#/coils/22._inferred_type: flashergames/hook.json#/coils/22._note: Custom flash sub with fade.games/hook.json#/coils/23._vbscript_callback: SolFlash8games/hook.json#/coils/23._inferred_type: flashergames/hook.json#/coils/23._note: Custom flash sub with fade. Originally SetLamp 98 but replaced with direct handler.games/hook.json#/lamps/14._note: Also NFadeLm 15, L19 (additional mapped object).games/hook.json#/lamps/15._note: Also NFadeLm 16, Light16a (two objects).games/hook.json#/lamps/20._note: Also Flash 24, Light24a (flash effect on same lamp).games/hook.json#/lamps/27._note: Also NFadeL 32, Light32a (two objects).games/hook.json#/lamps/31._note: Also NFadeLm 36, Light36a (two objects).games/hook.json#/lamps/32._note: Also NFadeLm 37, Light37a (two objects).games/hook.json#/lamps/33._note: Skull right eye.games/hook.json#/lamps/34._note: Skull left eye.games/hook.json#/lamps/56._note: Also NFadeLm 64, Light64a (two objects).games/hook.json#/lamps/57._note: Also NFadeL 92, f2b2. Driven by solenoid 26 via SetLamp.games/hook.json#/lamps/58._note: Driven by solenoid 29 via SetLamp.games/hook.json#/lamps/59._note: Also NFadeLm 114, s114a. Driven by solenoid 14 via SetLamp.games/hook.json#/_source/confidence_notes: High confidence on switches/coils. No Const sw* definitions — switches identified from _Hit/_UnHit subs, Controller.Switch() calls, PulseSw calls, and cvpmTrough/cvpmDropTarget/cvpmBallStack setup. Lamp IDs from NFadeL/NFadeLm calls in lamp update sub. Trough is 3-ball cvpmTrough with switches 13,12,11 and entry switch 10. GI Relay (sol 11) is inverted — enabled=true cuts GI, enabled=false turns GI on. Solenoids 7,10,16-21,23-24 unused/commented out. Solenoids 17-21 commented as bumpers/slings but handled by VPX physics. Flasher solenoids 25-32 map to Flash 1B-8B. Solenoids 9,12 use custom flash subs (not SetLamp). Sol 14 uses SetLamp 114 for RightVUK flasher. Sol 26 uses SetLamp 92 (Flash 2B), sol 29 uses SetLamp 95 (Flash 5B). Bumper1B/2B/3B pulse sw33/35/34 respectively AND separate Sw33/Sw34/Sw35 targets also pulse same switches — same switch numbers used for both bumpers and stand-up targets. Sw32 is skill shot kicker (cvpmBallStack). Sw47 is subway entrance. Sw48 is PowerScoop (kicker). Sw51 is left VUK. Sw36/37 are ramp switches. Sw40 is right ramp.
Unresolved questions
- Is the I/O enumeration complete for every supported physical/controller variant?
- Which inferred VPX behaviors reflect real hardware, and which are table-script conveniences?
- Are all mechanism home states, sensors, motion constraints, and ball interactions documented?
Sources
legacy.game.hook:games/hook.jsonat the pinned migration revision.