Jump to navigation Jump to search
69 bytes added ,  14:59, 19 September 2007
More subheadings
=== Beginning ===
I have always been interested into understanding how games work, and got especially interested into the [[SCUMM]] game engine at one point. It was possible to browse the resources using some fan-made tools, be nobody had wrote a full interpreter for those games. During holidays, in 2001, I had much time on my hand, so I decided to get going and try to write a [[SCUMM]] interpreter. The first step was understanding the scripts. I took a few days looking at the scripts found in [[Maniac Mansion|MM]] and [[Zak McKracken and the Alien Mindbenders|ZAK]] (I assumed it was the same engine) and understood a large bunch of opcodes. Then I got into coding a tinny tiny interpreter, making use of documentations found on the web to unpack the background graphics. This interpreter got as far as playing [[Maniac Mansion|MM]] character selection screen and [[Zak McKracken and the Alien Mindbenders|ZAK]] intro, but without any sprite/animations. I started working on this issue, and I got into interested by a document describing the sprite format used in [[Monkey Island 2: LeChuck's Revenge|MI2]]. Using this file with a little guessing, I managed to view the sprites used in [[Maniac Mansion|MM]] and [[Zak McKracken and the Alien Mindbenders|ZAK]]. For some reasons, I decided to mail the documentation author, telling him about my project and (if I remember well) asking for a few clarification (I think it was about the "layer" system). The author (Ludde) answered me quickly and told me that he was also working on a similar project. While my idea was to start with the earliest [[SCUMM]] version and had features as they were chronologically added to the original engine, Ludde was focused on [[Monkey Island 2: LeChuck's Revenge|MI2]]. I quickly realized that he was way ahead of me, as the first screenshots he showed me was a more or less working [[Monkey Island 2: LeChuck's Revenge|MI2]] (the actual screenshots were from woodstick). I didn't had to think much before dropping my own project and joining Ludde's.
=== More people get involved Joining efforts ===
At the time, a few friends of Ludde were already helping him as beta testers, and I started as one myself. Only [[Monkey Island 2: LeChuck's Revenge|MI2]] was supported, but with minor changes, [[The Secret of Monkey Island|MI1CD]] was also "playable". It wasn't possible to go much far in the game because of missing features. For example, there were probleme with MI2 island map when you tried to access another location (the game does an evil savegame trick at that point). After not so long time of beta testing (who got me to better understand the engine) I started getting interested into adding support for [[Indiana Jones and the Fate of Atlantis|Indy4]]. [[Monkey Island 2: LeChuck's Revenge|MI2]] and [[Indiana Jones and the Fate of Atlantis|Indy4]] are the two closest engine revisions in the history of [[SCUMM]] games (and Aric Wilmulder, the scummLord confirmed later on). The problem was that [[Indiana Jones and the Fate of Atlantis|Indy4]] was making use of a few features not that much used in [[Monkey Island 2: LeChuck's Revenge|MI2]], and as a matter of fact, no fully implemented in [[ScummVM]] (I'm not sure that name already existed at that point). One of those features was the virtual screen setup who was somehow different (virtual screen separate the screen into parts like the graphic part, the command line, the inventory/verb part). I started to get those issues fixed, but my modification weren't straight integrated into the main [[ScummVM]] code (this is about the time we started using a cvs to store the code). Ludde was reviewing most of my code changes before implementing them in the repository. So, there was two branches of the source, Ludde's official source tree that was the one being released, and my own development tree. This division in the sources stayed a long way, as we didn't wanted to get "in the way" of each other while working, and as a result, I was always working on things a bit more experimental than Ludde. After playing for a while with [[Indiana Jones and the Fate of Atlantis|Indy4]] support, it was getting really playable and was inserted in the official source tree.
=== Changing Reverse Engineering approach ===
As stated earlier, Ludde was really ahead of me. Indeed, we had a different approach of the problem. I was implementing things by guessing and understanding how the engine was supposed to be working, and Ludde was working from disassembly. This was a great difference in term of speed and accuracy. I knew it would be better for me to change my method in favor of Ludde's, and it ever clearer to me when I loose a large number of hours of work because of a misunderstanding. [[Indiana Jones and the Fate of Atlantis|Indy4]] was getting more and more playable, (but not yet completable) and I started to be interested into adding v6 games support, especialy [[Day of the Tentacle|DOTT]]. The thing was, the script engine had had a major facelift between v5 ([[The Secret of Monkey Island|MI1CD]], [[Monkey Island 2: LeChuck's Revenge|MI2]] & [[Indiana Jones and the Fate of Atlantis|Indy4]]) and v6, so I started getting to understand that new script engine. I spent a large number of hours looking at the compiled scripts and getting to understand how they were supposed to work. When I got back to [[ScummVM]] with my newly found insight of the [[SCUMM]] v6 scripting system, I was faced with an already working [[Day of the Tentacle|DOTT]] in [[ScummVM]]. At that point, I decided to get to get into disassembly, and always make it clear to what I was working on. Even if [[Day of the Tentacle|DOTT]] was running, it was still buggy. I remember fixing core bugs like misplaced staff text, crash on non-American version (the original American version use sprites for verbs, but foreign versions used plain text) and a few other miscellaneous things. [[Sam & Max Hit the Road|Sam & Max]] was added to the engine not that far off, but suffered from lots of bugs. I don't keep a precise memory of that time, but I remember playtesting [[Sam & Max Hit the Road|Sam & Max]] while fixing stuff here and there. The sound system in [[Sam & Max Hit the Road|Sam & Max]] and a large bunch of logic script bits were very different and had to be fixed. This is also the time that Ludde (whose aim was originally [[Monkey Island 2: LeChuck's Revenge|MI2]]/[[Day of the Tentacle|DOTT]]) started to lose interest in the project.
=== Latter games get added ===
To get hold of the disassembly way of doing things I needed a challenge. So I started working on [[The Dig]]. [[The Dig]] was my aim when I started getting involved into [[SCUMM]] reimplementation. Getting [[The Dig]] to actually start was long and painful, as I was struggling to learn disassembly while discovering some aspects of [[ScummVM]] I had never come close to, not to mention that there is a very large gap between [[SCUMM]] v6 ([[Day of the Tentacle|DOTT]]) and v7 ([[The Dig]]). After a while, I got [[The Dig]] to actually boot and go in-game. Yet, I got stuck with the AKOS system to draw sprites, and Ludde came to my rescue on that point (I think that's one of the last thing Ludde did on [[ScummVM]]). Time passed by, and I added features to [[ScummVM]] to make [[The Dig]] play further. As [[The Dig]] and [[Full Throttle]] share a very common engine, it was really easy to have FT booting. While I was getting sick of debugging [[The Dig]], I was moving into fixing bugs in [[Full Throttle|FT]] and coming back to [[The Dig]] (and those [[Full Throttle|FT]] fixes sometimes helped [[The Dig]]). My evenings and nights were starting to turn into endless debugging sessions. As an example, I can remember spending a more or less complete night tracing [[Full Throttle|FT]] scripts to understand why the verb interface wasn't working as it was supposed to be. To take a break off the [[The Dig|Dig]]/[[Full Throttle|FT]] duo, I started working on [[Loom|LoomCD]], while others were working on the cutscene video and music system of [[The Dig]]/[[Full Throttle|FT]]. [[Loom|LoomCD]] was challenging, but I can say I got it to work almost completely by myself (minus the masks and the sound system). In that period, I got back to other games to fix things, like fixing the special save system in [[Day of the Tentacle|DOTT]]/[[Indiana Jones and the Fate of Atlantis|Indy4]], and implementing the flash light/transparency in [[Sam & Max Hit the Road|Sam & Max]].

Navigation menu