Open main menu

Difference between revisions of "ScummVM History"

No change in size ,  02:06, 29 October 2005
m
no edit summary
m (Ludde -> ludde)
m
Line 8: Line 8:
I have always been interested into understanding how games work, and got especialy 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 holydays, 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 MM and ZAK (I assumed it was the same engine) and understood a large bunch of opcode. 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 MM character selection screen and 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 MI2. Using this file with a little guessing, I managed to view the sprites used in MM and 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 chronogicaly added to the original engine, Ludde was focused on MI2. I quickly realized that he was way ahead of me, as the first screenshots he showed me was a more or less working MI2 (the actual screenshots were from woodstick). I didn't had to think much before droping my own project and joining Ludde's.
I have always been interested into understanding how games work, and got especialy 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 holydays, 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 MM and ZAK (I assumed it was the same engine) and understood a large bunch of opcode. 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 MM character selection screen and 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 MI2. Using this file with a little guessing, I managed to view the sprites used in MM and 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 chronogicaly added to the original engine, Ludde was focused on MI2. I quickly realized that he was way ahead of me, as the first screenshots he showed me was a more or less working MI2 (the actual screenshots were from woodstick). I didn't had to think much before droping my own project and joining Ludde's.


At the time, a few friends of ludde were already helping him as beta testers, and I started as one myself. Only MI2 was supported, but with minor changes, MI1CD was also "playable". It wasn't possible to go much far in the game because of missing features. For exemple, 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 beeing interested into adding support for Indy4. MI2 and Indy4 are the 2 most closest engines revision in the history of scumm games (and Aric Wilmulder, the scummLord confirmed later on). The problem was that Indy4 was making use of a few features not that much used in 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 intergrated 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 beeing 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 Indy4 support, it was getting really playable and was insterted 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 MI2 was supported, but with minor changes, MI1CD was also "playable". It wasn't possible to go much far in the game because of missing features. For exemple, 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 beeing interested into adding support for Indy4. MI2 and Indy4 are the 2 most closest engines revision in the history of scumm games (and Aric Wilmulder, the scummLord confirmed later on). The problem was that Indy4 was making use of a few features not that much used in 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 intergrated 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 beeing 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 Indy4 support, it was getting really playable and was insterted in the official source tree.


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 methode in favor of Ludde's, and it ever clearer to me when I loose a large number of hours of work because of a missunderstanding. Indy4 was getting more and more playable, (but not yet completable) and I started to be interested into adding v6 games support, especialy DOTT. The thing was, the script engine had had a major facelift between v5 (MI1CD, MI2 & 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 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 Dott was running, it was still buggy. I remember fixing core bugs like missplaced staff text, crash on non american version (the original american version use sprites for verbs, but foreign version used plain text) and a few misc other things. Sam & Max was added to the engine not that far off but sufferend from lots of bugs. I don't keep a precise memory of that time, but I remember playtesting Sam & Max while fixing stuff here and there. The sound system in 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 originaly MI2/DOTT) started to loose interest in the project.
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 methode in favor of Ludde's, and it ever clearer to me when I loose a large number of hours of work because of a missunderstanding. Indy4 was getting more and more playable, (but not yet completable) and I started to be interested into adding v6 games support, especialy DOTT. The thing was, the script engine had had a major facelift between v5 (MI1CD, MI2 & 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 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 Dott was running, it was still buggy. I remember fixing core bugs like missplaced staff text, crash on non american version (the original american version use sprites for verbs, but foreign version used plain text) and a few misc other things. Sam & Max was added to the engine not that far off but sufferend from lots of bugs. I don't keep a precise memory of that time, but I remember playtesting Sam & Max while fixing stuff here and there. The sound system in 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 originaly MI2/DOTT) started to loose interest in the project.