{"id":149,"date":"2026-08-18T18:03:00","date_gmt":"2026-08-18T18:03:00","guid":{"rendered":"https:\/\/blogs.scummvm.org\/ramyak\/?p=149"},"modified":"2026-08-18T18:03:00","modified_gmt":"2026-08-18T18:03:00","slug":"final-week","status":"publish","type":"post","link":"https:\/\/blogs.scummvm.org\/ramyak\/2026\/08\/18\/final-week\/","title":{"rendered":"Final Week"},"content":{"rendered":"<p>This week was mostly about one thing: finishing the remaining Gus game bugs.<\/p>\n<h5>Gus Paint<\/h5>\n<p>One of the bugs was in the <code>inside()<\/code> Lingo function, which was causing the Paint and Play buttons in Gus Paint to crash. I found the fix, but it was slightly wrong in its assumptions. I figured that out a couple of days later when I looked at it again and made the required change.<\/p>\n<p>The game passes a proper <code>POINT<\/code> and the <code>rect<\/code> of <code>cBackground<\/code>, but <code>cBackground<\/code> is temporarily <code>VOID<\/code> during the first few frames. This meant <code>inside()<\/code> received <code>(POINT, VOID)<\/code> and fell through without returning a value, causing a fatal error.<\/p>\n<p>Fixed it to return <code>FALSE<\/code> for invalid arguments instead of crashing. Sev also suggested using the existing <code>TYPECHECK<\/code> macros for handling the different argument types.<\/p>\n<p>There were some other smaller bugs I worked on, like a textbox getting disproportionally larger incrementally with text input. funniest bug so far. fixed it. This one along with some more bugs, will be listed in the PR.<\/p>\n<p>I spent a lot of time simply going through the games and reproducing things that looked wrong.<\/p>\n<p>Over the last few weeks I have gradually gotten better at narrowing those problems down. Instead of immediately assuming that the game itself is doing something unusual, I can now usually trace the failing Lingo call into the engine and figure out what assumption ScummVM is making that the original Director did not.<\/p>\n<h5>Looking back<\/h5>\n<p>This week was mostly about cleanup: playing through games, finding the remaining failures, tracing them into the engine, and getting them into a state where they can be fixed properly.<\/p>\n<p>And with that, GSoC is coming to an end.<\/p>\n<p>Over the last 12 weeks I have worked on a fairly wide range of things in the Director engine: the ImGui visual debugger, movie cast members, film loops, Lingo debugging and profiling, ImageDiff and buildbot integration (-_-), game detection, and a lot of small engine and game compatibility fixes.<\/p>\n<p>It has been a pretty different experience from working on a normal project. A lot of the time I was dealing with code and file formats that are decades old, trying to figure out not just what the original game is doing, but what Director itself must have been doing underneath it.<\/p>\n<p>I&#8217;ll soon be posting a separate write-up covering the work I did over the full 12 weeks.<\/p>\n<p>Because they need some testing, I&#8221;ll push the PR for the bugs soon. (Updating soon)<\/p>\n<p>that&#8217;s it for week 12 : )<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This week was mostly about one thing: finishing the remaining Gus game bugs. Gus Paint One of the bugs was in the inside() Lingo function, which was causing the Paint and Play buttons in Gus Paint to crash. I found the fix, but it was slightly wrong in its assumptions. I figured that out a [&hellip;]<\/p>\n","protected":false},"author":32,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15],"tags":[],"class_list":["post-149","post","type-post","status-publish","format-standard","hentry","category-week-12"],"_links":{"self":[{"href":"https:\/\/blogs.scummvm.org\/ramyak\/wp-json\/wp\/v2\/posts\/149","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.scummvm.org\/ramyak\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.scummvm.org\/ramyak\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.scummvm.org\/ramyak\/wp-json\/wp\/v2\/users\/32"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.scummvm.org\/ramyak\/wp-json\/wp\/v2\/comments?post=149"}],"version-history":[{"count":7,"href":"https:\/\/blogs.scummvm.org\/ramyak\/wp-json\/wp\/v2\/posts\/149\/revisions"}],"predecessor-version":[{"id":156,"href":"https:\/\/blogs.scummvm.org\/ramyak\/wp-json\/wp\/v2\/posts\/149\/revisions\/156"}],"wp:attachment":[{"href":"https:\/\/blogs.scummvm.org\/ramyak\/wp-json\/wp\/v2\/media?parent=149"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.scummvm.org\/ramyak\/wp-json\/wp\/v2\/categories?post=149"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.scummvm.org\/ramyak\/wp-json\/wp\/v2\/tags?post=149"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}