{"id":161,"date":"2020-05-20T12:00:39","date_gmt":"2020-05-20T12:00:39","guid":{"rendered":"https:\/\/blogs.scummvm.org\/djsrv\/?p=161"},"modified":"2022-05-24T00:11:07","modified_gmt":"2022-05-24T00:11:07","slug":"a-week-of-preparation","status":"publish","type":"post","link":"https:\/\/blogs.scummvm.org\/djsrv\/2020\/05\/20\/a-week-of-preparation\/","title":{"rendered":"A Week of Preparation"},"content":{"rendered":"<section class=\"body\">School\u2019s out, Summer of Code prep has begun! This past week:<\/p>\n<ul>\n<li>I\u2019ve been reading and re-reading the code for ScummVM\u2019s <a href=\"https:\/\/github.com\/scummvm\/scummvm\/tree\/master\/engines\/director\/lingo\">Lingo subsystem<\/a> to improve my mental map of it, and I\u2019ve been making <a href=\"https:\/\/github.com\/scummvm\/scummvm\/commits?author=djsrv\">small fixes<\/a> when I catch problems.<\/li>\n<li>I collected some of the <a href=\"https:\/\/wiki.scummvm.org\/index.php\/Director#File_Format\">documentation<\/a> I encountered in my past adventures with Director. A ton of interesting information on Director\u2019s file format in there!<\/li>\n<li>I set up a shelf next to my desk and turned it into my obsolete Macromedia products library (mostly Director books, of course).<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-178\" src=\"https:\/\/blogs.scummvm.org\/djsrv\/wp-content\/uploads\/sites\/4\/2020\/05\/macromedia-library.jpg\" alt=\"\" width=\"656\" height=\"492\" srcset=\"https:\/\/blogs.scummvm.org\/djsrv\/wp-content\/uploads\/sites\/4\/2020\/05\/macromedia-library.jpg 656w, https:\/\/blogs.scummvm.org\/djsrv\/wp-content\/uploads\/sites\/4\/2020\/05\/macromedia-library-300x225.jpg 300w, https:\/\/blogs.scummvm.org\/djsrv\/wp-content\/uploads\/sites\/4\/2020\/05\/macromedia-library-480x360.jpg 480w\" sizes=\"auto, (max-width: 656px) 100vw, 656px\" \/><\/li>\n<li>I\u2019ve been reading up on Lingo\u2019s factories and parent scripts, two different object systems and the eventual basis for Director\u2019s XObjects and Xtras.<\/li>\n<li>I did some <a href=\"https:\/\/docs.google.com\/document\/d\/1bsq80TFdz38Ib2W0O8YfAazNe2SrPEgWIKheb5GV1KI\/edit\">planning<\/a> for the implementation of these object systems.<\/li>\n<\/ul>\n<p>Tomorrow sev and I are going to meet with <a href=\"https:\/\/en.wikipedia.org\/wiki\/John_Thompson_(inventor)\">John Henry Thomspon<\/a>, the inventor of Lingo, to discuss the implementation of factories! I grew up playing Shockwave (for Director) games, and I\u2019ve spent a good deal of time hacking with their Lingo bytecode, so I\u2019m looking forward to meeting the man himself.<\/p>\n<p>I should probably elaborate on my history with Director. I\u2019m currently 19, so I only caught the tail end of Shockwave gaming, and I mostly played Flash games. I got interested in how web games worked in 2013-2014, and there were some fantastic, user-friendly tools for peering into the inner workings of Flash <code>.swf<\/code> files, such as <a href=\"https:\/\/github.com\/jindrapetrik\/jpexs-decompiler\">JPEXS Free Flash Decompiler (FFDEC)<\/a>. However, every so often I\u2019d encounter a Director <code>.dcr<\/code> file, and there were no good tools for these. I wasn\u2019t capable enough to do the necessary reverse engineering myself, so for the next few years, I gave up on Director.<\/p>\n<p>In 2017, I came across a <a href=\"https:\/\/www.youtube.com\/watch?v=kNQ2XwRcbmM\">YouTube video<\/a> about a lost Director game that some people were interested in finding, \u201cJimmy Neutron: Gotta Blast! Rocket Race\u201d. I decided to look for the game, and I found a subdomain of nick.com that mirrored the website as it was sometime in the mid 2000s. Within a couple minutes, I found the landing page for the game on that subdomain. However, the page required you to log in with a Nick ID to get to the game, and the signup page no longer worked. I thought I\u2019d hit a dead end, but then I remembered I\u2019d already signed up for a Nick ID about 10 years before, in my early days on the web. I began guessing combinations of old usernames and passwords until I got to the game, I posted it on the 3D Groove Grove Discord server, and now my crowning achievement is having my Discord alias \u2018kaj\u2019 listed as the game\u2019s discoverer on its <a href=\"https:\/\/lostmediawiki.com\/Jimmy_Neutron:_Gotta_Blast!_Rocket_Race_(partially_found_online_game;_2002)\">Lost Media Wiki article<\/a>.<\/p>\n<p>Soon after I posted the game files, the 3D Groove Grove users discovered that the game was incomplete, missing most of the levels that were advertised in commercials. I wanted to poke around the game to see what was up, but at that point the tools for working with Director files were still extremely limited. With some searching, I found a primitive Lingo disassembler called <a href=\"https:\/\/github.com\/Brian151\/OpenShockwave\/tree\/master\/tools\/lscrtoscript\">ProjectorRays<\/a> that tomysshadow, the admin of the 3D Groove Grove server, had been working on. I asked him about it, and he invited me to the OpenShockwave Discord server, where people were reverse engineering Director with eventual plans to build an open-source replacement for the Shockwave player. I picked up work on ProjectorRays, and I took it from a half-working Lingo disassembler to a mostly-working decompiler. Soon OpenShockwave became the Earthquake Project, and progress on Lingo decompilation continued with <a href=\"https:\/\/github.com\/Earthquake-Project\/Shockky\/\">Shockky<\/a>, but everything else stalled.<\/p>\n<p>Three years later, I still wanted to work on an open-source Director reimplementation, so here I am now at ScummVM. \ud83d\ude42<\/p>\n<\/section>\n","protected":false},"excerpt":{"rendered":"<p>School\u2019s out, Summer of Code prep has begun! This past week: I\u2019ve been reading and re-reading the code for ScummVM\u2019s Lingo subsystem to improve my mental map of it, and I\u2019ve been making small fixes when I catch problems. I collected some of the documentation I encountered in my past adventures with Director. A ton [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-161","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blogs.scummvm.org\/djsrv\/wp-json\/wp\/v2\/posts\/161","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.scummvm.org\/djsrv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.scummvm.org\/djsrv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.scummvm.org\/djsrv\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.scummvm.org\/djsrv\/wp-json\/wp\/v2\/comments?post=161"}],"version-history":[{"count":3,"href":"https:\/\/blogs.scummvm.org\/djsrv\/wp-json\/wp\/v2\/posts\/161\/revisions"}],"predecessor-version":[{"id":180,"href":"https:\/\/blogs.scummvm.org\/djsrv\/wp-json\/wp\/v2\/posts\/161\/revisions\/180"}],"wp:attachment":[{"href":"https:\/\/blogs.scummvm.org\/djsrv\/wp-json\/wp\/v2\/media?parent=161"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.scummvm.org\/djsrv\/wp-json\/wp\/v2\/categories?post=161"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.scummvm.org\/djsrv\/wp-json\/wp\/v2\/tags?post=161"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}