Skip to content

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 VisualPinball folder
  • 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

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