[Scummvm-cvs-logs] SF.net SVN: scummvm: [28462] scummvm/branches/gsoc2007-fsnode

david_corrales at users.sourceforge.net david_corrales at users.sourceforge.net
Sun Aug 5 21:34:21 CEST 2007


Revision: 28462
          http://scummvm.svn.sourceforge.net/scummvm/?rev=28462&view=rev
Author:   david_corrales
Date:     2007-08-05 12:34:20 -0700 (Sun, 05 Aug 2007)

Log Message:
-----------
Merged fsnode with trunk: r27971:28460

Modified Paths:
--------------
    scummvm/branches/gsoc2007-fsnode/NEWS
    scummvm/branches/gsoc2007-fsnode/README
    scummvm/branches/gsoc2007-fsnode/backends/platform/ds/arm9/makefile
    scummvm/branches/gsoc2007-fsnode/backends/platform/ds/arm9/source/wordcompletion.cpp
    scummvm/branches/gsoc2007-fsnode/backends/platform/ds/arm9/source/wordcompletion.h
    scummvm/branches/gsoc2007-fsnode/backends/platform/wince/Makefile
    scummvm/branches/gsoc2007-fsnode/base/plugins.cpp
    scummvm/branches/gsoc2007-fsnode/common/file.h
    scummvm/branches/gsoc2007-fsnode/common/list.h
    scummvm/branches/gsoc2007-fsnode/common/util.cpp
    scummvm/branches/gsoc2007-fsnode/common/util.h
    scummvm/branches/gsoc2007-fsnode/configure
    scummvm/branches/gsoc2007-fsnode/dists/msvc71/lure.vcproj
    scummvm/branches/gsoc2007-fsnode/dists/msvc71/scummvm.sln
    scummvm/branches/gsoc2007-fsnode/dists/msvc71/scummvm.vcproj
    scummvm/branches/gsoc2007-fsnode/dists/msvc8/gob.vcproj
    scummvm/branches/gsoc2007-fsnode/dists/msvc8/kyra.vcproj
    scummvm/branches/gsoc2007-fsnode/dists/msvc8/parallaction.vcproj
    scummvm/branches/gsoc2007-fsnode/dists/msvc8/scummvm.sln
    scummvm/branches/gsoc2007-fsnode/dists/msvc8/scummvm.vcproj
    scummvm/branches/gsoc2007-fsnode/engines/agi/agi.cpp
    scummvm/branches/gsoc2007-fsnode/engines/agi/agi.h
    scummvm/branches/gsoc2007-fsnode/engines/agi/detection.cpp
    scummvm/branches/gsoc2007-fsnode/engines/agi/graphics.cpp
    scummvm/branches/gsoc2007-fsnode/engines/agi/graphics.h
    scummvm/branches/gsoc2007-fsnode/engines/agi/keyboard.cpp
    scummvm/branches/gsoc2007-fsnode/engines/agi/menu.cpp
    scummvm/branches/gsoc2007-fsnode/engines/agi/predictive.cpp
    scummvm/branches/gsoc2007-fsnode/engines/agi/saveload.cpp
    scummvm/branches/gsoc2007-fsnode/engines/agi/sound.cpp
    scummvm/branches/gsoc2007-fsnode/engines/agi/text.cpp
    scummvm/branches/gsoc2007-fsnode/engines/agos/agos.cpp
    scummvm/branches/gsoc2007-fsnode/engines/agos/agos.h
    scummvm/branches/gsoc2007-fsnode/engines/agos/detection_tables.h
    scummvm/branches/gsoc2007-fsnode/engines/agos/input.cpp
    scummvm/branches/gsoc2007-fsnode/engines/agos/items.cpp
    scummvm/branches/gsoc2007-fsnode/engines/agos/res_snd.cpp
    scummvm/branches/gsoc2007-fsnode/engines/agos/saveload.cpp
    scummvm/branches/gsoc2007-fsnode/engines/agos/sound.cpp
    scummvm/branches/gsoc2007-fsnode/engines/agos/zones.cpp
    scummvm/branches/gsoc2007-fsnode/engines/engines.mk
    scummvm/branches/gsoc2007-fsnode/engines/gob/cdrom.cpp
    scummvm/branches/gsoc2007-fsnode/engines/gob/dataio.cpp
    scummvm/branches/gsoc2007-fsnode/engines/gob/dataio.h
    scummvm/branches/gsoc2007-fsnode/engines/gob/detection.cpp
    scummvm/branches/gsoc2007-fsnode/engines/gob/draw.cpp
    scummvm/branches/gsoc2007-fsnode/engines/gob/draw.h
    scummvm/branches/gsoc2007-fsnode/engines/gob/draw_v2.cpp
    scummvm/branches/gsoc2007-fsnode/engines/gob/game.cpp
    scummvm/branches/gsoc2007-fsnode/engines/gob/game.h
    scummvm/branches/gsoc2007-fsnode/engines/gob/game_v1.cpp
    scummvm/branches/gsoc2007-fsnode/engines/gob/game_v2.cpp
    scummvm/branches/gsoc2007-fsnode/engines/gob/global.cpp
    scummvm/branches/gsoc2007-fsnode/engines/gob/gob.cpp
    scummvm/branches/gsoc2007-fsnode/engines/gob/gob.h
    scummvm/branches/gsoc2007-fsnode/engines/gob/goblin.cpp
    scummvm/branches/gsoc2007-fsnode/engines/gob/goblin_v2.cpp
    scummvm/branches/gsoc2007-fsnode/engines/gob/goblin_v3.cpp
    scummvm/branches/gsoc2007-fsnode/engines/gob/init.cpp
    scummvm/branches/gsoc2007-fsnode/engines/gob/inter.cpp
    scummvm/branches/gsoc2007-fsnode/engines/gob/inter.h
    scummvm/branches/gsoc2007-fsnode/engines/gob/inter_bargon.cpp
    scummvm/branches/gsoc2007-fsnode/engines/gob/inter_v1.cpp
    scummvm/branches/gsoc2007-fsnode/engines/gob/inter_v2.cpp
    scummvm/branches/gsoc2007-fsnode/engines/gob/inter_v3.cpp
    scummvm/branches/gsoc2007-fsnode/engines/gob/map.cpp
    scummvm/branches/gsoc2007-fsnode/engines/gob/module.mk
    scummvm/branches/gsoc2007-fsnode/engines/gob/mult.h
    scummvm/branches/gsoc2007-fsnode/engines/gob/mult_v1.cpp
    scummvm/branches/gsoc2007-fsnode/engines/gob/mult_v2.cpp
    scummvm/branches/gsoc2007-fsnode/engines/gob/saveload.h
    scummvm/branches/gsoc2007-fsnode/engines/gob/saveload_v2.cpp
    scummvm/branches/gsoc2007-fsnode/engines/gob/saveload_v3.cpp
    scummvm/branches/gsoc2007-fsnode/engines/gob/scenery.cpp
    scummvm/branches/gsoc2007-fsnode/engines/gob/util.cpp
    scummvm/branches/gsoc2007-fsnode/engines/gob/video.cpp
    scummvm/branches/gsoc2007-fsnode/engines/gob/video.h
    scummvm/branches/gsoc2007-fsnode/engines/kyra/debugger.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/debugger.h
    scummvm/branches/gsoc2007-fsnode/engines/kyra/detection.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/kyra.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/kyra.h
    scummvm/branches/gsoc2007-fsnode/engines/kyra/kyra_v1.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/kyra_v1.h
    scummvm/branches/gsoc2007-fsnode/engines/kyra/kyra_v2.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/kyra_v2.h
    scummvm/branches/gsoc2007-fsnode/engines/kyra/kyra_v3.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/kyra_v3.h
    scummvm/branches/gsoc2007-fsnode/engines/kyra/module.mk
    scummvm/branches/gsoc2007-fsnode/engines/kyra/resource.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/resource.h
    scummvm/branches/gsoc2007-fsnode/engines/kyra/screen.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/screen.h
    scummvm/branches/gsoc2007-fsnode/engines/kyra/script.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/script.h
    scummvm/branches/gsoc2007-fsnode/engines/kyra/script_v1.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/seqplayer.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/seqplayer.h
    scummvm/branches/gsoc2007-fsnode/engines/kyra/sequences_v1.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/sequences_v2.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/sound.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/sound.h
    scummvm/branches/gsoc2007-fsnode/engines/kyra/sprites.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/sprites.h
    scummvm/branches/gsoc2007-fsnode/engines/kyra/staticres.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/text.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/wsamovie.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/wsamovie.h
    scummvm/branches/gsoc2007-fsnode/engines/lure/game.cpp
    scummvm/branches/gsoc2007-fsnode/engines/lure/game.h
    scummvm/branches/gsoc2007-fsnode/engines/lure/hotspots.cpp
    scummvm/branches/gsoc2007-fsnode/engines/lure/hotspots.h
    scummvm/branches/gsoc2007-fsnode/engines/lure/luredefs.h
    scummvm/branches/gsoc2007-fsnode/engines/lure/res_struct.cpp
    scummvm/branches/gsoc2007-fsnode/engines/lure/res_struct.h
    scummvm/branches/gsoc2007-fsnode/engines/lure/room.cpp
    scummvm/branches/gsoc2007-fsnode/engines/lure/screen.cpp
    scummvm/branches/gsoc2007-fsnode/engines/lure/screen.h
    scummvm/branches/gsoc2007-fsnode/engines/parallaction/animation.cpp
    scummvm/branches/gsoc2007-fsnode/engines/parallaction/commands.cpp
    scummvm/branches/gsoc2007-fsnode/engines/parallaction/detection.cpp
    scummvm/branches/gsoc2007-fsnode/engines/parallaction/dialogue.cpp
    scummvm/branches/gsoc2007-fsnode/engines/parallaction/disk.h
    scummvm/branches/gsoc2007-fsnode/engines/parallaction/font.cpp
    scummvm/branches/gsoc2007-fsnode/engines/parallaction/graphics.cpp
    scummvm/branches/gsoc2007-fsnode/engines/parallaction/graphics.h
    scummvm/branches/gsoc2007-fsnode/engines/parallaction/inventory.cpp
    scummvm/branches/gsoc2007-fsnode/engines/parallaction/inventory.h
    scummvm/branches/gsoc2007-fsnode/engines/parallaction/location.cpp
    scummvm/branches/gsoc2007-fsnode/engines/parallaction/menu.cpp
    scummvm/branches/gsoc2007-fsnode/engines/parallaction/menu.h
    scummvm/branches/gsoc2007-fsnode/engines/parallaction/module.mk
    scummvm/branches/gsoc2007-fsnode/engines/parallaction/parallaction.cpp
    scummvm/branches/gsoc2007-fsnode/engines/parallaction/parallaction.h
    scummvm/branches/gsoc2007-fsnode/engines/parallaction/saveload.cpp
    scummvm/branches/gsoc2007-fsnode/engines/parallaction/sound.cpp
    scummvm/branches/gsoc2007-fsnode/engines/parallaction/sound.h
    scummvm/branches/gsoc2007-fsnode/engines/parallaction/staticres.cpp
    scummvm/branches/gsoc2007-fsnode/engines/parallaction/walk.cpp
    scummvm/branches/gsoc2007-fsnode/engines/parallaction/zone.cpp
    scummvm/branches/gsoc2007-fsnode/engines/queen/sound.cpp
    scummvm/branches/gsoc2007-fsnode/engines/saga/actor.cpp
    scummvm/branches/gsoc2007-fsnode/engines/saga/actor.h
    scummvm/branches/gsoc2007-fsnode/engines/saga/animation.cpp
    scummvm/branches/gsoc2007-fsnode/engines/saga/animation.h
    scummvm/branches/gsoc2007-fsnode/engines/saga/detection.cpp
    scummvm/branches/gsoc2007-fsnode/engines/saga/detection_tables.h
    scummvm/branches/gsoc2007-fsnode/engines/saga/displayinfo.h
    scummvm/branches/gsoc2007-fsnode/engines/saga/events.cpp
    scummvm/branches/gsoc2007-fsnode/engines/saga/events.h
    scummvm/branches/gsoc2007-fsnode/engines/saga/font.cpp
    scummvm/branches/gsoc2007-fsnode/engines/saga/gfx.cpp
    scummvm/branches/gsoc2007-fsnode/engines/saga/ihnm_introproc.cpp
    scummvm/branches/gsoc2007-fsnode/engines/saga/image.cpp
    scummvm/branches/gsoc2007-fsnode/engines/saga/interface.cpp
    scummvm/branches/gsoc2007-fsnode/engines/saga/isomap.cpp
    scummvm/branches/gsoc2007-fsnode/engines/saga/ite_introproc.cpp
    scummvm/branches/gsoc2007-fsnode/engines/saga/list.h
    scummvm/branches/gsoc2007-fsnode/engines/saga/music.cpp
    scummvm/branches/gsoc2007-fsnode/engines/saga/music.h
    scummvm/branches/gsoc2007-fsnode/engines/saga/objectmap.cpp
    scummvm/branches/gsoc2007-fsnode/engines/saga/puzzle.h
    scummvm/branches/gsoc2007-fsnode/engines/saga/render.cpp
    scummvm/branches/gsoc2007-fsnode/engines/saga/rscfile.cpp
    scummvm/branches/gsoc2007-fsnode/engines/saga/rscfile.h
    scummvm/branches/gsoc2007-fsnode/engines/saga/saga.cpp
    scummvm/branches/gsoc2007-fsnode/engines/saga/saga.h
    scummvm/branches/gsoc2007-fsnode/engines/saga/sagaresnames.h
    scummvm/branches/gsoc2007-fsnode/engines/saga/saveload.cpp
    scummvm/branches/gsoc2007-fsnode/engines/saga/scene.cpp
    scummvm/branches/gsoc2007-fsnode/engines/saga/scene.h
    scummvm/branches/gsoc2007-fsnode/engines/saga/script.cpp
    scummvm/branches/gsoc2007-fsnode/engines/saga/script.h
    scummvm/branches/gsoc2007-fsnode/engines/saga/sfuncs.cpp
    scummvm/branches/gsoc2007-fsnode/engines/saga/sndres.cpp
    scummvm/branches/gsoc2007-fsnode/engines/saga/sound.cpp
    scummvm/branches/gsoc2007-fsnode/engines/saga/sprite.cpp
    scummvm/branches/gsoc2007-fsnode/engines/scumm/charset.cpp
    scummvm/branches/gsoc2007-fsnode/engines/scumm/detection.cpp
    scummvm/branches/gsoc2007-fsnode/engines/scumm/detection_tables.h
    scummvm/branches/gsoc2007-fsnode/engines/scumm/gfx.cpp
    scummvm/branches/gsoc2007-fsnode/engines/scumm/imuse_digi/dimuse.cpp
    scummvm/branches/gsoc2007-fsnode/engines/scumm/imuse_digi/dimuse.h
    scummvm/branches/gsoc2007-fsnode/engines/scumm/imuse_digi/dimuse_script.cpp
    scummvm/branches/gsoc2007-fsnode/engines/scumm/imuse_digi/dimuse_sndmgr.cpp
    scummvm/branches/gsoc2007-fsnode/engines/scumm/imuse_digi/dimuse_sndmgr.h
    scummvm/branches/gsoc2007-fsnode/engines/scumm/imuse_digi/dimuse_track.cpp
    scummvm/branches/gsoc2007-fsnode/engines/scumm/input.cpp
    scummvm/branches/gsoc2007-fsnode/engines/scumm/module.mk
    scummvm/branches/gsoc2007-fsnode/engines/scumm/scumm-md5.h
    scummvm/branches/gsoc2007-fsnode/engines/scumm/scumm.cpp
    scummvm/branches/gsoc2007-fsnode/engines/scumm/scumm.h
    scummvm/branches/gsoc2007-fsnode/engines/scumm/smush/smush_player.cpp
    scummvm/branches/gsoc2007-fsnode/engines/scumm/sound.cpp
    scummvm/branches/gsoc2007-fsnode/engines/scumm/string.cpp
    scummvm/branches/gsoc2007-fsnode/engines/sword1/music.cpp
    scummvm/branches/gsoc2007-fsnode/engines/sword1/sound.cpp
    scummvm/branches/gsoc2007-fsnode/engines/sword2/music.cpp
    scummvm/branches/gsoc2007-fsnode/engines/touche/graphics.cpp
    scummvm/branches/gsoc2007-fsnode/engines/touche/midi.cpp
    scummvm/branches/gsoc2007-fsnode/engines/touche/midi.h
    scummvm/branches/gsoc2007-fsnode/engines/touche/opcodes.cpp
    scummvm/branches/gsoc2007-fsnode/engines/touche/resource.cpp
    scummvm/branches/gsoc2007-fsnode/engines/touche/saveload.cpp
    scummvm/branches/gsoc2007-fsnode/engines/touche/staticres.cpp
    scummvm/branches/gsoc2007-fsnode/engines/touche/touche.cpp
    scummvm/branches/gsoc2007-fsnode/engines/touche/touche.h
    scummvm/branches/gsoc2007-fsnode/graphics/dxa_player.cpp
    scummvm/branches/gsoc2007-fsnode/graphics/dxa_player.h
    scummvm/branches/gsoc2007-fsnode/gui/ListWidget.cpp
    scummvm/branches/gsoc2007-fsnode/gui/ListWidget.h
    scummvm/branches/gsoc2007-fsnode/gui/launcher.cpp
    scummvm/branches/gsoc2007-fsnode/sound/flac.cpp
    scummvm/branches/gsoc2007-fsnode/sound/flac.h
    scummvm/branches/gsoc2007-fsnode/sound/mixer.cpp
    scummvm/branches/gsoc2007-fsnode/sound/mods/module.cpp
    scummvm/branches/gsoc2007-fsnode/sound/mods/module.h
    scummvm/branches/gsoc2007-fsnode/sound/mods/protracker.cpp
    scummvm/branches/gsoc2007-fsnode/sound/mods/protracker.h
    scummvm/branches/gsoc2007-fsnode/sound/mp3.cpp
    scummvm/branches/gsoc2007-fsnode/sound/mp3.h
    scummvm/branches/gsoc2007-fsnode/sound/vorbis.cpp
    scummvm/branches/gsoc2007-fsnode/sound/vorbis.h
    scummvm/branches/gsoc2007-fsnode/tools/create_kyradat/create_kyradat.cpp
    scummvm/branches/gsoc2007-fsnode/tools/create_kyradat/md5.cpp
    scummvm/branches/gsoc2007-fsnode/tools/scumm-md5.txt

