Overview
Legacy evidence identifies this candidate as Midway (1994). 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
platforms/wpc.json#/coils/1: Unbound legacy outputs recordc_flipper_lower_rightwas retained as a migration note only.platforms/wpc.json#/coils/2: Unbound legacy outputs recordc_flipper_lower_leftwas retained as a migration note only.platforms/wpc.json#/coils/3: Unbound legacy outputs recordc_flipper_upper_rightwas retained as a migration note only.platforms/wpc.json#/coils/4: Unbound legacy outputs recordc_flipper_upper_leftwas retained as a migration note only.games/wcs.json#/switches/0._vbscript_name: swCoin1games/wcs.json#/switches/0._inferred_type: cabinetgames/wcs.json#/switches/0._note: WPC framework constant from WPC.vbsgames/wcs.json#/switches/1._vbscript_name: swCoin2games/wcs.json#/switches/1._inferred_type: cabinetgames/wcs.json#/switches/1._note: WPC framework constant from WPC.vbsgames/wcs.json#/switches/2._vbscript_name: swCoin3games/wcs.json#/switches/2._inferred_type: cabinetgames/wcs.json#/switches/2._note: WPC framework constant from WPC.vbsgames/wcs.json#/switches/3._vbscript_name: swCoin4games/wcs.json#/switches/3._inferred_type: cabinetgames/wcs.json#/switches/3._note: WPC framework constant from WPC.vbsgames/wcs.json#/switches/4._vbscript_name: swCancelgames/wcs.json#/switches/4._inferred_type: cabinetgames/wcs.json#/switches/4._note: WPC framework constant from WPC.vbsgames/wcs.json#/switches/5._vbscript_name: swDowngames/wcs.json#/switches/5._inferred_type: cabinetgames/wcs.json#/switches/5._note: WPC framework constant from WPC.vbsgames/wcs.json#/switches/6._vbscript_name: swUpgames/wcs.json#/switches/6._inferred_type: cabinetgames/wcs.json#/switches/6._note: WPC framework constant from WPC.vbsgames/wcs.json#/switches/7._vbscript_name: swEntergames/wcs.json#/switches/7._inferred_type: cabinetgames/wcs.json#/switches/7._note: WPC framework constant from WPC.vbsgames/wcs.json#/switches/8._vbscript_name: Controller.Switch(12)games/wcs.json#/switches/8._inferred_type: buttongames/wcs.json#/switches/8._note: Activated via LeftMagnaSave keycodegames/wcs.json#/switches/9._vbscript_name: vpmNudge.TiltSwitchgames/wcs.json#/switches/9._inferred_type: cabinetgames/wcs.json#/switches/9._note: Set via vpmNudge.TiltSwitch = 14games/wcs.json#/switches/10._vbscript_name: sw15games/wcs.json#/switches/10._inferred_type: rollovergames/wcs.json#/switches/11._vbscript_name: sw16games/wcs.json#/switches/11._inferred_type: rollovergames/wcs.json#/switches/11._note: Also has target T16 pulsing sw16games/wcs.json#/switches/12._vbscript_name: sw17games/wcs.json#/switches/12._inferred_type: rollovergames/wcs.json#/switches/13._vbscript_name: sw18games/wcs.json#/switches/13._inferred_type: rollovergames/wcs.json#/switches/14._vbscript_name: Controller.Switch(22)games/wcs.json#/switches/14._inferred_type: cabinetgames/wcs.json#/switches/14._note: Set to 1 at initgames/wcs.json#/switches/15._vbscript_name: Controller.Switch(23)games/wcs.json#/switches/15._inferred_type: buttongames/wcs.json#/switches/15._note: Activated via keycode 3games/wcs.json#/switches/16._vbscript_name: Controller.Switch(24)games/wcs.json#/switches/16._inferred_type: cabinetgames/wcs.json#/switches/16._note: Set to 1 at initgames/wcs.json#/switches/17._vbscript_name: T25games/wcs.json#/switches/17._inferred_type: targetgames/wcs.json#/switches/17._note: PulseSw 25 on T25_Hitgames/wcs.json#/switches/18._vbscript_name: sw26games/wcs.json#/switches/18._inferred_type: rollovergames/wcs.json#/switches/19._vbscript_name: sw27spinnergames/wcs.json#/switches/19._inferred_type: spinnergames/wcs.json#/switches/19._note: PulseSw 27 on sw27spinner_Spingames/wcs.json#/switches/20._vbscript_name: T28games/wcs.json#/switches/20._inferred_type: targetgames/wcs.json#/switches/20._note: PulseSw 28 on T28_Hitgames/wcs.json#/switches/21._vbscript_name: bsTrough.InitSwgames/wcs.json#/switches/21._inferred_type: troughgames/wcs.json#/switches/21._note: bsTrough.InitSw 0, 31, 32, 33, 34, 35, 0, 0games/wcs.json#/switches/22._vbscript_name: bsTrough.InitSwgames/wcs.json#/switches/22._inferred_type: troughgames/wcs.json#/switches/22._note: bsTrough.InitSw 0, 31, 32, 33, 34, 35, 0, 0games/wcs.json#/switches/23._vbscript_name: bsTrough.InitSwgames/wcs.json#/switches/23._inferred_type: troughgames/wcs.json#/switches/23._note: bsTrough.InitSw 0, 31, 32, 33, 34, 35, 0, 0games/wcs.json#/switches/24._vbscript_name: bsTrough.InitSwgames/wcs.json#/switches/24._inferred_type: troughgames/wcs.json#/switches/24._note: bsTrough.InitSw 0, 31, 32, 33, 34, 35, 0, 0games/wcs.json#/switches/25._vbscript_name: bsTrough.InitSwgames/wcs.json#/switches/25._inferred_type: troughgames/wcs.json#/switches/25._note: bsTrough.InitSw 0, 31, 32, 33, 34, 35, 0, 0games/wcs.json#/switches/26._vbscript_name: vpmTimer.PulseSw 36games/wcs.json#/switches/26._inferred_type: ball_releasegames/wcs.json#/switches/26._note: Pulsed in SolRelease when ball exits troughgames/wcs.json#/switches/27._vbscript_name: T37games/wcs.json#/switches/27._inferred_type: targetgames/wcs.json#/switches/27._note: PulseSw 37 on T37_Hitgames/wcs.json#/switches/28._vbscript_name: sw38games/wcs.json#/switches/28._inferred_type: rollovergames/wcs.json#/switches/28._note: Controller.Switch set; triggers CheckBallCount after 1000msgames/wcs.json#/switches/29._vbscript_name: sw41games/wcs.json#/switches/29._inferred_type: targetgames/wcs.json#/switches/29._note: PulseSw 41 on sw41_Hit; plays goal soundsgames/wcs.json#/switches/30._vbscript_name: sw42games/wcs.json#/switches/30._inferred_type: vukgames/wcs.json#/switches/30._note: bsGoalPopper.InitSw 0, 42; VUK kickergames/wcs.json#/switches/31._vbscript_name: mGoalie.AddSw 43games/wcs.json#/switches/31._inferred_type: mechgames/wcs.json#/switches/31._note: mGoalie.AddSw 43, 60, 79 -- goalie mech position switchgames/wcs.json#/switches/32._vbscript_name: mGoalie.AddSw 44games/wcs.json#/switches/32._inferred_type: mechgames/wcs.json#/switches/32._note: mGoalie.AddSw 44, 0, 20 -- goalie mech position switchgames/wcs.json#/switches/33._vbscript_name: sw45games/wcs.json#/switches/33._inferred_type: vukgames/wcs.json#/switches/33._note: bsTVPopper.InitSw 0, 45; VUK kickergames/wcs.json#/switches/34._vbscript_name: sw47games/wcs.json#/switches/34._inferred_type: rollovergames/wcs.json#/switches/35._vbscript_name: vpmTimer.PulseSw 48games/wcs.json#/switches/35._inferred_type: targetgames/wcs.json#/switches/35._note: PulseSw 48 on GWalls_Hit -- goalie wall collisiongames/wcs.json#/switches/36._vbscript_name: sw51games/wcs.json#/switches/36._inferred_type: rollovergames/wcs.json#/switches/36._note: PulseSw 51; skill shot targetgames/wcs.json#/switches/37._vbscript_name: sw52games/wcs.json#/switches/37._inferred_type: rollovergames/wcs.json#/switches/37._note: PulseSw 52; skill shot targetgames/wcs.json#/switches/38._vbscript_name: sw53games/wcs.json#/switches/38._inferred_type: rollovergames/wcs.json#/switches/38._note: PulseSw 53; skill shot targetgames/wcs.json#/switches/39._vbscript_name: sw54games/wcs.json#/switches/39._inferred_type: saucergames/wcs.json#/switches/39._note: bsRightEjectHole.InitKicker sw54, 54games/wcs.json#/switches/40._vbscript_name: sw55games/wcs.json#/switches/40._inferred_type: saucergames/wcs.json#/switches/40._note: bsUpperEjectHole.InitKicker sw55, 55games/wcs.json#/switches/41._vbscript_name: sw56games/wcs.json#/switches/41._inferred_type: saucergames/wcs.json#/switches/41._note: bsLeftEjectHole.InitKicker sw56, 56games/wcs.json#/switches/42._vbscript_name: sw61games/wcs.json#/switches/42._inferred_type: rollovergames/wcs.json#/switches/42._note: PulseSw 61; animates Rollover81games/wcs.json#/switches/43._vbscript_name: sw62games/wcs.json#/switches/43._inferred_type: rollovergames/wcs.json#/switches/43._note: PulseSw 62; animates Rollover82games/wcs.json#/switches/44._vbscript_name: sw63games/wcs.json#/switches/44._inferred_type: rollovergames/wcs.json#/switches/44._note: PulseSw 63; animates Rollover83games/wcs.json#/switches/45._vbscript_name: sw64games/wcs.json#/switches/45._inferred_type: rollovergames/wcs.json#/switches/45._note: PulseSw 64; animates Rollover84games/wcs.json#/switches/46._vbscript_name: sw65games/wcs.json#/switches/46._inferred_type: targetgames/wcs.json#/switches/46._note: PulseSw 65; TackleSW per commentgames/wcs.json#/switches/47._vbscript_name: T66games/wcs.json#/switches/47._inferred_type: targetgames/wcs.json#/switches/47._note: PulseSw 66 on T66_Hitgames/wcs.json#/switches/48._vbscript_name: T67games/wcs.json#/switches/48._inferred_type: targetgames/wcs.json#/switches/48._note: PulseSw 67 on T67_Hitgames/wcs.json#/switches/49._vbscript_name: sw71games/wcs.json#/switches/49._inferred_type: rollovergames/wcs.json#/switches/49._note: PulseSw 71; left_ramp_made_L per commentgames/wcs.json#/switches/50._vbscript_name: sw72games/wcs.json#/switches/50._inferred_type: spinnergames/wcs.json#/switches/50._note: Controller.Switch set; left_ramp_entry per commentgames/wcs.json#/switches/51._vbscript_name: sw74games/wcs.json#/switches/51._inferred_type: rollovergames/wcs.json#/switches/51._note: PulseSw 74; left_ramp_made_R per commentgames/wcs.json#/switches/52._vbscript_name: sw75games/wcs.json#/switches/52._inferred_type: spinnergames/wcs.json#/switches/52._note: Controller.Switch set; right_ramp_entry per commentgames/wcs.json#/switches/53._vbscript_name: sw76games/wcs.json#/switches/53._inferred_type: rollovergames/wcs.json#/switches/53._note: Controller.Switch set; minipf per comment; adjusts BallCountgames/wcs.json#/switches/54._vbscript_name: sw77games/wcs.json#/switches/54._inferred_type: rollovergames/wcs.json#/switches/54._note: Controller.Switch set; minipf per commentgames/wcs.json#/switches/55._vbscript_name: sw78games/wcs.json#/switches/55._inferred_type: rollovergames/wcs.json#/switches/55._note: PulseSw 78; right_ramp_made per commentgames/wcs.json#/switches/56._vbscript_name: Bumper1games/wcs.json#/switches/56._inferred_type: bumpergames/wcs.json#/switches/56._note: PulseSw 81 on Bumper1_Hitgames/wcs.json#/switches/57._vbscript_name: Bumper2games/wcs.json#/switches/57._inferred_type: bumpergames/wcs.json#/switches/57._note: PulseSw 82 on Bumper2_Hitgames/wcs.json#/switches/58._vbscript_name: Bumper3games/wcs.json#/switches/58._inferred_type: bumpergames/wcs.json#/switches/58._note: PulseSw 83 on Bumper3_Hitgames/wcs.json#/switches/59._vbscript_name: SlingShotLeftgames/wcs.json#/switches/59._inferred_type: slingshotgames/wcs.json#/switches/59._note: PulseSw 84 on SlingShotLeft_Slingshotgames/wcs.json#/switches/60._vbscript_name: SlingShotRightgames/wcs.json#/switches/60._inferred_type: slingshotgames/wcs.json#/switches/60._note: PulseSw 85 on SlingShotRight_Slingshotgames/wcs.json#/switches/61._vbscript_name: sw86games/wcs.json#/switches/61._inferred_type: rollovergames/wcs.json#/switches/62._vbscript_name: sw87games/wcs.json#/switches/62._inferred_type: rollovergames/wcs.json#/switches/63._vbscript_name: sw88games/wcs.json#/switches/63._inferred_type: rollovergames/wcs.json#/switches/64._vbscript_name: swLRFlipgames/wcs.json#/switches/64._inferred_type: cabinetgames/wcs.json#/switches/64._note: WPC framework constant from WPC.vbsgames/wcs.json#/switches/65._vbscript_name: swLLFlipgames/wcs.json#/switches/65._inferred_type: cabinetgames/wcs.json#/switches/65._note: WPC framework constant from WPC.vbsgames/wcs.json#/switches/66._vbscript_name: swURFlipgames/wcs.json#/switches/66._inferred_type: cabinetgames/wcs.json#/switches/66._note: WPC framework constant from WPC.vbsgames/wcs.json#/switches/67._vbscript_name: swULFlipgames/wcs.json#/switches/67._inferred_type: cabinetgames/wcs.json#/switches/67._note: WPC framework constant from WPC.vbsgames/wcs.json#/coils/0._vbscript_callback: bsgoalpopper.SolOutgames/wcs.json#/coils/0._inferred_type: vukgames/wcs.json#/coils/1._vbscript_callback: SolTvPoppergames/wcs.json#/coils/1._inferred_type: vukgames/wcs.json#/coils/1._note: Originally bstvpopper.SolOut, overridden with custom subgames/wcs.json#/coils/2._vbscript_callback: KickBackgames/wcs.json#/coils/2._inferred_type: kickbackgames/wcs.json#/coils/3._vbscript_callback: LockReleasegames/wcs.json#/coils/3._inferred_type: postgames/wcs.json#/coils/4._vbscript_callback: SolUpperEjectHolegames/wcs.json#/coils/4._inferred_type: saucergames/wcs.json#/coils/4._note: Originally bsupperejecthole.SolOut, overridden with custom subgames/wcs.json#/coils/5._vbscript_callback: SolReleasegames/wcs.json#/coils/5._inferred_type: ball_releasegames/wcs.json#/coils/6._vbscript_callback: bsrightejecthole.SolOutgames/wcs.json#/coils/6._inferred_type: saucergames/wcs.json#/coils/7._vbscript_callback: bsleftejecthole.SolOutgames/wcs.json#/coils/7._inferred_type: saucergames/wcs.json#/coils/8._vbscript_callback: RampDivertergames/wcs.json#/coils/8._inferred_type: divertergames/wcs.json#/coils/8._note: Diverter_Hold; originally SolCallback(8), reassigned to 16games/wcs.json#/coils/9._vbscript_callback: SetModLamp 117,games/wcs.json#/coils/9._inferred_type: flashergames/wcs.json#/coils/9._note: Modulated solenoid; maps to lamp 117 (goalcagetop)games/wcs.json#/coils/10._vbscript_callback: SetModLamp 118,games/wcs.json#/coils/10._inferred_type: flashergames/wcs.json#/coils/10._note: Modulated solenoid; maps to lamp 118 (goal)games/wcs.json#/coils/11._vbscript_callback: SetModLamp 119,games/wcs.json#/coils/11._inferred_type: flashergames/wcs.json#/coils/11._note: Modulated solenoid; maps to lamp 119 (skillshot)games/wcs.json#/coils/12._vbscript_callback: SetModLamp 120,games/wcs.json#/coils/12._inferred_type: flashergames/wcs.json#/coils/12._note: Modulated solenoid; maps to lamp 120 (jetbumpers)games/wcs.json#/coils/13._vbscript_callback: mGoalie.Sol1games/wcs.json#/coils/13._inferred_type: motorgames/wcs.json#/coils/13._note: cvpmMech single-sol goalie mechanism; vpmMechLinear + vpmMechReverse + vpmMechOneSolgames/wcs.json#/coils/14._vbscript_callback: SetModLamp 122,games/wcs.json#/coils/14._inferred_type: flashergames/wcs.json#/coils/14._note: Modulated solenoid; maps to lamp 122 (spinningball)games/wcs.json#/coils/15._vbscript_callback: ttBall.SolMotorState True,games/wcs.json#/coils/15._inferred_type: motorgames/wcs.json#/coils/15._note: mBall.Sol1=23; ball_clockwise for spinnerDiskgames/wcs.json#/coils/16._vbscript_callback: ttBall.SolMotorState False,games/wcs.json#/coils/16._inferred_type: motorgames/wcs.json#/coils/16._note: mBall.Sol2=24; ball_counter_clockwise for spinnerDiskgames/wcs.json#/coils/17._vbscript_callback: SetModLamp 125,games/wcs.json#/coils/17._inferred_type: flashergames/wcs.json#/coils/17._note: Modulated solenoid; maps to lamp 125 (leftramp_entrance)games/wcs.json#/coils/18._vbscript_callback: SetModLamp 126,games/wcs.json#/coils/18._inferred_type: flashergames/wcs.json#/coils/18._note: Modulated solenoid; maps to lamp 126 (lock_area)games/wcs.json#/coils/19._vbscript_callback: SetModLamp 127,games/wcs.json#/coils/19._inferred_type: flashergames/wcs.json#/coils/19._note: Modulated solenoid; maps to lamp 127 (flipper_lanes)games/wcs.json#/coils/20._vbscript_callback: SetModLamp 128,games/wcs.json#/coils/20._inferred_type: flashergames/wcs.json#/coils/20._note: Modulated solenoid; maps to lamp 128 (ramp_rear)games/wcs.json#/coils/21._vbscript_name: GameOnSolenoidgames/wcs.json#/coils/21._inferred_type: systemgames/wcs.json#/coils/21._note: WPC framework constant from WPC.vbsgames/wcs.json#/coils/22._vbscript_callback: SolGoalieMagnetgames/wcs.json#/coils/22._inferred_type: magnetgames/wcs.json#/coils/22._note: Originally mGoalieMagnet.MagnetOn=, overridden with SolGoalieMagnet sound subgames/wcs.json#/coils/23._vbscript_callback: LoopGategames/wcs.json#/coils/23._inferred_type: gategames/wcs.json#/coils/24._vbscript_callback: SolLockMagnetgames/wcs.json#/coils/24._inferred_type: magnetgames/wcs.json#/coils/25._vbscript_callback: SolRFlippergames/wcs.json#/coils/25._vbscript_name: sLRFlippergames/wcs.json#/coils/25._inferred_type: flippergames/wcs.json#/coils/25._note: core.vbs framework constant sLRFlipper = 46games/wcs.json#/coils/26._vbscript_callback: SolLFlippergames/wcs.json#/coils/26._vbscript_name: sLLFlippergames/wcs.json#/coils/26._inferred_type: flippergames/wcs.json#/coils/26._note: core.vbs framework constant sLLFlipper = 48games/wcs.json#/lamps/24._note: Multiple VPX objects: lf41/lf41agames/wcs.json#/lamps/25._note: Multiple VPX objects: lf42/lf42agames/wcs.json#/lamps/26._note: Multiple VPX objects: lf43/lf43agames/wcs.json#/lamps/29._note: Multiple VPX objects: lf46/lf46agames/wcs.json#/lamps/30._note: Multiple VPX objects: lf47/lf47agames/wcs.json#/lamps/31._note: Multiple VPX objects: l48/l48agames/wcs.json#/lamps/47._note: Multiple VPX objects: l68/l68a/l68bgames/wcs.json#/lamps/48._note: Multiple VPX objects: l71/l71agames/wcs.json#/lamps/55._note: Multiple VPX objects: l78/l78agames/wcs.json#/lamps/60._note: Multiple VPX objects: l85/l85a/l85bgames/wcs.json#/lamps/61._note: Multiple VPX objects: l86/l86a/l86bgames/wcs.json#/lamps/62._inferred_type: flashergames/wcs.json#/lamps/62._note: Driven by SolModCallBack(17). VPX objects: l117/f117/f117agames/wcs.json#/lamps/63._inferred_type: flashergames/wcs.json#/lamps/63._note: Driven by SolModCallBack(18). VPX objects: f118agames/wcs.json#/lamps/64._inferred_type: flashergames/wcs.json#/lamps/64._note: Driven by SolModCallBack(19). VPX objects: l119a/f119/f119a/f119c/f119egames/wcs.json#/lamps/65._inferred_type: flashergames/wcs.json#/lamps/65._note: Driven by SolModCallBack(20); shares VPX object lf47a. VPX objects: lf47agames/wcs.json#/lamps/66._inferred_type: flashergames/wcs.json#/lamps/66._note: Driven by SolModCallBack(22). VPX objects: f122a/f122bgames/wcs.json#/lamps/67._inferred_type: flashergames/wcs.json#/lamps/67._note: Driven by SolModCallBack(25). VPX objects: f125games/wcs.json#/lamps/68._inferred_type: flashergames/wcs.json#/lamps/68._note: Driven by SolModCallBack(26). VPX objects: l126/f126a/f126b/f126cgames/wcs.json#/lamps/69._inferred_type: flashergames/wcs.json#/lamps/69._note: Driven by SolModCallBack(27). VPX objects: f127games/wcs.json#/lamps/70._inferred_type: flashergames/wcs.json#/lamps/70._note: Driven by SolModCallBack(28). VPX objects: l128a/l128b/f128a/f128b/f128c/f128d/f128e/f128fgames/wcs.json#/_source/confidence_notes: High confidence on switches, coils, and lamps. No Const sw* or Const s* declarations in table script -- all switch/coil IDs are hardcoded numeric in Controller.Switch(), vpmTimer.PulseSw(), SolCallback(), and ball stack init calls. Lamp numbers extracted from UpdateLamps() flash/flashm/lampmod/flashmod calls. Flipper solenoid IDs (sLRFlipper=46, sLLFlipper=48) from core.vbs framework. WPC platform confirmed via LoadVPM wpc.VBS. Trough config uses 5 balls with switches 31-35. Goalie and soccer ball mechs use cvpmMech with solenoids 21,23,24. Some commented-out SolCallback lines preserved as notes.
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.wcs:games/wcs.jsonat the pinned migration revision.