<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>PvZ Pinball build log</title>
  <subtitle>Rebuilding Zen Studios’ Plants vs. Zombies pinball table in Visual Pinball X, one shot at a time.</subtitle>
  <link href="https://pvz.dascoba.net/feed.xml" rel="self"/>
  <link href="https://pvz.dascoba.net/"/>
  <id>https://pvz.dascoba.net/</id>
  <updated>2026-10-11T03:25:00-06:00</updated>
  <author><name>Daniel Bardi</name></author>
  <entry>
    <title>Mapping fourteen shots from a guide and a video</title>
    <link href="https://pvz.dascoba.net/posts/mapping-fourteen-shots-from-a-guide-and-a-video/"/>
    <id>https://pvz.dascoba.net/posts/mapping-fourteen-shots-from-a-guide-and-a-video/</id>
    <published>2026-10-11T03:25:00-06:00</published>
    <updated>2026-10-11T03:25:00-06:00</updated>
    <summary>Placing every shot on a top-down picture, and working out from gameplay footage which flipper makes each one.</summary>
    <content type="html">&lt;p class="lead"&gt;&lt;span class="dropcap"&gt;T&lt;/span&gt;o lay out the whitewood, the build needs to know where each of the fourteen shots sits and which flipper feeds it. Neither answer comes from a single source.&lt;/p&gt;
&lt;h2 class="dot-1" id="where-the-shots-are"&gt;Where the shots are&lt;/h2&gt;
&lt;p&gt;The table guide includes a picture of the playfield taken straight from above, so a spot on that picture is a spot on the playfield. That became the base map, with each shot marked as a numbered ring and the flippers, slingshots, lanes and plunger lane drawn in.&lt;/p&gt;
&lt;p&gt;The gameplay video is filmed from low down at an angle, so it can&amp;rsquo;t be traced directly. Instead, its view was straightened to match the guide&amp;rsquo;s picture, using points both show in the lower playfield: the lane slots, the Kickback stars, the flipper tips, the arc of plants and the Flower Pot hole. The lower half lines up well. The upper half doesn&amp;rsquo;t, because the upper playfield tilts and the ramps stand up off the surface, so those positions are the least certain and were checked by eye.&lt;/p&gt;
&lt;p&gt;One thing neither source shows is which C-R-A-Z-Y letter sits on which lane. The five letters are in one row, and C and Y sit above the Kickback stars, so they&amp;rsquo;re taken as the outlanes. That&amp;rsquo;s marked as a guess until something confirms it.&lt;/p&gt;
&lt;p&gt;The picture and the table don&amp;rsquo;t share a shape, either. The picture includes the apron and frame, and the playfield is proportioned differently, so laying out means matching landmarks, like the lower left flipper, rather than simply scaling up.&lt;/p&gt;
&lt;h2 class="dot-2" id="which-flipper-makes-each-shot"&gt;Which flipper makes each shot&lt;/h2&gt;
&lt;p&gt;The rules name a flipper for some shots. For the rest, the video had to answer. The ball was followed by its color through about 24 minutes of play, and every flip that sent it up the table was traced to where it ended, then checked frame by frame for the clearest cases. Each answer is backed by the moments in the video it came from.&lt;/p&gt;
&lt;p&gt;Some of what turned up:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;Left Orbit&lt;/strong&gt; and the &lt;strong&gt;R-I-P targets&lt;/strong&gt; were made from both lower flippers, so either one counts.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Flower Pot&lt;/strong&gt; and the &lt;strong&gt;Brainz Ramp&lt;/strong&gt; are cases where the rules and the video disagree. The rules win, and the disagreement is noted.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Mini Orbit&lt;/strong&gt; and the &lt;strong&gt;Brainz up-kicker&lt;/strong&gt; were never seen made from a flipper. The up-kicker is probably fed from another shot. Both are marked as not seen, along with what was searched, rather than guessed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The video answers are weaker than the rules, and that&amp;rsquo;s noted too. The ball is about twelve pixels across, the camera cuts to close-ups, and there are often several balls in play.&lt;/p&gt;
&lt;h2 class="dot-3" id="whats-next"&gt;What&amp;rsquo;s next&lt;/h2&gt;
&lt;p&gt;With the map done and the shot test working, the next step is building the lower playfield and then the shots themselves, each one landing with a passing shot test. When all fourteen pass and the whitewood has been played and signed off, the rules work begins.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>A table that tests its own shots</title>
    <link href="https://pvz.dascoba.net/posts/a-table-that-tests-its-own-shots/"/>
    <id>https://pvz.dascoba.net/posts/a-table-that-tests-its-own-shots/</id>
    <published>2026-10-11T03:18:00-06:00</published>
    <updated>2026-10-11T03:18:00-06:00</updated>
    <summary>A test that sweeps 63 launches off a flipper and passes the moment one of them trips the shot's switch.</summary>
    <content type="html">&lt;p class="lead"&gt;&lt;span class="dropcap"&gt;A&lt;/span&gt; whitewood is only finished when every shot can be made. Checking that by hand after every change would take an evening each time, so the table learned to test itself.&lt;/p&gt;
