From ScummVM :: Wiki
Jump to navigation Jump to search

Brief description

ScummVM is a program which allows you to run certain classic graphical point-and-click adventure games, provided you already have their data files. The clever part about this: ScummVM just replaces the executables shipped with the game, allowing you to play them on systems for which they were never designed!

You may read about the history of the project here.

A more thorough description

The inner workings of adventure games

Almost all adventure games share some common features. The most basic ones are the resources used, which are in the game's data files:

  • Graphics
    • Actors (the sprites in the game)
    • Background images
    • Fonts
    • In-game animations
    • Objects
    • Videos
  • Sound
    • Synthesized music (e.g. MIDI)
    • Sound effects
    • Voices

Apart from the resources themselves, almost all games have their own scripting language. This simplifies things in the whole development process, as it's then easier to assign tasks to specific people. Programmers deal with the code itself, game designers deal with writing scripts using the language that the game interpreter understands, graphics designers deal with the artistic part of the game, music composers with the audio and so on.

The scripting language of a game

As mentioned before, each game uses its own scripting language, which is usually contained in the game's data files. This is usually high-level, and the game's interpreter itself (the game's executable file) is responsible for parsing the script commands from the game's logic scripts and doing all the actual work. Let's take an example script of a hypothetical engine, where the game would have to load a scene and handle a case where the user would pick up item A:

 put_actor(actor_number, X, Y)
 put_object(object_number, X, Y)
 if (action_pickup) {
   if (object_to_pickup() == object_A) {
 while (scene_not_ended) {

That's just an example of how an engine would do that action, but each engine tends to perform these scripts in a different way (e.g. some engines have scripts for each object, others can have a general script to do everything etc).

A game script can contain basic elements of the game's logic (e.g. if, else, goto etc) and it may call back directly functions of the executable itself, which are called script opcodes.

Where does ScummVM fit it?

ScummVM is a reverse engineering project, in which such techniques are used to see the code that's contained in the executable of a target game and rewrite it in C++. This means that ScummVM's executable can be used to replace the game's original executable, but of course the game's data files (graphics, audio, game scripts etc) are needed to play the game itself. Therefore, ScummVM is NOT an emulator of a specific operating system, as, for example, DOSBox is for DOS. ScummVM is actually a full rewrite of each game's engine, which has many advantages:

  • some bugs which existed in the original game's executable (or specific scripts) may be fixed
  • the game can run on many different platforms, thanks to ScummVM's portable platform backend
  • it's possible to re-encode the game's audio files into popular formats, such as MP3, OGG or FLAC so that the game itself takes up much less space
  • LucasArts games have a much improved menu and savegame system

and many more

Supported games

In order to see which games are supported in ScummVM, you can check our compatibility page. The game engines that ScummVM includes at the moment can be found in our game engines page, and the status of each game can be found in its individual page.

Which platforms does ScummVM run under?

Check our platforms page

Running games

What do I need to run a game?

You will need a distribution of ScummVM for the operating system you are using, and the data files of the game you wish to play

What are the "stable" and "unstable" (SVN) versions of ScummVM?

The stable version of ScummVM has been checked for bugs, and people have completed almost all of the games that ScummVM supports using it

The unstable (Subversion or SVN) version of ScummVM includes improved functionality, however when new features are added or existing bugs are fixed, other bugs or crashes may appear, which were not present in the stable version

Further reading

That was a short introduction of ScummVM, we hope that we've answered most of your questions. You may now refer to the pages in this wiki for more information, our FAQ and our documentation page, especially the README file