Added Paths:
-----------
    scummvm/branches/gsoc2007-fsnode/dists/msvc71/drascula.vcproj
    scummvm/branches/gsoc2007-fsnode/dists/msvc8/drascula.vcproj
    scummvm/branches/gsoc2007-fsnode/engines/drascula/
    scummvm/branches/gsoc2007-fsnode/engines/drascula/detection.cpp
    scummvm/branches/gsoc2007-fsnode/engines/drascula/drascula.cpp
    scummvm/branches/gsoc2007-fsnode/engines/drascula/drascula.h
    scummvm/branches/gsoc2007-fsnode/engines/drascula/module.mk
    scummvm/branches/gsoc2007-fsnode/engines/drascula/texts.h
    scummvm/branches/gsoc2007-fsnode/engines/gob/coktelvideo.cpp
    scummvm/branches/gsoc2007-fsnode/engines/gob/coktelvideo.h
    scummvm/branches/gsoc2007-fsnode/engines/gob/inter_v4.cpp
    scummvm/branches/gsoc2007-fsnode/engines/gob/videoplayer.cpp
    scummvm/branches/gsoc2007-fsnode/engines/gob/videoplayer.h
    scummvm/branches/gsoc2007-fsnode/engines/kyra/animator_v1.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/animator_v1.h
    scummvm/branches/gsoc2007-fsnode/engines/kyra/animator_v2.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/gui_v1.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/gui_v2.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/items_v1.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/items_v2.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/saveload_v1.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/scene.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/scene_v1.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/scene_v2.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/screen_v1.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/screen_v1.h
    scummvm/branches/gsoc2007-fsnode/engines/kyra/screen_v2.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/screen_v2.h
    scummvm/branches/gsoc2007-fsnode/engines/kyra/script_v2.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/sound_v1.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/text_v1.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/timer.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/timer.h
    scummvm/branches/gsoc2007-fsnode/engines/kyra/timer_v1.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/timer_v2.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/util.h
    scummvm/branches/gsoc2007-fsnode/engines/parallaction/callables_br.cpp
    scummvm/branches/gsoc2007-fsnode/engines/parallaction/callables_ns.cpp
    scummvm/branches/gsoc2007-fsnode/engines/parallaction/disk_br.cpp
    scummvm/branches/gsoc2007-fsnode/engines/parallaction/disk_ns.cpp
    scummvm/branches/gsoc2007-fsnode/engines/parallaction/parallaction_br.cpp
    scummvm/branches/gsoc2007-fsnode/engines/parallaction/parallaction_ns.cpp
    scummvm/branches/gsoc2007-fsnode/engines/scumm/gfxARM.s
    scummvm/branches/gsoc2007-fsnode/tools/agi-palex.py

Removed Paths:
-------------
    scummvm/branches/gsoc2007-fsnode/engines/drascula/detection.cpp
    scummvm/branches/gsoc2007-fsnode/engines/drascula/drascula.cpp
    scummvm/branches/gsoc2007-fsnode/engines/drascula/drascula.h
    scummvm/branches/gsoc2007-fsnode/engines/drascula/module.mk
    scummvm/branches/gsoc2007-fsnode/engines/drascula/texts.h
    scummvm/branches/gsoc2007-fsnode/engines/gob/imd.cpp
    scummvm/branches/gsoc2007-fsnode/engines/gob/imd.h
    scummvm/branches/gsoc2007-fsnode/engines/kyra/animator.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/animator.h
    scummvm/branches/gsoc2007-fsnode/engines/kyra/gui.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/items.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/saveload.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/scene.cpp
    scummvm/branches/gsoc2007-fsnode/engines/kyra/timer.cpp
    scummvm/branches/gsoc2007-fsnode/engines/parallaction/archive.cpp
    scummvm/branches/gsoc2007-fsnode/engines/parallaction/callables.cpp
    scummvm/branches/gsoc2007-fsnode/engines/parallaction/disk.cpp
    scummvm/branches/gsoc2007-fsnode/engines/parallaction/intro.cpp

Modified: scummvm/branches/gsoc2007-fsnode/NEWS
===================================================================
--- scummvm/branches/gsoc2007-fsnode/NEWS	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/NEWS	2007-08-05 19:34:20 UTC (rev 28462)
@@ -18,6 +18,7 @@
  SCUMM:
    - Added subtitle skipping (via '.' key) in older games which didn't have
      this feature so far (e.g. Zak, MM, Indy3, Loom).
+   - Added support for Chinese COMI
 
  SAGA:
    - Added support for compressed sound effects, voices and music

Modified: scummvm/branches/gsoc2007-fsnode/README
===================================================================
--- scummvm/branches/gsoc2007-fsnode/README	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/README	2007-08-05 19:34:20 UTC (rev 28462)
@@ -1068,7 +1068,6 @@
         Ctrl-d                 - Starts the debugger
 
     Touche: The Adventures of the Fifth Musketeer:
-        Ctrl-d                 - Starts the debugger
         Ctrl-f                 - Toggle fast mode
         F5                     - Displays options
         F9                     - Turn fast walk mode on
@@ -1364,7 +1363,7 @@
 ------ ----------------------------------------
 As above, but ScummVM must be compiled with Flac support. Run:
 
-  compress_scumm_sou --flac --best -b 1152 monster.sou
+  compress_scumm_sou --flac monster.sou
 
 This should produce a smaller monster.sof file, which you should copy to your
 game directory. Remember that the quality is always the same, varying encoder
@@ -1403,7 +1402,7 @@
 
 For Flac add --flac and optional parameters, i.e.
 
-  compress_agos --flac --best -b 1152
+  compress_agos --flac
 
 Eventually you will have a much smaller *.mp3, *.ogg or *.fla file, copy this
 file to your game directory. You can safely remove the old file.

Modified: scummvm/branches/gsoc2007-fsnode/backends/platform/ds/arm9/makefile
===================================================================
--- scummvm/branches/gsoc2007-fsnode/backends/platform/ds/arm9/makefile	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/backends/platform/ds/arm9/makefile	2007-08-05 19:34:20 UTC (rev 28462)
@@ -41,7 +41,7 @@
 ARM = 1
 
 ifdef DS_BUILD_A
-	DEFINES = -DDS_SCUMM_BUILD -DDS_BUILD_A
+	DEFINES = -DDS_SCUMM_BUILD -DDS_BUILD_A -DUSE_ARM_GFX_ASM
 	LOGO = logoa.bmp
 	DISABLE_HE = 1
 	#DISABLE_SCUMM = 1
@@ -60,6 +60,7 @@
 	DISABLE_TOUCHE = 1
 	DISABLE_PARALLACTION = 1
 	DISABLE_CRUISE = 1
+	USE_ARM_GFX_ASM = 1
 	BUILD=scummvm-A
 endif
 