&lt;h2 class="dot-1" id="what-a-shot-test-does"&gt;What a shot test does&lt;/h2&gt;
&lt;p&gt;The test starts Visual Pinball in a small window with the sound off and places one ball just above the named flipper&amp;rsquo;s tip at the end of its swing. Then it launches and watches. A launch ends the moment the ball:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;trips the shot&amp;rsquo;s switch,&lt;/li&gt;
&lt;li&gt;drains,&lt;/li&gt;
&lt;li&gt;comes to rest, or&lt;/li&gt;
&lt;li&gt;has been in flight for 2.5 seconds.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One launch proves very little, because a real flip&amp;rsquo;s timing decides where the ball goes. So the test sweeps:&lt;/p&gt;
&lt;div class="stat-cards"&gt;&lt;div class="lift stat-card" style="transform: rotate(-1deg)"&gt;&lt;span class="number"&gt;21&lt;/span&gt;&lt;span class="label"&gt;headings, 40° left to 40° right, 4° apart&lt;/span&gt;&lt;/div&gt;&lt;div class="lift stat-card" style="transform: rotate(1deg)"&gt;&lt;span class="number"&gt;3&lt;/span&gt;&lt;span class="label"&gt;speeds, from a soft flip to one that reaches the top&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;

&lt;aside class="dmd dmd-panel" aria-label="21 × 3 = 63 launches any one hit · shot is makeable"&gt;&lt;span class="small"&gt;21 × 3 =&lt;/span&gt;&lt;span class="big blink"&gt;63 LAUNCHES&lt;/span&gt;&lt;span class="small"&gt;ANY ONE HIT · SHOT IS MAKEABLE&lt;/span&gt;&lt;/aside&gt;

&lt;p&gt;A pass means the shot is &lt;strong&gt;makeable&lt;/strong&gt;, not that it&amp;rsquo;s easy, which is exactly the question the whitewood needs answered.&lt;/p&gt;
&lt;h2 class="dot-2" id="keeping-the-dialogs-away"&gt;Keeping the dialogs away&lt;/h2&gt;
&lt;p&gt;An error box popping up mid-test would freeze everything, so the test guards against it three ways:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The table is checked for errors before the test starts, and the run stops if anything is wrong.&lt;/li&gt;
&lt;li&gt;A problem during the run ends the test with a clear result instead of a pop-up.&lt;/li&gt;
&lt;li&gt;If something still hangs, the test closes Visual Pinball once its time runs out.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;When a test fails, it says why, by name:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No such switch.&lt;/strong&gt; The table doesn&amp;rsquo;t have the shot the test asked for.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Missed.&lt;/strong&gt; No launch reached the switch, and the test reports how close the nearest one came.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A script broke.&lt;/strong&gt; Something went wrong in the table&amp;rsquo;s script during the run, and the test ends with that result instead of freezing.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class="dot-3" id="the-stand-in-shot"&gt;The stand-in shot&lt;/h2&gt;
&lt;p&gt;The real shots don&amp;rsquo;t exist yet, so the first test runs against a stand-in: one switch in open playfield with a light that flashes when it&amp;rsquo;s hit. That light is the same sign a player will see when a shot registers, and it&amp;rsquo;s what the test reads.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>The first playable template table</title>
    <link href="https://pvz.dascoba.net/posts/the-first-playable-template-table/"/>
    <id>https://pvz.dascoba.net/posts/the-first-playable-template-table/</id>
    <published>2026-10-11T02:26:00-06:00</published>
    <updated>2026-10-11T02:26:00-06:00</updated>
    <summary>Getting a bare template table to build, play and pass its checks, and why Visual Pinball's error pop-ups shaped all of it.</summary>
    <content type="html">&lt;p class="lead"&gt;&lt;span class="dropcap"&gt;T&lt;/span&gt;he first real milestone was modest on purpose. Take Visual Pinball&amp;rsquo;s plain starter table, the one every new table begins from, and prove the whole loop works: put it together, play it, tweak it in the editor, bring the tweak back, and check that nothing broke.&lt;/p&gt;
