Skip to content

Game of Thrones (VPW Original, Stern Style)

A comprehensive VPW original table built from scratch by skillman604, apophis79, tomate80, niwak, and others, recreating Stern's 2015 Game of Thrones without ROM emulation. Notable for advancing FlexDMD integration patterns, Lampz setup for non-ROM tables with RGB inserts, DOF safety standards, VBScript boolean gotchas, and Stern Node Board LED architecture documentation.

Build Story

One of the most complex original (non-ROM) tables in VPW, requiring extensive rule research since Stern's scoring rules are undocumented and arbitrary. Even disassembling Spike 1 machine code (possible because Stern left symbol tables in) was not enough to determine all scoring formulas, as awards are based on too many dynamic components.

Table-Specific Details

Mechanisms & Hardware

  • Stern Node Board Architecture: Stern Spike-era tables use Node boards -- separate LED microprocessor controllers under the playfield with individual PWM for each R, G, B channel. Replicating this in VPX requires custom Lampz callbacks since the hardware provides arbitrary control over fade rates, colors, and effects per-insert.
  • Sword mechanism and dragon wings: Moving parts exported as separate objects from Blender with rectified coordinate axes for independent script animation.

Art & Visuals

  • VPX additive primitive settings for inserts documented by niwak: OFF primitive uses static rendering; ON primitive uses mid-gray material color (127,127,127) because VPX environment lighting multiplies color by 2 when lighting is disabled.
  • Playfield insert edge quality fixed using alpha cut threshold adjustment and border overlay flashers.

Rules & Scoring

  • Playfield multiplier max 5x (capped at 3x until swords collected)
  • Lane multiplier 5x (6x during Hand of the King), also capped at 3x until swords
  • Bonus multiplier capped at 20x
  • Upper PF scoring is Premium/LE exclusive and a major scoring opportunity
  • Iron Throne mode: 7 core castles, then "victory lap" random 3-shot castles until drain to single ball
  • Score display font alignment drifts at billion-level digit boundaries without specific initialization code. Using the real game's fonts eliminates repositioning needs.

Scripting Patterns

  • Lampz setup for non-ROM tables: Control lights (invisible, shrunk, white, kept at correct x/y for sequencers) drive visible insert primitives via MassAssign. RGB color changes set on the additive primitive's .color property, not the material.
  • FlexDMD setup: DMD images from ROM dumps (128x32x4-bit grayscale rasters) converted to BMP, assembled into animated GIFs via ImageMagick, loaded from .FlexDMD directory. FlexDMD can crash with OutOfMemoryException on 32-bit VPX; use 64-bit.
  • FlexDMD infinite loop prevention: Mystery mode and match scene both had infinite loop bugs from randomized search without bounds. Always add failsafes to randomized search loops.
  • VBScript boolean gotcha: If a variable is 1 (integer) instead of True (boolean -1), then Not variable returns -2 instead of 0. Use cabinetmode = 0 instead of Not cabinetmode.

Known Issues

  • DOF fire hazard: A GI-On DOF command left solenoids continuously energized, causing real hardware damage (burnt fuse/solenoid). The bug was GI code that sent DOFOn instead of DOFPulse. Only solenoid-related DOF outputs should use DOFPulse.
  • FlexDMD not appearing in desktop mode: check FlexDMDUI.exe for green checkmarks, check DmdDevice.ini [virtualdmd] section, verify correct install folder.
  • FlexDMD in VR: any flasher with "Use DMD script" checked projects DMD content; multiple instances cannot display simultaneously.

Techniques Developed Here

See Also