{"id":9194,"date":"2026-08-26T18:20:54","date_gmt":"2026-08-26T16:20:54","guid":{"rendered":"https:\/\/www.wegneronline.com\/blog\/?p=9194"},"modified":"2026-08-27T18:00:21","modified_gmt":"2026-08-27T16:00:21","slug":"3-d-ultra-spannend-digitale-archaeologie-in-3-d-ultra-pinball-creep-night","status":"publish","type":"post","link":"https:\/\/www.wegneronline.com\/blog\/2026\/08\/26\/3-d-ultra-spannend-digitale-archaeologie-in-3-d-ultra-pinball-creep-night\/","title":{"rendered":"3-D Ultra spannend: Digitale Arch\u00e4ologie in &#8222;3-D Ultra Pinball: Creep Night&#8220;"},"content":{"rendered":"\n<pre class=\"wp-block-verse\"><a href=\"https:\/\/www.wegneronline.com\/blog\/2026\/08\/26\/3-d-ultra-interesting-digital-archaeology-in-3-d-ultra-pinball-creep-night\/\" data-type=\"post\" data-id=\"9204\">English version here!<\/a> \/ <a href=\"https:\/\/www.wegneronline.com\/blog\/2026\/08\/26\/3-d-ultra-spannend-digitale-archaeologie-in-3-d-ultra-pinball-creep-night\/#tool\">Extractor Tool<\/a> \/ <a href=\"\/creepnight\/\">Zur kompletten Infosite<\/a><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Manchmal beginnt eine technische Untersuchung v\u00f6llig ungeplant &#8211; und enden damit, dass man nicht nur eine Engine auseinanderbaut, sondern dabei auch unbekannte Eastereggs und Cheats entdeckt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In meinem Fall wollte ich eigentlich nur <em>3-D Ultra Pinball: Creep Night<\/em> von Sierra aus dem Jahr 1996 auf einem emulierten Windows-98-Rechner wieder spielen. Das Spiel ist f\u00fcr mich seit meiner Kindheit so eines der Games, deren Abl\u00e4ufe man Jahrzehnte sp\u00e4ter erstaunlicherweise immer noch im \u201eMuscle Memory\u201c hat.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Beim Spielen fiel mir diesmal allerdings etwas auf, \u00fcber das ich als Kind selbstverst\u00e4ndlich nie nachgedacht hatte: Trotz seines Namens ist <em>3-D Ultra Pinball<\/em>  kein 3D-Spiel im heutigen Sinne.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;galleryId&quot;:&quot;6a96743315813&quot;}\" data-wp-interactive=\"core\/gallery\" class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a967433168b5&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a967433168b5\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"9197\" src=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/Monitor_1_20260826-181536-400-1024x768.png\" alt=\"\" class=\"wp-image-9197\" srcset=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/Monitor_1_20260826-181536-400-1024x768.png 1024w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/Monitor_1_20260826-181536-400-300x225.png 300w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/Monitor_1_20260826-181536-400-768x576.png 768w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/Monitor_1_20260826-181536-400-1536x1152.png 1536w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/Monitor_1_20260826-181536-400.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Die drei Fake-3D-Tische: &#8222;The Castle&#8220;&#8230;<\/figcaption><\/figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a96743316f43&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a96743316f43\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"9199\" src=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/Monitor_1_20260826-181550-260-1024x768.png\" alt=\"\" class=\"wp-image-9199\" srcset=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/Monitor_1_20260826-181550-260-1024x768.png 1024w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/Monitor_1_20260826-181550-260-300x225.png 300w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/Monitor_1_20260826-181550-260-768x576.png 768w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/Monitor_1_20260826-181550-260-1536x1152.png 1536w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/Monitor_1_20260826-181550-260.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">&#8230;dann &#8222;The Tower&#8220; (wobei Labor eher passen w\u00fcrde)&#8230;<\/figcaption><\/figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a967433175ab&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a967433175ab\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"9198\" src=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/Monitor_1_20260826-181618-290-1024x768.png\" alt=\"\" class=\"wp-image-9198\" srcset=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/Monitor_1_20260826-181618-290-1024x768.png 1024w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/Monitor_1_20260826-181618-290-300x225.png 300w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/Monitor_1_20260826-181618-290-768x576.png 768w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/Monitor_1_20260826-181618-290-1536x1152.png 1536w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/Monitor_1_20260826-181618-290.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">&#8230;und dann &#8222;The Dungeon&#8220;.<\/figcaption><\/figure>\n<\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die Tische sehen dreidimensional aus. Figuren, Kugeln, Rampen und Animationen ebenfalls. Aber es gibt keine in Echtzeit gerenderte polygonale 3D-Welt. Stattdessen arbeitet das von Dynamix entwickelte Spiel mit vorgerenderten 2D-Grafiken.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das war der Beginn einer kleinen Reise in die Innereien der Engine. \ud83d\ude0a <\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">\u201e3-D\u201c ohne 3D<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Das Grundprinzip ist aus heutiger Sicht ebenso einfach wie clever: Die Spieltische wurden offenbar mit 3D-Werkzeugen gestaltet und anschlie\u00dfend als fertige Bilder gerendert. Im Spiel selbst liegt f\u00fcr jeden Tisch ein vollst\u00e4ndiger Hintergrund mit einer Aufl\u00f6sung von 640 \u00d7 480 Pixeln vor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dar\u00fcber zeichnet die Engine kleinere Sprites f\u00fcr bewegliche Elemente wie Kugeln, Figuren, Bumper und Animationen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vereinfacht sieht das Rendering damit ungef\u00e4hr so aus:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Vorgerenderter 640\u00d7480-Hintergrund\n                +\n        animierte Sprites\n                +\n             Kugel\n                +\n      Flipper \/ Targets \/ Effekte\n                =\n         fertiges Spielbild\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Das \u201e3-D\u201c beschreibt also vor allem die optische Gestaltung der Assets. Zur Laufzeit arbeitet das Spiel weitgehend mit 2D-Grafiken.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr einen Windows-PC von 1996 war das eine ausgesprochen sinnvolle L\u00f6sung: Die aufwendige 3D-Arbeit wurde vorab erledigt, w\u00e4hrend der Rechner des Spielers nur noch vorbereitete Pixelgrafiken zeichnen musste.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ein Blick in RESOURCE.001<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Auf der CD befindet sich im Spielverzeichnis unter anderem das Dateipaar:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>RESOURCE.MAP\nRESOURCE.001<\/code><\/pre>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"466\" height=\"433\" src=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/image.png\" alt=\"\" class=\"wp-image-9217\" srcset=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/image.png 466w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/image-300x279.png 300w\" sizes=\"auto, (max-width: 466px) 100vw, 466px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\"><code>RESOURCE.MAP<\/code> dient dabei als Inhaltsverzeichnis. <code>RESOURCE.001<\/code> enth\u00e4lt die eigentlichen Daten.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In meiner Version des Spiels befinden sich darin insgesamt 854 einzelne Ressourcen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>430 \u00d7 WAV\n275 \u00d7 BMP\n109 \u00d7 ANM\n 19 \u00d7 ITF\n  7 \u00d7 PAL\n  4 \u00d7 TBL\n  4 \u00d7 TBM\n  4 \u00d7 RES\n  2 \u00d7 PFT\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Die Dateiendungen sind dabei etwas irref\u00fchrend. Eine Ressource namens <code>GHOST0.BMP<\/code> ist beispielsweise keine normale Windows-BMP-Datei. Der Inhalt beginnt stattdessen mit einem Dynamix-eigenen Header <code>BMP:<\/code>. \u00c4hnliches findet man bei Animationen (<code>ANM:<\/code>) und weiteren Datenformaten.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die Ressourcen selbst sind in <code>RESOURCE.001<\/code> hintereinander abgelegt. <code>RESOURCE.MAP<\/code> enth\u00e4lt zu jedem Eintrag einen Hash und einen Offset. An diesem Offset findet man wiederum einen DOS-kompatiblen Dateinamen, die Gr\u00f6\u00dfe und anschlie\u00dfend die eigentlichen Daten.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Was macht die \u201eLarge\u201c-Installation?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Auch eine kleine Frage aus dem damaligen Setup lie\u00df sich damit beantworten.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Creep Night<\/em> bietet bei der Installation eine \u201eLarge\u201c-Variante an. Dabei wird die Datei <code>ENGLISH\\LARGE\\OVERRIDE.DAT<\/code> auf die Festplatte kopiert. Der Installer erkl\u00e4rt, dass anschlie\u00dfend praktisch nur noch Audio von CD gelesen werden muss.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"629\" height=\"430\" src=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/image-2.png\" alt=\"\" class=\"wp-image-9219\" srcset=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/image-2.png 629w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/image-2-300x205.png 300w\" sizes=\"auto, (max-width: 629px) 100vw, 629px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\"><code>OVERRIDE.DAT<\/code> enth\u00e4lt Index und Ressourcendaten gemeinsam und ist damit im Wesentlichen eine lokale Variante des <code>RESOURCE.MAP<\/code>\/<code>RESOURCE.001<\/code>-Systems.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">W\u00e4hrend <code>RESOURCE.001<\/code> 854 Ressourcen enth\u00e4lt, befinden sich in <code>OVERRIDE.DAT<\/code> 817 davon. Die fehlenden 37 Dateien sind:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SX_4000.WAV\n...\nSX_4036.WAV<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">und das sind tats\u00e4chlich ausschlie\u00dflich lange Audiodateien. Zusammen ergeben sie rund 34 Minuten Audio und etwa 90 MB Daten.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Damit l\u00e4sst sich gut zeigen, was \u201eLarge Installation\u201c 1996 bedeutete: Fast s\u00e4mtliche Grafiken, Animationen und kurzen Sounds wandern auf die schnelle Festplatte &#8211; nur die gro\u00dfen Audio-Tracks bleiben aus Platzgr\u00fcnden auf der CD.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">GHOST0.BMP: Vier Geister in zwei Kilobyte<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Besonders interessant wurde die Datei <code>GHOST0.BMP<\/code>. Sie ist gerade einmal ca. 2 KB gro\u00df, enth\u00e4lt aber nicht ein, sondern vier verschiedene Sprite-Frames:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Frame 1: 56 \u00d7 38 Pixel\nFrame 2: 56 \u00d7 64 Pixel\nFrame 3: 64 \u00d7 62 Pixel\nFrame 4: 64 \u00d7 51 Pixel<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Jeder Frame besitzt einen kleinen Header mit Breite, H\u00f6he, einem Encoding-Byte sowie komprimierter und unkomprimierter Gr\u00f6\u00dfe.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Beim ersten Frame sieht das beispielsweise so aus:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>38 00          Breite: 56\n26 00          H\u00f6he:   38\n83             Encoding: 0x83\n61 01 00 00    komprimierter Block: 353 Bytes\n50 08 00 00    unkomprimiert: 2128 Bytes<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Und hier findet sich bereits ein entscheidender Hinweis:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>56 \u00d7 38 = 2128<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Nach der Dekompression existiert also genau ein Byte pro Pixel. Die Grafiken sind klassische palettenbasierte 8-Bit-Bilder.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Was bedeutet 0x83?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Genau diese Kennung war zun\u00e4chst das gro\u00dfe R\u00e4tsel. F\u00fcr das Encoding gibt es keinerlei Dokumentation, nur ein paar Hinweise im Internet von anderen Menschen, die bereits versucht haben, die Dynamix-eigene Kompression zu reverse engineeren. Aber durch Analyse der originalen <code>PINBALL2.EXE<\/code> lie\u00df sich schlie\u00dflich der entsprechende Codepfad finden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der Originalcode liest das Encoding-Byte und f\u00fchrt zun\u00e4chst sinngem\u00e4\u00df Folgendes aus:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>encoding = encoding &amp; 0x7F<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Aus <code>0x83<\/code> wird also <code>0x03<\/code>. Anschlie\u00dfend erfolgt ein Sprung zum Decoder f\u00fcr Kompressionstyp 3. Dieser lie\u00df sich aus dem x86-Code rekonstruieren.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Der Dynamix-Type-3-Codec<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Der Algorithmus ist eine kompakte Form von LZ-Kompression. Der Datenstrom enth\u00e4lt zun\u00e4chst die Anzahl der folgenden Tokens. Danach kommt ein Block aus Flag-Bits und anschlie\u00dfend die eigentlichen Tokendaten.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr jedes Token gibt es zwei M\u00f6glichkeiten:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Flag = 0\n\u2192 n\u00e4chstes Byte ist ein echter Pixelwert\n\nFlag = 1\n\u2192 kopiere bereits dekomprimierte Pixel erneut\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Eine R\u00fcckreferenz ben\u00f6tigt zwei Bytes beziehungsweise 16 Bit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Diese teilen sich sinngem\u00e4\u00df folgenderma\u00dfen auf:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>DDDDDDDD DDLLLLLL<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Die unteren sechs Bits kodieren die L\u00e4nge:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>length = value + 3<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Die oberen zehn Bits kodieren den Abstand:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>distance = value + 1<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Damit kann die Datei beispielsweise ausdr\u00fccken:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u201eNimm die Pixel von vor 56 Bytes\nund kopiere davon noch einmal 42 St\u00fcck.\u201c<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Gerade bei Sprites mit gro\u00dfen gleichf\u00f6rmigen oder leeren Bereichen spart das enorm viel Platz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der erste Ghost-Frame ben\u00f6tigt unkomprimiert 2.128 Bytes, sein komprimierter Datenstrom dagegen nur ungef\u00e4hr 350 Bytes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mit dieser Kompression sind alle Animationen, Overlays, Buttons und so weiter in der Datei <code>RESOURCE.001<\/code> gespeichert, eine nach dem anderen als fortlaufender Stream. Korrekt extrahiert kommt man so an alle Sprites und Grafiken des Spiels &#8211; und k\u00f6nnte so quasi ein Daumenkino aus diesen machen.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a967433193f2&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a967433193f2\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"513\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/image-5-1024x513.png\" alt=\"\" class=\"wp-image-9224\" srcset=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/image-5-1024x513.png 1024w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/image-5-767x384.png 767w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/image-5-300x150.png 300w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/image-5.png 1136w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Man kann quasi ein Daumenkino aus den extrahierten Dateien machen (mehr zum Extrahieren siehe unten)&#8230;<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Und wie funktioniert die Transparenz?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Hier wird es aus heutiger Sicht besonders charmant, weil man mit den Limitationen der damaligen Technik arbeiten musste. Moderne Grafik kennt Alpha-Kan\u00e4le. Ein Pixel kann beispielsweise zu 25, 50 oder 80 Prozent transparent sein und wird entsprechend mit dem Hintergrund verrechnet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Davon konnten die Entwickler von <em>Creep Night<\/em> nur tr\u00e4umen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nach der Dekompression besteht ein Sprite ausschlie\u00dflich aus 8-Bit-Palettenwerten. Beim ersten Frame von <code>GHOST0.BMP<\/code> gibt es beispielsweise 2.128 Pixel. Davon besitzen 1.425 Pixel den Wert 0.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das Bild enth\u00e4lt damit sehr gro\u00dfe Bereiche, die quasi so aussehen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>0 0 0 0 0 0 0\n0 0 0 X X 0 0\n0 0 X X X X 0\n0 X X X X X X\n0 0 X X X X 0\n0 0 0 X X 0 0<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Alles deutet darauf hin, dass Palette Index 0 als Color Key behandelt wird:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Pixel = 0\n\u2192 vorhandenen Hintergrund nicht \u00fcberschreiben\n\nPixel != 0\n\u2192 Sprite-Pixel zeichnen\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Das ist keine Alpha-Transparenz. Ein Pixel ist entweder vollst\u00e4ndig sichtbar oder \u00fcberhaupt nicht vorhanden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die Grafikdaten selbst sprechen sehr deutlich f\u00fcr dieses Verfahren. Die genaue Blit-Routine der Engine m\u00fcsste f\u00fcr einen endg\u00fcltigen Beweis allerdings noch vollst\u00e4ndig auf Instruktionsebene nachvollzogen werden. (Freiwillige vor!)<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a96743319bc1&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a96743319bc1\" class=\"aligncenter size-full is-resized wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"449\" height=\"107\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/image-6.png\" alt=\"\" class=\"wp-image-9227\" style=\"width:449px;height:auto\" srcset=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/image-6.png 449w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/image-6-300x71.png 300w\" sizes=\"auto, (max-width: 449px) 100vw, 449px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Sogar die Licht-Inserts auf dem Spielfeld (an\/aus) werden \u00fcber den eigentlichen statischen Hintergrund gelegt.<\/figcaption><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">GHOST0, GHOST1 und GHOST2<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Direkt hintereinander befinden sich drei interessante Ressourcen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GHOST0.BMP\nGHOST1.BMP\nGHOST2.BMP\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sie enthalten:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GHOST0:  4 Frames\nGHOST1:  9 Frames\nGHOST2: 12 Frames\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Insgesamt liegen dort also 25 einzelne Bilder verschiedener Geisteranimationen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Beim Export sieht man sehr sch\u00f6n, was hinter dem Namen \u201e3-D Ultra\u201c steckt: Die Figuren haben eindeutig den Look vorgerenderter 3D-Modelle \u2013 im Spiel selbst sind sie jedoch kleine 2D-Sprites mit palettierten Farben und Color-Key-Transparenz.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a9674331a2b8&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a9674331a2b8\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"235\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/ghost_animations_sheet-1024x235.png\" alt=\"\" class=\"wp-image-9202\" srcset=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/ghost_animations_sheet-1024x235.png 1024w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/ghost_animations_sheet-300x69.png 300w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/ghost_animations_sheet-766x176.png 766w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/ghost_animations_sheet-1536x353.png 1536w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/ghost_animations_sheet-2048x470-1.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Das ist kein Makel, sondern ein sch\u00f6nes Beispiel daf\u00fcr, wie geschickt Entwickler Mitte der 1990er-Jahre mit den verf\u00fcgbaren Ressourcen gearbeitet haben.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00dcbrigens handelt es sich bei dem Typ um den Geist, der um die T\u00fcrme des &#8222;The Castle&#8220;-Tischs schwebt. \ud83d\ude09 <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"284\" height=\"146\" src=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/ghosttower.gif\" alt=\"\" class=\"wp-image-9208\"\/><figcaption class=\"wp-element-caption\">Der kommt auch an anderer Stelle vor, daher die unbenutzten Animationsframes oben im Sheet.<\/figcaption><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">Der merkw\u00fcrdige \u201eWobbel\u201c \u2013 wie erzeugt die Engine r\u00e4umliche Tiefe?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Genau diese Frage war urspr\u00fcnglich der Ausl\u00f6ser f\u00fcr die ganze Untersuchung: An einigen Stellen f\u00e4llt auf modernen Displays ein merkw\u00fcrdiger grafischer Effekt auf. Wenn die Kugel hinter einem Objekt verschwindet, wirkt dessen Rand pl\u00f6tzlich leicht ver\u00e4ndert &#8211; fast so, als w\u00fcrde ein St\u00fcck des Hintergrundbildes nochmals dar\u00fcbergelegt, dabei aber nicht hundertprozentig deckungsgleich positioniert.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ein Vergleich zweier unmittelbar aufeinanderfolgender Screenshots macht den Effekt deutlich:<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;galleryId&quot;:&quot;6a9674331a685&quot;}\" data-wp-interactive=\"core\/gallery\" class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a9674331a9e1&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a9674331a9e1\" class=\"wp-block-image size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"200\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"9200\" src=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/1.png\" alt=\"\" class=\"wp-image-9200\"\/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Screenshot 1<\/figcaption><\/figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a9674331ad35&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a9674331ad35\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"200\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"9201\" src=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/2.png\" alt=\"\" class=\"wp-image-9201\"\/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Screenshot 2<\/figcaption><\/figure>\n<\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Screenshot 1:<\/strong> Die Kugel befindet sich nicht hinter dem Vordergrundobjekt. Passt so.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Screenshot 2:<\/strong> Die Kugel befindet sich dahinter. Gleichzeitig erscheint an dem dar\u00fcberliegenden Objekt ein sichtbarer Saum beziehungsweise eine leichte Ver\u00e4nderung der Pixel. Bei den Screenshots am besten sichtbar, wenn man zwischen den beiden hin und her wechselt, oder wenn man es im Spiel in Bewegung sieht. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Interessant ist dabei, dass sich zwischen beiden Bildern nicht nur die kleine Fl\u00e4che der Kugel ver\u00e4ndert. Die abweichenden Pixel erstrecken sich \u00fcber einen deutlich gr\u00f6\u00dferen, ann\u00e4hernd rechteckigen Bereich des Vordergrundobjekts.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das legt eine weitere Technik nahe, die bei einem rein zweidimensionalen Spiel sehr sinnvoll w\u00e4re: Occlusion Sprites beziehungsweise Vordergrund-Layer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die Engine k\u00f6nnte zun\u00e4chst Tisch und Kugel zeichnen und anschlie\u00dfend \u2013 sobald sich die Kugel \u201ehinter\u201c einem Bauteil befindet \u2013 einen vorbereiteten Ausschnitt dieses Bauteils nochmals dar\u00fcberzeichnen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Tischhintergrund\n      \u2193\nKugel zeichnen\n      \u2193\nLiegt Kugel hinter einem Objekt?\n      \u2193\nVordergrund-\/Occlusion-Sprite\nnoch einmal dar\u00fcberzeichnen\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Damit l\u00e4sst sich eine Kugel problemlos hinter Rampen, Rohren oder anderen Tischteilen verschwinden lassen, ohne dass hierf\u00fcr echte 3D-Geometrie oder ein Z-Buffer ben\u00f6tigt wird.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der sichtbare \u201eWobbel\u201c k\u00f6nnte dann durch die Vordergrundgrafik selbst entstehen. Bereits eine minimal andere Dithering-Struktur, eine abweichende Palette oder eine Positionierung um nur einen Pixel w\u00fcrde auf einem modernen LCD als feiner Rand auffallen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das gleiche gilt auch, wenn wir uns mal das Geister-GIF von oben genauer anschauen: Achtet mal auf die Steinstruktur des Turms. Sobald der Sprite des Geistes angezeigt wird, verschieben sich die Hintergrund-Pixel ein wenig. Es scheint also, dass der Palette Index 0 (= zeichne den Hintergrund hier nochmal) nicht ganz perfekt funktioniert:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"284\" height=\"146\" src=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/ghosttower.gif\" alt=\"\" class=\"wp-image-9208\"\/><figcaption class=\"wp-element-caption\">Der Effekt ist am deutlichsten, wenn das GIF endet und sich wiederholt &#8211; dann wird der Hintergrund quasi &#8222;zur\u00fcckgesetzt&#8220;.<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Auf einem CRT-Monitor der 1990er-Jahre wurden solche Unterschiede durch das analoge Signal, die Loch- beziehungsweise Streifenmaske und die allgemeine Charakteristik der Bildr\u00f6hre wesentlich st\u00e4rker optisch vermischt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ein modernes Display zeigt dagegen jeden einzelnen emulierten 640\u00d7480-Pixel gnadenlos exakt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fundgrube Resourcen-Datei<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ich liebe es ja, durch solche Dateien zu st\u00f6bern, von denen die Entwickler dachten, niemand Externes wird sie je sehen. Da findet man manchmal echt spannende \u00dcberbleibsel oder Eastereggs. (Gr\u00fc\u00dfe an <a href=\"https:\/\/tcrf.net\/The_Cutting_Room_Floor\">The Cutting Room Floor!<\/a>)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ein paar spannende Dinge sind mir noch aufgefallen:<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;galleryId&quot;:&quot;6a9674331b12c&quot;}\" data-wp-interactive=\"core\/gallery\" class=\"wp-block-gallery has-nested-images columns-3 is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a9674331b381&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a9674331b381\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"39\" height=\"45\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"9239\" src=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/tp_frame09.png\" alt=\"\" class=\"wp-image-9239\"\/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Das Sierra-Maskottchen ist inkl. aller Animationsframes vorhanden, wie im Intro zu sehen<\/figcaption><\/figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a9674331b698&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a9674331b698\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"648\" height=\"431\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"9237\" src=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/highscor_frame01.png\" alt=\"\" class=\"wp-image-9237\" srcset=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/highscor_frame01.png 648w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/highscor_frame01-300x200.png 300w\" sizes=\"auto, (max-width: 648px) 100vw, 648px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Bei Bedarf einfach selbst Highscores  auf dieses Bild eintragen \ud83d\ude09<\/figcaption><\/figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a9674331b985&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a9674331b985\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"370\" height=\"187\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"9236\" src=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/gameovr2.png\" alt=\"\" class=\"wp-image-9236\" srcset=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/gameovr2.png 370w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/gameovr2-300x152.png 300w\" sizes=\"auto, (max-width: 370px) 100vw, 370px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Der traurigste Bildschirm von allen \ud83d\ude41 Die Buttons sind eigene Sprites!<\/figcaption><\/figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a9674331bc53&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a9674331bc53\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"191\" height=\"54\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"9235\" src=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/dynlogo.png\" alt=\"\" class=\"wp-image-9235\"\/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Wer Zweifel hatte, dass Dynamix der Entwickler war: Das Logo befindet sich ebenfalls in der Ressourcendatei (und im Intro nat\u00fcrlich)<\/figcaption><\/figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a9674331bf14&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a9674331bf14\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"15\" height=\"13\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"9240\" src=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/wball.png\" alt=\"\" class=\"wp-image-9240\"\/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Der wichtigste Sprite von allen \ud83d\ude42<\/figcaption><\/figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a9674331c200&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a9674331c200\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"288\" height=\"430\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"9232\" src=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/detail_frame01.png\" alt=\"\" class=\"wp-image-9232\" srcset=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/detail_frame01.png 288w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/detail_frame01-201x300.png 201w\" sizes=\"auto, (max-width: 288px) 100vw, 288px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Die Einstellungen sind alle als Grafiken hinterlegt, die Kerzen (an\/aus) sind eigene Sprites.<\/figcaption><\/figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a9674331c517&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a9674331c517\" class=\"wp-block-image size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"465\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"9241\" src=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/Bildschirmfoto-2026-08-26-um-19.31.17.png\" alt=\"\" class=\"wp-image-9241\" srcset=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/Bildschirmfoto-2026-08-26-um-19.31.17.png 1000w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/Bildschirmfoto-2026-08-26-um-19.31.17-300x140.png 300w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/Bildschirmfoto-2026-08-26-um-19.31.17-768x357.png 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Irgendwo muss es ein Easteregg im Spiel geben, das die Goblins durch K\u00fche ersetzt. Hm!<\/figcaption><\/figure>\n<\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das mit den K\u00fchen muss ich mir irgendwann genauer anschauen. <a href=\"https:\/\/www.robertwinter.com\/pinball\/ss\/hidden.html\">K\u00fche sind eine merkw\u00fcrdige, aber beliebte Tradition f\u00fcr Eastereggs bei echten Flipperautomaten<\/a>, das w\u00e4re also eine sch\u00f6ne Anlehnung daran. Ich w\u00fcrde sowieso sagen, dass die Entwickler durchaus die &#8222;richtigen&#8220; Flipperautomaten kannten, denn im Hilfe-Men\u00fc gibt es ein extra Kapitel f\u00fcr Buchtipps rund um das Flippern, mit B\u00fcchern von z.B.  <a href=\"https:\/\/en.wikipedia.org\/wiki\/Roger_Sharpe_(pinball)\">Roger Sharpe<\/a> &#8211; eine sch\u00f6ne Referenz an das Hobby!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nun&#8230; schauen wir uns das doch mal an! \ud83d\ude0a <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Neue Cheats und Easter Eggs<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Soweit ich wei\u00df, sind die folgenden Infos bisher undokumentiert und neu. Ein bisschen stolz bin ich ja jetzt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn man die Highscore-Tabelle \u00f6ffnet, einfach &#8222;data&#8220; eingeben. Einfach ins Leere tippen und man h\u00f6rt eine Stimme &#8222;Excellent!&#8220; sagen. Das bedeutet, dass der Cheat- bzw. Debug-Modus ist nun aktiviert (die Variable <code>DYNAMIX<\/code> ist auf <code>1<\/code> gesetzt worden).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Und jetzt wird es spannend:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn man nun im Spiel &#8222;cows&#8220; eingibt, h\u00f6rt man eine Kuh muhen. Das best\u00e4tigt, dass der Flag <code>cow_mode<\/code> nun gesetzt ist. Wenn man das Shooter-Bonusspiel nun startet, werden alle Sprites durch K\u00fche ersetzt &#8211; manche laufen, manche rennen und eine Kuh f\u00e4hrt auf einem Quad durch&#8217;s Bild. Um dieses Bonusspiel zu starten, m\u00fcssen beim Tisch &#8222;The Castle&#8220; alle Modi gespielt worden sein und die Kugel dann erfolgreich ins Portal geschossen werden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ein weiterer hilfreicher Entwicklercode ist an der Stelle &#8222;fin&#8220;. Wenn man diesen w\u00e4hrend eines Spiels eingibt, werden alle Modi automatisch als erledigt markiert und man kann zum finalen Boss des Tisches \u00fcbergehen. Das scheint eine Abk\u00fcrzung f\u00fcr Tests der Entwickler zu sein (vermute ich mal?). Der Code funktioniert auch nur, wenn als Spielmodus &#8222;Alle Tische&#8220; gew\u00e4hlt wird. Wenn man das Spiel nur mit explizit einem Tisch startet, ist er wirkungslos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Es gibt au\u00dferdem noch einen Status <code>mcow<\/code> mit der dazu passenden Animation:<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a9674331cb5a&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a9674331cb5a\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"184\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/mcow_sheet-1024x184.png\" alt=\"\" class=\"wp-image-9272\" srcset=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/mcow_sheet-1024x184.png 1024w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/mcow_sheet-300x54.png 300w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/mcow_sheet-768x138.png 768w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/mcow_sheet.png 1524w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ich konnte bislang aber nicht herausfinden, wie man dieses Easteregg triggert. Klar ist nur anhand des Codes, dass die K\u00fche in allen drei Tischen die Goblins im jeweiligen Modus ersetzen w\u00fcrden: Anstatt die Golbins \u00fcber sieben verschiedene Positionen zu verfolgen und mittels Flipperkugel platt zu machen, w\u00fcrde die Kuh anscheinend auf der Position im Kreis laufen. Es scheint aber, als w\u00e4re der dazugeh\u00f6rige Trigger nie eingebaut worden. Schade.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Also habe ich einfach ein kleines Patch-Tool geschrieben, welche die Flag <code>cow_mode<\/code> einfach auf auf dieses Easter Egg anwendet. Einfach herunterladen, <code>PINBALL2.EXE<\/code> patchen und ausprobieren (bei den Highscores &#8222;DATA&#8220; eingeben und im Spiel &#8222;COWS&#8220; eingeben). Mehr Infos in der <code>README.MD<\/code>.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-fe48e5de wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"http:\/\/space.wegneronline.com\/files\/lejs6_creepnight-mcow-patcher-v0.1.1.zip\">Download MCOW Patch Tool (6KB, ZIP)<\/a><\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/wegneronline.com\/creepnight\/images\/mcow.gif\">Und so sieht das dann aus <\/a>&#8211; ziemlich cool, finde ich! \ud83d\ude0a <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Es gibt \u00fcbrigens noch ein undokumentiertes Extra: Die Boss-Taste &#8222;U&#8220;. Wenn auf der Tastatur im Spiel &#8222;U&#8220; gedr\u00fcckt wird, minimiert sich das Fenster und bekommt den Titel &#8222;New Text Document&#8220; in der Taskleiste. <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a9674331cf7e&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a9674331cf7e\" class=\"aligncenter size-full is-resized wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"642\" height=\"71\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/image-7.png\" alt=\"\" class=\"wp-image-9279\" style=\"width:642px;height:auto\" srcset=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/image-7.png 642w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/image-7-300x33.png 300w\" sizes=\"auto, (max-width: 642px) 100vw, 642px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Solche Boss-Tasten waren ziemlich popul\u00e4r in den 90ern, als man Spiele oft noch auf den Arbeitsrechnern zocken konnte. <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"406\" height=\"196\" src=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/credit.png\" alt=\"\" class=\"wp-image-9233\" srcset=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/credit.png 406w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/credit-300x145.png 300w\" sizes=\"auto, (max-width: 406px) 100vw, 406px\" \/><\/figure>\n<\/div>\n\n\n<h2 id=\"tool\" class=\"wp-block-heading\">Creep Night Resource Tool<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Aus der Untersuchung ist ein kleines Python-Tool entstanden, das die Ressourcen selbst\u00e4ndig lesen und die Dynamix-Bitmapdateien dekodieren kann.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Es kann unter anderem:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>RESOURCE.MAP<\/code> und <code>RESOURCE.001<\/code> einlesen<\/li>\n\n\n\n<li><code>OVERRIDE.DAT<\/code> \u00f6ffnen<\/li>\n\n\n\n<li>enthaltene Ressourcen auflisten<\/li>\n\n\n\n<li>Ressourcen extrahieren<\/li>\n\n\n\n<li>die internen <code>BMP:<\/code>-Container analysieren<\/li>\n\n\n\n<li>die <code>0x83<\/code>-\/Type-3-Kompression dekodieren<\/li>\n\n\n\n<li>die RIFF-Paletten des Spiels lesen<\/li>\n\n\n\n<li>Sprite-Frames als normale PNG-Dateien exportieren<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Das Tool besteht ausschlie\u00dflich aus Python-Code und enth\u00e4lt keine Originaldaten des Spiels. Und sicherheitshalber die Info: Teile des Tools wurden mit ChatGPT generiert.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-fe48e5de wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"http:\/\/space.wegneronline.com\/files\/7gi7b_creepnight-resource-tool-v1.0.0.zip\">Download Tools (31KB, ZIP DATEI)<\/a><\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Voraussetzungen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ben\u00f6tigt wird lediglich Python 3.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr die Analyse einer eigenen Installation ben\u00f6tigt man au\u00dferdem mindestens:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>RESOURCE.MAP\nRESOURCE.001<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Beide Dateien befinden sich auf der Original-CD im Spielverzeichnis (im Ordner <code>UPBALL2<\/code>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Am einfachsten legt man sie gemeinsam mit <code>creepnight_tool.py<\/code> in einen Ordner.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ressourcen auflisten<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Beispielsweise lassen sich alle Ghost-Ressourcen suchen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>python3 creepnight_tool.py list RESOURCE.MAP --pattern 'GHOST*.BMP'<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Rohdaten extrahieren<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Das gesamte Resource-Archiv kann folgenderma\u00dfen extrahiert werden:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>python3 creepnight_tool.py extract RESOURCE.MAP -o extracted<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Das Tool sucht automatisch nach <code>RESOURCE.001<\/code> im selben Verzeichnis wie <code>RESOURCE.MAP<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Liegt die Datei woanders, kann sie explizit angegeben werden:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>python3 creepnight_tool.py extract RESOURCE.MAP \\\n  --data \/pfad\/zu\/RESOURCE.001 \\\n  -o extracted\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Einzelne Sprite-Ressource als PNG dekodieren<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Die vier Frames aus <code>GHOST0.BMP<\/code> lassen sich beispielsweise so exportieren:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>python3 creepnight_tool.py decode RESOURCE.MAP GHOST0.BMP \\\n  --palette CASTLE.PAL \\\n  -o decoded<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dabei wird standardm\u00e4\u00dfig Palette Index 0 transparent dargestellt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Mehrere Ressourcen auf einmal dekodieren<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Alle drei Ghost-Dateien k\u00f6nnen gemeinsam exportiert werden:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>python3 creepnight_tool.py decode-all RESOURCE.MAP \\\n  --palette CASTLE.PAL \\\n  --pattern 'GHOST*.BMP' \\\n  -o ghosts<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr andere Spieltische k\u00f6nnen entsprechend deren Paletten verwendet werden, beispielsweise <code>TOWER.PAL<\/code> oder <code>DUNGEON.PAL<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn man einfach alle Dateien exportieren m\u00f6chte, kann man <code>--pattern<\/code> einfach weglassen. <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a9674331d73e&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a9674331d73e\" class=\"aligncenter size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"605\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/image-4-1024x605.png\" alt=\"\" class=\"wp-image-9223\" srcset=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/image-4-1024x605.png 1024w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/image-4-300x177.png 300w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/image-4-767x453.png 767w, https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/image-4.png 1158w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">So viele Explosionen&#8230;<\/figcaption><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\">Vollst\u00e4ndige Hintergr\u00fcnde exportieren<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Bei Hintergrundgrafiken m\u00f6chte man Palette Index 0 normalerweise nicht transparent darstellen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Daf\u00fcr gibt es:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>python3 creepnight_tool.py decode RESOURCE.MAP CASTLE.BMP \\\n  --palette CASTLE.PAL \\\n  --transparent-index none \\\n  -o backgrounds<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">OVERRIDE.DAT untersuchen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Auch die Datei der \u201eLarge\u201c-Installation kann direkt verarbeitet werden:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>python3 creepnight_tool.py list OVERRIDE.DAT<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">bzw.:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>python3 creepnight_tool.py extract OVERRIDE.DAT -o override-extracted<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Unter Windows kann abh\u00e4ngig von der Python-Installation statt <code>python3<\/code> einfach <code>python<\/code> verwendet werden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Preservation und Urheberrecht<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Das Tool selbst enth\u00e4lt keine Grafiken, Sounds, Programmdateien oder sonstigen Originaldaten des Spiels.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das ist bewusst so gehalten.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Auch wenn alte Spiele h\u00e4ufig als \u201eAbandonware\u201c bezeichnet werden, bedeutet dies nicht automatisch, dass ihre urheberrechtlich gesch\u00fctzten Daten frei verteilt werden d\u00fcrfen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Das Tool soll deshalb ausschlie\u00dflich erm\u00f6glichen, die Ressourcen eurer eigenen Installation zu untersuchen.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Mehr als nur Nostalgie<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Urspr\u00fcnglich wollte ich einfach ein altes Pinball-Spiel auf Windows 98 starten.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Am Ende f\u00fchrte das zu einer Analyse des Dynamix-Ressourcenformats, einer rekonstruierten Bildkompression und einem eigenen Decoder f\u00fcr Grafikdateien, deren Format heute praktisch nicht mehr dokumentiert ist.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"293\" src=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/hackerman.gif\" alt=\"\" class=\"wp-image-9256\"\/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">In <code>RESOURCE.001<\/code> befinden sich 275 <code>BMP:<\/code>-Ressourcen mit insgesamt 6.833 einzelnen Frames. Der rekonstruierte Decoder konnte alle Frames auf exakt die jeweils im Header angegebene unkomprimierte Gr\u00f6\u00dfe dekodieren.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So viel auch zum Thema Video Game Preservation:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Es reicht langfristig nicht unbedingt, nur eine CD oder ein ISO aufzubewahren. Wenn propriet\u00e4re Engines, Dateiformate und Werkzeuge verschwinden, gehen auch Informationen dar\u00fcber verloren, wie diese Spiele technisch aufgebaut waren. Ein Format zu dokumentieren und einen kleinen unabh\u00e4ngigen Decoder daf\u00fcr zu erhalten, ist deshalb ebenfalls eine Form der Bewahrung.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die originalen Medien zu konservieren ist wichtig, aber das Wissen \u00fcber propriet\u00e4re Dateiformate und Engines ist mindestens genauso wichtig. Was bringt es, einen Oldtimer zu konservieren und zu pflegen, wenn niemand wei\u00df, wie der Motor funktioniert?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Und nebenbei ist es ziemlich faszinierend zu entdecken, mit welchen Tricks ein Spiel von 1996 damals versucht hat, \u201e3-D Ultra\u201c zu wirken. Auch wenn es am Ende nur sehr viele kleine zweidimensionale Pixel waren.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u00dcbrigens:<\/strong> Es gibt auch noch andere Spiele aus der &#8222;3-D Ultra&#8220;-Reihe, u.a. auch:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>&#8222;3-D Ultra Pinball&#8220; (das Original, sozusagen)<\/li>\n\n\n\n<li>&#8222;3-D Ultra Pinball: Creep Night&#8220; (das hier war also Nr. 2)<\/li>\n\n\n\n<li>&#8222;3-D Ultra Pinball: Lost Continent&#8220; (der dritte Teil)<\/li>\n\n\n\n<li>&#8222;3-D Ultra Pinball: Thrillride&#8220; (der vierte und letzte Teil)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Bis auf &#8222;Thrillride&#8220; (auf Deutsch \u00fcbrigens &#8222;Achterwahn&#8220;, autsch&#8230;) nutzen die ersten drei Titel wohl die selbe Engine. Vielleicht kann man mit dem Tool auch die anderen <code>RESOURCE<\/code>-Dateien auseinanderbasteln? Hm&#8230;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"220\" height=\"124\" src=\"https:\/\/www.wegneronline.com\/blog\/wp-content\/uploads\/2026\/08\/wonder.gif\" alt=\"\" class=\"wp-image-9257\"\/><\/figure>\n<\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Ich habe alle diese Informationen und die Downloads, und noch ein bisschen mehr, auch noch auf eine eigene Infoseite ausgelagert (so wie ich das mit dem Spiel &#8222;Bad Day on The Midway&#8220; von den Residents auch gemacht habe).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Diese findest du hier: <br><a href=\"https:\/\/wegneronline.com\/creepnight\/\">https:\/\/wegneronline.com\/creepnight\/<\/a> <\/p>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>English version here! \/ Extractor Tool \/ Zur kompletten Infosite Manchmal beginnt eine technische Untersuchung v\u00f6llig ungeplant &#8211; und enden damit, dass man nicht nur eine Engine auseinanderbaut, sondern dabei auch unbekannte Eastereggs und Cheats entdeckt. In meinem Fall wollte ich eigentlich nur 3-D Ultra Pinball: Creep Night von Sierra aus dem Jahr 1996 auf &hellip; <a href=\"https:\/\/www.wegneronline.com\/blog\/2026\/08\/26\/3-d-ultra-spannend-digitale-archaeologie-in-3-d-ultra-pinball-creep-night\/\" class=\"more-link\"><span class=\"screen-reader-text\">3-D Ultra spannend: Digitale Arch\u00e4ologie in &#8222;3-D Ultra Pinball: Creep Night&#8220;<\/span> weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":9196,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,6],"tags":[],"class_list":["post-9194","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-2-flipperautomaten","category-5-informatik"],"_links":{"self":[{"href":"https:\/\/www.wegneronline.com\/blog\/wp-json\/wp\/v2\/posts\/9194","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wegneronline.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wegneronline.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wegneronline.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wegneronline.com\/blog\/wp-json\/wp\/v2\/comments?post=9194"}],"version-history":[{"count":24,"href":"https:\/\/www.wegneronline.com\/blog\/wp-json\/wp\/v2\/posts\/9194\/revisions"}],"predecessor-version":[{"id":9287,"href":"https:\/\/www.wegneronline.com\/blog\/wp-json\/wp\/v2\/posts\/9194\/revisions\/9287"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.wegneronline.com\/blog\/wp-json\/wp\/v2\/media\/9196"}],"wp:attachment":[{"href":"https:\/\/www.wegneronline.com\/blog\/wp-json\/wp\/v2\/media?parent=9194"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wegneronline.com\/blog\/wp-json\/wp\/v2\/categories?post=9194"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wegneronline.com\/blog\/wp-json\/wp\/v2\/tags?post=9194"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}