&lt;h2 class="dot-1" id="four-jobs"&gt;Four jobs&lt;/h2&gt;
&lt;p&gt;Four jobs are now automatic:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Build&lt;/strong&gt; puts the table together into something Visual Pinball can play.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Play&lt;/strong&gt; opens it, building it first only if there&amp;rsquo;s nothing to play yet.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bring back&lt;/strong&gt; takes changes made in Visual Pinball&amp;rsquo;s editor and folds them into the saved table.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Check&lt;/strong&gt; builds the table and makes sure Visual Pinball actually loads it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Play deliberately won&amp;rsquo;t rebuild over a table that&amp;rsquo;s already there, because that copy might hold editor tweaks that haven&amp;rsquo;t been brought back yet. Losing an afternoon of tuning to a launch button would be a bad trade.&lt;/p&gt;
&lt;p&gt;Bring back only touches the pieces that really changed, so an edit shows up as exactly what was edited and nothing else.&lt;/p&gt;
&lt;h2 class="dot-2" id="the-pop-up-problem"&gt;The pop-up problem&lt;/h2&gt;
&lt;p&gt;Visual Pinball has a habit that shaped all of this. When it can&amp;rsquo;t open a table, or something in it goes wrong, it shows an error pop-up and waits for someone to click it. For a check that runs on its own, a pop-up means it just sits there forever.&lt;/p&gt;
&lt;p&gt;So the check never hands Visual Pinball a table that hasn&amp;rsquo;t already been confirmed to be put together correctly, and a load that takes longer than 30 seconds is stopped and counted as a failure. The same worry comes back, bigger, in the shot tests.&lt;/p&gt;
&lt;h2 class="dot-3" id="tested-first"&gt;Tested first&lt;/h2&gt;
&lt;p&gt;Every one of the four jobs was written test first. The tests cover the obvious paths and the awkward ones, like a broken table leaving nothing half-built behind, and a check never feeding Visual Pinball something it can&amp;rsquo;t open.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Writing down the rules</title>
    <link href="https://pvz.dascoba.net/posts/writing-down-the-rules/"/>
    <id>https://pvz.dascoba.net/posts/writing-down-the-rules/</id>
    <published>2026-10-11T01:20:00-06:00</published>
    <updated>2026-10-11T01:20:00-06:00</updated>
    <summary>The guide's rules in one structure, every shot numbered, and the open questions listed instead of guessed.</summary>
    <content type="html">&lt;p class="lead"&gt;&lt;span class="dropcap"&gt;T&lt;/span&gt;he table guide explains the game the way a player learns it: feature by feature, with plenty of &amp;ldquo;probably&amp;rdquo; and &amp;ldquo;about&amp;rdquo;. To build from it, the rules needed to be in one place, in one structure, with every shot numbered.&lt;/p&gt;