Modified: scummvm/branches/gsoc2007-fsnode/backends/platform/ds/arm9/source/wordcompletion.cpp
===================================================================
--- scummvm/branches/gsoc2007-fsnode/backends/platform/ds/arm9/source/wordcompletion.cpp	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/backends/platform/ds/arm9/source/wordcompletion.cpp	2007-08-05 19:34:20 UTC (rev 28462)
@@ -5,8 +5,85 @@
 #ifndef DISABLE_AGI
 
 namespace DS {
+// Default dictionary is about 64Kb, so 128Kb should be enough for future expansion
+#define WORD_BUFFER_SIZE (128 * 1024)
 
-void findWordCompletions(char* input) {
+// Default dictionary has ~8000 words
+#define MAX_WORD_COUNT 16000
+
+char wordBuffer[WORD_BUFFER_SIZE];
+int wordBufferPos = 0;
+
+char* wordBufferPtr[MAX_WORD_COUNT];
+int wordBufferPtrPos = 0;
+
+void addAutoCompleteLine(char* line) {
+
+	while (*line != 0)
+	{
+		char word[32];
+		int length;
+		
+		// Skip the T9-style numbers
+		while (*line != ' ')
+		{
+			line++;
+		}
+		line++;
+
+		do {
+			length = 0;
+
+			if (*line == ' ') line++;
+
+
+			// Copy the new word 
+			do {
+				word[length++] = *line++;
+			} while ((*line != '\0') && (*line != ' ') && (*line != '\n'));
+
+			word[length] = '\0';
+
+
+			// Store a pointer to the start of the word
+			wordBufferPtr[wordBufferPtrPos++] = &wordBuffer[wordBufferPos];
+	
+			// copy the new word into the buffer
+			strcpy(&wordBuffer[wordBufferPos], word);
+			wordBufferPos += strlen(word) + 1;
+		} while (*line == ' ');
+	}
+}
+
+int stringCompare(const void* a, const void* b) {
+	const char** as = (const char **) a;
+	const char** bs = (const char **) b;
+
+	return scumm_stricmp(*as, *bs);
+}
+
+void sortAutoCompleteWordList() {
+	// Sort the whole word list into alphabetical order
+	qsort((void *) wordBufferPtr, wordBufferPtrPos, 4, stringCompare);
+}
+
+// Sends the current available words to the virtual keyboard code for display
+bool findWordCompletions(char* input)
+{
+	char testWord[32];
+	int min = 0;
+	int max = wordBufferPtrPos - 1;
+	char* word;
+	int position;
+	char partialWord[32];
+
+	// Early out if dictionary not loaded
+	if (wordBufferPtrPos == 0)
+		return false;
+
+	OSystem_DS* system = (OSystem_DS *) g_system;
+	system->clearAutoComplete();
+
 	int start = 0;
 	for (int r = strlen(input) - 1; r>0; r--) {
 		if (input[r] == ' ') {
@@ -14,53 +91,90 @@
 			break;
 		}
 	}
+	strcpy(partialWord, &input[start]);
 
-	char word[32];
-	strcpy(word, &input[start]);
+	if (strlen(partialWord) == 0)
+	{
+		return false;
+	}
 
-	int fchr = word[0] - 'a';
-	int len = strlen(word);
+	do {
+		position = min + ((max - min) / 2);
 
-	OSystem_DS* system = (OSystem_DS *) g_system;
-	system->clearAutoComplete();
-	system->setCharactersEntered(strlen(word));
+		// Get the word from the dictonary line
+		word = wordBufferPtr[position];
 
-	if (strlen(word) == 0) {
-		return;
-	}		
+		
 
-	uint8 *wordList = Agi::AgiEngine::getWordsData();
-	uint8 *wordListEnd = Agi::AgiEngine::getWordsData() + Agi::AgiEngine::getWordsDataSize();
+		// Now check to see if the word is before or after the stub we're after
+		int result = scumm_stricmp((const char *) partialWord, (const char *) word);
+		
+		if (result == 0) {
+			// We've found the whole word.  Aren't we good.
+			break;
+		} else if (result > 0) {
+			// We're too early, so change the minimum position
+			min = position + 1;
+		} else if (result < 0) {
+			// We're too early, so change the maximum position
+			max = position - 1;
+		}
 
-	/* Get the offset to the first word beginning with the
-	 * right character
-	 */
-	wordList += READ_BE_UINT16(wordList + 2 * fchr);
+//		consolePrintf("Word: %s, (%d, %d) result: %d\n", word, min, max, result);
 
-	char currentWord[32];
+	} while (max - min > 0);
 
+	position = min;
+	word = wordBufferPtr[position];
+	//consolePrintf("Final word: %s\n", word);
+
 	
-	while (wordList < wordListEnd) {
-		int pos = *wordList++;		// Number of chars to keep from previous word
 
-		if (wordList == wordListEnd)
+	system->setCharactersEntered(strlen(partialWord));
+	
+
+	bool match = true;
+
+
+	for (int r = 0; r < strlen(partialWord); r++) {
+		if (word[r] != partialWord[r]) {
+			match = false;
 			break;
+		}
+	}
 
-		char c;
-		do {
-			c = *wordList++;
-			currentWord[pos++] =  (~c) & 0x7F;
-		} while ((c & 0x80) == 0);		// Top bit indicates end of word
-		currentWord[pos++] = '\0';
+	if (!match) {
+		position++;
+		if (position == wordBufferPtrPos) return false;
+		word = wordBufferPtr[position];
+//		consolePrintf("Final word: %s\n", word);
+	}
 
-		if (!strncmp(currentWord, word, strlen(word))) {
-			system->addAutoComplete(currentWord);
+
+	match = true;
+
+	do {
+
+		for (int r = 0; r < strlen(partialWord); r++) {
+			if (word[r] != partialWord[r]) {
+				match = false;
+				break;
+			}
 		}
+	
+		if (match) {
+			system->addAutoComplete(word);
+		}
 
-		wordList += 2;	// Skip the two byte word id.
+		position++;
+		if (position < wordBufferPtrPos) {
+			word = wordBufferPtr[position];
+		}
 
-	}
+	} while ((match) && (position < wordBufferPtrPos));
 
+	return true;
+
 }
 
 }

Modified: scummvm/branches/gsoc2007-fsnode/backends/platform/ds/arm9/source/wordcompletion.h
===================================================================
--- scummvm/branches/gsoc2007-fsnode/backends/platform/ds/arm9/source/wordcompletion.h	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/backends/platform/ds/arm9/source/wordcompletion.h	2007-08-05 19:34:20 UTC (rev 28462)
@@ -3,6 +3,8 @@
 
 namespace DS {
 
-extern void findWordCompletions(char* input);
+extern bool findWordCompletions(char* input);
+extern void addAutoCompleteLine(char* line);
+extern void sortAutoCompleteWordList();
 
 }
\ No newline at end of file

Modified: scummvm/branches/gsoc2007-fsnode/backends/platform/wince/Makefile
===================================================================
--- scummvm/branches/gsoc2007-fsnode/backends/platform/wince/Makefile	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/backends/platform/wince/Makefile	2007-08-05 19:34:20 UTC (rev 28462)
@@ -52,6 +52,7 @@
 #DISABLE_HQ_SCALERS = 1
 USE_ARM_SOUND_ASM = 1
 USE_ARM_SMUSH_ASM = 1
+USE_ARM_GFX_ASM   = 1
 
 
 ########################################################################
@@ -85,10 +86,6 @@
 DEFINES += -DWIN32 
 DEFINES += -D__stdcall= -Dcdecl= -D__cdecl__= -D__cdecl= -Wno-multichar
 
-ifdef WINCE_DEBUG_BUILD
-DEFINES += -DDEBUG -DUSE_WINDBG -g
-endif
-
 INCLUDES := -I$(srcdir) -I. -I$(srcdir)/engines -Imissing/gcc -Ilibs/include -Ilibs/include/sdl -ICEgui -ICEkeys -I$(wince_gcc_root)/include
 
 CFLAGS := -O3 -march=armv4 -mtune=xscale
@@ -98,6 +95,11 @@
 LDFLAGS := -Llibs/lib -L$(wince_gcc_root)/lib
 LIBS := -lSDL
 
+ifdef WINCE_DEBUG_BUILD
+DEFINES += -DDEBUG -DUSE_WINDBG -g
+LDFLAGS += -debug
+endif
+
 ifdef USE_ZLIB
 DEFINES += -DUSE_ZLIB
 LIBS += -lzlib
@@ -129,10 +131,14 @@
 LIBS += -lFLAC
 endif
 
-ifdef USE_ARM_SMUSH
-DEFINES += -DUSE_ARM_SMUSH
+ifdef USE_ARM_SMUSH_ASM
+DEFINES += -DUSE_ARM_SMUSH_ASM
 endif
 
+ifdef USE_ARM_GFX_ASM
+DEFINES += -DUSE_ARM_GFX_ASM
+endif
+
 LIBS += --entry WinMainCRTStartup
 
 ########################################################################

Modified: scummvm/branches/gsoc2007-fsnode/base/plugins.cpp
===================================================================
--- scummvm/branches/gsoc2007-fsnode/base/plugins.cpp	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/base/plugins.cpp	2007-08-05 19:34:20 UTC (rev 28462)
@@ -131,6 +131,9 @@
 		#ifndef DISABLE_CRUISE
 		LINK_PLUGIN(CRUISE)
 		#endif
+		#ifndef DISABLE_DRASCULA
+		LINK_PLUGIN(DRASCULA)
+		#endif
 
 		return pl;
 	}

Modified: scummvm/branches/gsoc2007-fsnode/common/file.h
===================================================================
--- scummvm/branches/gsoc2007-fsnode/common/file.h	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/common/file.h	2007-08-05 19:34:20 UTC (rev 28462)
@@ -30,8 +30,6 @@
 #include "common/scummsys.h"
 #include "common/str.h"
 #include "common/stream.h"
-#include "backends/file/base-file.h"
-//#include "backends/factories/fs-factory-maker.cpp"
 
 class FilesystemNode;
 

Modified: scummvm/branches/gsoc2007-fsnode/common/list.h
===================================================================
--- scummvm/branches/gsoc2007-fsnode/common/list.h	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/common/list.h	2007-08-05 19:34:20 UTC (rev 28462)
@@ -33,7 +33,7 @@
  * Simple double linked list, modeled after the list template of the standard
  * C++ library. 
  */
-template <class T>
+template <class t_T>
 class List {
 protected:
 #if defined (_WIN32_WCE) || defined (_MSC_VER)
@@ -45,16 +45,16 @@
 		NodeBase *_next;
 	};
 	
-	template <class T2>
+	template <class t_T2>
 	struct Node : public NodeBase {
-		T2 _data;
+		t_T2 _data;
 		
-		Node(const T2 &x) : _data(x) {}
+		Node(const t_T2 &x) : _data(x) {}
 	};
 
-	template <class T2>
+	template <class t_T2>
 	class Iterator {
-		friend class List<T>;
+		friend class List<t_T>;
 		NodeBase *_node;
 
 #if !defined (__WINSCW__)
@@ -67,46 +67,46 @@
 		Iterator() : _node(0) {}
 
 		// Prefix inc
-		Iterator<T2> &operator++() {
+		Iterator<t_T2> &operator++() {
 			if (_node)
 				_node = _node->_next;
 			return *this;
 		}
 		// Postfix inc
-		Iterator<T2> operator++(int) {
+		Iterator<t_T2> operator++(int) {
 			Iterator tmp(_node);
 			++(*this);
 			return tmp;
 		}
 		// Prefix dec
-		Iterator<T2> &operator--() {
+		Iterator<t_T2> &operator--() {
 			if (_node)
 				_node = _node->_prev;
 			return *this;
 		}
 		// Postfix dec
-		Iterator<T2> operator--(int) {
+		Iterator<t_T2> operator--(int) {
 			Iterator tmp(_node);
 			--(*this);
 			return tmp;
 		}
-		T2& operator*() const {
+		t_T2& operator*() const {
 			assert(_node);
 #if (__GNUC__ == 2) && (__GNUC_MINOR__ >= 95)
-			return static_cast<List<T>::Node<T2> *>(_node)->_data;
+			return static_cast<List<t_T>::Node<t_T2> *>(_node)->_data;
 #else
-			return static_cast<Node<T2>*>(_node)->_data;
+			return static_cast<Node<t_T2>*>(_node)->_data;
 #endif
 		}
-		T2* operator->() const {
+		t_T2* operator->() const {
 			return &(operator*());
 		}
 		
-		bool operator==(const Iterator<T2>& x) const {
+		bool operator==(const Iterator<t_T2>& x) const {
 			return _node == x._node;
 		}
 		
-		bool operator!=(const Iterator<T2>& x) const {
+		bool operator!=(const Iterator<t_T2>& x) const {
 			return _node != x._node;
 		}
 	};
@@ -114,10 +114,10 @@
 	NodeBase *_anchor;
 
 public:
-	typedef Iterator<T>			iterator;
-	typedef Iterator<const T>	const_iterator;
+	typedef Iterator<t_T>			iterator;
+	typedef Iterator<const t_T>	const_iterator;
 
-	typedef T value_type;
+	typedef t_T value_type;
 
 public:
 	List() {
@@ -125,7 +125,7 @@
 		_anchor->_prev = _anchor;
 		_anchor->_next = _anchor;
 	}
-	List(const List<T>& list) {
+	List(const List<t_T>& list) {
 		_anchor = new NodeBase;
 		_anchor->_prev = _anchor;
 		_anchor->_next = _anchor;
@@ -138,16 +138,16 @@
 		delete _anchor;
 	}
 
-	void push_front(const T& element) {
+	void push_front(const t_T& element) {
 		insert(begin(), element);
 	}
 
-	void push_back(const T& element) {
+	void push_back(const t_T& element) {
 		insert(end(), element);
 	}
 
-	void insert(iterator pos, const T& element) {
-		NodeBase *newNode = new Node<T>(element);
+	void insert(iterator pos, const t_T& element) {
+		NodeBase *newNode = new Node<t_T>(element);
 		
 		newNode->_next = pos._node;
 		newNode->_prev = pos._node->_prev;
@@ -166,7 +166,7 @@
 
 		NodeBase *next = pos._node->_next;
 		NodeBase *prev = pos._node->_prev;
-		Node<T> *node = static_cast<Node<T> *>(pos._node);
+		Node<t_T> *node = static_cast<Node<t_T> *>(pos._node);
 		prev->_next = next;
 		next->_prev = prev;
 		delete node;
@@ -178,7 +178,7 @@
 
 		NodeBase *next = pos._node->_next;
 		NodeBase *prev = pos._node->_prev;
-		Node<T> *node = static_cast<Node<T> *>(pos._node);
+		Node<t_T> *node = static_cast<Node<t_T> *>(pos._node);
 		prev->_next = next;
 		next->_prev = prev;
 		delete node;
@@ -192,7 +192,7 @@
 		return last;
 	}
 
-	void remove(const T &val) {
+	void remove(const t_T &val) {
 		iterator i = begin();
 		while (i != end())
 			if (val == i.operator*())
@@ -202,13 +202,13 @@
 	}
 
 
-	List<T>& operator  =(const List<T>& list) {
+	List<t_T>& operator  =(const List<t_T>& list) {
 		if (this != &list) {
 			iterator i;
 			const_iterator j;
 
 			for (i = begin(), j = list.begin();  (i != end()) && (j != list.end()) ; ++i, ++j) {
-				static_cast<Node<T> *>(i._node)->_data = static_cast<Node<T> *>(j._node)->_data;
+				static_cast<Node<t_T> *>(i._node)->_data = static_cast<Node<t_T> *>(j._node)->_data;
 			}
 
 			if (i == end())

Modified: scummvm/branches/gsoc2007-fsnode/common/util.cpp
===================================================================
--- scummvm/branches/gsoc2007-fsnode/common/util.cpp	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/common/util.cpp	2007-08-05 19:34:20 UTC (rev 28462)
@@ -592,3 +592,16 @@
 #endif
 #endif
 }
+
+char *scumm_strrev(char *str) {
+	if (!str)
+		return str;
+	int len = strlen(str);
+	if (len < 2)
+		return str;
+	char *p1, *p2;
+	for (p1 = str, p2 = str + len - 1; p1 < p2; p1++, p2--) {
+		SWAP(*p1, *p2);
+	}
+	return str;
+}

Modified: scummvm/branches/gsoc2007-fsnode/common/util.h
===================================================================
--- scummvm/branches/gsoc2007-fsnode/common/util.h	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/common/util.h	2007-08-05 19:34:20 UTC (rev 28462)
@@ -289,5 +289,6 @@
 
 extern int gDebugLevel;
 
+char *scumm_strrev(char *str);
 
 #endif

Modified: scummvm/branches/gsoc2007-fsnode/configure
===================================================================
--- scummvm/branches/gsoc2007-fsnode/configure	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/configure	2007-08-05 19:34:20 UTC (rev 28462)
@@ -63,6 +63,7 @@
 _build_touche=yes
 _build_parallaction=yes
 _build_cruise=no
+_build_drascula=no
 _build_hq_scalers=yes
 _build_scalers=yes
 
@@ -353,6 +354,7 @@
   --disable-agos           don't build the AGOS engine
   --disable-cine           don't build the Cinematique engine evo 1
   --enable-cruise          build the Cruise for a Corpse engine
+  --enable-drascula        build the Drascula: The Vampire Strikes Back engine
   --disable-gob            don't build the Gobli*ns engine
   --disable-kyra           don't build the Legend of Kyrandia engine
   --enable-lure            build the Lure of the Temptress engine
@@ -438,6 +440,7 @@
       --disable-touche)         _build_touche=no ;;
       --disable-parallaction)   _build_parallaction=no ;;
       --enable-cruise)          _build_cruise=yes ;;
+      --enable-drascula)        _build_drascula=yes ;;
       --disable-hq-scalers)     _build_hq_scalers=no ;;
       --disable-scalers)        _build_scalers=no ;;
       --enable-alsa)            _alsa=yes       ;;
@@ -730,6 +733,7 @@
 add_to_config_mk_if_no $_build_touche       'DISABLE_TOUCHE = 1'
 add_to_config_mk_if_no $_build_parallaction 'DISABLE_PARALLACTION = 1'
 add_to_config_mk_if_no $_build_cruise       'DISABLE_CRUISE = 1'
+add_to_config_mk_if_no $_build_drascula     'DISABLE_DRASCULA = 1'
 add_to_config_mk_if_no $_build_hq_scalers   'DISABLE_HQ_SCALERS = 1'
 add_to_config_mk_if_no $_build_scalers      'DISABLE_SCALERS = 1'
 
@@ -1388,6 +1392,9 @@
 if test "$_build_cruise" = yes ; then
 	echo "    Cinematique evo 2"
 fi
+if test "$_build_drascula" = yes ; then
+	echo "    Drascula"
+fi
 
 echo
 

Copied: scummvm/branches/gsoc2007-fsnode/dists/msvc71/drascula.vcproj (from rev 28460, scummvm/trunk/dists/msvc71/drascula.vcproj)
===================================================================
--- scummvm/branches/gsoc2007-fsnode/dists/msvc71/drascula.vcproj	                        (rev 0)
+++ scummvm/branches/gsoc2007-fsnode/dists/msvc71/drascula.vcproj	2007-08-05 19:34:20 UTC (rev 28462)
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="windows-1250"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="drascula"
+	ProjectGUID="{CF888EE2-239C-40D7-83F1-1CDD4F7D56E3}"
+	Keyword="Win32Proj">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="drascula_Debug"
+			IntermediateDirectory="drascula_Debug"
+			ConfigurationType="4"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="/wd4201 /wd4512 /wd4511 /wd4100 /wd4121 /wd4310 /wd4706 /wd4127 /wd4189 /wd4702"
+				Optimization="0"
+				AdditionalIncludeDirectories="../..;../../engines"
+				PreprocessorDefinitions="WIN32;_DEBUG;USE_ZLIB;USE_MAD;USE_VORBIS"
+				MinimalRebuild="TRUE"
+				ExceptionHandling="TRUE"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				BufferSecurityCheck="TRUE"
+				EnableFunctionLevelLinking="TRUE"
+				ForceConformanceInForLoopScope="TRUE"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				SuppressStartupBanner="FALSE"
+				DebugInformationFormat="4"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="$(OutDir)/drascula.lib"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="drascula_Release"
+			IntermediateDirectory="drascula_Release"
+			ConfigurationType="4"
+			CharacterSet="2"
+			WholeProgramOptimization="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="/wd4201 /wd4512 /wd4511 /wd4100 /wd4121 /wd4310 /wd4706 /wd4127 /wd4189 /wd4702"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				OmitFramePointers="TRUE"
+				AdditionalIncludeDirectories="../..;../../engines"
+				PreprocessorDefinitions="WIN32;NDEBUG;USE_ZLIB;USE_MAD;USE_VORBIS"
+				StringPooling="TRUE"
+				ExceptionHandling="TRUE"
+				RuntimeLibrary="0"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="FALSE"
+				DisableLanguageExtensions="FALSE"
+				ForceConformanceInForLoopScope="TRUE"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				DebugInformationFormat="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="$(OutDir)/drascula.lib"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="..\..\engines\drascula\detection.cpp">
+		</File>
+		<File
+			RelativePath="..\..\engines\drascula\drascula.cpp">
+		</File>
+		<File
+			RelativePath="..\..\engines\drascula\drascula.h">
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>

Modified: scummvm/branches/gsoc2007-fsnode/dists/msvc71/lure.vcproj
===================================================================
--- scummvm/branches/gsoc2007-fsnode/dists/msvc71/lure.vcproj	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/dists/msvc71/lure.vcproj	2007-08-05 19:34:20 UTC (rev 28462)
@@ -116,18 +116,6 @@
 			RelativePath="..\..\engines\lure\animseq.h">
 		</File>
 		<File
-			RelativePath="..\..\engines\lure\debug-input.cpp">
-		</File>
-		<File
-			RelativePath="..\..\engines\lure\debug-input.h">
-		</File>
-		<File
-			RelativePath="..\..\engines\lure\debug-methods.cpp">
-		</File>
-		<File
-			RelativePath="..\..\engines\lure\debug-methods.h">
-		</File>
-		<File
 			RelativePath="..\..\engines\lure\debugger.cpp">
 		</File>
 		<File
@@ -155,6 +143,12 @@
 			RelativePath="..\..\engines\lure\events.h">
 		</File>
 		<File
+			RelativePath="..\..\engines\lure\fights.cpp">
+		</File>
+		<File
+			RelativePath="..\..\engines\lure\fights.h">
+		</File>
+		<File
 			RelativePath="..\..\engines\lure\game.cpp">
 		</File>
 		<File
@@ -230,6 +224,12 @@
 			RelativePath="..\..\engines\lure\scripts.h">
 		</File>
 		<File
+			RelativePath="..\..\engines\lure\sound.cpp">
+		</File>
+		<File
+			RelativePath="..\..\engines\lure\sound.h">
+		</File>
+		<File
 			RelativePath="..\..\engines\lure\strings.cpp">
 		</File>
 		<File

Modified: scummvm/branches/gsoc2007-fsnode/dists/msvc71/scummvm.sln
===================================================================
--- scummvm/branches/gsoc2007-fsnode/dists/msvc71/scummvm.sln	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/dists/msvc71/scummvm.sln	2007-08-05 19:34:20 UTC (rev 28462)
@@ -15,6 +15,7 @@
 		{0068957B-E2E1-4988-8C87-D541D84DAF20} = {0068957B-E2E1-4988-8C87-D541D84DAF20}
 		{9D9A98A0-F88F-4CA2-B8FF-462470EBE3EC} = {9D9A98A0-F88F-4CA2-B8FF-462470EBE3EC}
 		{676DB4C5-9A3E-4EE1-8483-EBB79DC0700E} = {676DB4C5-9A3E-4EE1-8483-EBB79DC0700E}
+		{CF888EE2-239C-40D7-83F1-1CDD4F7D56E3} = {CF888EE2-239C-40D7-83F1-1CDD4F7D56E3}
 		{15DF71E6-ECA9-45ED-8049-1CD7C987CCFE} = {15DF71E6-ECA9-45ED-8049-1CD7C987CCFE}
 	EndProjectSection
 EndProject
@@ -78,6 +79,10 @@
 	ProjectSection(ProjectDependencies) = postProject
 	EndProjectSection
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "drascula", "drascula.vcproj", "{CF888EE2-239C-40D7-83F1-1CDD4F7D56E3}"
+	ProjectSection(ProjectDependencies) = postProject
+	EndProjectSection
+EndProject
 Global
 	GlobalSection(SolutionConfiguration) = preSolution
 		Debug = Debug
@@ -150,6 +155,10 @@
 		{CD9AEE36-CEBD-40CE-A6B3-B71523AB8DEC}.Debug.Build.0 = Debug|Win32
 		{CD9AEE36-CEBD-40CE-A6B3-B71523AB8DEC}.Release.ActiveCfg = Release|Win32
 		{CD9AEE36-CEBD-40CE-A6B3-B71523AB8DEC}.Release.Build.0 = Release|Win32
+		{CF888EE2-239C-40D7-83F1-1CDD4F7D56E3}.Debug.ActiveCfg = Debug|Win32
+		{CF888EE2-239C-40D7-83F1-1CDD4F7D56E3}.Debug.Build.0 = Debug|Win32
+		{CF888EE2-239C-40D7-83F1-1CDD4F7D56E3}.Release.ActiveCfg = Release|Win32
+		{CF888EE2-239C-40D7-83F1-1CDD4F7D56E3}.Release.Build.0 = Release|Win32
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 	EndGlobalSection

Modified: scummvm/branches/gsoc2007-fsnode/dists/msvc71/scummvm.vcproj
===================================================================
--- scummvm/branches/gsoc2007-fsnode/dists/msvc71/scummvm.vcproj	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/dists/msvc71/scummvm.vcproj	2007-08-05 19:34:20 UTC (rev 28462)
@@ -45,6 +45,7 @@
 				GenerateDebugInformation="TRUE"
 				ProgramDatabaseFile="$(OutDir)/scummvm.pdb"
 				SubSystem="1"
+				EntryPointSymbol="WinMainCRTStartup"
 				TargetMachine="1"/>
 			<Tool
 				Name="VCMIDLTool"/>
@@ -106,6 +107,7 @@
 				SubSystem="1"
 				OptimizeReferences="2"
 				EnableCOMDATFolding="2"
+				EntryPointSymbol="WinMainCRTStartup"
 				TargetMachine="1"/>
 			<Tool
 				Name="VCMIDLTool"/>
@@ -209,6 +211,9 @@
 				RelativePath="..\..\common\file.h">
 			</File>
 			<File
+				RelativePath="..\..\common\frac.h">
+			</File>
+			<File
 				RelativePath="..\..\common\fs.cpp">
 			</File>
 			<File
@@ -230,6 +235,9 @@
 				RelativePath="..\..\common\iff_container.h">
 			</File>
 			<File
+				RelativePath="..\..\common\keyboard.h">
+			</File>
+			<File
 				RelativePath="..\..\common\list.h">
 			</File>
 			<File

Copied: scummvm/branches/gsoc2007-fsnode/dists/msvc8/drascula.vcproj (from rev 28460, scummvm/trunk/dists/msvc8/drascula.vcproj)
===================================================================
--- scummvm/branches/gsoc2007-fsnode/dists/msvc8/drascula.vcproj	                        (rev 0)
+++ scummvm/branches/gsoc2007-fsnode/dists/msvc8/drascula.vcproj	2007-08-05 19:34:20 UTC (rev 28462)
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="windows-1250"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="drascula"
+	ProjectGUID="{CF888EE2-239C-40D7-83F1-1CDD4F7D56E3}"
+	RootNamespace="drascula"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="drascula_Debug"
+			IntermediateDirectory="drascula_Debug"
+			ConfigurationType="4"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="/wd4201 /wd4512 /wd4511 /wd4100 /wd4121 /wd4310 /wd4706 /wd4127 /wd4189 /wd4702 /wd4996"
+				Optimization="0"
+				AdditionalIncludeDirectories="../..;../../engines"
+				PreprocessorDefinitions="WIN32;_DEBUG;USE_ZLIB;USE_MAD;USE_VORBIS"
+				MinimalRebuild="true"
+				ExceptionHandling="1"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				BufferSecurityCheck="true"
+				EnableFunctionLevelLinking="true"
+				ForceConformanceInForLoopScope="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				WarnAsError="false"
+				SuppressStartupBanner="false"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="$(OutDir)/drascula.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="drascula_Release"
+			IntermediateDirectory="drascula_Release"
+			ConfigurationType="4"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="/wd4201 /wd4512 /wd4511 /wd4100 /wd4121 /wd4310 /wd4706 /wd4127 /wd4189 /wd4702 /wd4996"
+				Optimization="3"
+				InlineFunctionExpansion="2"
+				OmitFramePointers="true"
+				AdditionalIncludeDirectories="../../;../../engines"
+				PreprocessorDefinitions="WIN32;NDEBUG;USE_ZLIB;USE_MAD;USE_VORBIS"
+				StringPooling="true"
+				ExceptionHandling="1"
+				RuntimeLibrary="0"
+				BufferSecurityCheck="false"
+				EnableFunctionLevelLinking="false"
+				ForceConformanceInForLoopScope="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				WarnAsError="true"
+				DebugInformationFormat="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="$(OutDir)/drascula.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="..\..\engines\drascula\detection.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\drascula\drascula.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\drascula\drascula.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\drascula\texts.h"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>

Modified: scummvm/branches/gsoc2007-fsnode/dists/msvc8/gob.vcproj
===================================================================
--- scummvm/branches/gsoc2007-fsnode/dists/msvc8/gob.vcproj	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/dists/msvc8/gob.vcproj	2007-08-05 19:34:20 UTC (rev 28462)
@@ -169,6 +169,14 @@
 			>
 		</File>
 		<File
+			RelativePath="..\..\engines\gob\coktelvideo.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\gob\coktelvideo.h"
+			>
+		</File>
+		<File
 			RelativePath="..\..\engines\gob\dataio.cpp"
 			>
 		</File>
@@ -261,14 +269,6 @@
 			>
 		</File>
 		<File
-			RelativePath="..\..\engines\gob\imd.cpp"
-			>
-		</File>
-		<File
-			RelativePath="..\..\engines\gob\imd.h"
-			>
-		</File>
-		<File
 			RelativePath="..\..\engines\gob\init.cpp"
 			>
 		</File>
@@ -313,6 +313,10 @@
 			>
 		</File>
 		<File
+			RelativePath="..\..\engines\gob\inter_v4.cpp"
+			>
+		</File>
+		<File
 			RelativePath="..\..\engines\gob\map.cpp"
 			>
 		</File>
@@ -440,6 +444,14 @@
 			RelativePath="..\..\engines\gob\video_v2.cpp"
 			>
 		</File>
+		<File
+			RelativePath="..\..\engines\gob\videoplayer.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\gob\videoplayer.h"
+			>
+		</File>
 	</Files>
 	<Globals>
 	</Globals>

Modified: scummvm/branches/gsoc2007-fsnode/dists/msvc8/kyra.vcproj
===================================================================
--- scummvm/branches/gsoc2007-fsnode/dists/msvc8/kyra.vcproj	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/dists/msvc8/kyra.vcproj	2007-08-05 19:34:20 UTC (rev 28462)
@@ -161,14 +161,18 @@
 	</References>
 	<Files>
 		<File
-			RelativePath="..\..\engines\kyra\animator.cpp"
+			RelativePath="..\..\engines\kyra\animator_v1.cpp"
 			>
 		</File>
 		<File
-			RelativePath="..\..\engines\kyra\animator.h"
+			RelativePath="..\..\engines\kyra\animator_v1.h"
 			>
 		</File>
 		<File
+			RelativePath="..\..\engines\kyra\animator_v2.cpp"
+			>
+		</File>
+		<File
 			RelativePath="..\..\engines\kyra\debugger.cpp"
 			>
 		</File>
@@ -181,14 +185,22 @@
 			>
 		</File>
 		<File
-			RelativePath="..\..\engines\kyra\gui.cpp"
+			RelativePath="..\..\engines\kyra\gui_v1.cpp"
 			>
 		</File>
 		<File
-			RelativePath="..\..\engines\kyra\items.cpp"
+			RelativePath="..\..\engines\kyra\gui_v2.cpp"
 			>
 		</File>
 		<File
+			RelativePath="..\..\engines\kyra\items_v1.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\kyra\items_v2.cpp"
+			>
+		</File>
+		<File
 			RelativePath="..\..\engines\kyra\kyra.cpp"
 			>
 		</File>
@@ -229,7 +241,7 @@
 			>
 		</File>
 		<File
-			RelativePath="..\..\engines\kyra\saveload.cpp"
+			RelativePath="..\..\engines\kyra\saveload_v1.cpp"
 			>
 		</File>
 		<File
@@ -237,6 +249,14 @@
 			>
 		</File>
 		<File
+			RelativePath="..\..\engines\kyra\scene_v1.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\kyra\scene_v2.cpp"
+			>
+		</File>
+		<File
 			RelativePath="..\..\engines\kyra\screen.cpp"
 			>
 		</File>
@@ -245,6 +265,22 @@
 			>
 		</File>
 		<File
+			RelativePath="..\..\engines\kyra\screen_v1.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\kyra\screen_v1.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\kyra\screen_v2.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\kyra\screen_v2.h"
+			>
+		</File>
+		<File
 			RelativePath="..\..\engines\kyra\script.cpp"
 			>
 		</File>
@@ -257,6 +293,10 @@
 			>
 		</File>
 		<File
+			RelativePath="..\..\engines\kyra\script_v2.cpp"
+			>
+		</File>
+		<File
 			RelativePath="..\..\engines\kyra\seqplayer.cpp"
 			>
 		</File>
@@ -293,6 +333,10 @@
 			>
 		</File>
 		<File
+			RelativePath="..\..\engines\kyra\sound_v1.cpp"
+			>
+		</File>
+		<File
 			RelativePath="..\..\engines\kyra\sprites.cpp"
 			>
 		</File>
@@ -313,10 +357,30 @@
 			>
 		</File>
 		<File
+			RelativePath="..\..\engines\kyra\text_v1.cpp"
+			>
+		</File>
+		<File
 			RelativePath="..\..\engines\kyra\timer.cpp"
 			>
 		</File>
 		<File
+			RelativePath="..\..\engines\kyra\timer.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\kyra\timer_v1.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\kyra\timer_v2.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\kyra\util.h"
+			>
+		</File>
+		<File
 			RelativePath="..\..\engines\kyra\vqa.cpp"
 			>
 		</File>

Modified: scummvm/branches/gsoc2007-fsnode/dists/msvc8/parallaction.vcproj
===================================================================
--- scummvm/branches/gsoc2007-fsnode/dists/msvc8/parallaction.vcproj	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/dists/msvc8/parallaction.vcproj	2007-08-05 19:34:20 UTC (rev 28462)
@@ -165,11 +165,11 @@
 			>
 		</File>
 		<File
-			RelativePath="..\..\engines\parallaction\archive.cpp"
+			RelativePath="..\..\engines\parallaction\callables_br.cpp"
 			>
 		</File>
 		<File
-			RelativePath="..\..\engines\parallaction\callables.cpp"
+			RelativePath="..\..\engines\parallaction\callables_ns.cpp"
 			>
 		</File>
 		<File
@@ -201,14 +201,18 @@
 			>
 		</File>
 		<File
-			RelativePath="..\..\engines\parallaction\disk.cpp"
+			RelativePath="..\..\engines\parallaction\disk.h"
 			>
 		</File>
 		<File
-			RelativePath="..\..\engines\parallaction\disk.h"
+			RelativePath="..\..\engines\parallaction\disk_br.cpp"
 			>
 		</File>
 		<File
+			RelativePath="..\..\engines\parallaction\disk_ns.cpp"
+			>
+		</File>
+		<File
 			RelativePath="..\..\engines\parallaction\font.cpp"
 			>
 		</File>
@@ -221,10 +225,6 @@
 			>
 		</File>
 		<File
-			RelativePath="..\..\engines\parallaction\intro.cpp"
-			>
-		</File>
-		<File
 			RelativePath="..\..\engines\parallaction\inventory.cpp"
 			>
 		</File>
@@ -253,6 +253,14 @@
 			>
 		</File>
 		<File
+			RelativePath="..\..\engines\parallaction\parallaction_br.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\parallaction\parallaction_ns.cpp"
+			>
+		</File>
+		<File
 			RelativePath="..\..\engines\parallaction\parser.cpp"
 			>
 		</File>

Modified: scummvm/branches/gsoc2007-fsnode/dists/msvc8/scummvm.sln
===================================================================
--- scummvm/branches/gsoc2007-fsnode/dists/msvc8/scummvm.sln	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/dists/msvc8/scummvm.sln	2007-08-05 19:34:20 UTC (rev 28462)
@@ -3,20 +3,21 @@
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "scummvm", "scummvm.vcproj", "{8434CB15-D08F-427D-9E6D-581AE5B28440}"
 	ProjectSection(ProjectDependencies) = postProject
 		{6CC3E421-779D-4E80-8100-520886A0F9FF} = {6CC3E421-779D-4E80-8100-520886A0F9FF}
+		{CF888EE2-239C-40D7-83F1-1CDD4F7D56E3} = {CF888EE2-239C-40D7-83F1-1CDD4F7D56E3}
+		{C8AAE83E-198B-4ECA-A877-166827953979} = {C8AAE83E-198B-4ECA-A877-166827953979}
+		{B6AFD548-63D2-40CD-A652-E87095AFCBAF} = {B6AFD548-63D2-40CD-A652-E87095AFCBAF}
+		{1CA4AC50-5426-433A-8B5E-FFE39568098E} = {1CA4AC50-5426-433A-8B5E-FFE39568098E}
+		{D4986356-D0BB-4981-924A-854157BDF11F} = {D4986356-D0BB-4981-924A-854157BDF11F}
+		{B5527758-2F51-4CCD-AAE1-B0E28654BD6A} = {B5527758-2F51-4CCD-AAE1-B0E28654BD6A}
+		{6A55AF61-7CA1-49E0-9385-59C1FE9D4DB7} = {6A55AF61-7CA1-49E0-9385-59C1FE9D4DB7}
+		{F5F57066-CDF4-4F80-B9E7-7F4D21850D6E} = {F5F57066-CDF4-4F80-B9E7-7F4D21850D6E}
+		{E0EC9C72-A33E-49DA-B1DC-BB44B9799BFA} = {E0EC9C72-A33E-49DA-B1DC-BB44B9799BFA}
+		{976D947A-A45F-4437-991E-412F695C64C7} = {976D947A-A45F-4437-991E-412F695C64C7}
+		{9D9A98A0-F88F-4CA2-B8FF-462470EBE3EC} = {9D9A98A0-F88F-4CA2-B8FF-462470EBE3EC}
+		{676DB4C5-9A3E-4EE1-8483-EBB79DC0700E} = {676DB4C5-9A3E-4EE1-8483-EBB79DC0700E}
+		{8863B00B-059A-471E-876D-A955ECEFD0D2} = {8863B00B-059A-471E-876D-A955ECEFD0D2}
+		{0068957B-E2E1-4988-8C87-D541D84DAF20} = {0068957B-E2E1-4988-8C87-D541D84DAF20}
 		{1A1CA028-61B5-4A6C-A918-F5D8721AB1AC} = {1A1CA028-61B5-4A6C-A918-F5D8721AB1AC}
-		{0068957B-E2E1-4988-8C87-D541D84DAF20} = {0068957B-E2E1-4988-8C87-D541D84DAF20}
-		{8863B00B-059A-471E-876D-A955ECEFD0D2} = {8863B00B-059A-471E-876D-A955ECEFD0D2}
-		{676DB4C5-9A3E-4EE1-8483-EBB79DC0700E} = {676DB4C5-9A3E-4EE1-8483-EBB79DC0700E}
-		{9D9A98A0-F88F-4CA2-B8FF-462470EBE3EC} = {9D9A98A0-F88F-4CA2-B8FF-462470EBE3EC}
-		{976D947A-A45F-4437-991E-412F695C64C7} = {976D947A-A45F-4437-991E-412F695C64C7}
-		{E0EC9C72-A33E-49DA-B1DC-BB44B9799BFA} = {E0EC9C72-A33E-49DA-B1DC-BB44B9799BFA}
-		{F5F57066-CDF4-4F80-B9E7-7F4D21850D6E} = {F5F57066-CDF4-4F80-B9E7-7F4D21850D6E}
-		{6A55AF61-7CA1-49E0-9385-59C1FE9D4DB7} = {6A55AF61-7CA1-49E0-9385-59C1FE9D4DB7}
-		{B5527758-2F51-4CCD-AAE1-B0E28654BD6A} = {B5527758-2F51-4CCD-AAE1-B0E28654BD6A}
-		{D4986356-D0BB-4981-924A-854157BDF11F} = {D4986356-D0BB-4981-924A-854157BDF11F}
-		{1CA4AC50-5426-433A-8B5E-FFE39568098E} = {1CA4AC50-5426-433A-8B5E-FFE39568098E}
-		{B6AFD548-63D2-40CD-A652-E87095AFCBAF} = {B6AFD548-63D2-40CD-A652-E87095AFCBAF}
-		{C8AAE83E-198B-4ECA-A877-166827953979} = {C8AAE83E-198B-4ECA-A877-166827953979}
 	EndProjectSection
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sword2", "sword2.vcproj", "{6CC3E421-779D-4E80-8100-520886A0F9FF}"
@@ -49,6 +50,8 @@
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cruise", "cruise.vcproj", "{8863B00B-059A-471E-876D-A955ECEFD0D2}"
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "drascula", "drascula.vcproj", "{CF888EE2-239C-40D7-83F1-1CDD4F7D56E3}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Win32 = Debug|Win32
@@ -119,6 +122,10 @@
 		{8863B00B-059A-471E-876D-A955ECEFD0D2}.Debug|Win32.Build.0 = Debug|Win32
 		{8863B00B-059A-471E-876D-A955ECEFD0D2}.Release|Win32.ActiveCfg = Release|Win32
 		{8863B00B-059A-471E-876D-A955ECEFD0D2}.Release|Win32.Build.0 = Release|Win32
+		{CF888EE2-239C-40D7-83F1-1CDD4F7D56E3}.Debug|Win32.ActiveCfg = Debug|Win32
+		{CF888EE2-239C-40D7-83F1-1CDD4F7D56E3}.Debug|Win32.Build.0 = Debug|Win32
+		{CF888EE2-239C-40D7-83F1-1CDD4F7D56E3}.Release|Win32.ActiveCfg = Release|Win32
+		{CF888EE2-239C-40D7-83F1-1CDD4F7D56E3}.Release|Win32.Build.0 = Release|Win32
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

Modified: scummvm/branches/gsoc2007-fsnode/dists/msvc8/scummvm.vcproj
===================================================================
--- scummvm/branches/gsoc2007-fsnode/dists/msvc8/scummvm.vcproj	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/dists/msvc8/scummvm.vcproj	2007-08-05 19:34:20 UTC (rev 28462)
@@ -68,7 +68,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="winmm.lib sdl.lib zlib.lib libmad.lib vorbisfile_static.lib vorbis_static.lib ogg_static.lib libmpeg2.lib sword1_debug/sword1.lib sword2_debug/sword2.lib lure_debug/lure.lib cine_debug/cine.lib cruise_debug/cruise.lib kyra_debug/kyra.lib gob_debug/gob.lib queen_debug/queen.lib saga_debug/saga.lib agi_debug/agi.lib scumm_debug/scumm.lib agos_debug/agos.lib sky_debug/sky.lib parallaction_debug/parallaction.lib"
+				AdditionalDependencies="winmm.lib sdl.lib zlib.lib libmad.lib vorbisfile_static.lib vorbis_static.lib ogg_static.lib libmpeg2.lib sword1_debug/sword1.lib sword2_debug/sword2.lib lure_debug/lure.lib cine_debug/cine.lib cruise_debug/cruise.lib kyra_debug/kyra.lib gob_debug/gob.lib queen_debug/queen.lib saga_debug/saga.lib agi_debug/agi.lib scumm_debug/scumm.lib agos_debug/agos.lib drascula_debug/drascula.lib sky_debug/sky.lib parallaction_debug/parallaction.lib"
 				OutputFile="$(OutDir)/scummvm.exe"
 				LinkIncremental="2"
 				IgnoreDefaultLibraryNames="libc.lib;libcmt.lib"
@@ -158,7 +158,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="winmm.lib sdl.lib zlib.lib libmad.lib vorbisfile_static.lib vorbis_static.lib ogg_static.lib libmpeg2.lib saga_release/saga.lib agi_release/agi.lib sword1_release/sword1.lib sword2_release/sword2.lib lure_release/lure.lib cine_release/cine.lib cruise_release/cruise.lib kyra_release/kyra.lib gob_release/gob.lib queen_release/queen.lib scumm_release/scumm.lib agos_release/agos.lib sky_release/sky.lib parallaction_release/parallaction.lib"
+				AdditionalDependencies="winmm.lib sdl.lib zlib.lib libmad.lib vorbisfile_static.lib vorbis_static.lib ogg_static.lib libmpeg2.lib saga_release/saga.lib agi_release/agi.lib sword1_release/sword1.lib sword2_release/sword2.lib lure_release/lure.lib cine_release/cine.lib cruise_release/cruise.lib kyra_release/kyra.lib gob_release/gob.lib queen_release/queen.lib scumm_release/scumm.lib agos_release/agos.lib sky_release/sky.lib drascula_release/drascula.lib parallaction_release/parallaction.lib"
 				OutputFile="$(OutDir)/scummvm.exe"
 				LinkIncremental="1"
 				SuppressStartupBanner="true"

Modified: scummvm/branches/gsoc2007-fsnode/engines/agi/agi.cpp
===================================================================
--- scummvm/branches/gsoc2007-fsnode/engines/agi/agi.cpp	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/engines/agi/agi.cpp	2007-08-05 19:34:20 UTC (rev 28462)
@@ -178,7 +178,7 @@
 			case Common::KEYCODE_MINUS:
 				key = '-';
 				break;
-			case Common::KEYCODE_9:
+			case Common::KEYCODE_TAB:
 				key = 0x0009;
 				break;
 			case Common::KEYCODE_F1:
@@ -448,6 +448,12 @@
 		loadGame(saveNameBuffer, false); // Do not check game id
 	}
 
+#ifdef __DS__
+	// Normally, the engine loads the predictive text dictionary when the predictive dialog
+	// is shown.  On the DS version, the word completion feature needs the dictionary too.
+	loadDict();
+#endif
+
 	return ec;
 }
 
@@ -535,6 +541,67 @@
 	{NULL, NULL, 0, 0, NULL}
 };
 
+AgiTextColor AgiButtonStyle::getColor(bool hasFocus, bool pressed, bool positive) const {
+	if (_amigaStyle) {
+		if (positive) {
+			if (pressed) { // Positive pressed Amiga-style button
+				if (_olderAgi) {
+					return AgiTextColor(amigaBlack, amigaOrange);
+				} else {
+					return AgiTextColor(amigaBlack, amigaPurple);
+				}
+			} else { // Positive unpressed Amiga-style button
+				return AgiTextColor(amigaWhite, amigaGreen);
+			}
+		} else { // _amigaStyle && !positive
+			if (pressed) { // Negative pressed Amiga-style button
+				return AgiTextColor(amigaBlack, amigaCyan);
+			} else { // Negative unpressed Amiga-style button
+				return AgiTextColor(amigaWhite, amigaRed);
+			}
+		}
+	} else { // PC-style button
+		if (hasFocus || pressed) { // A pressed or in focus PC-style button
+			return AgiTextColor(pcWhite, pcBlack);
+		} else { // An unpressed PC-style button without focus
+			return AgiTextColor(pcBlack, pcWhite);
+		}
+	}
+}
+
+AgiTextColor AgiButtonStyle::getColor(bool hasFocus, bool pressed, int baseFgColor, int baseBgColor) const {
+	return getColor(hasFocus, pressed, AgiTextColor(baseFgColor, baseBgColor));
+}
+
+AgiTextColor AgiButtonStyle::getColor(bool hasFocus, bool pressed, const AgiTextColor &baseColor) const {
+	if (hasFocus || pressed)
+		return baseColor.swap();
+	else
+		return baseColor;
+}
+
+int AgiButtonStyle::getTextOffset(bool hasFocus, bool pressed) const {
+	return (pressed && !_amigaStyle) ? 1 : 0;
+}
+
+bool AgiButtonStyle::getBorder(bool hasFocus, bool pressed) const {
+	return _amigaStyle && !_authenticAmiga && (hasFocus || pressed);
+}
+
+void AgiButtonStyle::setAmigaStyle(bool amigaStyle, bool olderAgi, bool authenticAmiga) {
+	_amigaStyle		= amigaStyle;
+	_olderAgi		= olderAgi;
+	_authenticAmiga	= authenticAmiga;
+}
+
+void AgiButtonStyle::setPcStyle(bool pcStyle) {
+	setAmigaStyle(!pcStyle);
+}
+
+AgiButtonStyle::AgiButtonStyle(Common::RenderMode renderMode) {
+	setAmigaStyle(renderMode == Common::kRenderAmiga);
+}
+
 AgiEngine::AgiEngine(OSystem *syst) : Engine(syst) {
 
 	// Setup mixer
@@ -635,6 +702,8 @@
 		}
 	}
 
+	_buttonStyle = AgiButtonStyle(_renderMode);
+	_defaultButtonStyle = AgiButtonStyle();
 	_console = new Console(this);
 	_gfx = new GfxMgr(this);
 	_sound = new SoundMgr(this, _mixer);
@@ -676,6 +745,13 @@
 }
 
 AgiEngine::~AgiEngine() {
+	// If the engine hasn't been initialized yet via AgiEngine::initialize(), don't attempt to free any resources,
+	// as they haven't been allocated. Fixes bug #1742432 - AGI: Engine crashes if no game is detected
+	if (_game.state == STATE_INIT) {
+		delete _rnd;	// delete _rnd, as it is allocated in the constructor, not in initialize()
+		return;
+	}
+
 	agiDeinit();
 	_sound->deinitSound();
 	delete _sound;

Modified: scummvm/branches/gsoc2007-fsnode/engines/agi/agi.h
===================================================================
--- scummvm/branches/gsoc2007-fsnode/engines/agi/agi.h	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/engines/agi/agi.h	2007-08-05 19:34:20 UTC (rev 28462)
@@ -81,6 +81,7 @@
 #define	MSG_BOX_COLOUR	0x0f	/* White */
 #define MSG_BOX_TEXT	0x00	/* Black */
 #define MSG_BOX_LINE	0x04	/* Red */
+#define BUTTON_BORDER	0x00	/* Black */
 #define STATUS_FG	0x00		/* Black */
 #define	STATUS_BG	0x0f		/* White */
 
@@ -110,7 +111,9 @@
 	GF_AGI256_2 =    (1 << 3),
 	GF_AGIPAL =      (1 << 4),
 	GF_MACGOLDRUSH = (1 << 5),
-	GF_FANMADE =     (1 << 6)
+	GF_FANMADE =     (1 << 6),
+	GF_MENUS =		 (1 << 7),
+	GF_ESCPAUSE =	 (1 << 8)
 };
 
 enum AgiGameID {
@@ -153,6 +156,7 @@
 	errNoLoopsInView,
 	errViewDataError,
 	errNoGameList,
+	errIOError,
 
 	errUnk = 127
 };
@@ -317,6 +321,118 @@
 	uint8 *buffer;		/* used for window background */
 };
 
+/** AGI text color (Background and foreground color). */
+struct AgiTextColor {
+	/** Creates an AGI text color. Uses black text on white background by default. */
+	AgiTextColor(int fgColor = 0x00, int bgColor = 0x0F) : fg(fgColor), bg(bgColor) {}
+
+	/** Get an AGI text color with swapped foreground and background color. */
+	AgiTextColor swap() const { return AgiTextColor(bg, fg); }
+
+	int fg; ///< Foreground color (Used for text).
+	int bg; ///< Background color (Used for text's background).
+};
+
+/**
+ * AGI button style (Amiga or PC).
+ *
+ * Supports positive and negative button types (Used with Amiga-style only):
+ * Positive buttons do what the dialog was opened for.
+ * Negative buttons cancel what the dialog was opened for.
+ * Restart-dialog example: Restart-button is positive, Cancel-button negative.
+ * Paused-dialog example: Continue-button is positive.
+ */
+struct AgiButtonStyle {
+// Public constants etc
+public:
+	static const int
+		// Amiga colors (Indexes into the Amiga-ish palette)
+		amigaBlack  = 0x00, ///< Accurate,                   is          #000000 (24-bit RGB)
+		amigaWhite  = 0x0F, ///< Practically accurate,       is close to #FFFFFF (24-bit RGB)
+		amigaGreen  = 0x02, ///< Quite accurate,             should be   #008A00 (24-bit RGB)
+		amigaOrange = 0x0C, ///< Inaccurate, too much blue,  should be   #FF7500 (24-bit RGB) 
+		amigaPurple = 0x0D, ///< Inaccurate, too much green, should be   #FF00FF (24-bit RGB)
+		amigaRed    = 0x04, ///< Quite accurate,             should be   #BD0000 (24-bit RGB)
+		amigaCyan   = 0x0B, ///< Inaccurate, too much red,   should be   #00FFDE (24-bit RGB)
+		// PC colors (Indexes into the EGA-palette)
+		pcBlack     = 0x00,
+		pcWhite     = 0x0F;
+
+// Public methods
+public:
+	/**
+	 * Get the color of the button with the given state and type using current style.
+	 *
+	 * @param hasFocus True if button has focus, false otherwise.
+	 * @param pressed True if button is being pressed, false otherwise.
+	 * @param positive True if button is positive, false if button is negative. Only matters for Amiga-style buttons.
+	 */
+	AgiTextColor getColor(bool hasFocus, bool pressed, bool positive = true) const;
+
+	/**
+	 * Get the color of a button with the given base color and state ignoring current style.
+	 * Swaps foreground and background color when the button has focus or is being pressed.
+	 *
+	 * @param hasFocus True if button has focus, false otherwise.
+	 * @param pressed True if button is being pressed, false otherwise.
+	 * @param baseFgColor Foreground color of the button when it has no focus and is not being pressed.
+	 * @param baseBgColor Background color of the button when it has no focus and is not being pressed.
+	 */
+	AgiTextColor getColor(bool hasFocus, bool pressed, int baseFgColor, int baseBgColor) const;
+
+	/**
+	 * Get the color of a button with the given base color and state ignoring current style.
+	 * Swaps foreground and background color when the button has focus or is being pressed.
+	 *
+	 * @param hasFocus True if button has focus, false otherwise.
+	 * @param pressed True if button is being pressed, false otherwise.
+	 * @param baseColor Color of the button when it has no focus and is not being pressed.
+	 */
+	AgiTextColor getColor(bool hasFocus, bool pressed, const AgiTextColor &baseColor) const;
+
+	/**
+	 * How many pixels to offset the shown text diagonally down and to the right.
+	 * Currently only used for pressed PC-style buttons.
+	 */
+	int getTextOffset(bool hasFocus, bool pressed) const;
+
+	/**
+	 * Show border around the button?
+	 * Currently border is only used for in focus or pressed Amiga-style buttons
+	 * when in inauthentic Amiga-style mode.
+	 */
+	bool getBorder(bool hasFocus, bool pressed) const;
+
+	/**
+	 * Set Amiga-button style.
+	 *
+	 * @param amigaStyle Set Amiga-button style if true, otherwise set PC-button style.
+	 * @param olderAgi If true then use older AGI style in Amiga-mode, otherwise use newer.
+	 * @param authenticAmiga If true then don't use a border around buttons in Amiga-mode, otherwise use.
+	 */
+	void setAmigaStyle(bool amigaStyle = true, bool olderAgi = false, bool authenticAmiga = false);
+
+	/**
+	 * Set PC-button style.
+	 * @param pcStyle Set PC-button style if true, otherwise set default Amiga-button style.
+	 */
+	void setPcStyle(bool pcStyle = true);
+
+// Public constructors
+public:
+	/**
+	 * Create a button style based on the given rendering mode.
+	 * @param renderMode If Common::kRenderAmiga then creates default Amiga-button style, otherwise PC-style.
+	 */
+	AgiButtonStyle(Common::RenderMode renderMode = Common::kRenderDefault);
+
+// Private member variables
+private:
+	bool _amigaStyle;     ///< Use Amiga-style buttons if true, otherwise use PC-style buttons.
+	bool _olderAgi;       ///< Use older AGI style in Amiga-style mode.
+	bool _authenticAmiga; ///< Don't use border around buttons in Amiga-style mode.
+};
+
 #define EGO_VIEW_TABLE	0
 #define	HORIZON		36
 #define _WIDTH		160
@@ -594,6 +710,8 @@
 	int _oldMode;
 
 	Menu* _menu;
+	AgiButtonStyle _buttonStyle;
+	AgiButtonStyle _defaultButtonStyle;
 
 	char _lastSentence[40];
 

Modified: scummvm/branches/gsoc2007-fsnode/engines/agi/detection.cpp
===================================================================
--- scummvm/branches/gsoc2007-fsnode/engines/agi/detection.cpp	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/engines/agi/detection.cpp	2007-08-05 19:34:20 UTC (rev 28462)
@@ -125,7 +125,7 @@
 
 
 	{
-		// Sarien Name == AGI Demo 1 (PC) 05/87 [AGI 2.425]
+		// AGI Demo 1 (PC) 05/87 [AGI 2.425]
 		{
 			"agidemo",
 			"Demo 1 1987-05-20",
@@ -142,7 +142,7 @@
 
 
 	{
-		// Sarien Name == AGI Demo 2 (IIgs) 1.0C (Censored)
+		// AGI Demo 2 (IIgs) 1.0C (Censored)
 		{
 			"agidemo",
 			"Demo 2 1987-11-24 1.0C",
@@ -159,7 +159,7 @@
 
 
 	{
-		// Sarien Name == AGI Demo 2 (PC 3.5") 11/87 [AGI 2.915]
+		// AGI Demo 2 (PC 3.5") 11/87 [AGI 2.915]
 		{
 			"agidemo",
 			"Demo 2 1987-11-24 3.5\"",
@@ -176,7 +176,7 @@
 
 
 	{
-		// Sarien Name == AGI Demo 2 (PC 5.25") 11/87 [v1] [AGI 2.915]
+		// AGI Demo 2 (PC 5.25") 11/87 [v1] [AGI 2.915]
 		{
 			"agidemo",
 			"Demo 2 1987-11-24 [version 1] 5.25\"",
@@ -193,7 +193,7 @@
 
 
 	{
-		// Sarien Name == AGI Demo 2 (PC 5.25") 01/88 [v2] [AGI 2.917]
+		// AGI Demo 2 (PC 5.25") 01/88 [v2] [AGI 2.917]
 		{
 			"agidemo",
 			"Demo 2 1988-01-25 [version 2] 5.25\"",
@@ -210,7 +210,7 @@
 
 
 	{
-		// Sarien Name == AGI Demo 3 (PC) 09/88 [AGI 3.002.102]
+		// AGI Demo 3 (PC) 09/88 [AGI 3.002.102]
 		{
 			"agidemo",
 			"Demo 3 1988-09-13",
@@ -227,7 +227,7 @@
 
 
 	{
-		// Sarien Name == Black Cauldron (Amiga) 2.00 6/14/87
+		// Black Cauldron (Amiga) 2.00 6/14/87
 		{
 			"bc",
 			"2.00 1987-06-14",
@@ -244,7 +244,8 @@
 
 
 	{
-		// Sarien Name == Black Cauldron (Apple IIgs) 1.0O 2/24/89 (CE)
+		// Black Cauldron (Apple IIgs) 1.0O 2/24/89 (CE)
+		// Menus not tested
 		{
 			"bc",
 			"1.0O 1989-02-24 (CE)",
@@ -261,7 +262,7 @@
 
 
 	{
-		// Sarien Name == Black Cauldron (PC) 2.00 6/14/87 [AGI 2.439]
+		// Black Cauldron (PC) 2.00 6/14/87 [AGI 2.439]
 		{
 			"bc",
 			"2.00 1987-06-14",
@@ -278,7 +279,7 @@
 
 
 	{
-		// Sarien Name == Black Cauldron (PC 5.25") 2.10 11/10/88 [AGI 3.002.098]
+		// Black Cauldron (PC 5.25") 2.10 11/10/88 [AGI 3.002.098]
 		{
 			"bc",
 			"2.10 1988-11-10 5.25\"",
@@ -297,7 +298,8 @@
 // These aren't supposed to work now as they require unsupported agi engine 2.01
 #if 0
 	{
-		// Sarien Name == Donald Duck's Playground (Amiga) 1.0C
+		// Donald Duck's Playground (Amiga) 1.0C
+		// Menus not tested
 		{
 			"ddp",
 			"1.0C 1987-04-27",
@@ -314,7 +316,8 @@
 
 
 	{
-		// Sarien Name == Donald Duck's Playground (ST) 1.0A 8/8/86
+		// Donald Duck's Playground (ST) 1.0A 8/8/86
+		// Menus not tested
 		{
 			"ddp",
 			"1.0A 1986-08-08",
@@ -332,6 +335,7 @@
 
 	{
 		// reported by Filippos (thebluegr) in bugreport #1654500
+		// Menus not tested
 		{
 			"ddp",
 			"1.0C 1986-06-09",   // verify date
@@ -348,7 +352,7 @@
 #endif
 
 	{
-		// Sarien Name == Gold Rush! (Amiga) 1.01 1/13/89 aka 2.05 3/9/89	# 2.316
+		// Gold Rush! (Amiga) 1.01 1/13/89 aka 2.05 3/9/89	# 2.316
 		{
 			"goldrush",
 			"1.01 1989-01-13 aka 2.05 1989-03-09",
@@ -365,7 +369,8 @@
 
 
 	{
-		// Sarien Name == Gold Rush! (Apple IIgs) 1.0M 2/28/89 (CE) aka 2.01 12/22/88
+		// Gold Rush! (Apple IIgs) 1.0M 2/28/89 (CE) aka 2.01 12/22/88
+		// Menus not tested
 		{
 			"goldrush",
 			"1.0M 1989-02-28 (CE) aka 2.01 1988-12-22",
@@ -382,7 +387,7 @@
 
 
 	{
-		// Sarien Name == Gold Rush! (ST) 1.01 1/13/89 aka 2.01 12/22/88
+		// Gold Rush! (ST) 1.01 1/13/89 aka 2.01 12/22/88
 		{
 			"goldrush",
 			"1.01 1989-01-13 aka 2.01 1988-12-22",
@@ -399,7 +404,7 @@
 
 
 	{
-		// Sarien Name == Gold Rush! (PC 5.25") 2.01 12/22/88 [AGI 3.002.149]
+		// Gold Rush! (PC 5.25") 2.01 12/22/88 [AGI 3.002.149]
 		{
 			"goldrush",
 			"2.01 1988-12-22 5.25\"",
@@ -416,7 +421,7 @@
 
 
 	{
-		// Sarien Name == Gold Rush! (PC 3.5") 2.01 12/22/88 [AGI 3.002.149]
+		// Gold Rush! (PC 3.5") 2.01 12/22/88 [AGI 3.002.149]
 		{
 			"goldrush",
 			"2.01 1988-12-22 3.5\"",
@@ -433,7 +438,7 @@
 
 
 	{
-		// Sarien Name == Gold Rush! (PC 5.25") 2.01 12/22/88 [AGI 3.002.149]
+		// Gold Rush! (PC 5.25") 2.01 12/22/88 [AGI 3.002.149]
 		{
 			"goldrush",
 			"2.01 1988-12-22",
@@ -454,7 +459,8 @@
 
 
 	{
-		// Sarien Name == King's Quest 1 (Amiga) 1.0U		# 2.082
+		// King's Quest 1 (Amiga) 1.0U		# 2.082
+		// The original game did not have menus, they are enabled under ScummVM
 		{
 			"kq1",
 			"1.0U 1986",
@@ -465,13 +471,14 @@
 		},
 		GID_KQ1,
 		GType_V2,
-		0,
+		GF_MENUS,
 		0x2440,
 	},
 
 
 	{
-		// Sarien Name == King's Quest 1 (ST) 1.0V
+		// King's Quest 1 (ST) 1.0V
+		// The original game did not have menus, they are enabled under ScummVM
 		{
 			"kq1",
 			"1.0V 1986",
@@ -482,13 +489,14 @@
 		},
 		GID_KQ1,
 		GType_V2,
-		0,
+		GF_MENUS,
 		0x2272,
 	},
 
 
 	{
-		// Sarien Name == King's Quest 1 (IIgs) 1.0S-88223
+		// King's Quest 1 (IIgs) 1.0S-88223
+		// Menus not tested
 		{
 			"kq1",
 			"1.0S 1988-02-23",
@@ -505,7 +513,7 @@
 
 
 	{
-		// Sarien Name == King's Quest 1 (Mac) 2.0C
+		// King's Quest 1 (Mac) 2.0C
 		{
 			"kq1",
 			"2.0C 1987-03-26",
@@ -522,7 +530,7 @@
 
 
 	{
-		// Sarien Name == King's Quest 1 (PC 5.25"/3.5") 2.0F [AGI 2.917]
+		// King's Quest 1 (PC 5.25"/3.5") 2.0F [AGI 2.917]
 		{
 			"kq1",
 			"2.0F 1987-05-05 5.25\"/3.5\"",
@@ -539,7 +547,7 @@
 
 
 	{
-		// Sarien Name == King's Quest 2 (IIgs) 2.0A 6/16/88 (CE)
+		// King's Quest 2 (IIgs) 2.0A 6/16/88 (CE)
 		{
 			"kq2",
 			"2.0A 1988-06-16 (CE)",
@@ -556,7 +564,7 @@
 
 
 	{
-		// Sarien Name == King's Quest 2 (Amiga) 2.0J (Broken)
+		// King's Quest 2 (Amiga) 2.0J (Broken)
 		{
 			"kq2",
 			"2.0J 1987-01-29 [OBJECT decrypted]",
@@ -573,7 +581,7 @@
 
 
 	{
-		// Sarien Name == King's Quest 2 (Mac) 2.0R
+		// King's Quest 2 (Mac) 2.0R
 		{
 			"kq2",
 			"2.0R 1988-03-23",
@@ -607,7 +615,7 @@
 
 
 	{
-		// Sarien Name == King's Quest 2 (PC 5.25"/3.5") 2.2 [AGI 2.426]
+		// King's Quest 2 (PC 5.25"/3.5") 2.2 [AGI 2.426]
 		{
 			"kq2",
 			"2.2 1987-05-07 5.25\"/3.5\"",
@@ -624,7 +632,8 @@
 
 
 	{
-		// Sarien Name == King's Quest 3 (Amiga) 1.01 11/8/86
+		// King's Quest 3 (Amiga) 1.01 11/8/86
+		// The original game did not have menus, they are enabled under ScummVM
 		{
 			"kq3",
 			"1.01 1986-11-08",
@@ -635,13 +644,14 @@
 		},
 		GID_KQ3,
 		GType_V2,
-		0,
+		GF_MENUS,
 		0x2440,
 	},
 
 
 	{
-		// Sarien Name == King's Quest 3 (ST) 1.02 11/18/86
+		// King's Quest 3 (ST) 1.02 11/18/86
+		// Does not have menus, crashes if menus are enforced. Therefore, ESC pauses the game
 		{
 			"kq3",
 			"1.02 1986-11-18",
@@ -652,13 +662,13 @@
 		},
 		GID_KQ3,
 		GType_V2,
-		0,
+		GF_ESCPAUSE,
 		0x2272,
 	},
 
 
 	{
-		// Sarien Name == King's Quest 3 (Mac) 2.14 3/15/88
+		// King's Quest 3 (Mac) 2.14 3/15/88
 		{
 			"kq3",
 			"2.14 1988-03-15",
@@ -675,7 +685,7 @@
 
 
 	{
-		// Sarien Name == King's Quest 3 (IIgs) 2.0A 8/28/88 (CE)
+		// King's Quest 3 (IIgs) 2.0A 8/28/88 (CE)
 		{
 			"kq3",
 			"2.0A 1988-08-28 (CE)",
@@ -692,7 +702,7 @@
 
 
 	{
-		// Sarien Name == King's Quest 3 (Amiga) 2.15 11/15/89	# 2.333
+		// King's Quest 3 (Amiga) 2.15 11/15/89	# 2.333
 		{
 			"kq3",
 			"2.15 1989-11-15",
@@ -709,7 +719,8 @@
 
 
 	{
-		// Sarien Name == King's Quest 3 (PC) 1.01 11/08/86 [AGI 2.272]
+		// King's Quest 3 (PC) 1.01 11/08/86 [AGI 2.272]
+		// Does not have menus, crashes if menus are enforced. Therefore, ESC pauses the game
 		{
 			"kq3",
 			"1.01 1986-11-08",
@@ -720,13 +731,13 @@
 		},
 		GID_KQ3,
 		GType_V2,
-		0,
+		GF_ESCPAUSE,
 		0x2272,
 	},
 
 
 	{
-		// Sarien Name == King's Quest 3 (PC 5.25") 2.00 5/25/87 [AGI 2.435]
+		// King's Quest 3 (PC 5.25") 2.00 5/25/87 [AGI 2.435]
 		{
 			"kq3",
 			"2.00 1987-05-25 5.25\"",
@@ -743,7 +754,8 @@
 
 
 	{
-		// Sarien Name == King's Quest 3 (Mac) 2.14 3/15/88
+		// King's Quest 3 (Mac) 2.14 3/15/88
+		// Menus not tested
 		{
 			"kq3",
 			"2.14 1988-03-15 5.25\"",
@@ -760,7 +772,7 @@
 
 
 	{
-		// Sarien Name == King's Quest 3 (PC 3.5") 2.14 3/15/88 [AGI 2.936]
+		// King's Quest 3 (PC 3.5") 2.14 3/15/88 [AGI 2.936]
 		{
 			"kq3",
 			"2.14 1988-03-15 3.5\"",
@@ -777,7 +789,7 @@
 
 
 	{
-		// Sarien Name == King's Quest 4 (PC 5.25") 2.3 9/27/88 [AGI 3.002.086]
+		// King's Quest 4 (PC 5.25") 2.3 9/27/88 [AGI 3.002.086]
 		{
 			"kq4",
 			"2.3 1988-09-27",
@@ -794,7 +806,8 @@
 
 
 	{
-		// Sarien Name == King's Quest 4 (IIgs) 1.0K 11/22/88 (CE)
+		// King's Quest 4 (IIgs) 1.0K 11/22/88 (CE)
+		// Menus not tested
 		{
 			"kq4",
 			"1.0K 1988-11-22",
@@ -811,7 +824,7 @@
 
 
 	{
-		// Sarien Name == King's Quest 4 (PC 3.5") 2.0 7/27/88 [AGI 3.002.086]
+		// King's Quest 4 (PC 3.5") 2.0 7/27/88 [AGI 3.002.086]
 		{
 			"kq4",
 			"2.0 1988-07-27 3.5\"",
@@ -828,7 +841,8 @@
 
 
 	{
-		// Sarien Name == King's Quest 4 (PC 3.5") 2.2 9/27/88 [AGI 3.002.086]
+		// King's Quest 4 (PC 3.5") 2.2 9/27/88 [AGI 3.002.086]
+		// Menus not tested
 		{
 			"kq4",
 			"2.2 1988-09-27 3.5\"",
@@ -845,7 +859,8 @@
 
 
 	{
-		// Sarien Name == King's Quest 4 demo (PC) [AGI 3.002.102]
+		// King's Quest 4 demo (PC) [AGI 3.002.102]
+		// Menus not tested
 		{
 			"kq4",
 			"Demo 1988-12-20",
@@ -862,7 +877,7 @@
 
 
 	{
-		// Sarien Name == Leisure Suit Larry 1 (PC 5.25"/3.5") 1.00 6/1/87 [AGI 2.440]
+		// Leisure Suit Larry 1 (PC 5.25"/3.5") 1.00 6/1/87 [AGI 2.440]
 		{
 			"lsl1",
 			"1.00 1987-06-01 5.25\"/3.5\"",
@@ -879,7 +894,7 @@
 
 
 	{
-		// Sarien Name == Leisure Suit Larry 1 (ST) 1.04 6/18/87
+		// Leisure Suit Larry 1 (ST) 1.04 6/18/87
 		{
 			"lsl1",
 			"1.04 1987-06-18",
@@ -896,7 +911,7 @@
 
 
 	{
-		// Sarien Name == Leisure Suit Larry 1 (Amiga) 1.05 6/26/87	# x.yyy
+		// Leisure Suit Larry 1 (Amiga) 1.05 6/26/87	# x.yyy
 		{
 			"lsl1",
 			"1.05 1987-06-26",
@@ -913,7 +928,7 @@
 
 
 	{
-		// Sarien Name == Leisure Suit Larry 1 (IIgs) 1.0E
+		// Leisure Suit Larry 1 (IIgs) 1.0E
 		{
 			"lsl1",
 			"1.0E 1987",
@@ -930,7 +945,7 @@
 
 
 	{
-		// Sarien Name == Leisure Suit Larry 1 (Mac) 1.05 6/26/87
+		// Leisure Suit Larry 1 (Mac) 1.05 6/26/87
 		{
 			"lsl1",
 			"1.05 1987-06-26",
@@ -947,7 +962,7 @@
 
 
 	{
-		// Sarien Name == Manhunter NY (ST) 1.03 10/20/88
+		// Manhunter NY (ST) 1.03 10/20/88
 		{
 			"mh1",
 			"1.03 1988-10-20",
@@ -964,7 +979,7 @@
 
 
 	{
-		// Sarien Name == Manhunter NY (IIgs) 2.0E 10/05/88 (CE)
+		// Manhunter NY (IIgs) 2.0E 10/05/88 (CE)
 		{
 			"mh1",
 			"2.0E 1988-10-05 (CE)",
@@ -981,7 +996,7 @@
 
 
 	{
-		// Sarien Name == Manhunter NY (Amiga) 1.06 3/18/89
+		// Manhunter NY (Amiga) 1.06 3/18/89
 		{
 			"mh1",
 			"1.06 1989-03-18",
@@ -999,7 +1014,7 @@
 
 	{
 		// reported by Filippos (thebluegr) in bugreport #1654500
-		// Sarien Name == Manhunter NY (PC 5.25") 1.22 8/31/88 [AGI 3.002.107]
+		// Manhunter NY (PC 5.25") 1.22 8/31/88 [AGI 3.002.107]
 		{
 			"mh1",
 			"1.22 1988-08-31",
@@ -1016,7 +1031,7 @@
 
 
 	{
-		// Sarien Name == Manhunter NY (PC 3.5") 1.22 8/31/88 [AGI 3.002.102]
+		// Manhunter NY (PC 3.5") 1.22 8/31/88 [AGI 3.002.102]
 		{
 			"mh1",
 			"1.22 1988-08-31",
@@ -1033,7 +1048,7 @@
 
 
 	{
-		// Sarien Name == Manhunter SF (ST) 1.0 7/29/89
+		// Manhunter SF (ST) 1.0 7/29/89
 		{
 			"mh2",
 			"1.0 1989-07-29",
@@ -1050,7 +1065,7 @@
 
 
 	{
-		// Sarien Name == Manhunter SF (Amiga) 3.06 8/17/89		# 2.333
+		// Manhunter SF (Amiga) 3.06 8/17/89		# 2.333
 		{
 			"mh2",
 			"3.06 1989-08-17",
@@ -1067,7 +1082,7 @@
 
 
 	{
-		// Sarien Name == Manhunter SF (PC 5.25") 3.03 8/17/89 [AGI 3.002.149]
+		// Manhunter SF (PC 5.25") 3.03 8/17/89 [AGI 3.002.149]
 		{
 			"mh2",
 			"3.03 1989-08-17 5.25\"",
@@ -1084,7 +1099,7 @@
 
 
 	{
-		// Sarien Name == Manhunter SF (PC 3.5") 3.02 7/26/89 [AGI 3.002.149]
+		// Manhunter SF (PC 3.5") 3.02 7/26/89 [AGI 3.002.149]
 		{
 			"mh2",
 			"3.02 1989-07-26 3.5\"",
@@ -1099,9 +1114,11 @@
 		0x3149,
 	},
 
-
+#if 0
 	{
-		// Sarien Name == Mixed-Up Mother Goose (Amiga) 1.1
+		// Mixed-Up Mother Goose (Amiga) 1.1
+		// Problematic: crashes
+		// Menus not tested
 		{
 			"mixedup",
 			"1.1 1986-12-10",
@@ -1115,10 +1132,10 @@
 		0,
 		0x3086,
 	},
+#endif
 
-
 	{
-		// Sarien Name == Mixed Up Mother Goose (IIgs)
+		// Mixed Up Mother Goose (IIgs)
 		{
 			"mixedup",
 			"1987",
@@ -1135,7 +1152,7 @@
 
 
 	{
-		// Sarien Name == Mixed-Up Mother Goose (PC) [AGI 2.915]
+		// Mixed-Up Mother Goose (PC) [AGI 2.915]
 		{
 			"mixedup",
 			"1987-11-10",
@@ -1153,7 +1170,8 @@
 
 #if 0
 	{
-		// Sarien Name == Mixed Up Mother Goose (PC) [AGI 2.915] (Broken)
+		// Mixed Up Mother Goose (PC) [AGI 2.915] (Broken)
+		// Menus not tested
 		{
 			"mixedup",
 			"[corrupt/OBJECT from disk 1]",
@@ -1171,7 +1189,7 @@
 
 
 	{
-		// Sarien Name == Police Quest 1 (PC) 2.0E 11/17/87 [AGI 2.915]
+		// Police Quest 1 (PC) 2.0E 11/17/87 [AGI 2.915]
 		{
 			"pq1",
 			"2.0E 1987-11-17",
@@ -1188,7 +1206,7 @@
 
 
 	{
-		// Sarien Name == Police Quest 1 (Mac) 2.0G 12/3/87
+		// Police Quest 1 (Mac) 2.0G 12/3/87
 		{
 			"pq1",
 			"2.0G 1987-12-03",
@@ -1205,7 +1223,7 @@
 
 
 	{
-		// Sarien Name == Police Quest 1 (IIgs) 2.0B-88421
+		// Police Quest 1 (IIgs) 2.0B-88421
 		{
 			"pq1",
 			"2.0B 1988-04-21",
@@ -1222,7 +1240,7 @@
 
 
 	{
-		// Sarien Name == Police Quest 1 (Amiga) 2.0B 2/22/89	# 2.310
+		// Police Quest 1 (Amiga) 2.0B 2/22/89	# 2.310
 		{
 			"pq1",
 			"2.0B 1989-02-22",
@@ -1239,7 +1257,7 @@
 
 
 	{
-		// Sarien Name == Police Quest 1 (IIgs) 2.0A-88318
+		// Police Quest 1 (IIgs) 2.0A-88318
 		{
 			"pq1",
 			"2.0A 1988-03-18",
@@ -1256,7 +1274,7 @@
 
 
 	{
-		// Sarien Name == Police Quest 1 (PC) 2.0A 10/23/87 [AGI 2.903/2.911]
+		// Police Quest 1 (PC) 2.0A 10/23/87 [AGI 2.903/2.911]
 		{
 			"pq1",
 			"2.0A 1987-10-23",
@@ -1273,7 +1291,7 @@
 
 
 	{
-		// Sarien Name == Police Quest 1 (Mac) 2.0G 12/3/87
+		// Police Quest 1 (Mac) 2.0G 12/3/87
 		{
 			"pq1",
 			"2.0G 1987-12-03 5.25\"/ST",
@@ -1307,7 +1325,8 @@
 
 
 	{
-		// Sarien Name == Space Quest 1 (ST) 1.1A
+		// Space Quest 1 (ST) 1.1A
+		// The original game did not have menus, they are enabled under ScummVM
 		{
 			"sq1",
 			"1.1A 1986-02-06",
@@ -1318,13 +1337,14 @@
 		},
 		GID_SQ1,
 		GType_V2,
-		0,
+		GF_MENUS,
 		0x2440,
 	},
 
 
 	{
-		// Sarien Name == Space Quest 1 (PC) 1.1A [AGI 2.272]
+		// Space Quest 1 (PC) 1.1A [AGI 2.272]
+		// The original game did not have menus, they are enabled under ScummVM
 		{
 			"sq1",
 			"1.1A 1986-11-13",
@@ -1335,13 +1355,14 @@
 		},
 		GID_SQ1,
 		GType_V2,
-		0,
+		GF_MENUS,
 		0x2272,
 	},
 
 
 	{
-		// Sarien Name == Space Quest 1 (Amiga) 1.2			# 2.082
+		// Space Quest 1 (Amiga) 1.2			# 2.082
+		// The original game did not have menus, they are enabled under ScummVM
 		{
 			"sq1",
 			"1.2 1986",
@@ -1352,13 +1373,13 @@
 		},
 		GID_SQ1,
 		GType_V2,
-		0,
+		GF_MENUS,
 		0x2440,
 	},
 
 
 	{
-		// Sarien Name == Space Quest 1 (Mac) 1.5D
+		// Space Quest 1 (Mac) 1.5D
 		{
 			"sq1",
 			"1.5D 1987-04-02",
@@ -1375,7 +1396,7 @@
 
 
 	{
-		// Sarien Name == Space Quest 1 (IIgs) 2.2
+		// Space Quest 1 (IIgs) 2.2
 		{
 			"sq1",
 			"2.2 1987",
@@ -1392,7 +1413,8 @@
 
 
 	{
-		// Sarien Name == Space Quest 1 (PC) 1.0X [AGI 2.089]
+		// Space Quest 1 (PC) 1.0X [AGI 2.089]
+		// Does not have menus, crashes if menus are enforced. Therefore, ESC pauses the game
 		{
 			"sq1",
 			"1.0X 1986-09-24",
@@ -1403,30 +1425,14 @@
 		},
 		GID_SQ1,
 		GType_V2,
-		0,
+		GF_ESCPAUSE,
 		0x2089,
 	},
 
 
-	{
-		// Sarien Name == Space Quest 1 (PC) 1.1A [AGI 2.272]
-		{
-			"sq1",
-			"1.1A 1986-11-13",
-			AD_ENTRY1("logdir", "8d8c20ab9f4b6e4817698637174a1cb6"),
-			Common::EN_ANY,
-			Common::kPlatformPC,
-			Common::ADGF_NO_FLAGS
-		},
-		GID_SQ1,
-		GType_V2,
-		0,
-		0x2272,
-	},
 
-
 	{
-		// Sarien Name == Space Quest 1 (PC 5.25"/3.5") 2.2 [AGI 2.426/2.917]
+		// Space Quest 1 (PC 5.25"/3.5") 2.2 [AGI 2.426/2.917]
 		{
 			"sq1",
 			"2.2 1987-05-07 5.25\"/3.5\"",
@@ -1444,7 +1450,7 @@
 
 
 	{
-		// Sarien Name == Space Quest 2 (PC 3.5") 2.0D [AGI 2.936]
+		// Space Quest 2 (PC 3.5") 2.0D [AGI 2.936]
 		{
 			"sq2",
 			"2.0D 1988-03-14 3.5\"",
@@ -1461,7 +1467,7 @@
 
 
 	{
-		// Sarien Name == Space Quest 2 (IIgs) 2.0A 7/25/88 (CE)
+		// Space Quest 2 (IIgs) 2.0A 7/25/88 (CE)
 		{
 			"sq2",
 			"2.0A 1988-07-25 (CE)",
@@ -1478,7 +1484,7 @@
 
 
 	{
-		// Sarien Name == Space Quest 2 (Amiga) 2.0F
+		// Space Quest 2 (Amiga) 2.0F
 		{
 			"sq2",
 			"2.0F 1986-12-09 [VOL.2->PICTURE.16 broken]",
@@ -1499,7 +1505,7 @@
 
 
 	{
-		// Sarien Name == Space Quest 2 (Mac) 2.0D
+		// Space Quest 2 (Mac) 2.0D
 		{
 			"sq2",
 			"2.0D 1988-04-04",
@@ -1517,7 +1523,7 @@
 
 	{
 		// reported by Filippos (thebluegr) in bugreport #1654500
-		// Sarien Name == Space Quest 2 (PC 5.25") 2.0A [AGI 2.912]
+		// Space Quest 2 (PC 5.25") 2.0A [AGI 2.912]
 		{
 			"sq2",
 			"2.0A 1987-11-06 5.25\"",
@@ -1534,7 +1540,7 @@
 
 
 	{
-		// Sarien Name == Space Quest 2 (PC 3.5") 2.0A [AGI 2.912]
+		// Space Quest 2 (PC 3.5") 2.0A [AGI 2.912]
 		{
 			"sq2",
 			"2.0A 1987-11-06 3.5\"",
@@ -1551,7 +1557,8 @@
 
 
 	{
-		// Sarien Name == Space Quest 2 (PC 5.25"/ST) 2.0C/A [AGI 2.915]
+		// Space Quest 2 (PC 5.25"/ST) 2.0C/A [AGI 2.915]
+		// Menus not tested
 		{
 			"sq2",
 			"2.0C/A 5.25\"/ST",
@@ -1568,7 +1575,7 @@
 
 
 	{
-		// Sarien Name == Space Quest 2 (PC 3.5") 2.0F [AGI 2.936]
+		// Space Quest 2 (PC 3.5") 2.0F [AGI 2.936]
 		{
 			"sq2",
 			"2.0F 1989-01-05 3.5\"",
@@ -1585,7 +1592,7 @@
 
 
 	{
-		// Sarien Name == Xmas Card 1986 (PC) [AGI 2.272]
+		// Xmas Card 1986 (PC) [AGI 2.272]
 		{
 			"xmascard",
 			"1986-11-13 [version 1]",
@@ -1675,7 +1682,7 @@
 	FANMADE("Good Man (demo v3.41)", "3facd8a8f856b7b6e0f6c3200274d88c"),
 
 	{
-		// Sarien Name == Groza
+		// Groza
 		{
 			"agi-fanmade",
 			"Groza (russian) [AGDS sample]",

Modified: scummvm/branches/gsoc2007-fsnode/engines/agi/graphics.cpp
===================================================================
--- scummvm/branches/gsoc2007-fsnode/engines/agi/graphics.cpp	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/engines/agi/graphics.cpp	2007-08-05 19:34:20 UTC (rev 28462)
@@ -68,6 +68,158 @@
 };
 
 /**
+ * Atari ST AGI palette.
+ * Used by all of the tested Atari ST AGI games
+ * from Donald Duck's Playground (1986) to Manhunter II (1989).
+ * 16 RGB colors. 3 bits per color component.
+ */
+uint8 atariStAgiPalette[16 * 3] = {
+	0x0, 0x0, 0x0,
+	0x0, 0x0, 0x7,
+	0x0, 0x4, 0x0,
+	0x0, 0x5, 0x4,
+	0x5, 0x0, 0x0,
+	0x5, 0x3, 0x6,
+	0x4, 0x3, 0x0,
+	0x5, 0x5, 0x5,
+	0x3, 0x3, 0x2,
+	0x0, 0x5, 0x7,
+	0x0, 0x6, 0x0,
+	0x0, 0x7, 0x6,
+	0x7, 0x2, 0x3,
+	0x7, 0x4, 0x7,
+	0x7, 0x7, 0x4,
+	0x7, 0x7, 0x7
+};
+
+/**
+ * Second generation Apple IIGS AGI palette.
+ * A 16-color, 12-bit RGB palette.
+ *
+ * Used by at least the following Apple IIGS AGI versions:
+ * 1.003 (Leisure Suit Larry I  v1.0E, intro says 1987)
+ * 1.005 (AGI Demo 2            1987-06-30?)
+ * 1.006 (King's Quest I        v1.0S 1988-02-23)
+ * 1.007 (Police Quest I        v2.0B 1988-04-21 8:00am)
+ * 1.013 (King's Quest II       v2.0A 1988-06-16 (CE))
+ * 1.013 (Mixed-Up Mother Goose v2.0A 1988-05-31 10:00am)
+ * 1.014 (King's Quest III      v2.0A 1988-08-28 (CE))
+ * 1.014 (Space Quest II        v2.0A, LOGIC.141 says 1988)
+ * 2.004 (Manhunter I           v2.0E 1988-10-05 (CE))
+ * 2.006 (King's Quest IV       v1.0K 1988-11-22 (CE))
+ * 3.001 (Black Cauldron        v1.0O 1989-02-24 (CE))
+ * 3.003 (Gold Rush!            v1.0M 1989-02-28 (CE))
+ */
+uint8 appleIIgsAgiPaletteV2[16 * 3] = {
+	0x0, 0x0, 0x0,
+	0x0, 0x0, 0xF,
+	0x0, 0x8, 0x0,
+	0x0, 0xD, 0xB,
+	0xC, 0x0, 0x0,
+	0xB, 0x7, 0xD,
+	0x8, 0x5, 0x0,
+	0xB, 0xB, 0xB,
+	0x7, 0x7, 0x7,
+	0x0, 0xB, 0xF,
+	0x0, 0xE, 0x0,
+	0x0, 0xF, 0xD,
+	0xF, 0x9, 0x8,
+	0xD, 0x9, 0xF, // Only this differs from the 1st generation palette
+	0xE, 0xE, 0x0,
+	0xF, 0xF, 0xF
+};
+
+/**
+ * First generation Amiga & Apple IIGS AGI palette.
+ * A 16-color, 12-bit RGB palette.
+ *
+ * Used by at least the following Amiga AGI versions:
+ * 2.082 (King's Quest I   v1.0U 1986)
+ * 2.082 (Space Quest I    v1.2  1986)
+ * 2.090 (King's Quest III v1.01 1986-11-08)
+ * 2.107 (King's Quest II  v2.0J 1987-01-29)
+ * x.yyy (Black Cauldron   v2.00 1987-06-14)
+ * x.yyy (Larry I          v1.05 1987-06-26)
+ *
+ * Also used by at least the following Apple IIGS AGI versions:
+ * 1.002 (Space Quest I, intro says v2.2 1987)
+ */
+uint8 amigaAgiPaletteV1[16 * 3] = {
+	0x0, 0x0, 0x0,
+	0x0, 0x0, 0xF,
+	0x0, 0x8, 0x0,
+	0x0, 0xD, 0xB,
+	0xC, 0x0, 0x0,
+	0xB, 0x7, 0xD,
+	0x8, 0x5, 0x0,
+	0xB, 0xB, 0xB,
+	0x7, 0x7, 0x7,
+	0x0, 0xB, 0xF,
+	0x0, 0xE, 0x0,
+	0x0, 0xF, 0xD,
+	0xF, 0x9, 0x8,
+	0xF, 0x7, 0x0,
+	0xE, 0xE, 0x0,
+	0xF, 0xF, 0xF
+};
+
+/**
+ * Second generation Amiga AGI palette.
+ * A 16-color, 12-bit RGB palette.
+ *
+ * Used by at least the following Amiga AGI versions:
+ * 2.202 (Space Quest II v2.0F. Intro says 1988. ScummVM 0.10.0 detects as 1986-12-09)
+ */
+uint8 amigaAgiPaletteV2[16 * 3] = {
+	0x0, 0x0, 0x0,
+	0x0, 0x0, 0xF,
+	0x0, 0x8, 0x0,
+	0x0, 0xD, 0xB,
+	0xC, 0x0, 0x0,
+	0xB, 0x7, 0xD,
+	0x8, 0x5, 0x0,
+	0xB, 0xB, 0xB,
+	0x7, 0x7, 0x7,
+	0x0, 0xB, 0xF,
+	0x0, 0xE, 0x0,
+	0x0, 0xF, 0xD,
+	0xF, 0x9, 0x8,
+	0xD, 0x0, 0xF,
+	0xE, 0xE, 0x0,
+	0xF, 0xF, 0xF
+};
+
+/**
+ * Third generation Amiga AGI palette.
+ * A 16-color, 12-bit RGB palette.
+ *
+ * Used by at least the following Amiga AGI versions:
+ * 2.310 (Police Quest I   v2.0B 1989-02-22)
+ * 2.316 (Gold Rush!       v2.05 1989-03-09)
+ * x.yyy (Manhunter I      v1.06 1989-03-18)
+ * 2.333 (Manhunter II     v3.06 1989-08-17)
+ * 2.333 (King's Quest III v2.15 1989-11-15)
+ */
+uint8 amigaAgiPaletteV3[16 * 3] = {
+	0x0, 0x0, 0x0,
+	0x0, 0x0, 0xB,
+	0x0, 0xB, 0x0,
+	0x0, 0xB, 0xB,
+	0xB, 0x0, 0x0,
+	0xB, 0x0, 0xB,
+	0xC, 0x7, 0x0,
+	0xB, 0xB, 0xB,
+	0x7, 0x7, 0x7,
+	0x0, 0x0, 0xF,
+	0x0, 0xF, 0x0,
+	0x0, 0xF, 0xF,
+	0xF, 0x0, 0x0,
+	0xF, 0x0, 0xF,
+	0xF, 0xF, 0x0,
+	0xF, 0xF, 0xF
+};
+
+/**
  * 16 color amiga-ish palette.
  */
 uint8 newPalette[16 * 3] = {
@@ -554,13 +706,42 @@
 }
 
 /**
- * Draw button
+ * Draw a default style button.
+ * Swaps background and foreground color if button is in focus or being pressed.
  * @param x  x coordinate of the button
  * @param y  y coordinate of the button
  * @param a  set if the button has focus
  * @param p  set if the button is pressed
+ * @param fgcolor foreground color of the button when it is neither in focus nor being pressed
+ * @param bgcolor background color of the button when it is neither in focus nor being pressed
  */
-void GfxMgr::drawButton(int x, int y, const char *s, int a, int p, int fgcolor, int bgcolor) {
+void GfxMgr::drawDefaultStyleButton(int x, int y, const char *s, int a, int p, int fgcolor, int bgcolor) {
+	int textOffset     = _vm->_defaultButtonStyle.getTextOffset(a > 0, p > 0);
+	AgiTextColor color = _vm->_defaultButtonStyle.getColor     (a > 0, p > 0, fgcolor, bgcolor);
+	bool border        = _vm->_defaultButtonStyle.getBorder    (a > 0, p > 0);
+
+	rawDrawButton(x, y, s, color.fg, color.bg, border, textOffset);
+}
+
+/**
+ * Draw a button using the currently chosen style.
+ * Amiga-style is used for the Amiga-rendering mode, PC-style is used otherwise.
+ * @param x  x coordinate of the button
+ * @param y  y coordinate of the button
+ * @param hasFocus  set if the button has focus
+ * @param pressed  set if the button is pressed
+ * @param positive  set if button is positive, otherwise button is negative (Only matters with Amiga-style buttons)
+ * TODO: Make Amiga-style buttons a bit wider as they were in Amiga AGI games.
+ */
+void GfxMgr::drawCurrentStyleButton(int x, int y, const char *label, bool hasFocus, bool pressed, bool positive) {
+	int textOffset     = _vm->_buttonStyle.getTextOffset(hasFocus, pressed);
+	AgiTextColor color = _vm->_buttonStyle.getColor(hasFocus, pressed, positive);
+	bool border        = _vm->_buttonStyle.getBorder(hasFocus, pressed);
+	
+	rawDrawButton(x, y, label, color.fg, color.bg, border, textOffset);
+}
+
+void GfxMgr::rawDrawButton(int x, int y, const char *s, int fgcolor, int bgcolor, bool border, int textOffset) {
 	int len = strlen(s);
 	int x1, y1, x2, y2;
 
@@ -569,8 +750,12 @@
 	x2 = x + CHAR_COLS * len + 2;
 	y2 = y + CHAR_LINES + 2;
 
+	// Draw a filled rectangle that's larger than the button. Used for drawing
+	// a border around the button as the button itself is drawn after this.
+	drawRectangle(x1, y1, x2, y2, border ? BUTTON_BORDER : MSG_BOX_COLOUR);
+	
 	while (*s) {
-		putTextCharacter(0, x + (!!p), y + (!!p), *s++, a ? bgcolor : fgcolor, a ? fgcolor : bgcolor);
+		putTextCharacter(0, x + textOffset, y + textOffset, *s++, fgcolor, bgcolor);
 		x += CHAR_COLS;
 	}
 
@@ -623,39 +808,26 @@
 
 /**
  * Initialize the color palette
- * This function initializes the color palette using the specified 16-color
+ * This function initializes the color palette using the specified
  * RGB palette.
- * @param p  A pointer to the 16-color RGB palette.
+ * @param p           A pointer to the source RGB palette.
+ * @param colorCount  Count of colors in the source palette.
+ * @param fromBits    Bits per source color component.
+ * @param toBits      Bits per destination color component.
  */
-void GfxMgr::initPalette(uint8 *p) {
-	int i;
-
-	for (i = 0; i < 48; i++) {
-		_palette[i] = p[i];
+void GfxMgr::initPalette(uint8 *p, uint colorCount, uint fromBits, uint toBits) {
+	const uint srcMax  = (1 << fromBits) - 1;
+	const uint destMax = (1 << toBits) - 1;
+	for (uint col = 0; col < colorCount; col++) {
+		for (uint comp = 0; comp < 3; comp++) { // Convert RGB components
+			_palette[col * 4 + comp] = (p[col * 3 + comp] * destMax) / srcMax;
+		}
+		_palette[col * 4 + 3] = 0; // Set alpha to zero
 	}
 }
 
 void GfxMgr::gfxSetPalette() {
-	int i;
-	byte pal[256 * 4];
-
-	if (!(_vm->getFeatures() & (GF_AGI256 | GF_AGI256_2))) {
-		for (i = 0; i < 16; i++) {
-			pal[i * 4 + 0] = _palette[i * 3 + 0] << 2;
-			pal[i * 4 + 1] = _palette[i * 3 + 1] << 2;
-			pal[i * 4 + 2] = _palette[i * 3 + 2] << 2;
-			pal[i * 4 + 3] = 0;
-		}
-		g_system->setPalette(pal, 0, 16);
-	} else {
-		for (i = 0; i < 256; i++) {
-			pal[i * 4 + 0] = vgaPalette[i * 3 + 0];
-			pal[i * 4 + 1] = vgaPalette[i * 3 + 1];
-			pal[i * 4 + 2] = vgaPalette[i * 3 + 2];
-			pal[i * 4 + 3] = 0;
-		}
-		g_system->setPalette(pal, 0, 256);
-	}
+	g_system->setPalette(_palette, 0, 256);
 }
 
 //Gets AGIPAL Data
@@ -739,8 +911,28 @@
 };
 
 /**
- * RGBA-palette for the black and white SCI-style arrow cursor.
+ * A black and white Apple IIGS style arrow cursor (9x11).
+ * 0 = Transparent.
+ * 1 = Black (#000000 in 24-bit RGB).
+ * 2 = White (#FFFFFF in 24-bit RGB).
  */
+static const byte appleIIgsMouseCursor[] = {
+	2,2,0,0,0,0,0,0,0,
+	2,1,2,0,0,0,0,0,0,
+	2,1,1,2,0,0,0,0,0,
+	2,1,1,1,2,0,0,0,0,
+	2,1,1,1,1,2,0,0,0,
+	2,1,1,1,1,1,2,0,0,
+	2,1,1,1,1,1,1,2,0,
+	2,1,1,1,1,1,1,1,2,
+	2,1,1,2,1,1,2,2,0,
+	2,2,2,0,2,1,1,2,0,
+	0,0,0,0,0,2,2,2,0
+};
+
+/**
+ * RGBA-palette for the black and white SCI and Apple IIGS arrow cursors.
+ */
 static const byte sciMouseCursorPalette[] = {
 	0x00, 0x00, 0x00,	0x00, // Black
 	0xFF, 0xFF, 0xFF,	0x00  // White
@@ -819,7 +1011,9 @@
  * @see deinit_video()
  */
 int GfxMgr::initVideo() {
-	if (_vm->_renderMode == Common::kRenderEGA)
+	if (_vm->getFeatures() & (GF_AGI256 | GF_AGI256_2))
+		initPalette(vgaPalette, 256, 8);
+	else if (_vm->_renderMode == Common::kRenderEGA)
 		initPalette(egaPalette);
 	else
 		initPalette(newPalette);

Modified: scummvm/branches/gsoc2007-fsnode/engines/agi/graphics.h
===================================================================
--- scummvm/branches/gsoc2007-fsnode/engines/agi/graphics.h	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/engines/agi/graphics.h	2007-08-05 19:34:20 UTC (rev 28462)
@@ -41,7 +41,7 @@
 private:
 	AgiEngine *_vm;
 
-	uint8 _palette[16 * 3];
+	uint8 _palette[256 * 4];
 	uint8 *_agiScreen;
 	unsigned char *_screen;
 
@@ -50,6 +50,9 @@
 	uint8 _agipalPalette[16 * 3];
 	int _agipalFileNum;
 
+private:
+	void rawDrawButton(int x, int y, const char *s, int fgcolor, int bgcolor, bool border, int textOffset);
+
 public:
 	GfxMgr(AgiEngine *vm);
 
@@ -74,12 +77,13 @@
 	void clearScreen(int);
 	void clearConsoleScreen(int);
 	void drawBox(int, int, int, int, int, int, int);
-	void drawButton(int, int, const char *, int, int, int fgcolor = 0, int bgcolor = 0);
+	void drawDefaultStyleButton(int, int, const char *, int, int, int fgcolor = 0, int bgcolor = 0);
+	void drawCurrentStyleButton(int x, int y, const char *label, bool hasFocus, bool pressed = false, bool positive = true);
 	int testButton(int, int, const char *);
 	void drawRectangle(int, int, int, int, int);
 	void saveBlock(int, int, int, int, uint8 *);
 	void restoreBlock(int, int, int, int, uint8 *);
-	void initPalette(uint8 *);
+	void initPalette(uint8 *p, uint colorCount = 16, uint fromBits = 6, uint toBits = 8);
 	void setAGIPal(int);
 	int getAGIPalFileNum();
 	void drawFrame(int x1, int y1, int x2, int y2, int c1, int c2);

Modified: scummvm/branches/gsoc2007-fsnode/engines/agi/keyboard.cpp
===================================================================
--- scummvm/branches/gsoc2007-fsnode/engines/agi/keyboard.cpp	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/engines/agi/keyboard.cpp	2007-08-05 19:34:20 UTC (rev 28462)
@@ -107,8 +107,10 @@
 	VtEntry *v = &_game.viewTable[0];
 	int i;
 
-	/* AGI 3.149 games and The Black Cauldron need KEY_ESCAPE to use menus */
-	if (key == 0 || (key == KEY_ESCAPE && agiGetRelease() != 0x3149 && getGameID() != GID_BC) )
+	// AGI 3.149 games and The Black Cauldron need KEY_ESCAPE to use menus
+	// Games with the GF_ESCPAUSE flag need KEY_ESCAPE to pause the game
+	if (key == 0 || 
+		(key == KEY_ESCAPE && agiGetRelease() != 0x3149 && getGameID() != GID_BC && !(getFeatures() & GF_ESCPAUSE)) )
 		return false;
 
 	if ((getGameID() == GID_MH1 || getGameID() == GID_MH2) && (key == KEY_ENTER) &&
@@ -127,7 +129,7 @@
 	}
 
 	if (key == BUTTON_LEFT) {
-		if (getflag(fMenusWork) && g_mouse.y <= CHAR_LINES) {
+		if ((getflag(fMenusWork) || (getFeatures() & GF_MENUS)) && g_mouse.y <= CHAR_LINES) {
 			newInputMode(INPUT_MENU);
 			return true;
 		}

Modified: scummvm/branches/gsoc2007-fsnode/engines/agi/menu.cpp
===================================================================
--- scummvm/branches/gsoc2007-fsnode/engines/agi/menu.cpp	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/engines/agi/menu.cpp	2007-08-05 19:34:20 UTC (rev 28462)
@@ -267,7 +267,7 @@
 	static int menuActive = false;
 	static int buttonUsed = 0;
 
-	if (!_vm->getflag(fMenusWork))
+	if (!_vm->getflag(fMenusWork) && !(_vm->getFeatures() & GF_MENUS))
 		return false;
 
 	if (!menuActive) {
@@ -351,6 +351,12 @@
 						debugC(6, kDebugLevelMenu | kDebugLevelInput, "event %d registered", d->event);
 						_vm->_game.evKeyp[d->event].occured = true;
 						_vm->_game.evKeyp[d->event].data = d->event;
+						// In LSL1, event 0x20 is set when changing the game speed to normal via the menu
+						// Do not set the event data to 0x20, as this event is then incorrectly triggered
+						// when the spacebar is pressed, which has a keycode equal to 0x20 as well
+						// Fixes bug #1751390 - "LSL: after changing game speed, space key turn unfunctional"
+						if (d->event == 0x20)
+							_vm->_game.evKeyp[d->event].data = d->event + 1;
 						goto exit_menu;
 					}
 				}

Modified: scummvm/branches/gsoc2007-fsnode/engines/agi/predictive.cpp
===================================================================
--- scummvm/branches/gsoc2007-fsnode/engines/agi/predictive.cpp	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/engines/agi/predictive.cpp	2007-08-05 19:34:20 UTC (rev 28462)
@@ -30,6 +30,10 @@
 #include "common/func.h"
 #include "common/config-manager.h"
 
+#ifdef __DS__
+#include "wordcompletion.h"
+#endif
+
 namespace Agi {
 
 #define kModePre 0
@@ -200,9 +204,9 @@
 					color2 = 7;
 				}
 				if (i == 14) {
-					_gfx->drawButton(bx[i], by[i], modes[mode], i == active, 0, color1, color2);
+					_gfx->drawDefaultStyleButton(bx[i], by[i], modes[mode], i == active, 0, color1, color2);
 				} else {
-					_gfx->drawButton(bx[i], by[i], buttons[i], i == active, 0, color1, color2);
+					_gfx->drawDefaultStyleButton(bx[i], by[i], buttons[i], i == active, 0, color1, color2);
 				}
 			}
 
@@ -521,6 +525,10 @@
 	while ((ptr = strchr(ptr, '\n'))) {
 		*ptr = 0;
 		ptr++;
+#ifdef __DS__
+		// Pass the line on to the DS word list
+		DS::addAutoCompleteLine(_predictiveDictLine[i - 1]);
+#endif
 		_predictiveDictLine[i++] = ptr;
 	}
 	if (_predictiveDictLine[lines - 1][0] == 0)
@@ -529,6 +537,11 @@
 	_predictiveDictLineCount = lines;
 	debug("Loaded %d lines", _predictiveDictLineCount);
 
+#ifdef __DS__
+	// Sort the DS word completion list, to allow for a binary chop later (in the ds backend)
+	DS::sortAutoCompleteWordList();
+#endif
+
 	uint32 time3 = _system->getMillis();
 	printf("Time to parse pred.dic: %d, total: %d\n", time3-time2, time3-time1);
 }

Modified: scummvm/branches/gsoc2007-fsnode/engines/agi/saveload.cpp
===================================================================
--- scummvm/branches/gsoc2007-fsnode/engines/agi/saveload.cpp	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/engines/agi/saveload.cpp	2007-08-05 19:34:20 UTC (rev 28462)
@@ -55,6 +55,7 @@
 	int i;
 	struct ImageStackElement *ptr = _imageStack;
 	Common::OutSaveFile *out;
+	int result = errOK;
 
 	debugC(3, kDebugLevelMain | kDebugLevelSavegame, "AgiEngine::saveGame(%s, %s)", fileName, description);
 	if (!(out = _saveFileMan->openForSaving(fileName))) {
@@ -206,14 +207,15 @@
 	out->writeSint16BE(_gfx->getAGIPalFileNum());
 
 	out->finalize();
-	if (out->ioFailed())
+	if (out->ioFailed()) {
 		warning("Can't write file '%s'. (Disk full?)", fileName);
-	else
+		result = errIOError;
+	} else
 		debugC(1, kDebugLevelMain | kDebugLevelSavegame, "Saved game %s in file %s", description, fileName);
 	
 	delete out;
 	debugC(3, kDebugLevelMain | kDebugLevelSavegame, "Closed %s", fileName);
-	return errOK;
+	return result;
 }
 
 int AgiEngine::loadGame(const char *fileName, bool checkId) {
@@ -516,7 +518,7 @@
 	buttonY = (vm + 17) * CHAR_LINES;
 	
 	for (i = 0; i < 2; i++)
-		_gfx->drawButton(buttonX[i], buttonY, buttonText[i], 0, 0, MSG_BOX_TEXT, MSG_BOX_COLOUR);
+		_gfx->drawCurrentStyleButton(buttonX[i], buttonY, buttonText[i], false, false, i == 0);
 
 	AllowSyntheticEvents on(this);
 	int oldFirstSlot = _firstSlot + 1;
@@ -751,20 +753,24 @@
 	sprintf(fileName, "%s", getSavegameFilename(slot));
 	debugC(8, kDebugLevelMain | kDebugLevelResources, "file is [%s]", fileName);
 
-	saveGame(fileName, desc);
+	int result = saveGame(fileName, desc);
 
-	messageBox("Game saved.");
+	if (result == errOK)
+		messageBox("Game saved.");
+	else
+		messageBox("Error saving game.");
 
-	return errOK;
+	return result;
 }
 
 int AgiEngine::saveGameSimple() {
 	char fileName[MAX_PATH];
 
 	sprintf(fileName, "%s", getSavegameFilename(0));
-	saveGame(fileName, "Default savegame");
-
-	return errOK;
+	int result = saveGame(fileName, "Default savegame");
+	if (result != errOK)
+		messageBox("Error saving game.");
+	return result;
 }
 
 int AgiEngine::loadGameDialog() {

Modified: scummvm/branches/gsoc2007-fsnode/engines/agi/sound.cpp
===================================================================
--- scummvm/branches/gsoc2007-fsnode/engines/agi/sound.cpp	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/engines/agi/sound.cpp	2007-08-05 19:34:20 UTC (rev 28462)
@@ -40,26 +40,43 @@
 
 #ifdef USE_IIGS_SOUND
 
-/**
- * AGI engine sound envelope structure.
- */
-struct SoundEnvelope {
+struct IIgsEnvelopeSegment {
 	uint8 bp;
-	uint8 incHi;
-	uint8 inc_lo;
+	uint16 inc; ///< 8b.8b fixed point, big endian?
 };
 
-struct SoundWavelist {
+#define ENVELOPE_SEGMENT_COUNT 8
+struct IIgsEnvelope {
+	IIgsEnvelopeSegment seg[ENVELOPE_SEGMENT_COUNT];
+};
+
+// 2**(1/12) i.e. the 12th root of 2
+#define SEMITONE 1.059463094359295
+
+struct IIgsWaveInfo {
 	uint8 top;
 	uint8 addr;
 	uint8 size;
+// Oscillator channel (Bits 4-7 of mode-byte). Simplified to use only stereo here.
+#define MASK_OSC_CHANNEL  (1 << 4)
+#define OSC_CHANNEL_LEFT  (1 << 4)
+#define OSC_CHANNEL_RIGHT (0 << 4)
+// Oscillator halt bit (Bit 0 of mode-byte)
+#define MASK_OSC_HALT     (1 << 0)
+#define OSC_HALT          (1 << 0)
+// Oscillator mode (Bits 1 and 2 of mode-byte)
+#define MASK_OSC_MODE     (3 << 1)
+#define OSC_MODE_LOOP     (0 << 1)
+#define OSC_MODE_ONESHOT  (1 << 1)
+#define OSC_MODE_SYNC_AM  (2 << 1)
+#define OSC_MODE_SWAP     (3 << 1)
 	uint8 mode;
-	uint8 relHi;
-	uint8 relLo;
+	uint16 relPitch; ///< 8b.8b fixed point, big endian?
 };
 
-struct SoundInstrument {
-	struct SoundEnvelope env[8];
+#define MAX_WAVE_COUNT 8
+struct IIgsInstrumentHeader {
+	IIgsEnvelope env;
 	uint8 relseg;
 	uint8 priority;
 	uint8 bendrange;
@@ -68,19 +85,19 @@
 	uint8 spare;
 	uint8 wac;
 	uint8 wbc;
-	struct SoundWavelist wal[8];
-	struct SoundWavelist wbl[8];
+	IIgsWaveInfo wal[MAX_WAVE_COUNT];
+	IIgsWaveInfo wbl[MAX_WAVE_COUNT];
 };
 
-struct SoundIIgsSample {
-	uint8 typeLo;
-	uint8 typeHi;
-	uint8 srateLo;
-	uint8 srateHi;
-	uint16 unknown[2];
-	uint8 sizeLo;
-	uint8 sizeHi;
-	uint16 unknown2[13];
+struct IIgsSampleHeader {
+	uint16 type;
+	uint8  pitch; ///< Logarithmic, base is 2**(1/12), unknown multiplier (Possibly in range 1040-1080)
+	uint8  unknownByte_Ofs3; // 0x7F in Gold Rush's sound resource 60, 0 in all others.
+	uint8  volume; ///< Current guess: Logarithmic in 6 dB steps
+	uint8  unknownByte_Ofs5; ///< 0 in all tested samples.
+	uint16 instrumentSize; ///< Little endian. 44 in all tested samples. A guess.
+	uint16 sampleSize; ///< Little endian. Accurate in all tested samples excluding Manhunter I's sound resource 16.
+	IIgsInstrumentHeader instrument;
 };
 
 #if 0
@@ -89,6 +106,117 @@
 static uint8 *wave;
 #endif
 
+bool readIIgsEnvelope(IIgsEnvelope &envelope, Common::SeekableReadStream &stream) {
+	for (int segNum = 0; segNum < ENVELOPE_SEGMENT_COUNT; segNum++) {
+		envelope.seg[segNum].bp  = stream.readByte();
+		envelope.seg[segNum].inc = stream.readUint16BE();
+	}
+	return !stream.ioFailed();
+}
+
+bool readIIgsWaveInfo(IIgsWaveInfo &waveInfo, Common::SeekableReadStream &stream) {
+	waveInfo.top      = stream.readByte();
+	waveInfo.addr     = stream.readByte();
+	waveInfo.size     = stream.readByte();
+	waveInfo.mode     = stream.readByte();
+	waveInfo.relPitch = stream.readUint16BE();
+	return !stream.ioFailed();
+}
+
+/**
+ * Read an Apple IIGS instrument header from the given stream.
+ * @param header The header to which to write the data.
+ * @param stream The source stream from which to read the data.
+ * @return True if successful, false otherwise.
+ */
+bool readIIgsInstrumentHeader(IIgsInstrumentHeader &header, Common::SeekableReadStream &stream) {
+	readIIgsEnvelope(header.env, stream);
+	header.relseg    = stream.readByte();
+	header.priority  = stream.readByte();
+	header.bendrange = stream.readByte();
+	header.vibdepth  = stream.readByte();
+	header.vibspeed  = stream.readByte();
+	header.spare     = stream.readByte();
+	header.wac       = stream.readByte();
+	header.wbc       = stream.readByte();
+	for (int waveA = 0; waveA < header.wac; waveA++) // Read A wave lists
+		readIIgsWaveInfo(header.wal[waveA], stream);
+	for (int waveB = 0; waveB < header.wbc; waveB++) // Read B wave lists
+		readIIgsWaveInfo(header.wbl[waveB], stream);
+	return !stream.ioFailed();
+}
+
+/**
+ * Read an Apple IIGS AGI sample header from the given stream.
+ * @param header The header to which to write the data.
+ * @param stream The source stream from which to read the data.
+ * @return True if successful, false otherwise.
+ */
+bool readIIgsSampleHeader(IIgsSampleHeader &header, Common::SeekableReadStream &stream) {
+	header.type             = stream.readUint16LE();
+	header.pitch            = stream.readByte();
+	header.unknownByte_Ofs3 = stream.readByte();
+	header.volume           = stream.readByte();
+	header.unknownByte_Ofs5 = stream.readByte();
+	header.instrumentSize   = stream.readUint16LE();
+	header.sampleSize       = stream.readUint16LE();
+	return readIIgsInstrumentHeader(header.instrument, stream);
+}
+
+/**
+ * Load an Apple IIGS AGI sample resource from the given stream and
+ * create an AudioStream out of it.
+ *
+ * @param stream The source stream.
+ * @param resnum Sound resource number. Optional. Used for error messages.
+ * @return A non-null AudioStream pointer if successful, NULL otherwise.
+ * @note In case of failure (i.e. NULL is returned), stream is reset back
+ *       to its original position and its I/O failed -status is cleared.
+ * TODO: Add better handling of invalid resource number when printing error messages.
+ * TODO: Add support for looping sounds.
+ * FIXME: Fix sample rate calculation, it's probably not accurate at the moment.
+ */
+Audio::AudioStream *makeIIgsSampleStream(Common::SeekableReadStream &stream, int resnum = -1) {
+	const uint32 startPos = stream.pos();
+	IIgsSampleHeader header;
+	Audio::AudioStream *result = NULL;
+	bool readHeaderOk = readIIgsSampleHeader(header, stream);
+
+	// Check that the header was read ok and that it's of the correct type
+	// and that there's room for the sample data in the stream.
+	if (readHeaderOk && header.type == AGI_SOUND_SAMPLE) { // An Apple IIGS AGI sample resource
+		uint32 tailLen = stream.size() - stream.pos();
+		if (tailLen < header.sampleSize) { // Check if there's no room for the sample data in the stream
+			// Apple IIGS Manhunter I: Sound resource 16 has only 16074 bytes
+			// of sample data although header says it should have 16384 bytes.
+			warning("Apple IIGS sample (%d) too short (%d bytes. Should be %d bytes). Using the part that's left", resnum, tailLen, header.sampleSize);
+			header.sampleSize = (uint16) tailLen; // Use the part that's left
+		}
+		if (header.pitch > 0x7F) { // Check if the pitch is invalid
+			warning("Apple IIGS sample (%d) has too high pitch (0x%02x)", resnum, header.pitch);
+			header.pitch &= 0x7F; // Apple IIGS AGI probably did it this way too
+		}
+		// Allocate memory for the sample data and read it in
+		byte *sampleData = (byte *) malloc(header.sampleSize);
+		uint32 readBytes = stream.read(sampleData, header.sampleSize);
+		if (readBytes == header.sampleSize) { // Check that we got all the data we requested
+			// Make an audio stream from the mono, 8 bit, unsigned input data
+			byte flags = Audio::Mixer::FLAG_AUTOFREE | Audio::Mixer::FLAG_UNSIGNED;
+			int rate = (int) (1076 * pow(SEMITONE, header.pitch));
+			result = Audio::makeLinearInputStream(sampleData, header.sampleSize, rate, flags, 0, 0);
+		}
+	}
+
+	// If couldn't make a sample out of the input stream for any reason then
+	// rewind back to stream's starting position and clear I/O failed -status.
+	if (result == NULL) {
+		stream.seek(startPos);
+		stream.clearIOFailed();
+	}
+
+	return result;
+}
+
 #endif
 
 static int playing;
@@ -169,7 +297,7 @@
 }
 
 void SoundMgr::decodeSound(int resnum) {
-#ifdef USE_IIGS_SOUND
+#if 0
 	int type, size;
 	int16 *buf;
 	uint8 *src;
@@ -190,12 +318,12 @@
 		_vm->_game.sounds[resnum].rdata = (uint8 *) buf;
 		free(src);
 	}
-#endif				/* USE_IIGS_SOUND */
+#endif
 }
 
 void SoundMgr::startSound(int resnum, int flag) {
 	int i, type;
-#ifdef USE_IIGS_SOUND
+#if 0
 	struct SoundIIgsSample *smp;
 #endif
 
@@ -218,7 +346,7 @@
 	song = (uint8 *)_vm->_game.sounds[resnum].rdata;
 
 	switch (type) {
-#ifdef USE_IIGS_SOUND
+#if 0
 	case AGI_SOUND_SAMPLE:
 		debugC(3, kDebugLevelSound, "IIGS sample");
 		smp = (struct SoundIIgsSample *)_vm->_game.sounds[resnum].rdata;

Modified: scummvm/branches/gsoc2007-fsnode/engines/agi/text.cpp
===================================================================
--- scummvm/branches/gsoc2007-fsnode/engines/agi/text.cpp	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/engines/agi/text.cpp	2007-08-05 19:34:20 UTC (rev 28462)
@@ -364,7 +364,7 @@
 	debugC(4, kDebugLevelText, "waiting...");
 	for (;;) {
 		for (i = 0; b[i]; i++)
-			_gfx->drawButton(bx[i], by[i], b[i], i == active, 0, MSG_BOX_TEXT, MSG_BOX_COLOUR);
+			_gfx->drawCurrentStyleButton(bx[i], by[i], b[i], i == active, false, i == 0);
 
 		_gfx->pollTimer();	/* msdos driver -> does nothing */
 		key = doPollKeyboard();
@@ -555,7 +555,7 @@
 				break;
 			case 's':
 				i = strtoul(s, NULL, 10);
-				safeStrcat(p, _game.strings[i]);
+				safeStrcat(p, agiSprintf(_game.strings[i]));
 				break;
 			case 'm':
 				i = strtoul(s, NULL, 10) - 1;

Modified: scummvm/branches/gsoc2007-fsnode/engines/agos/agos.cpp
===================================================================
--- scummvm/branches/gsoc2007-fsnode/engines/agos/agos.cpp	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/engines/agos/agos.cpp	2007-08-05 19:34:20 UTC (rev 28462)
@@ -148,10 +148,6 @@
 	_itemArraySize = 0;
 	_itemArrayInited = 0;
 
-	_itemHeapPtr = 0;
-	_itemHeapCurPos = 0;
-	_itemHeapSize = 0;
-
 	_iconFilePtr = 0;
 
 	_codePtr = 0;
@@ -824,7 +820,7 @@
 	_numTextBoxes = 10;
 	_numVars = 255;
 
-	_numMusic = 9;
+	_numMusic = 26;
 
 	AGOSEngine::setupGame();
 }
@@ -920,7 +916,11 @@
 
 	_midi.close();
 
-	free(_itemHeapPtr - _itemHeapCurPos);
+	for (uint i = 0; i < _itemHeap.size(); i++) {
+		delete [] _itemHeap[i];
+	}
+	_itemHeap.clear();
+
 	free(_tablesHeapPtr - _tablesHeapCurPos);
 
 	free(_gameOffsetsPtr);
@@ -1054,7 +1054,11 @@
 
 	_midi.close();
 
-	free(_itemHeapPtr - _itemHeapCurPos);
+	for (uint i = 0; i < _itemHeap.size(); i++) {
+		delete [] _itemHeap[i];
+	}
+	_itemHeap.clear();
+
 	free(_tablesHeapPtr - _tablesHeapCurPos);
 
 	free(_gameOffsetsPtr);

Modified: scummvm/branches/gsoc2007-fsnode/engines/agos/agos.h
===================================================================
--- scummvm/branches/gsoc2007-fsnode/engines/agos/agos.h	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/engines/agos/agos.h	2007-08-05 19:34:20 UTC (rev 28462)
@@ -28,6 +28,7 @@
 
 #include "engines/engine.h"
 
+#include "common/array.h"
 #include "common/keyboard.h"
 #include "common/rect.h"
 #include "common/util.h"
@@ -231,9 +232,7 @@
 	uint _itemArraySize;
 	uint _itemArrayInited;
 
-	byte *_itemHeapPtr;
-	uint _itemHeapCurPos;
-	uint _itemHeapSize;
+	Common::Array<byte *> _itemHeap;
 
 	byte *_iconFilePtr;
 

Modified: scummvm/branches/gsoc2007-fsnode/engines/agos/detection_tables.h
===================================================================
--- scummvm/branches/gsoc2007-fsnode/engines/agos/detection_tables.h	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/engines/agos/detection_tables.h	2007-08-05 19:34:20 UTC (rev 28462)
@@ -542,6 +542,32 @@
 		GF_OLD_BUNDLE | GF_CRUNCHED | GF_CRUNCHED_GAMEPC | GF_PLANAR
 	},
 
+	// Waxworks - German Amiga Floppy
+	{
+		{
+			"waxworks",
+			"Floppy",
+
+			{
+	{ "gameamiga",		GAME_BASEFILE,	"2938a17103de603c4c6f05e6a433b365", -1},
+	{ "icon.pkd",		GAME_ICONFILE,	"4822a91c18b1b2005ac17fc617f7dcbe", -1},
+	{ "menus.dat",		GAME_MENUFILE,	"3409eeb8ca8b46fc04da99de67573f5e", -1},
+	{ "start",		GAME_RESTFILE,	"b575b336e741dde1725edd4079d5ab67", -1},
+	{ "stripped.txt",	GAME_STRFILE,	"6faaebff2786216900061eeb978f10af", -1},
+	{ "tbllist",		GAME_TBLFILE,	"95c44bfc380770a6b6dd0dfcc69e80a0", -1},
+	{ "xtbllist",		GAME_XTBLFILE,	"6c7b3db345d46349a5226f695c03e20f", -1},
+	{ NULL, 0, NULL, 0}
+			},
+			Common::DE_DEU,
+			Common::kPlatformAmiga,
+			Common::ADGF_NO_FLAGS
+		},
+
+		GType_WW,
+		GID_WAXWORKS,
+		GF_OLD_BUNDLE | GF_CRUNCHED | GF_CRUNCHED_GAMEPC | GF_PLANAR
+	},
+
 	// Waxworks - English DOS Floppy Demo
 	{
 		{

Modified: scummvm/branches/gsoc2007-fsnode/engines/agos/input.cpp
===================================================================
--- scummvm/branches/gsoc2007-fsnode/engines/agos/input.cpp	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/engines/agos/input.cpp	2007-08-05 19:34:20 UTC (rev 28462)
@@ -196,7 +196,7 @@
 
 		for (;;) {
 			if ((getGameType() == GType_SIMON1 || getGameType() == GType_SIMON2) &&
-					_keyPressed.keycode == Common::KEYCODE_HASH)
+					_keyPressed.keycode == Common::KEYCODE_F10)
 				displayBoxStars();
 			if (processSpecialKeys()) {
 				if ((getGameType() == GType_PP && getGameId() != GID_DIMP) ||

Modified: scummvm/branches/gsoc2007-fsnode/engines/agos/items.cpp
===================================================================
--- scummvm/branches/gsoc2007-fsnode/engines/agos/items.cpp	2007-08-05 18:30:21 UTC (rev 28461)
+++ scummvm/branches/gsoc2007-fsnode/engines/agos/items.cpp	2007-08-05 19:34:20 UTC (rev 28462)
@@ -42,24 +42,15 @@
 }
 
 byte *AGOSEngine::allocateItem(uint size) {
-	byte *org = _itemHeapPtr;
-	size = (size + sizeof(void*) - 1) & ~(sizeof(void*) - 1);
+	byte *item = new byte[size];
 
-	_itemHeapPtr += size;
-	_itemHeapCurPos += size;
-
-	if (_itemHeapCurPos > _itemHeapSize)
-		error("allocateItem: Itemheap overflow");
-
-	return org;
+	memset(item, 0, size);
+	_itemHeap.push_back(item);
+	return item;
 }
 
 void AGOSEngine::allocItemHeap() {
-	_itemHeapSize = _itemMemSize;
-	_itemHeapCurPos = 0;
-	_itemHeapPtr = (byte *)calloc(_itemMemSize, 1);
-	if (!_itemHeapPtr)
-		error("Out Of Memory - Items");
+	_itemHeap.clear();
 }
 
 bool AGOSEngine::hasIcon(Item *item) {
@@ -391,8 +382,13 @@
 }
 
 Item *AGOSEngine::derefItem(uint item) {
-	if (item >= _itemArraySize)
-		error("derefItem: invalid item %d", item);
+	// Occurs when loading item store from restart state in
+	// Elvira 2 (Amiga/AtariST) and Waxworks (Amiga).
+	if (item >= _itemArraySize) {
+		debug(0, "derefItem: invalid item %d", item);
+		return NULL;
+	}
+
 	return _itemArrayPtr[item];
 }
 


@@ Diff output truncated at 100000 characters. @@

This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list