Street Fighter II¶
Extensive build with 3D art, troubleshooting workflows, scripting techniques, and asset creation processes for Gottlieb System 3 hardware.
Build Notes¶
Rebuilding from Manual¶
Challenging for older Gottlieb tables - manuals don't clearly show where all rails and walls are positioned. Manual only shows fully assembled playfield with plastics covering rails. Requires extensive comparison with reference photos and guesswork.
Key Challenge: Slingshot post holes used as alignment reference points when no actual blueprints existed.
Playfield Photo Stitching¶
For best scan results: Take 3x4 photo grid and stitch in Photoshop. This approach can get better results before clear coating (avoiding new reflectiveness). Use pinball.center PF layout as base layer at matching resolution, then stitch photos over top.
Worn vs New Aesthetic¶
To make table look "used" rather than brand new: - Add wear to rubbers, plastics, metals - Add damaged plastic prints - Model manufacturer logos on flipper bats - Playfield scan being older helps authentic used look
Community Feedback: Balance needed - make it look lived-in but not excessively dirty.
Philosophy Debate: Worn look vs brand new debate centered on realism. Worn look more lifelike and tells a story. Instruction cards made sepia/faded like sun-worn paper. Machine should look used but loved, not destroyed.
Scripting¶
Gottlieb System 3 Trough Configuration¶
System 3 trough is unusual - 3 ball trough with only two switches: - Right side solenoid acts as stairway - Serves one ball while simultaneously moving 2nd ball into ready position - Gravity fed with metal trough ramp raised in middle - Two yellow solenoids: drain-to-holding, holding-to-serve - Wire attached to solenoid does additional mechanical function - Switch 31 should rest on last ball of 3-ball stack
This configuration was causing multiball ball count issues until corrected.
Piledriver Spiral Ramp Physics¶
Use tweaked collidable primitive: simple tube as collidable mesh to guide ball down to hole under ramp. In real life bounces due to space between rails (not smooth fall), but low poly solution preferred.
Skillshot Target Multi-Switch Implementation¶
Two-stage detection: outer target (large) and center pin (small). Center pin only registers on dead-center hits.
Implementation: Split VPX target into 3 parts using simple walls (not target objects): - Dead center (target 1) - Two sides (target 2)
Outer target always registers, but only direct center hits also trigger pin. Walls needed instead of target objects for proper control.
Chun-Li Spinner Animation¶
Chun-Li animated like spinners - multiple positions (four) rendered separately then blended as function of spinner angle. Creates smooth rotation effect. Requires separate renders for each position state, script blends based on rotation.
Locale Issues with VBScript¶
Spanish locale caused keycode issues - keyboard presses not registering correctly.
Fix: Comment out SetLocale 1033 and try SetLocale 11274 (Argentina) to resolve debugger problems.
Keycode mapping shifted (key 6→7, key 2→3, key 1→2). Once corrected, coins and start button worked.
3D & Art¶
Measuring Physical Table Parts in Blender¶
When modeling from scratch, request measurements in mm from owners with physical machines. Check how to measure in Blender vs imported table for proper scale. Physical measurements critical for complex assemblies like car crash mechanism.
Wire Ramp Modeling¶
Wire ramps beyond some modelers' skills - worth asking community for help. Team collaboration: tomate80 offered to model wire ramps when requested.
Wire Ramp Polygon Count¶
Consideration: Can add subdivision modifier for renders if needed, but in-game wire ramps should be kept lower poly for performance (reference LW3 performance problems).
For final renders: subdivision modifier added just for rendering (not exported) works well with bevel modifiers.
Missing Plastic Assets Strategy¶
When not all plastics from a table are scanned, use plastics from other versions (like JP's version) for missing ones. Some plastics under rails may be completely missing with no image at all.
Plastic Ramp Material Matching¶
Plastic ramps strange to match - on some photos look really rough, on others look like glass. Contact with machine owner said they look okay, unsure what to change. Adjusting roughness typical approach, but reference inconsistency makes it difficult.
Screws Modeling from Scratch¶
Had to remake all screws from scratch because parts library screws had wrong dimensions and shape. Time-consuming but necessary for accuracy. Indicates parts library not always reliable for specific table needs.
VR Room Tilt Issue¶
VR rooms typically tilted 6 degrees to match playfield. Request made for VPX layer specific for VR slanted 6 degrees away from table, but no response. Most people won't notice since they can freely move in VR.
Forced Perspective Lighting in VR¶
Forced perspective lighting baked into metals and glass can cause issues. Better to separate metals and glass and give them proper materials in VPX. This prevents unnatural glare reflections. Focus on major elements like cabinet glass and chairs.
Normals Not Needed in VPX¶
Normal maps don't really do much in VPX. For baking VR rooms, baked normals aren't necessary - standard bake is sufficient. Saves time in baking process.
Bake File Size Optimization¶
Imported bm_parts primitive showed 8748 vertices removed with "merge by distance" 0.0001m. Each basic asset significantly complicated - toolkit makes lightmaps at same complexity level.
Example: Spectrum basic screw = 236 tris, SF2 same screw = 2801 tris.
Solution: - Use "optimize mesh" checkbox in toolkit - Decimate meshes with modifier until they start breaking - Don't uncheck "optimize mesh" accidentally - Applied bevels can't be undone without backups
Reflection Options Performance¶
Reworked reflection options: None / Partial (reflects "world" of select objects) / Full (also reflects lightmaps of select objects).
Code:
BM_PF.ReflectionProbe = "Playfield Reflections"
BM_Layer2.ReflectionProbe = "Playfield Reflections"
For Each BP in BP_Parts
BP.ReflectionEnabled = true
Next
Full looks best but consumes more performance. Unfortunate that reflection strength can't be controlled through API. Settled on 0.2 value as balance.
Glass Reflections Experimental Feature¶
Added experimental PF glass reflections - bit buggy but adds realism.
Important
Turn off PF reflections when using glass reflections, otherwise they reflect on glass and look messy.
New ball images added with option selection (Auto/Standard/VR). New environment image included.
Troubleshooting¶
Balls Resting on Primitives¶
Balls resting on primitives can do weird things - may slowly sink through flipper during idle. Happens with captive balls too.
Solution: Must make VPX walls to cradle/support ball, not primitives. This affected car crush lower playfield ball.
VPinMAME vs PinMAME Confusion¶
Common confusion: VPinMAME (DLL used by VPX) vs PinMAME (standalone EXE).
Installing PinMAME when you need VPinMAME causes tables not to work - ball won't release, version shows as old.
- VPinMAME.dll: Should be in
VisualPinballfolder - PinMAME.exe: Used for ROM auditing and sound ripping, not for playing tables
Gottlieb Backglass Flasher Lamp Assignment¶
Gottlieb backglass flashers assigned to L120-L127 (corresponding to Drv.0-7 in manual). il26 used for GI (may be B2S-specific). Test by assigning lamps to these numbers. Gottliebs handle this differently than other manufacturers.
Launch Ball Stuck Issue¶
Ball sticking at launch next to right kickout. All collidables done with primitives needing investigation. Piledriver spiral physics also reverted/missing.
Resolution: Fixed ball stuck issue top left of upper playfield, added spiral piledriver physics ramp. Issue was primitive-based collision geometry needed adjustment.
Staged Flippers and Multiball Issues¶
After TORPEDO multiball, flippers die at end of mode. Ball count error occurs - second drained ball stays in drain instead of leaving, causing count problems. Trough configuration was underlying issue.
VR Mega Room Collection Bug¶
VRMega Collection only had one item, so switching to minimal room still showed mega room. Script looked correct but collection wasn't properly disabled. Simple oversight in collection management.
Game Knowledge¶
Guile Shot Difficulty¶
Guile shot is definitively tough on real pin - requires precision. Described as "most satisfying shot in pinball." Tighter and more challenging than Chun-Li shot. Ball needs speed to make it through scoop ramp. Was consistently last fighter completed. Hardness confirmed accurate to real machine - not tuning problem.
Stop-and-Go Gameplay Design¶
Stop-and-go gameplay is polarizing - people love or hate it. Theme and nostalgia are major appeal factors. Not for playing hours on end, but fun game focused on precise shots. Design choice is intentional and appreciated by specific player types.
Resources¶
ROM Distribution and Copyright¶
Gottlieb ROMs pulled from internet due to copyright - owned by someone in community who "savagely protects them." Can get ROMs from Pinball Nirvana and other specific locations.
Best Practice: Not to include ROM with table download - puts onus on users (why MAME/PinMAME have nag screens).
Krita for Image Editing¶
Recommended for plastic retouch work - surprisingly not well known but offers everything needed. Free and open source painting program made by artists.
Alternative to Photoshop/Paint.NET for pinball asset work: https://krita.org
Gottlieb NVRAM Requirements¶
All Gottlieb tables need preset NVRAM file. Without it, ball count problems occur and table won't accept coins.
Available as pack: bally_6803_gts3_nvram.zip
This is consistent requirement across Gottlieb System 3 games.
Best Practices¶
Complete Project Timeline¶
Full project timeline from first WIP (June 2022) to v1.1 release (October 2024): - Early WIP with Gottlieb flippers, dynamic ball shadows, nFozzy/Fleep scripts - Community contributed plastics (onevox), playfield photos (ebislit stitched 3x4 grid) - Obtained playfield scan October 2023, restarted with new skills from SpongeBob project - Blender modeling: car crash, wire ramps, plastics, screws, all opto switches, upper playfield - Toolkit 4K bake (took couple days) - Apophis: Physics, trough implementation, PWM, diverters, car crash mechanics, topper animations - Sixtoe: Piledriver spiral physics - VR room by gedankekojote97 with arcade machines, graffiti credits, worn warehouse aesthetic - Rawd: VR room consultation, rat animation consideration - Released v1.0 September 29, 2024 - Post-release: Reflection options (FrankEnstein), mechanical sounds, glass reflections, knocker sound
Key Lesson: Proper Gottlieb trough implementation critical for multiball reliability.
Version Control Checklist¶
Release v1.0 shipped without playfield reflections - major oversight.
Response: "We need a checklist for stuff like this."
Demonstrates need for pre-release validation checklist to catch common omissions (reflections, sounds, materials, VR room states, etc). Even with extensive testing, systematic checklist prevents shipping incomplete features.
Mechanical Sound Recording Process¶
For mechanical sounds: Need recorded sounds from actual machine. Creator can provide PM instructions on how to record and what sounds needed to match quality level of other tables (reference: RCT).
Real machine owner offered to record. Small updates held back waiting for mechanical sound recordings. Proper mechanical sound capture elevates table authenticity significantly.
Topper Design and Implementation¶
Fully interactive topper with lights, flashers, and solenoids interacting with game: - Flashers around topper sync with playfield flashers - Top light bar assigned to playfield light bar - Car front lights assigned to car crash lower playfield GI - Solenoid mechanics: During car crash mode, each flipper hit fires solenoid making Ryu rotate right (kicking car) - Ball hitting car triggers car to move right via solenoids - Flasher inside flashes - Characters alternate (Ken/Ryu) with flipper movements - On completion, car flasher blinks
Implementation requires movables collection for topper bake. All elements confirmed doable in VPX.
Contributors: gedankekojote97, Sixtoe, apophis79, onevox, ebislit, tomate80, clarkkent9917, Deleted User (Arelyel), frank_enste1n, studly_do_right, mcarter78, devious626, dgrimmreaper, scampa123