<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Get Info: #pang</title>
    <description>Posts tagged “pang” — Blog of independent game and app developer Matt Sephton. Featuring vintage Macintosh, game development, digital artwork, Japanese esoterica, video game reviews, hacks and tips, and much more.</description>
    <link>https://blog.gingerbeardman.com/tag/pang/</link>
    <atom:link href="https://blog.gingerbeardman.com/tag/pang/index.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Mon, 06 Jul 2026 14:37:40 +0000</pubDate>
    <lastBuildDate>Mon, 06 Jul 2026 14:37:40 +0000</lastBuildDate>
    <generator>Jekyll v4.4.1</generator>

    
      
        <item>
          <title>Level viewer for Pang (Nintendo DS)</title>
          <description>&lt;p&gt;I’m a huge fan of the Pang series of video games. In my experienced and humble opinion the best game in the series is the one on Nintendo DS. It takes the core Pang concept—refined from the original game in 1990 through to Mighty! Pang in 2000—and turns everything it up to 11. It makes full use of the dual screens to add in some novel level layouts, with a near perfect difficulty curve across the 60 levels that make up Tour mode.&lt;/p&gt;

&lt;p&gt;Back in 2017 I tried to reverse engineer it, with the goal of creating custom levels. I got so far as to extract all 256 levels from the ROM and wrote some software to process those into more human-readable formats:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Extract stages tile maps from ROM (using PHP)&lt;/li&gt;
  &lt;li&gt;Convert stage data to JSON (using PHP)&lt;/li&gt;
  &lt;li&gt;Level viewer (using JavaScript and HTML canvas)&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gingerbeardman/pang-ds&quot;&gt;Source code at GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;level-viewer&quot;&gt;Level Viewer&lt;/h2&gt;

&lt;p&gt;Below is an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;iframe&lt;/code&gt; containing a web page hosted on my server:&lt;/p&gt;

&lt;iframe class=&quot;pang&quot; src=&quot;https://www.gingerbeardman.com/pangds/&quot;&gt;&lt;/iframe&gt;

&lt;h2 id=&quot;notes&quot;&gt;Notes&lt;/h2&gt;

&lt;p&gt;The levels are stored in the standard format for Nintendo DS tile-based levels, so these scripts could well work for levels from other games.&lt;/p&gt;

&lt;p&gt;It was interesting to find one of the levels shown on the back of the box, seen in the top right of the image below, which is not featured in the main game. My theory is that this level was created to make the game seem more appealing to anybody looking at these supposedly in-game screenshots.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/pang-ds-box.jpg&quot; alt=&quot;JPG&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;performance&quot;&gt;Performance&lt;/h3&gt;

&lt;p&gt;The performance of the level viewer at the time was much better in Chrome than in Safari, so &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=181244&quot;&gt;I raised a bug at WebKit&lt;/a&gt;. Several years on bug lays dormant, but things don’t seem quite so bad today. Though there have been three major browser upgrades, one major macOS update and a computer upgrade since!&lt;/p&gt;

&lt;h3 id=&quot;to-do&quot;&gt;To do&lt;/h3&gt;

&lt;p&gt;I never did figure out where the definitions for the various balls and other objects on each level were stored. Maybe one day.&lt;/p&gt;

&lt;h2 id=&quot;you-need-to-play-this-game&quot;&gt;You need to play this game!&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/pang-ds.jpg&quot; alt=&quot;JPG&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 21 Apr 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/04/21/level-viewer-for-pang-nintendo-ds/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/04/21/level-viewer-for-pang-nintendo-ds/</guid>
        </item>
      
    

  </channel>
</rss>
