Skip to content

Black Rose (Bally 1992)

Full VPW build of a Bally widebody (20.25" x 46") with dual-color GI system (red + white strings) requiring cross-dimming logic. Notable for per-element flasher variation, dark environment LUT approach, and cannon mechanism alignment. Built by sixtoe, iaakki, o0skitso0o, apophis79, and endi78.

Build Story

Development ran from February 2021 through June 2022, including post-release patches. Endi78 provided the playfield scan and redrawn art (clean and original versions). Sixtoe handled GI tracing and physics, iaakki implemented the cross-dimming GI system and flasher fading, o0skitso0o contributed insert lighting using the Skitso-style flasher technique, and apophis79 integrated Fleep sounds. The build suffered a version control incident where sixtoe built v15 independently while apophis79 was working on v14 (GameTimer/Fleep fixes); sixtoe had to manually copy apophis79's v14 changes into v015 before uploading.

Table-Specific Details

Mechanisms & Hardware

  • Bally widebody: 20.25" x 46" playfield, 952 x 2162 VPX units, PF image cut to 2160 x 4907 px.
  • Dual-color GI: String 2 = red, String 3 = white. Both normally on simultaneously, requiring lights tuned dim enough to avoid blowout when combined. This makes red-only mode (cannon fire) too dim without the boost system.
  • GI string assignments: String 1 = pop bumpers + back panel, String 2 = red lights, String 3 = white lights, Strings 4/5 = backbox. Manual's "top" and "bottom" labels refer to physical bulb position (red above white in each pair), NOT top/bottom of the playfield.
  • Cannon mechanism: Requires precise alignment between primitive rotation, ball launch trajectory, and target positions. Script must account for offset between cannon pivot and ball ejection point.
  • GI string numbering: Off-by-one from GI channel index -- String 1 maps to gi0lvl, String 2 to gi1lvl.

Art & Visuals

  • Dark environment LUT: The environment emission image uses low emission scale, making the table dramatically lit by its own GI bulbs. EnvironmentEmissionScale is set per-LUT in the script.
  • Two playfield art versions maintained: "clean" (imperfections removed) and "original" (authentic wear), toggled via script option.
  • Flupper 3D bumper caps linked to GI via FlBumperFadeTarget(n) = alvl in GIUpdate sub.
  • Skitso-style flasher inserts using VPX flasher objects shaped to insert holes.

Physics & Gameplay

  • Motor sound for cannon uses PlaySoundAtLevelStaticLoop which loops continuously until explicitly stopped.
  • Dynamic ball image changing during gameplay: Table.BallImage = "imagename" for thematic effects (cannonball texture during cannon multiball).

Known Issues

  • ModLampz internal level values cannot be reliably overridden at runtime -- writing to ModLampz.Lvl(n) appears to work in debugger but has no in-game effect.

Techniques Developed Here

See Also