Identity and evidence precedence
This is the Williams WPC-DCS physical product released 1993, IPDB 2357. It covers the sttng_* clone tree: sttng_l7 (parent, LX-7 Sound L-1) plus eighteen localization, LED-ghost-fix, prototype, and community-mod clones. Every one of these is a firmware revision or modification for the same physical machine; none changes the switch, solenoid, lamp, or GI inventory.
The title collides heavily on Internet Archive and in this project's own history: arcademanual_Star_Trek_OPS is the unrelated Bally 1979 pinball machine, arcademanual_Star_Trek_25th_Anniversary_OPS is the unrelated Data East 1991 machine, and there is a Sega Star Trek video-game manual besides. This definition's manual was verified visually (not from OCR text alone): the rendered title page reads "STAR TREK / THE NEXT GENERATION™", the ROM summary lists Williams part A-5343-50023-1 on the WPC CPU board, and printed pages 1-41/2-21/3-23 describe the two gun/cannon assemblies unique to this title, none of which the Bally, Data East, or video-game manuals share.
Evidence precedence for this definition: the retained known-working VPW Mod v1.0 script is runtime and mechanism-causality ground truth; the Williams operations manual controls physical construction, part numbers, wiring, polarity, quantities, and device presence; pinned PinMAME controls controller generation, public address topology, and mechanism step ranges; the retained VPX geometry supplies normalized coordinates. The retained manual PDF carries an OCR text layer, but every printed table used here was visually confirmed against the rendered page and transcribed into external:pinmame-review-artifacts/star-trek-the-next-generation-1993/manual-transcription.md; OCR text was never trusted as sole authority.
GEN_WPCDCS (PINMAME_HARDWARE_GEN_WPCDCS = 0x10) with wpc_dispDMD. The controller profile is pinmame.wpc-dcs, reused unchanged from Williams Indiana Jones: The Pinball Adventure -- the immediately preceding WPC-DCS curation in this project.
This is a wide-body "Superpin" table, like Indiana Jones: the retained VPWmod v1.0 table's own playfield bounds are left=0 top=0 right=1093 bottom=2162, so machine.playfield and every normalized coordinate use x/1093/y/2162 rather than the x/952/y/2162 divisor most other curated WPC games use.
- Switches: dedicated coin-door 1-8, matrix 11-88 as drive column then return row (all 64 positions populated -- unusually, this manual marks none of them "Not Used"), Fliptronic 111-118, and one declared custom switch column (
hw.swCol = 1) at public 121-128.
- Solenoids: physical drivers 1-18 (19 not used); flashers 20-28; Fliptronic upper-right circuits 33/34 (fitted) and upper-left 35/36 (not fitted, no upper-left flipper); lower-flipper circuits 45-48; PinMAME state channels 29-32; WPC-DCS's unused 37-44 range (no LPDC board on this generation); simulator-only 49 and reserved 50; six declared custom solenoids (
hw.custSol = 6) at public 51-56.
- Lamps: 8x8 matrix 11-88, all 64 addresses populated.
- GI: five circuits on public addresses 0-4; only three (0, 3, 4) drive playfield bulbs.
The custom switch column and custom solenoids are not the printed silkscreen numbers
Two facts here generalize the lesson Indiana Jones already established for its own custom column and Twilight Zone established for its own custom solenoid board, and both are worth restating precisely because this manual's own silkscreen numbering and the driver's own source comments both happen to agree with each other while still being wrong about the runtime public address.
- The switch matrix's own printed "column 9" (public 91-98) is not PinMAME's public address.
sttngGameData declares hw.swCol = 1. PinMAME's CORE_CUSTSWCOL = CORE_STDSWCOLS = 12 places a driver's first declared custom switch column two columns past the Fliptronic column (internal column 11), so CORE_CUSTSWNO(1, r) = (12-1+1)*10+r = 120+r publishes at public 121-128. sttng.c's own macro definitions carry a stale comment reflecting an older core.h numbering (#define swLGunMark CORE_CUSTSWNO(1,2) //92), and the Gun Circuit Diagram (printed 3-23) independently calls the same physical harness "sw. col. 9" on its own schematic -- so three sources (manual silkscreen, driver comment, and board schematic prose) all say "9"/"9x", and all three are describing the physical wiring harness, not the PinMAME public address. The retained known-working script settles it directly at runtime: CannonLTimer_Timer/CannonRTimer_Timer assign Controller.Switch(127), Controller.Switch(122), Controller.Switch(125), Controller.Switch(126) -- the true public addresses.
- The custom-solenoid board's own printed items 37-42 are not PinMAME's public address either.
sttngGameData declares hw.custSol = 6, publishing at CORE_CUSTSOLNO(n) = CORE_FIRSTCUSTSOL - 1 + n = 50 + n, i.e. public 51-56. This is structurally provable independent of the retained script: core_getSol's solNo <= 44 branch returns constant 0 for GEN_WPCDCS before it ever reaches hw.getSol, so sttng_getSol (which implements these six outputs by reading WPC_EXTBOARD1 bits 0-5) could only ever be invoked above public address 50 in the first place. The retained script's own SolCallBack(51..54) and SolModCallBack(55/56) registrations confirm the arithmetic directly.
Keep every printed "9N" and "3N" (37-42) number as a manual.address alias only; the public binding.device is always the PinMAME-computed value.
Zero polarity conflicts
Unlike Monster Bash (Dracula-position optos) or Indiana Jones (captive-ball and wheel-position optos), this machine's printed switch-matrix opto shading and PinMAME's inverted-switch mask agree on every single address. sttngGameData's inverted-switch mask is {0x00,0x00,0x00,0xff,0xff,0x00,0x7f,0x00,0x00,0x00,0x00,0x00}: column 3 (0xff, switches 31-38) and column 4 (0xff, 41-48) are fully inverted, matching the printed "OPTO, TYPICALLY CLOSED" shading and the dual LED/photo-transistor part pairs on both columns exactly; column 6 (0x7f, rows 1-7 = switches 61-67) is inverted while row 8 (switch 68, Shooter) is not, matching the printed matrix's own shading of 61-67 but not 68, and the switch-locations parts list's single-part (non-opto) entry for 68. The custom column (internal index 12, public 121-128) is left at the array's zero-filled default (not inverted), which agrees with its construction: the switch-locations parts list prints a single leaf part number (no LED/phototransistor pair) for 122/125/126/127, and the Gun Circuit Diagram (3-23) draws plain switch-contact symbols with no opto component. conflicts is therefore empty and coverage.dimensions.physical_wiring = "validated".
Switches 16/17 (Left/Right Return Lane) are a related but distinct case: they are eddy-current proximity sensors (A-16922 Proximity Sensor II PCB, TDA0161 IC, with A-17064 Eddy Sensor coils), not optos, confirmed by the Section 3 schematic (3-20/3-21) and by the absence of any LED/phototransistor part pair on the switch-locations list. Column 1 (which carries 16/17) is left uninverted by PinMAME, which is exactly correct for this construction -- there is no polarity question here at all, only a construction detail (sensing technology) worth recording accurately in physical.switch_type.
The two guns/cannons: powered rotation with position feedback
Star Trek: The Next Generation's signature feature is a pair of independently rotating, motorized gun/cannon assemblies (left and right), each combining a ball kicker, a ball popper, and a drive motor with two-switch position feedback, mounted as a single removable unit (manual page 1-41, "Removing the Gun Assembly": the plastic cover, kicker bracket, motor bracket, and its two switches plus motor all come off together, and the whole assembly "should point toward the wire loading ramp" when correctly reattached).
Left gun (mirror on the right with all addresses swapped as noted): a ball entering the left underplayfield subway trips opto 32 (Under Left Gun Sw. 2), advances to opto 36 (Under Left Gun Sw. 1) where solenoid 3 (Left Gun Popper) kicks it up into the barrel, and it comes to rest on opto 38 (Left Gun Shooter, "ball loaded"). Solenoid 17 (Left Gun Motor) continuously rotates the entire kicker/barrel/dome assembly -- the retained script's CannonBaseL primitive -- back and forth through roughly -19 to +64 degrees around a pivot. The motor does not itself actuate a discrete switch; the two position switches sense the assembly's resulting mechanical angle, not a solenoid pulse. Custom switch 127 (Left Gun Home) asserts only near the home end of the sweep (-20 to -17 degrees); custom switch 122 (Left Gun Mark) asserts over a wider band (-20 to +9 degrees) that the retained script also uses to select a lower launch force (ForceL = 25 inside the mark band vs. 50 outside it). When solenoid 1 (Left Gun Kicker) fires, the loaded ball launches along the gun's current aim angle and opto 38 clears.
Pinned PinMAME's own internal ball-tracking simulator (sttng.c's sttng_stateDef/sttng_handleMech -- a fallback used only for PinMAME's built-in keyboard-driven playfield visualization, not by a VPX table) models the same two-sensor homing scheme with its own step constants: GUN_HOME = 8*2 = 16, GUN_MARK = 8*7 = 56, out of a GUN_END = 8*20 = 160-step full sweep before the simulator reverses direction. This is a different unit system (integer steps vs. the retained table's degrees) describing the same physical homing behavior, and is useful corroborating evidence for the mechanism's real range even though it is not itself runtime-authoritative for a VPX recreation.
Right gun: opto 33 (Under Right Gun Sw. 2) then opto 37 (Under Right Gun Sw. 1, gates solenoid 4's kick into the barrel), ball rests on opto 34 (Right Gun Shooter), solenoid 18 (Right Gun Motor) rotates CannonBaseR, custom switches 125 (Right Gun Home) and 126 (Right Gun Mark) sense its rotation exactly as 127/122 do on the left, and solenoid 2 (Right Gun Kicker) launches the ball.
Do not describe either gun motor as "actuating" its Home/Mark switches -- the motor runs continuously while the assembly is in motion, and the switches report the assembly's angular position, which the motor only changes indirectly and gradually. This distinction is the one the curation brief explicitly called out and is worth stating plainly for any future author driving this mechanism from switch and solenoid state.
Ball routing: left lock queue, Borg lock, and underplayfield diverters
The left side of the playfield has a second, separate underplayfield path from the gun subway: a four-position ball queue (opto 43 farthest from the popper, then 42, then 35, then 41 nearest) that solenoid 5 (Left Popper) kicks back out to the right inlane. This is not the Borg ball lock and holds no ball for multiball purposes on its own; it is simply a holding queue printed "Under Left Lock Sw. 1-4". The right side has no equivalent queue -- only the right gun subway exists there.
The Borg lock is a separate one-ball feature: a ball entering the Borg hole passes opto 48 (Borg Entry) and rests at opto 31 (Borg Lock), an opto mounted on the Borg Bracket Assembly (A-17219) with no discrete playfield trigger object of its own -- the retained script models it purely as a one-ball cvpmBallStack (BorgLock.InitSw 0,31,0,0,0,0,0,0). Solenoid 16 (Borg Kicker) ejects the locked ball, typically starting Borg multiball.
Three holes (Top Hole opto 45, Left Hole opto 46, Center/Borg Hole opto 47) feed a shared underplayfield diverter maze. Solenoid 15 (Top Divertor) raises a flap that routes a completed left-ramp shot onward or into the Borg Entry path. Two further diverters live on the custom solenoid board: solenoid 51 (Under Divertor Top, retained script object DiverterFRG) and solenoid 52 (Under Divertor Bottom, DiverterFLG) route balls from these holes to the right gun subway, the left gun subway, or the left popper queue. None of the three diverters has its own return-position sensor; PinMAME's own sttng_handleMech tracks each one's assumed position purely from a debounce counter on the driving solenoid's on/off state (CHECK_SOL = 50 checks before assuming the coil has released and the flap has fallen back).
Top drop target, bank standups, trough, and shooter
A single drop target (retained script class TopDrop, bound to switch 57) is raised by solenoid 53 (Top Drop Up) and lowered by solenoid 54 (Top Drop Down) -- both on the custom board. When up, a ball striking it scores and it drops; when down, a ball rolls over it into the Top Hole instead. PinMAME's own internal simulator independently confirms the switch asserts only while the target is down.
The printed "Left/Right Bank Top/Middle/Bottom" (switches 51-56) are, despite the name, fixed standup targets with no reset solenoid anywhere in the printed solenoid table or the retained script's SolCallback registrations -- there is no dropping mechanism behind them, only score switches, confirmed by the retained table's HitTarget-typed objects rather than a drop-target Wall with an isDropped state.
The trough is modeled purely as a cvpmBallStack ball counter (bsTrough.InitSw 0,66,65,64,63,62,61,0), with no discrete playfield trigger object behind any of switches 61-67 -- the manual's own "7 Ball Trough Photo Transistor/LED PCB Assembly" board name reflects seven physical opto stations (six ball-rest positions plus the eject/up sensor). Solenoid 11 (Trough) ejects the ball at position 1 toward the shooter lane, pulsing opto 67 in the same event. The game carries six balls total: three start pre-placed in the trough and three more start pre-placed directly in the gun subways/lock queue at boot (the retained script's SubwayStart routine).
There is no manual plunger: the ball ejected from the trough rests on shooter-lane switch 68 (the sole non-opto position in switch column 6, sensed by the AutoPlunger kicker object itself) and solenoid 6 (Plunger, A-16757 Catapult Assembly) auto-launches it.
Kickback, jets, slingshots, flippers, and the repurposed spinner
A ball draining down the left outlane (switch 15) conditionally fires solenoid 8 (Kickback) to return it to play; PinMAME's own internal simulator independently models the same conditional. There is no separate kickback-position switch.
Three A-9415-2 jet bumpers (switches 71-73, solenoids 12-14) and two A-17418 slingshots (switches 74/75, solenoids 9/10 -- note the crossed naming: solenoid 9 "Left Slingshot" fires from switch 75 "Left Sling" while solenoid 10 "Right Slingshot" fires from switch 74 "Right Sling", confirmed against the retained table's geometrically-sided SlingShotLeft/SlingShotRight wall objects) are standard WPC devices. Each jet-bumper cap is GI-lit rather than lamp-matrix-lit -- there is no lamp-matrix address for any bumper, and the retained table's GI emitter collections for circuits 3 and 4 each include two of the three bumper-cap light objects (lbumperr*).
Three flippers total: two lower (FL-11629, Fliptronic 111-114) plus one upper right (FL-11629, Fliptronic 115/116). There is no upper-left flipper: printed solenoid circuits 35/36 have no coil part, Fliptronic position 117 (upper-left EOS) is repurposed as a plain leaf Spinner (confirmed by the switch-locations parts list naming it directly and by the retained script's sw117spinner_Spin handler pulsing switch 117), and position 118 (upper-left button) is printed blank/Not Used.
Lamps, flashers, and general illumination
All 64 lamp-matrix positions are populated; unlike Monster Bash, this manual marks none of them "Not Used". Every populated address has a single printed bulb; most are modeled in the retained table as a co-located l<addr>/l<addr>b render-double pair for brightness, with the primary object placed and the duplicate documented.
Three lamps have no resolvable world-space coordinate at all: 53 (Advance in Rank), 85 (Borg Lock), and 86 (Borg Jackpot) are each modeled as a colored Primitive mesh sitting at local origin (0,0,0), parented to a transform this curation does not resolve, rather than as a placeable Light object. Inventing a coordinate for them would violate the project's never-invent-a-coordinate rule, so no spatial assertion is made for these three devices and the record stays partial for exactly this reason -- coverage.missing = ["spatial_placement"].
Lamp 78 (Borg Ship) is a special case in the other direction: the manual documents one bulb (A-17158, #555), but the retained table renders it as a five-waypoint animated "Borg ship flying across the top of the playfield" effect using five Light objects (l78a-l78e) plus per-letter "borg" sub-segments. Those five points are the same single physical device's own animation path, not five separate bulbs, so this device carries one placement at their centroid rather than five, documented as an explicit projection.
There is no dedicated "General Illumination Location" diagram anywhere in this 136-page manual (Section 2's own table of contents lists Lamp/Switch/Solenoid location pages but nothing for GI); the only printed GI evidence is the wiring table (five circuits, five wire colors, five connector pairs) plus the Section 3 schematic "General Illumination Circuits" (printed 3-10, a generic Power-Driver-Board triac/latch circuit with no per-string bulb count). Physical bulb quantity and every coordinate therefore come entirely from the retained table's own UpdateGI dispatch and its three playfield-facing emitter collections:
- GI address 0 ("Shields G.I.") drives
St1Shields, 12 raw members: 6 ShieldGiBig1-6 Light objects (the physical bulbs) plus 6 ShieldGiFlasherS1-6 Flasher objects sitting within 0.002 normalized units of their ShieldGiBig counterpart -- co-located glow-dome render doubles, excluded, leaving 6 placements.
- GI addresses 1 and 2 ("Insert G.I.", printed twice) drive only VR-backglass-room helper objects (
VRBGGI*/VRBGGIarea*) in St2GI1/St3GI2 -- never a playfield emitter -- confirming these are backbox-only circuits with no playfield bulb, matching the manual's own "Insert" wording.
- GI address 3 ("Playfield G.I.") drives
St4PFGI, 42 raw members. Most physical bulbs are modeled as a co-located "Gis*" + "Gi*" Light pair (nearest-neighbor deduplicated to 17 bulb positions), plus 2 lbumperr jet-bumper-cap Light objects (18 placements total). Excluded: Flasher1-5 (Flasher-typed objects at coordinates identical to already-counted solenoid-driven flasher devices -- e.g. Flasher4 exactly matches solenoid 21's f121 position -- the same physical flasher bulb re-included in the GI dimming collection for visual realism, not a distinct GI bulb), GiBig (a large ambient-wash Flasher helper with no corresponding manual bulb), and l1/l2/l1b/l2b (unidentified cosmetic lights matching no lamp-matrix or GI parts-list entry).
- GI address 4 ("Return Lane/Coin") drives
St5ReLa, 31 raw members, deduplicated the same way to 16 bulb positions (14 Gis/Gi pairs plus 2 more lbumperr positions). Two further raw members (Gi9, Gi11) sit at coordinates identical to two St4PFGI members and are excluded here as a shared-object anomaly: their paired "Gis*" sibling exists only in St4PFGI, so that circuit is recorded as their physical home rather than double-placing the same bulb under both GI addresses.
Author construction checklist
- Build the six-ball trough (three balls) plus three more balls pre-placed in the gun subways/lock queue at boot, the auto-plunger shooter lane, both slingshots (crossed left/right addressing), three jet bumpers, the left lock four-ball queue, the Borg lock, the top-hole/left-hole/center-hole diverter maze, the top drop target, the two rotating gun/cannon assemblies with position feedback, and three flippers (two lower, one upper right, no upper left).
- Public custom switches are 121-128 (aliases 91-98), and public custom solenoids are 51-56 (aliases 37-42); never bind the printed silkscreen numbers directly.
- Preserve opto polarity for 31-38, 41-48, and 61-67 (row 8/switch 68 excepted); PinMAME already normalizes every one of them and there is nothing to invert manually.
- Switches 16/17 are eddy-current proximity sensors, not optos or leaf switches; do not shade them as opto in a recreation.
- Never claim a gun motor (solenoid 17/18) directly actuates its Home/Mark switch; the switches report the assembly's continuous rotational position, not a discrete solenoid pulse.
- Bind every dedicated switch 1-8, every matrix position 11-88 (all fitted), Fliptronic 111-118 with 118 not installed and 117 repurposed as a Spinner, the eight CPU DIP bits, solenoids 1-56 (19 and 35/36 unfitted), lamps 11-88 (all fitted, three spatially unresolved), GI 0-4 (1/2 backbox-only), and the 128x32 DMD.
Sources
manual.williams.star-trek-the-next-generation.1993: Williams Star Trek: The Next Generation operations manual, SHA-256 7f626bce89556b2af4c80bf9eb1a5f74c72cbffe83a85b5142f17140bc820d86.
manual-support.williams.star-trek-the-next-generation.1993: retained human transcription, SHA-256 07f57792c7f405a5e59607a73ac73bb00f9b7daa91ede63477337d4a9ce8f948.
vpx-script.sttng-vpw-mod-1-0: retained known-working VPW Mod v1.0 embedded script, SHA-256 073d9971157e822a246b2baf1e8f8033304d1b5272ffb2e9bd9581caf448cd24, binding sttng_l7.
vpx-table.sttng-vpw-mod-1-0: retained table, SHA-256 bd00efe46f3ab2392f8c471e65177b348da8e9fcb5829e9f073ab23f69714d8c, bounds left=0 top=0 right=1093 bottom=2162.
pinmame.core.4ec52ff0ac13: src/wpc/sims/wpc/full/sttng.c and the WPC-DCS core/solenoid/flipper handling at the pinned revision.