&lt;h2 class="dot-1" id="the-core-loop"&gt;The core loop&lt;/h2&gt;
&lt;p&gt;Zombies march down the playfield toward the Welcome Mat above the flippers. You stop them with the ball and with plants and gadgets you buy:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Shoot the Sun Hole to scatter Sun on the lanes, and collect it.&lt;/li&gt;
&lt;li&gt;Spend Sun at the Flower Pot on ball power-ups and plants.&lt;/li&gt;
&lt;li&gt;Defeat zombies to drop coins, and spend Money at Crazy Dave&amp;rsquo;s Car on permanent upgrades.&lt;/li&gt;
&lt;li&gt;Build toward the multiballs and the BRAINZ Missions, and finally Dr. Zomboss.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A zombie that reaches the top of the Welcome Mat fails whatever Mission or Challenge is running.&lt;/p&gt;
&lt;h2 class="dot-2" id="fourteen-shots"&gt;Fourteen shots&lt;/h2&gt;
&lt;p&gt;Every rule hangs off one of fourteen numbered shots, from the Flower Pot (1) to the Magna Save target (14). The rules have a list of all fourteen and what each does, and everything else refers to them by number. That list also became the checklist for the whitewood: a shot is done when it&amp;rsquo;s on the table and a test proves it can be made.&lt;/p&gt;
&lt;h2 class="dot-3" id="what-the-guide-doesnt-say"&gt;What the guide doesn&amp;rsquo;t say&lt;/h2&gt;
&lt;p&gt;Some answers simply aren&amp;rsquo;t in the guide. They&amp;rsquo;re collected as open questions rather than guessed at in the middle of the text:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;how long Ball Save lasts,&lt;/li&gt;
&lt;li&gt;how many slingshot hits set off a zombie attack,&lt;/li&gt;
&lt;li&gt;what a Challenge pays,&lt;/li&gt;
&lt;li&gt;exactly what starts Melon Pult and how many misses it allows,&lt;/li&gt;
&lt;li&gt;the full lists of Jack-in-the-Box and Fertilizer awards,&lt;/li&gt;
&lt;li&gt;the multiplier steps between 2x and 10x,&lt;/li&gt;
&lt;li&gt;whether the Watering Can bonus applies to every switch or only ramps and orbits,&lt;/li&gt;
&lt;li&gt;the Mission and wizard mode bonus values.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each one will be settled from the gameplay video where possible. Anything still unknown when its rule is built gets a standard pinball value, marked as assumed.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Ground rules before the first flipper</title>
    <link href="https://pvz.dascoba.net/posts/ground-rules-before-the-first-flipper/"/>
    <id>https://pvz.dascoba.net/posts/ground-rules-before-the-first-flipper/</id>
    <published>2026-10-11T01:10:00-06:00</published>
    <updated>2026-10-11T01:10:00-06:00</updated>
    <summary>A glossary that bans vague words, and two early decisions about how the table is stored and tested.</summary>
    <content type="html">&lt;p class="lead"&gt;&lt;span class="dropcap"&gt;B&lt;/span&gt;efore touching the table, two kinds of groundwork came first: a glossary, and two decisions about how the work gets done.&lt;/p&gt;
