{"id":339,"date":"2026-07-28T17:49:09","date_gmt":"2026-07-28T17:49:09","guid":{"rendered":"https:\/\/blogs.scummvm.org\/mohit\/?p=339"},"modified":"2026-07-28T17:49:09","modified_gmt":"2026-07-28T17:49:09","slug":"into-the-light","status":"publish","type":"post","link":"https:\/\/blogs.scummvm.org\/mohit\/2026\/07\/28\/into-the-light\/","title":{"rendered":"Into the Light"},"content":{"rendered":"<p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\">Welcome back! This is week 9 of my GSoC project, and we&#8217;re very close to full DOS support for the Dungeon Master engine. Sound is working, graphics are mostly in place \u2014 the last remaining issue is corrupted wall graphics, which I&#8217;ve been digging into this week.<\/p>\n<p dir=\"ltr\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-345\" src=\"https:\/\/blogs.scummvm.org\/mohit\/wp-content\/uploads\/sites\/82\/2026\/07\/scummvm-dm-00002-1024x557.png\" alt=\"\" width=\"580\" height=\"315\" srcset=\"https:\/\/blogs.scummvm.org\/mohit\/wp-content\/uploads\/sites\/82\/2026\/07\/scummvm-dm-00002-1024x557.png 1024w, https:\/\/blogs.scummvm.org\/mohit\/wp-content\/uploads\/sites\/82\/2026\/07\/scummvm-dm-00002-300x163.png 300w, https:\/\/blogs.scummvm.org\/mohit\/wp-content\/uploads\/sites\/82\/2026\/07\/scummvm-dm-00002-768x418.png 768w, https:\/\/blogs.scummvm.org\/mohit\/wp-content\/uploads\/sites\/82\/2026\/07\/scummvm-dm-00002-1536x835.png 1536w, https:\/\/blogs.scummvm.org\/mohit\/wp-content\/uploads\/sites\/82\/2026\/07\/scummvm-dm-00002-1200x653.png 1200w, https:\/\/blogs.scummvm.org\/mohit\/wp-content\/uploads\/sites\/82\/2026\/07\/scummvm-dm-00002.png 1920w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/> <img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-346\" src=\"https:\/\/blogs.scummvm.org\/mohit\/wp-content\/uploads\/sites\/82\/2026\/07\/scummvm-dm-00003-1024x557.png\" alt=\"\" width=\"580\" height=\"315\" srcset=\"https:\/\/blogs.scummvm.org\/mohit\/wp-content\/uploads\/sites\/82\/2026\/07\/scummvm-dm-00003-1024x557.png 1024w, https:\/\/blogs.scummvm.org\/mohit\/wp-content\/uploads\/sites\/82\/2026\/07\/scummvm-dm-00003-300x163.png 300w, https:\/\/blogs.scummvm.org\/mohit\/wp-content\/uploads\/sites\/82\/2026\/07\/scummvm-dm-00003-768x418.png 768w, https:\/\/blogs.scummvm.org\/mohit\/wp-content\/uploads\/sites\/82\/2026\/07\/scummvm-dm-00003-1536x835.png 1536w, https:\/\/blogs.scummvm.org\/mohit\/wp-content\/uploads\/sites\/82\/2026\/07\/scummvm-dm-00003-1200x653.png 1200w, https:\/\/blogs.scummvm.org\/mohit\/wp-content\/uploads\/sites\/82\/2026\/07\/scummvm-dm-00003.png 1920w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/p>\n<p dir=\"ltr\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-343\" src=\"https:\/\/blogs.scummvm.org\/mohit\/wp-content\/uploads\/sites\/82\/2026\/07\/scummvm-dm-00000-1-1024x557.png\" alt=\"\" width=\"580\" height=\"315\" srcset=\"https:\/\/blogs.scummvm.org\/mohit\/wp-content\/uploads\/sites\/82\/2026\/07\/scummvm-dm-00000-1-1024x557.png 1024w, https:\/\/blogs.scummvm.org\/mohit\/wp-content\/uploads\/sites\/82\/2026\/07\/scummvm-dm-00000-1-300x163.png 300w, https:\/\/blogs.scummvm.org\/mohit\/wp-content\/uploads\/sites\/82\/2026\/07\/scummvm-dm-00000-1-768x418.png 768w, https:\/\/blogs.scummvm.org\/mohit\/wp-content\/uploads\/sites\/82\/2026\/07\/scummvm-dm-00000-1-1536x835.png 1536w, https:\/\/blogs.scummvm.org\/mohit\/wp-content\/uploads\/sites\/82\/2026\/07\/scummvm-dm-00000-1-1200x653.png 1200w, https:\/\/blogs.scummvm.org\/mohit\/wp-content\/uploads\/sites\/82\/2026\/07\/scummvm-dm-00000-1.png 1920w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/p>\n<p dir=\"ltr\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-344\" src=\"https:\/\/blogs.scummvm.org\/mohit\/wp-content\/uploads\/sites\/82\/2026\/07\/scummvm-dm-00001-1-1024x557.png\" alt=\"\" width=\"580\" height=\"315\" srcset=\"https:\/\/blogs.scummvm.org\/mohit\/wp-content\/uploads\/sites\/82\/2026\/07\/scummvm-dm-00001-1-1024x557.png 1024w, https:\/\/blogs.scummvm.org\/mohit\/wp-content\/uploads\/sites\/82\/2026\/07\/scummvm-dm-00001-1-300x163.png 300w, https:\/\/blogs.scummvm.org\/mohit\/wp-content\/uploads\/sites\/82\/2026\/07\/scummvm-dm-00001-1-768x418.png 768w, https:\/\/blogs.scummvm.org\/mohit\/wp-content\/uploads\/sites\/82\/2026\/07\/scummvm-dm-00001-1-1536x835.png 1536w, https:\/\/blogs.scummvm.org\/mohit\/wp-content\/uploads\/sites\/82\/2026\/07\/scummvm-dm-00001-1-1200x653.png 1200w, https:\/\/blogs.scummvm.org\/mohit\/wp-content\/uploads\/sites\/82\/2026\/07\/scummvm-dm-00001-1.png 1920w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/p>\n<h4 class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\"><span style=\"color: #993300\"><strong>The Wall Atlas Problem<\/strong><\/span><\/h4>\n<p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\">In the original Amiga version, the Left, Center, and Right walls for a given depth were stitched together into one wide &#8220;atlas&#8221; image \u2014 for example, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">D3LCR<\/code> combined all three walls for Depth 3. When drawing, the engine would use an X-offset (<code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">srcX<\/code>) to pick the right piece:<\/p>\n<ul class=\"[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3 print:block print:space-y-1\" dir=\"ltr\">\n<li class=\"font-claude-response-body whitespace-normal break-words pl-2\">Left Wall (<code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">D3L<\/code>)<strong>:<\/strong> <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">srcX = 0<\/code><\/li>\n<li class=\"font-claude-response-body whitespace-normal break-words pl-2\">Center Wall (<code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">D3C<\/code>): <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">srcX = 61<\/code><\/li>\n<li class=\"font-claude-response-body whitespace-normal break-words pl-2\">Right Wall (<code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">D3R<\/code>): offset further right<\/li>\n<\/ul>\n<p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\">When the game was ported to DOS, this atlas approach was abandoned. The Left and Right walls became their own standalone, tightly cropped images, and the <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">D3LCR<\/code> file was repurposed to contain only the Center wall.<\/p>\n<p dir=\"ltr\">This is where things get tricky. The engine&#8217;s wall-drawing logic was built around the Amiga&#8217;s atlas assumptions \u2014 offsets, widths, and memory layouts all baked in for that single-image approach. I&#8217;m currently working through exactly how to handle this, and hopefully in 1-2 days the dungeon walls will finally look the way they should.<\/p>\n<p dir=\"ltr\">I&#8217;ll try to add another detailed blog covering all the code changes by the end of this week. That&#8217;s it for this week \u2014 see you in the next one! \ud83d\udc4b<\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\">\n","protected":false},"excerpt":{"rendered":"<p>Welcome back! This is week 9 of my GSoC project, and we&#8217;re very close to full DOS support for the Dungeon Master engine. Sound is working, graphics are mostly in place \u2014 the last remaining issue is corrupted wall graphics, which I&#8217;ve been digging into this week. The Wall Atlas Problem In the original Amiga [&hellip;]<\/p>\n","protected":false},"author":30,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[],"class_list":["post-339","post","type-post","status-publish","format-standard","hentry","category-week-9"],"_links":{"self":[{"href":"https:\/\/blogs.scummvm.org\/mohit\/wp-json\/wp\/v2\/posts\/339","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.scummvm.org\/mohit\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.scummvm.org\/mohit\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.scummvm.org\/mohit\/wp-json\/wp\/v2\/users\/30"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.scummvm.org\/mohit\/wp-json\/wp\/v2\/comments?post=339"}],"version-history":[{"count":6,"href":"https:\/\/blogs.scummvm.org\/mohit\/wp-json\/wp\/v2\/posts\/339\/revisions"}],"predecessor-version":[{"id":349,"href":"https:\/\/blogs.scummvm.org\/mohit\/wp-json\/wp\/v2\/posts\/339\/revisions\/349"}],"wp:attachment":[{"href":"https:\/\/blogs.scummvm.org\/mohit\/wp-json\/wp\/v2\/media?parent=339"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.scummvm.org\/mohit\/wp-json\/wp\/v2\/categories?post=339"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.scummvm.org\/mohit\/wp-json\/wp\/v2\/tags?post=339"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}