Overview
Legacy evidence identifies this candidate as Bally (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
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/br.json#/switches/1._note: vpmNudge.TiltSwitch = 14games/br.json#/switches/2._note: bsTrough.EntrySw = 15games/br.json#/switches/3._note: bsTrough.initSwitches Array(16,17,18)games/br.json#/switches/7._note: Controller.Switch(22) = 1 in Table1_Initgames/br.json#/switches/8._note: Controller.Switch(25) set in ShooterLane_Hit/UnHitgames/br.json#/switches/9._note: Controller.Switch(26) set in Sw26_Hit/UnHitgames/br.json#/switches/10._note: Controller.Switch(27) set in Sw27_Hit/UnHitgames/br.json#/switches/11._note: PulseSw(28) in LeftSlingShot_Slingshotgames/br.json#/switches/12._note: PulseSw(31) in Sw31_Hitgames/br.json#/switches/13._note: PulseSw(32) in Sw32_Hitgames/br.json#/switches/14._note: PulseSw(33) in Sw33_Hitgames/br.json#/switches/15._note: Controller.Switch(34) set via PlungerKey in KeyDown/KeyUpgames/br.json#/switches/16._note: Controller.Switch(35) = 1 in sw66_Sub_Hit (subway loads cannon); cleared by FireCannongames/br.json#/switches/17._note: Controller.Switch(36) set in Sw36_Hit/UnHitgames/br.json#/switches/18._note: Controller.Switch(37) set in Sw37_Hit/UnHitgames/br.json#/switches/19._note: PulseSw(38) in RightSlingShot_Slingshotgames/br.json#/switches/20._note: PulseSw(41) in Sw41_Hitgames/br.json#/switches/21._note: PulseSw(42) in Sw42_Hitgames/br.json#/switches/22._note: PulseSw(43) in Sw43_Hitgames/br.json#/switches/23._note: PulseSw(44) in GateSw44_Hitgames/br.json#/switches/24._note: Controller.Switch(45) set in Sw45_Hit/UnHitgames/br.json#/switches/25._note: PulseSw(46) in Bumper1_Hitgames/br.json#/switches/26._note: PulseSw(47) in Bumper2_Hitgames/br.json#/switches/27._note: PulseSw(48) in BumperSw48_Hitgames/br.json#/switches/28._note: PulseSw(51) in Sw51_Hitgames/br.json#/switches/29._note: PulseSw(52) in Sw52_Hitgames/br.json#/switches/30._note: PulseSw(53) in Sw53_Hitgames/br.json#/switches/31._note: Controller.Switch(54) managed by RampDown/RampUp solenoid callbacks; indicates ship ramp (Davey Jones) is in down positiongames/br.json#/switches/32._note: Controller.Switch(55) = 1 in KickerSW55_Hit; cleared by RampSwordKickergames/br.json#/switches/33._note: Controller.Switch(56) set in Sw56_Hit/UnHitgames/br.json#/switches/34._note: Controller.Switch(57) set in Sw57_Hit/UnHitgames/br.json#/switches/35._note: Controller.Switch(58) set in Sw58_Hit/UnHitgames/br.json#/switches/36._note: PulseSwitch 61 in sw61_Sub_Hitgames/br.json#/switches/37._note: Controller.Switch(62) set in Sw62_Hit/UnHitgames/br.json#/switches/38._note: Controller.Switch(63) = 1 in KickerSw63_Hit; cleared by PiratesCoveKickgames/br.json#/switches/39._note: Controller.Switch(64) = 1 in KickerSw64_Hit; cleared by PiratesCoveKickgames/br.json#/switches/40._note: PulseSw(65) in Sw65_Hitgames/br.json#/switches/41._note: PulseSwitch 66 in sw66_Sub_Hit; also sets Controller.Switch(35) = 1games/br.json#/switches/42._note: PulseSw(71) in GateSw71_Hitgames/br.json#/switches/43._note: PulseSw(72) in GateSw72_Hitgames/br.json#/switches/44._note: PulseSw(76) in GateSw76_Hitgames/br.json#/coils/0._vbscript_callback: RampSwordKickergames/br.json#/coils/0._inferred_type: kickergames/br.json#/coils/0._note: Destroys ball at KickerSw55, creates at KickerSW55Upper, kicks 180/5games/br.json#/coils/1._vbscript_callback: bsTroughSolIngames/br.json#/coils/1._inferred_type: ball_managementgames/br.json#/coils/2._vbscript_callback: CannonMotorgames/br.json#/coils/2._inferred_type: mechanismgames/br.json#/coils/2._note: Enables DiscTimer to rotate cannon; plays Motor_Cannon loop soundgames/br.json#/coils/3._vbscript_callback: bsTroughSolOutgames/br.json#/coils/3._inferred_type: ball_managementgames/br.json#/coils/3._note: bsTrough.InitExit BallRelease, 55, 8games/br.json#/coils/4._note: Empty SolCallback in scriptgames/br.json#/coils/5._note: Empty SolCallback in scriptgames/br.json#/coils/6._vbscript_callback: SolKnockergames/br.json#/coils/6._inferred_type: knockergames/br.json#/coils/7._vbscript_callback: FireCannongames/br.json#/coils/7._inferred_type: mechanismgames/br.json#/coils/7._note: Creates ball at CannonKicker, kicks at disc angle; clears sw35games/br.json#/coils/8._vbscript_callback: PiratesCoveKickgames/br.json#/coils/8._inferred_type: kickergames/br.json#/coils/8._note: Kicks from KickerSw64 first, then KickerSw63; clears sw63/sw64games/br.json#/coils/9._vbscript_callback: RampUpgames/br.json#/coils/9._inferred_type: mechanismgames/br.json#/coils/9._note: Clears Controller.Switch(54); raises DaveyRamp via timergames/br.json#/coils/10._vbscript_callback: RampDowngames/br.json#/coils/10._inferred_type: mechanismgames/br.json#/coils/10._note: Sets Controller.Switch(54) = 1; lowers DaveyRamp via timergames/br.json#/coils/11._note: Empty SolCallback in scriptgames/br.json#/coils/12._note: Empty SolCallback in scriptgames/br.json#/coils/13._note: Empty SolCallback in scriptgames/br.json#/coils/14._note: Empty SolCallback in scriptgames/br.json#/coils/15._note: Empty SolCallback in scriptgames/br.json#/coils/16._vbscript_callback: Sol17games/br.json#/coils/16._inferred_type: flashergames/br.json#/coils/16._note: Backglass: Top 'Black'; SetLamp 117games/br.json#/coils/17._vbscript_callback: Sol18games/br.json#/coils/17._inferred_type: flashergames/br.json#/coils/17._note: Backglass: Lady Pirate Belly; SetLamp 118games/br.json#/coils/18._vbscript_callback: Sol19games/br.json#/coils/18._inferred_type: flashergames/br.json#/coils/18._note: Backglass: Man Pirate Right; SetLamp 119games/br.json#/coils/19._vbscript_callback: Sol20games/br.json#/coils/19._inferred_type: flashergames/br.json#/coils/19._note: Backglass: Right Top; SetLamp 120games/br.json#/coils/20._vbscript_callback: Sol21games/br.json#/coils/20._inferred_type: flashergames/br.json#/coils/20._note: Backglass: Bottom 'Rose'; SetLamp 121games/br.json#/coils/21._vbscript_callback: Sol22games/br.json#/coils/21._inferred_type: flashergames/br.json#/coils/21._note: Backglass: Bottom 'Black'; SetLamp 122games/br.json#/coils/22._vbscript_callback: Sol23games/br.json#/coils/22._inferred_type: flashergames/br.json#/coils/22._note: Backglass: Skull; SetLamp 123games/br.json#/coils/23._vbscript_callback: Sol24games/br.json#/coils/23._inferred_type: flashergames/br.json#/coils/23._note: Backglass: Bottom of Skull; SetLamp 124games/br.json#/coils/24._vbscript_callback: SetLamp 125,games/br.json#/coils/24._inferred_type: flashergames/br.json#/coils/24._note: SolModCallback uses SetLamp 125 directly (no Sol25 sub)games/br.json#/coils/25._vbscript_callback: SetLamp 126,games/br.json#/coils/25._inferred_type: flashergames/br.json#/coils/25._note: Dual cannon flashers; SolModCallback uses SetLamp 126 directly (no Sol26 sub)games/br.json#/coils/26._vbscript_callback: Sol27games/br.json#/coils/26._inferred_type: flashergames/br.json#/coils/26._note: Backglass: Canon Flame; SetLamp 127games/br.json#/coils/27._vbscript_callback: Sol28games/br.json#/coils/27._inferred_type: flashergames/br.json#/coils/27._note: Backglass: Middle Pirate; SetLamp 128games/br.json#/lamps/38._note: Lampz.Callback(57) commented out in VBSgames/br.json#/lamps/45._note: Lampz.Callback(66) commented out in VBSgames/br.json#/lamps/60._note: Also controls secondary insert (l86a / Pot)games/br.json#/_source/confidence_notes: High confidence on switches and coils — extracted from VPW v1.4 VBScript. No Const sw*/s* declarations in script; switches identified from _Hit/_UnHit subs, Controller.Switch() calls, PulseSw() calls, and bsTrough.initSwitches. Lamps from Lampz.MassAssign; lamp descriptions inferred from playfield layout and rulesheet — lower confidence than switches/coils. Flasher coils 17-24,27-28 use SolModCallback with Sol## subs; flashers 25-26 use SolModCallback with SetLamp directly. Flipper solenoid IDs use framework constants (sLRFlipper, sLLFlipper, sURFlipper) from core.vbs — not extracted as game-level coils. Solenoids 5-6, 12-16 have empty callbacks in script. Switches 13 (Start), 21 (Slam Tilt), 22 (Coin Door) are framework-handled. Switch 23 (Ticket Opto) not referenced in this VPW script. IPDB URL in script header points to id=313.
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.br:games/br.jsonat the pinned migration revision.