Bad Cats¶
Bad Cats was VPW's first official release, marking the group's debut on vpinball.com and vpforums (720 downloads and 190 downloads respectively in 1.5 days). The project evolved from initial WIP builds through a major v3.0 toolkit overhaul, with contributions spanning 2020 through 2025. Key contributors include iaakki, benji084, brad1x, apophis79, rothbauerw, niwak, and many others.
Build Notes¶
UV Mapping and Plastics Consolidation¶
The team developed a pipeline for consolidating multiple plastic primitives onto a single UV map: lay out all plastic meshes in Blender/C4D, create a reference PSD showing each piece's UV position, then the artist draws/places graphics within that layout. Benefits: reduced draw calls, easier material management, and single image swap for graphics updates.
Playfield Resolution Testing¶
Testing showed 8K playfield images caused out-of-memory errors. 4K worked but required disabling playfield reflections, FXAA, AO, and screen space reflections. VPX setting "textures unlimited" is the highest quality option. For final release, always test on cabinet hardware, not just desktop.
C4D Ramp Transparency Rendering¶
Transparent ramp refractions were rendered in Cinema 4D -- importing ramp geometry and playfield, applying glass material, and rendering from the table camera angle. This revealed previously hidden artwork (e.g., cat throwing dart under the fishbowl ramp). VPX cannot render real-time refractions through ramp primitives, so this must be baked into the texture.
Collidable Primitive Ramps¶
Primitive collidable ramps replace VPX ramps for better geometry accuracy with minimal performance impact. Requirements: massively simplified mesh (cannot use full-quality visual primitives), 100% vertical ramp walls for correct physics, and manual height positioning for triggers using reference walls.
Aged vs Showroom Graphics¶
Initially released with aged/grunge textures, but these washed out under the new GI lighting method (light from below). For v3.0, the team switched to "showroom" clean graphics. The aged look worked better with old top-lit GI but fought against physically-based below-lit GI. Both versions maintained as separate Photoshop layers.
Version History¶
- v1.0 (2020): Initial VPW release
- v2.x (2021-2022): VR integration, GI updates, physics refinements
- v3.0 (2023): Major toolkit overhaul with lightmapping, vpmMapLights, TweakUI options menu
- v3.0.x (2023-2024): Post-release patches, PinMAME 3.6 adaptation
Scripting¶
nFozzy Physics - Ball Mass Effects¶
Ball mass significantly affects table feel. Bad Cats used 1.7 mass (vs standard 1.0), making it feel heavier and less floaty. Higher mass requires proportionally higher flipper strength. When changing ball mass, watch for tables that create/destroy balls -- new balls may not inherit mass settings.
Best Practice
Never destroy balls. Build fully functioning subway/trough systems to only create balls once at table load.
VPX 10.8 TweakUI Options Menu¶
VPX 10.8 introduced Table1_OptionEvent(ByVal eventId) for in-game options via the F12 menu. Event IDs: 0=game started (load options), 1=option changed, 2=options reset, 3=UI closed.
Name Length Bug
Option name length limit causes flickering -- "Ball Roll Volume" triggers it, "Ball Roll Vol" does not.
UseVPMModSol and Flasher PWM¶
Three requirements for toolkit flasher PWM: (1) UseVPMModSol = True before VPinMAME loads, (2) flasher light intensity > 0 in editor, (3) flasher initial state "Off". Use SolModCallback array (not SolCallback) for flasher assignments.
Rubber Dampening Sub Signature Bug¶
Rubber dampening subs were missing the _Hit(idx) parameter: Sub dPosts() should be Sub dPosts_Hit(idx). Without the parameter, the sub won't fire from hit events on collections.
Remove Old Fast Flip Code with UseSolenoids=2¶
When UseSolenoids = 2 is set, old fast-flip code in Sub SolGION(enabled) must be removed. The old code manually rotated flippers and played sounds when GI turned off, conflicting with new solenoid handling.
Custom ROM: The Cat's Meow¶
Custom ROM integration: rename .bin files to match the original ROM zip numbering pattern. The Cat's Meow ROM adds ball save, game pause, quit game, doghouse lamp support, and 5 selectable rule sets. Final version 1.3 requires VPM 3.7 v28+.
3D & Art¶
3-Layer Plastics Render Pipeline¶
Three-pass render pipeline for realistic plastics: (1) Graphics layer (unaffected artwork), (2) Reflection pass (specular highlights on edges), (3) Refraction pass (distortion through plastic). Composited in After Effects. Bevel on plastic mesh geometry adds edge highlight realism.
GI Lighting - 3-Light Method for Plastics¶
Reworked all GI lights around plastics using Schreibi34's 3-light-per-bulb method. Key discoveries: plastics must have "static rendering" unchecked for GI to pass through dynamically, light from below via bulb height parameter works better than surface-height-assigned lights, and DisableLightingFromBelow on plastics controls insert bleed-through.
Blender Toolkit Lightmapping¶
Toolkit workflow for v3.0: prepare Blender scene with all primitives, run batch render for lightmaps, import VLM materials from reference table (Police Force), assign materials to bakemap objects, hook up insert/GI/flasher lightmaps in VPX script.
GI Color Temperature¶
When adjusting GI color temperature via SetGIColor, keep changes very small (e.g., 180,220,255 for slight cool shift). Larger changes toward blue visibly reduce light intensity. Offer 2-3 preset options (Warm, Daylight, Cool) rather than free-form adjustment.
Troubleshooting¶
Static Rendering Blocking Dynamic GI¶
Plastics with "static rendering" checked will not respond to dynamic GI changes. Fix: uncheck static rendering on any primitive that needs to respond to GI. Side effect: colors may appear slightly washed out (tradeoff for dynamic GI response).
Version Merge Issues¶
VPX's binary blob format prevents proper version control. Merging took 4+ hours of manual work when versions diverged. Script can be compared with WinMerge, but table-level changes (primitive positions, light settings, collections) cannot be diffed.
Flasher Relay Sounds for System 11¶
Bad Cats uses relays in the backbox for most flashers -- relay click sounds are appropriate. Exception: BAD CATS flashers (solenoid 14) do not use relays. Verify from Williams manual schematics which solenoid outputs go through relays.
Sideblade Mirror Reflections - GL vs DX¶
Mirror sideblades work correctly in OpenGL renderer but have missing reflections in DirectX. DX is being phased out -- recommend GL for tables with mirror sideblades.
Resources¶
- VPX Lighting Basics Guide: https://vpinball.com/wiki/visual-pinball-knowledge-base/vpx-lighting-basics/
- Image Measurement Tool: https://imagemeasurement.online/image/select
- Coil Resistance Reference: https://flippers.com/coil-resistance.html