Open main menu

Difference between revisions of "ScummVM History"

100 bytes added ,  14:51, 19 September 2007
Added couple of subheadings
(typos; wikifying)
(Added couple of subheadings)
Line 1: Line 1:
== A brief history of ScummVM ==
== A brief history of ScummVM ==
''Here we would like to present the history of the ScummVM project. It is based on the [http://www.yaz0r.net/scummvm.php blog] of one of the original ScummVM authors Vincent Hamm aka Yaz0r''
''Here we would like to present the history of the ScummVM project. It is based on the [http://www.yaz0r.net/scummvm.php blog] of one of the original ScummVM authors Vincent Hamm aka Yaz0r''
=== Introduction ===


In the field of opensource game engines, ScummVM has come to build quite a reputation. So I guess some people would be interested into hearing the genesis and history of this project. I'll try to depict it from the experience I got while being part of the ScummVM team...
In the field of opensource game engines, ScummVM has come to build quite a reputation. So I guess some people would be interested into hearing the genesis and history of this project. I'll try to depict it from the experience I got while being part of the ScummVM team...


As you probably know if you're interested in that page, [[SCUMM]] is an engine that was long used at LEC ([[LucasArts]] Entertainment Company) to build adventure games (and later on used by [[Humongous Entertainment]]). It was initially written by [http://www.grumpygamer.com/ Ron Gilbert] while creating Maniac Mansion (from where the name derived). The last game to ever use [[SCUMM]] at LEC was [[The Curse of Monkey Island|Monkey Island 3]]. Sure, the engine has been heavily modified over the years, but the basis remained.
As you probably know if you're interested in that page, [[SCUMM]] is an engine that was long used at LEC ([[LucasArts]] Entertainment Company) to build adventure games (and later on used by [[Humongous Entertainment]]). It was initially written by [http://www.grumpygamer.com/ Ron Gilbert] while creating Maniac Mansion (from where the name derived). The last game to ever use [[SCUMM]] at LEC was [[The Curse of Monkey Island|Monkey Island 3]]. Sure, the engine has been heavily modified over the years, but the basis remained.
=== 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 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.
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 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 ===


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.
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.
Line 13: Line 19:


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]].
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]].
=== Yaz0r steps off ===


Time was running short. I now had projects on my own (LBA not to name it) and was losing interest in [[ScummVM]]. Yet, I gave a hand with the [[Zak McKracken and the Alien Mindbenders|Zak256]] and [[Indiana Jones and the Last Crusade|Indy256]] implementation. I remember fixing the sprite system, and a large bunch of logic in the script. I also tried to get the walkbox system running, but I never got it right (others fixed it after since). And then, I finally drifted away from [[ScummVM]], heading for new horizons...
Time was running short. I now had projects on my own (LBA not to name it) and was losing interest in [[ScummVM]]. Yet, I gave a hand with the [[Zak McKracken and the Alien Mindbenders|Zak256]] and [[Indiana Jones and the Last Crusade|Indy256]] implementation. I remember fixing the sprite system, and a large bunch of logic in the script. I also tried to get the walkbox system running, but I never got it right (others fixed it after since). And then, I finally drifted away from [[ScummVM]], heading for new horizons...