Overview
Legacy evidence identifies this candidate as Williams (1993). 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/sttng.json#/switches/0._note: Directly set via keyFront in KeyDown/KeyUp handlersgames/sttng.json#/switches/1._note: Set via PlungerKey and LockBarKey in KeyDown/KeyUp handlersgames/sttng.json#/switches/3._note: vpmNudge.TiltSwitch = 14games/sttng.json#/switches/9._note: Controller.Switch(22) = 1 in table initgames/sttng.json#/switches/11._note: Controller.Switch(24) = 0 set in init, but PinMAME defines this as always closedgames/sttng.json#/switches/13._note: Standup target; PulseSw in T26_Hitgames/sttng.json#/switches/14._note: Neutral zone hole entry; PulseSw 27 in sw27_Hit. Also triggers T27 target animationgames/sttng.json#/switches/15._note: Standup target; PulseSw in T28_Hitgames/sttng.json#/switches/16._note: Opto switch. Used in BorgLock ball stack InitSwgames/sttng.json#/switches/17._note: Opto. Set in sw32_Hit, cleared when sw36 (Under L Gun 1) is hitgames/sttng.json#/switches/18._note: Opto. Set in sw33_Hit, cleared when sw37 (Under R Gun 1) is hitgames/sttng.json#/switches/19._note: Opto. Set by Kicker2_Hit when ball enters right cannongames/sttng.json#/switches/21._note: Opto. Kicker trigger for left gun loadinggames/sttng.json#/switches/22._note: Opto. Kicker trigger for right gun loadinggames/sttng.json#/switches/23._note: Opto. Set by Kicker1_Hit when ball enters left cannongames/sttng.json#/switches/24._note: Opto. Primary lock kicker positiongames/sttng.json#/switches/25._note: Optogames/sttng.json#/switches/26._note: Optogames/sttng.json#/switches/28._note: PulseSw in sw45_Hitgames/sttng.json#/switches/29._note: Set via sw46t_Hit trigger, not a kickergames/sttng.json#/switches/30._note: Start Mission scope; trigger with sw47dr drop mechanismgames/sttng.json#/switches/32._note: Drop target; PulseSw in T51_Hitgames/sttng.json#/switches/33._note: Drop target; PulseSw in T52_Hitgames/sttng.json#/switches/34._note: Drop target; PulseSw in T53_Hitgames/sttng.json#/switches/35._note: Drop target; PulseSw in T54_Hitgames/sttng.json#/switches/36._note: Drop target; PulseSw in T55_Hitgames/sttng.json#/switches/37._note: Drop target; PulseSw in T56_Hitgames/sttng.json#/switches/38._note: Single drop target; handled via TopDrop cvpmDropTarget objectgames/sttng.json#/switches/40._note: Opto. bsTrough.InitSw position 6 (sw61)games/sttng.json#/switches/41._note: Opto. bsTrough.InitSw position 5 (sw62)games/sttng.json#/switches/42._note: Opto. bsTrough.InitSw position 4 (sw63)games/sttng.json#/switches/43._note: Opto. bsTrough.InitSw position 3 (sw64)games/sttng.json#/switches/44._note: Opto. bsTrough.InitSw position 2 (sw65)games/sttng.json#/switches/45._note: Opto. bsTrough.InitSw position 1 (sw66)games/sttng.json#/switches/46._note: PulseSw 67 in SolRelease callbackgames/sttng.json#/switches/47._note: Auto-plunger switch; set in AutoPlunger_Hitgames/sttng.json#/switches/48._note: PulseSw 71 in LeftJetBumper_hitgames/sttng.json#/switches/49._note: PulseSw 72 in RightJetBumper_hitgames/sttng.json#/switches/50._note: PulseSw 73 in BottomJetBumper_hitgames/sttng.json#/switches/51._note: PulseSw 74 in SlingShotRight_Slingshotgames/sttng.json#/switches/52._note: PulseSw 75 in SlingShotLeft_Slingshotgames/sttng.json#/switches/56._note: PulseSw in T81_Hitgames/sttng.json#/switches/57._note: PulseSw in T82_Hitgames/sttng.json#/switches/59._note: PulseSw in T84_Hitgames/sttng.json#/switches/60._note: PulseSw in T85_Hitgames/sttng.json#/switches/61._note: PulseSw in T86_Hitgames/sttng.json#/switches/64._note: WPC F7 switch. PulseSw 117 in sw117spinner_Spingames/sttng.json#/switches/65._note: Custom switch column 9. Set dynamically by CannonLTimer based on cannon positiongames/sttng.json#/switches/66._note: Custom switch column 9. Set dynamically by CannonRTimer based on cannon positiongames/sttng.json#/switches/67._note: Custom switch column 9. Set dynamically by CannonRTimer based on cannon positiongames/sttng.json#/switches/68._note: Custom switch column 9. Set dynamically by CannonLTimer based on cannon positiongames/sttng.json#/coils/0._vbscript_callback: LeftCannonKickergames/sttng.json#/coils/0._inferred_type: kickergames/sttng.json#/coils/0._note: Fires ball from left cannongames/sttng.json#/coils/1._vbscript_callback: RightCannonKickergames/sttng.json#/coils/1._inferred_type: kickergames/sttng.json#/coils/1._note: Fires ball from right cannongames/sttng.json#/coils/2._vbscript_callback: UnderLeftGungames/sttng.json#/coils/2._inferred_type: kickergames/sttng.json#/coils/2._note: Kicks ball from under-left-gun to left cannongames/sttng.json#/coils/3._vbscript_callback: UnderRightGungames/sttng.json#/coils/3._inferred_type: kickergames/sttng.json#/coils/3._note: Kicks ball from under-right-gun to right cannongames/sttng.json#/coils/4._vbscript_callback: LeftLockgames/sttng.json#/coils/4._inferred_type: kickergames/sttng.json#/coils/4._note: Ejects ball from left lock (under-left-lock sw1)games/sttng.json#/coils/5._vbscript_callback: AutoPlungegames/sttng.json#/coils/5._inferred_type: ball_managementgames/sttng.json#/coils/5._note: Auto-launches ball from shooter lanegames/sttng.json#/coils/6._vbscript_callback: vpmSolSound SoundFX("Knocker",DOFKnocker),games/sttng.json#/coils/6._inferred_type: knockergames/sttng.json#/coils/7._vbscript_callback: Kickbackgames/sttng.json#/coils/7._inferred_type: kickergames/sttng.json#/coils/7._note: Left outlane kickbackgames/sttng.json#/coils/8._inferred_type: slingshotgames/sttng.json#/coils/8._note: PinMAME defines sLSling=9. No explicit SolCallback in VBS — handled by VPM frameworkgames/sttng.json#/coils/9._inferred_type: slingshotgames/sttng.json#/coils/9._note: PinMAME defines sRSling=10. No explicit SolCallback in VBS — handled by VPM frameworkgames/sttng.json#/coils/10._vbscript_callback: SolReleasegames/sttng.json#/coils/10._inferred_type: ball_managementgames/sttng.json#/coils/10._note: bsTrough.ExitSol_On — ejects ball from trough. PinMAME: sTrough=11games/sttng.json#/coils/11._inferred_type: bumpergames/sttng.json#/coils/11._note: PinMAME defines sJet1=12. No explicit SolCallback in VBS — handled by VPM frameworkgames/sttng.json#/coils/12._inferred_type: bumpergames/sttng.json#/coils/12._note: PinMAME defines sJet2=13. No explicit SolCallback in VBS — handled by VPM frameworkgames/sttng.json#/coils/13._inferred_type: bumpergames/sttng.json#/coils/13._note: PinMAME defines sJet3=14. No explicit SolCallback in VBS — handled by VPM frameworkgames/sttng.json#/coils/14._vbscript_callback: TopDivertergames/sttng.json#/coils/14._inferred_type: divertergames/sttng.json#/coils/15._vbscript_callback: BorgLock.SolOutgames/sttng.json#/coils/15._inferred_type: kickergames/sttng.json#/coils/15._note: Ejects ball from Borg lockgames/sttng.json#/coils/16._vbscript_callback: LeftCannonMotorgames/sttng.json#/coils/16._inferred_type: mechanismgames/sttng.json#/coils/16._note: Rotates left cannon. Position tracked by switches 122 (mark) and 127 (home)games/sttng.json#/coils/17._vbscript_callback: RightCannonMotorgames/sttng.json#/coils/17._inferred_type: mechanismgames/sttng.json#/coils/17._note: Rotates right cannon. Position tracked by switches 125 (home) and 126 (mark)games/sttng.json#/coils/18._vbscript_callback: Flash120games/sttng.json#/coils/18._inferred_type: flashergames/sttng.json#/coils/18._note: SolModCallBack; also drives l83games/sttng.json#/coils/19._vbscript_callback: Flash121games/sttng.json#/coils/19._inferred_type: flashergames/sttng.json#/coils/19._note: SolModCallBack; also drives l121games/sttng.json#/coils/20._vbscript_callback: Flash122games/sttng.json#/coils/20._inferred_type: flashergames/sttng.json#/coils/20._note: SolModCallBack; also drives f122b, f122sgames/sttng.json#/coils/21._vbscript_callback: Flash123games/sttng.json#/coils/21._inferred_type: flashergames/sttng.json#/coils/21._note: SolModCallBack; also drives f123a, ShieldGiBig7/8/10games/sttng.json#/coils/22._vbscript_callback: SetLamp 124,games/sttng.json#/coils/22._inferred_type: flashergames/sttng.json#/coils/22._note: Uses SetLamp to lamp 124 rather than SolModCallBackgames/sttng.json#/coils/23._vbscript_callback: Flash125games/sttng.json#/coils/23._inferred_type: flashergames/sttng.json#/coils/23._note: SolModCallBack; left popper area. Also drives l125games/sttng.json#/coils/24._vbscript_callback: Flash126games/sttng.json#/coils/24._inferred_type: flashergames/sttng.json#/coils/24._note: SolModCallBack; also drives f126s, l78borgb1, l78borga1, l78d1, l78e1games/sttng.json#/coils/25._vbscript_callback: Flash127games/sttng.json#/coils/25._inferred_type: flashergames/sttng.json#/coils/25._note: SolModCallBack; also drives f127s, l78b1, l78c1, l78borgd1, l78borge1games/sttng.json#/coils/26._vbscript_callback: Flash128games/sttng.json#/coils/26._inferred_type: flashergames/sttng.json#/coils/26._note: SolModCallBack; also drives f128s, GiBigGreen, l78a1, l78borgc1games/sttng.json#/coils/27._vbscript_callback: UnderDiverterTopgames/sttng.json#/coils/27._inferred_type: divertergames/sttng.json#/coils/27._note: WPC extboard solenoid. Controls DiverterFRG and sw37dr1 drop wallsgames/sttng.json#/coils/28._vbscript_callback: UnderDiverterBottomgames/sttng.json#/coils/28._inferred_type: divertergames/sttng.json#/coils/28._note: WPC extboard solenoid. Controls DiverterFLG drop wallgames/sttng.json#/coils/29._vbscript_callback: TopDrop.SolDropUpgames/sttng.json#/coils/29._inferred_type: drop_target_resetgames/sttng.json#/coils/29._note: WPC extboard solenoid. Resets the single top drop targetgames/sttng.json#/coils/30._vbscript_callback: TopDrop.SolDropDowngames/sttng.json#/coils/30._inferred_type: drop_target_resetgames/sttng.json#/coils/30._note: WPC extboard solenoid. Drops the top drop targetgames/sttng.json#/coils/31._vbscript_callback: Flash141games/sttng.json#/coils/31._inferred_type: flashergames/sttng.json#/coils/31._note: SolModCallBack; also drives f141s, f141s1, GiBigGreen, l141, l141agames/sttng.json#/coils/32._vbscript_callback: Flash142games/sttng.json#/coils/32._inferred_type: flashergames/sttng.json#/coils/32._note: SolModCallBack; also drives f142s, f142s1, GiBigRed, GiBigRed1, l142games/sttng.json#/lamps/0._note: Also l11b, f11games/sttng.json#/lamps/1._note: Also l12b, f12games/sttng.json#/lamps/2._note: Also l13bgames/sttng.json#/lamps/3._note: Also l14bgames/sttng.json#/lamps/4._note: Also l15b, f15games/sttng.json#/lamps/5._note: Also l16bgames/sttng.json#/lamps/6._note: Also l17bgames/sttng.json#/lamps/7._note: Also l18bgames/sttng.json#/lamps/8._note: Also l21bgames/sttng.json#/lamps/9._note: Also l22bgames/sttng.json#/lamps/10._note: Also l23bgames/sttng.json#/lamps/11._note: Also l24b, f24games/sttng.json#/lamps/12._note: Also l25b, f25games/sttng.json#/lamps/13._note: Also l26b, f26, f26s, f26s1, l26bluegames/sttng.json#/lamps/14._note: Also l27bgames/sttng.json#/lamps/15._note: Also l28b, f28games/sttng.json#/lamps/16._note: Also l31bgames/sttng.json#/lamps/17._note: Also l32bgames/sttng.json#/lamps/18._note: Also l33bgames/sttng.json#/lamps/19._note: Also l34b, f34games/sttng.json#/lamps/20._note: Also l35bgames/sttng.json#/lamps/21._note: Also l36bgames/sttng.json#/lamps/22._note: Also l37bgames/sttng.json#/lamps/23._note: Also l38b, f38games/sttng.json#/lamps/24._note: Also l41b, f41games/sttng.json#/lamps/25._note: Also l42bgames/sttng.json#/lamps/26._note: Also l43bgames/sttng.json#/lamps/27._note: Also l44bgames/sttng.json#/lamps/28._note: Also l45b, f45games/sttng.json#/lamps/29._note: Also l46bgames/sttng.json#/lamps/30._note: Also l47bgames/sttng.json#/lamps/31._note: Also l48b, f48games/sttng.json#/lamps/32._note: Also l51bgames/sttng.json#/lamps/33._note: Also f52, f52s, f52s1. l52 position moves with left cannongames/sttng.json#/lamps/34._note: Also f53, f53s. Object-based fade (NFadeObjm)games/sttng.json#/lamps/35._note: Also l54bgames/sttng.json#/lamps/36._note: Also l55bgames/sttng.json#/lamps/37._note: Also l56bgames/sttng.json#/lamps/38._note: Also l57bgames/sttng.json#/lamps/39._note: Also l58bgames/sttng.json#/lamps/40._note: Also l61bgames/sttng.json#/lamps/41._note: Also l62bgames/sttng.json#/lamps/42._note: Also l63bgames/sttng.json#/lamps/43._note: Also l64bgames/sttng.json#/lamps/44._note: Also l65bgames/sttng.json#/lamps/45._note: Also l66bgames/sttng.json#/lamps/46._note: Also l67b, f67games/sttng.json#/lamps/47._note: Also l68b, f68games/sttng.json#/lamps/48._note: Also l71bgames/sttng.json#/lamps/49._note: Also l72bgames/sttng.json#/lamps/50._note: Also l73bgames/sttng.json#/lamps/51._note: Also l74bgames/sttng.json#/lamps/52._note: Also l75bgames/sttng.json#/lamps/53._note: Also l76bgames/sttng.json#/lamps/54._note: Also l77bgames/sttng.json#/lamps/55._note: Borg ship lamp. Multiple VPX objects: l78a-e (custom mod), l78borga-e (original). Also l78a1-e1, l78borga1-e1 for flasher intensitiesgames/sttng.json#/lamps/56._note: Also l81bgames/sttng.json#/lamps/57._note: Also f82, f82s, f82s1. l82 position moves with right cannongames/sttng.json#/lamps/58._note: Also l84b, f84games/sttng.json#/lamps/59._note: Also f85, f85s. Object-based fade (NFadeObjm)games/sttng.json#/lamps/60._note: Also f86, f86s, f86s1. Object-based fade (NFadeObjm)games/sttng.json#/lamps/61._note: Also l124b. Autofire flasher lamp driven via SetLamp from coil 24games/sttng.json#/_source/confidence_notes: High confidence on switches/coils/lamps. No Const sw* declarations — switches referenced by number directly. Solenoid numbers 51-54 are WPC extboard solenoids; flasher solenoids 55-56 are extboard custom. Spinner is WPC F7 (switch 117). Flipper coil IDs (sLRFlipper, sLLFlipper, sURFlipper) are framework constants defined in wpc.VBS, not in the table script. Trough uses 6-ball stack (sw61-sw66). STTNG has dual photon cannon mechanisms with motor solenoids and position-tracking switches. Borg lock is a separate ball stack device. Lamp vpx_names derived from NFadeLm/NFadeL calls in UpdateLamps.
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.sttng:games/sttng.jsonat the pinned migration revision.