&lt;h2 class="dot-1" id="a-glossary-with-a-list-of-words-to-avoid"&gt;A glossary with a list of words to avoid&lt;/h2&gt;
&lt;p&gt;Pinball and Plants vs. Zombies each come with their own vocabulary, and a project that mixes the two drifts fast. The glossary pins down one name for each thing and lists the names &lt;em&gt;not&lt;/em&gt; to use. A few examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Whitewood&lt;/strong&gt; is the table with its shots in place and no art or rules. Not &amp;ldquo;prototype&amp;rdquo; or &amp;ldquo;blockout&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shot&lt;/strong&gt; is one of the fourteen numbered features the ball can be sent to. Not &amp;ldquo;target&amp;rdquo;, because a target is only one kind of shot.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hit spot&lt;/strong&gt; is a fixed place on a zombie&amp;rsquo;s path where the ball can strike it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assumed value&lt;/strong&gt; is a rule number nothing confirms, filled with a standard pinball value and marked so it can be checked later.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Six of the shots have glossary names, like the Flower Pot, the Sun Hole and the Zomboss Ramp, so every note, test and post calls them the same thing.&lt;/p&gt;
&lt;h2 class="dot-2" id="decision-1-every-change-to-the-table-can-be-seen"&gt;Decision 1: every change to the table can be seen&lt;/h2&gt;
&lt;p&gt;Visual Pinball normally saves a whole table as one sealed file. Change a post or move a ramp, and all you can tell afterward is that something changed.&lt;/p&gt;
&lt;p&gt;So the table is kept broken out into its parts, one piece per playfield element. Every change shows up as exactly what moved, and a tweak made by hand in Visual Pinball&amp;rsquo;s editor comes back into those parts the same way.&lt;/p&gt;
&lt;h2 class="dot-3" id="decision-2-the-rules-get-checked-without-playing"&gt;Decision 2: the rules get checked without playing&lt;/h2&gt;
&lt;p&gt;On most tables, the rules (&amp;ldquo;three hits lights the Shop&amp;rdquo;) are tangled up with the playfield (&amp;ldquo;flash this lamp&amp;rdquo;). The only way to check them is to start the game and play, which is far too slow to do after every change.&lt;/p&gt;
&lt;p&gt;Here the rules are built on their own, deciding score, awards and progress from what the ball hit, without knowing anything about the table itself. That means they can be checked in seconds, over and over. The table just tells the rules what was hit and lights the lamps they ask for, and that thin layer is the one part checked by playing.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Rebuilding a table that only exists on a screen</title>
    <link href="https://pvz.dascoba.net/posts/rebuilding-a-table-that-only-exists-on-a-screen/"/>
    <id>https://pvz.dascoba.net/posts/rebuilding-a-table-that-only-exists-on-a-screen/</id>
    <published>2026-10-10T12:07:00-06:00</published>
    <updated>2026-10-10T12:07:00-06:00</updated>
    <summary>The plan for recreating the table in Visual Pinball X, and the order it gets built in.</summary>
    <content type="html">&lt;p class="lead"&gt;&lt;span class="dropcap"&gt;I&lt;/span&gt;n 2015 Zen Studios released a Plants vs. Zombies table for Pinball FX2. It never existed as a real machine, and it only plays inside Zen&amp;rsquo;s own app. This project rebuilds it in Visual Pinball X for private play, following the original table&amp;rsquo;s rules and look as closely as the evidence allows.&lt;/p&gt;
&lt;h2 class="dot-1" id="what-the-evidence-is"&gt;What the evidence is&lt;/h2&gt;
&lt;p&gt;There&amp;rsquo;s nothing to copy from. Everything comes from three places:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a fan-made table guide by ShoryukenToTheChin, which has a true top-down picture of the playfield and the most complete written rules,&lt;/li&gt;
&lt;li&gt;Zen&amp;rsquo;s own announcement from July 2015,&lt;/li&gt;
&lt;li&gt;a long gameplay video, filmed from a low angle, which is the only way to see where the flippers actually send the ball.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Where they disagree, the build picks one and says which. Where none of them says anything, the build uses a standard pinball value and marks it as assumed, so it can be found and corrected later.&lt;/p&gt;
&lt;h2 class="dot-2" id="the-order-of-work"&gt;The order of work&lt;/h2&gt;
&lt;p&gt;A real pinball machine starts life as a &lt;em&gt;whitewood&lt;/em&gt;: bare plywood with the ramps, holes and flippers in place and no art or rules. You play it until every shot feels right, and only then do the rules and artwork go on. This build follows the same order, one ball at a time.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Whitewood.&lt;/strong&gt; Every one of the fourteen shots is in place, and a test proves each one can be made from its flipper.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rules.&lt;/strong&gt; Sun, seeds, zombies, Money and Crazy Dave&amp;rsquo;s Shop, the three multiballs, the four BRAINZ Missions and the Dr. Zomboss wizard mode.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Art and scenery.&lt;/strong&gt; Playfield and plastics art, on-table scenery, and zombies that walk the playfield.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sound and screens.&lt;/strong&gt; A green dot-matrix display, music and effects, and a leaderboard.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Every finished step gets written up here.&lt;/p&gt;</content>
  </entry>
</feed>
