aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AUTHORS13
-rw-r--r--NEWS15
-rw-r--r--README4
-rw-r--r--backends/graphics/openpandora/op-graphics.cpp43
-rw-r--r--backends/graphics/openpandora/op-graphics.h23
-rw-r--r--backends/platform/android/android.mk13
-rw-r--r--backends/platform/dc/vmsave.cpp5
-rw-r--r--backends/platform/ds/arm9/source/gbampsave.cpp2
-rw-r--r--backends/platform/ds/arm9/source/gbampsave.h2
-rw-r--r--backends/platform/gph/gph-backend.cpp49
-rw-r--r--backends/platform/gph/gph-main.cpp4
-rw-r--r--backends/platform/gph/gph.h9
-rw-r--r--backends/platform/maemo/debian/changelog16
-rw-r--r--backends/platform/maemo/debian/control2
-rwxr-xr-xbackends/platform/maemo/debian/rules2
-rw-r--r--backends/platform/maemo/maemo.cpp6
-rw-r--r--backends/platform/n64/framfs_save_manager.h4
-rw-r--r--backends/platform/n64/pakfs_save_manager.h4
-rw-r--r--backends/platform/openpandora/op-backend.cpp98
-rw-r--r--backends/platform/openpandora/op-sdl.h2
-rw-r--r--backends/platform/ps2/savefilemgr.cpp4
-rw-r--r--backends/platform/ps2/savefilemgr.h2
-rw-r--r--backends/platform/psp/README.PSP2
-rw-r--r--backends/platform/webos/webos.cpp20
-rw-r--r--backends/platform/webos/webos.h3
-rw-r--r--backends/platform/wii/osystem.cpp2
-rw-r--r--backends/platform/wii/osystem.h2
-rw-r--r--backends/platform/wii/osystem_gfx.cpp28
-rw-r--r--backends/saves/default/default-saves.cpp4
-rw-r--r--backends/saves/default/default-saves.h2
-rw-r--r--backends/saves/windows/windows-saves.cpp4
-rw-r--r--backends/timer/default/default-timer.cpp1
-rw-r--r--backends/timer/default/default-timer.h1
-rw-r--r--base/internal_version.h2
-rw-r--r--common/keyboard.h5
-rw-r--r--common/savefile.h18
-rw-r--r--common/zlib.cpp9
-rw-r--r--common/zlib.h10
-rw-r--r--devtools/README2
-rw-r--r--devtools/create_project/create_project.cpp29
-rw-r--r--devtools/create_project/create_project.h8
-rw-r--r--devtools/create_project/msbuild.cpp33
-rw-r--r--devtools/create_project/msvc11/create_project.sln20
-rw-r--r--devtools/create_project/msvc11/create_project.vcxproj131
-rw-r--r--devtools/create_project/msvc11/create_project.vcxproj.filters71
-rw-r--r--devtools/create_project/scripts/postbuild.cmd1
-rw-r--r--devtools/create_project/visualstudio.cpp2
-rw-r--r--devtools/create_project/xcode.cpp36
-rw-r--r--devtools/create_teenagent/create_teenagent.cpp2
-rwxr-xr-xdevtools/credits.pl17
-rw-r--r--devtools/scumm-md5.txt1
-rw-r--r--dists/android/AndroidManifest.xml2
-rw-r--r--dists/android/plugin-manifest.xml2
-rw-r--r--dists/engine-data/teenagent.datbin70047 -> 141090 bytes
-rw-r--r--dists/gph/README-GPH2
-rw-r--r--dists/gph/scummvm.ini2
-rw-r--r--dists/iphone/Info.plist4
-rw-r--r--dists/irix/scummvm.spec2
-rw-r--r--dists/macosx/Info.plist6
-rw-r--r--dists/msvc11/create_msvc11.bat95
-rw-r--r--dists/msvc11/readme.txt6
-rw-r--r--dists/openpandora/PXML.xml8
-rw-r--r--dists/openpandora/README-OPENPANDORA2
-rw-r--r--dists/openpandora/README-PND.txt2
-rw-r--r--dists/openpandora/index.html4
-rw-r--r--dists/redhat/scummvm-tools.spec2
-rw-r--r--dists/redhat/scummvm.spec5
-rw-r--r--dists/redhat/scummvm.spec.in3
-rw-r--r--dists/scummvm.rc9
-rw-r--r--dists/scummvm.rc.in1
-rwxr-xr-xdists/slackware/scummvm.SlackBuild2
-rw-r--r--dists/wii/meta.xml2
-rw-r--r--dists/win32/scummvm.nsi4
-rw-r--r--doc/cz/PrectiMe53
-rw-r--r--doc/da/HurtigStart151
-rw-r--r--doc/de/Liesmich2
-rw-r--r--doc/de/Neues17
-rw-r--r--doc/se/LasMig160
-rw-r--r--engines/cge/bitmap.cpp3
-rw-r--r--engines/cge/cge.cpp15
-rw-r--r--engines/cge/cge.h5
-rw-r--r--engines/cge/cge_main.cpp22
-rw-r--r--engines/cge/cge_main.h6
-rw-r--r--engines/cge/detection.cpp2
-rw-r--r--engines/cge/events.cpp29
-rw-r--r--engines/cge/events.h1
-rw-r--r--engines/cge/vga13h.h3
-rw-r--r--engines/cge/vmenu.cpp6
-rw-r--r--engines/cge/vmenu.h2
-rw-r--r--engines/cine/detection_tables.h36
-rw-r--r--engines/composer/composer.cpp8
-rw-r--r--engines/cruise/detection.cpp2
-rw-r--r--engines/draci/detection.cpp2
-rw-r--r--engines/dreamweb/detection.cpp2
-rw-r--r--engines/dreamweb/detection_tables.h24
-rw-r--r--engines/dreamweb/dreamweb.h4
-rw-r--r--engines/dreamweb/stubs.cpp4
-rw-r--r--engines/gob/detection/tables_geisha.h32
-rw-r--r--engines/gob/inter_geisha.cpp8
-rw-r--r--engines/groovie/saveload.cpp2
-rw-r--r--engines/hugo/detection.cpp3
-rw-r--r--engines/kyra/eobcommon.cpp4
-rw-r--r--engines/kyra/eobcommon.h6
-rw-r--r--engines/kyra/screen.cpp6
-rw-r--r--engines/kyra/screen.h3
-rw-r--r--engines/kyra/screen_eob.cpp2
-rw-r--r--engines/kyra/screen_lol.cpp2
-rw-r--r--engines/kyra/screen_lol.h2
-rw-r--r--engines/kyra/sound_intern.h1
-rw-r--r--engines/kyra/sound_midi.cpp4
-rw-r--r--engines/kyra/sound_towns.cpp2
-rw-r--r--engines/lastexpress/data/animation.cpp6
-rw-r--r--engines/lastexpress/data/cursor.cpp2
-rw-r--r--engines/lastexpress/data/font.cpp6
-rw-r--r--engines/lastexpress/data/scene.cpp13
-rw-r--r--engines/lastexpress/data/sequence.cpp3
-rw-r--r--engines/lastexpress/data/sequence.h6
-rw-r--r--engines/lastexpress/data/snd.cpp14
-rw-r--r--engines/lastexpress/data/subtitle.cpp3
-rw-r--r--engines/lastexpress/debug.cpp5
-rw-r--r--engines/lastexpress/detection.cpp3
-rw-r--r--engines/lastexpress/entities/abbot.cpp46
-rw-r--r--engines/lastexpress/entities/abbot.h1
-rw-r--r--engines/lastexpress/entities/alexei.cpp48
-rw-r--r--engines/lastexpress/entities/alexei.h1
-rw-r--r--engines/lastexpress/entities/alouan.cpp50
-rw-r--r--engines/lastexpress/entities/alouan.h1
-rw-r--r--engines/lastexpress/entities/anna.cpp119
-rw-r--r--engines/lastexpress/entities/anna.h1
-rw-r--r--engines/lastexpress/entities/august.cpp113
-rw-r--r--engines/lastexpress/entities/august.h1
-rw-r--r--engines/lastexpress/entities/boutarel.cpp55
-rw-r--r--engines/lastexpress/entities/boutarel.h1
-rw-r--r--engines/lastexpress/entities/chapters.cpp197
-rw-r--r--engines/lastexpress/entities/chapters.h4
-rw-r--r--engines/lastexpress/entities/cooks.cpp29
-rw-r--r--engines/lastexpress/entities/cooks.h1
-rw-r--r--engines/lastexpress/entities/coudert.cpp227
-rw-r--r--engines/lastexpress/entities/coudert.h2
-rw-r--r--engines/lastexpress/entities/entity.cpp550
-rw-r--r--engines/lastexpress/entities/entity.h349
-rw-r--r--engines/lastexpress/entities/entity39.cpp1
-rw-r--r--engines/lastexpress/entities/entity39.h3
-rw-r--r--engines/lastexpress/entities/entity_intern.h496
-rw-r--r--engines/lastexpress/entities/francois.cpp120
-rw-r--r--engines/lastexpress/entities/francois.h5
-rw-r--r--engines/lastexpress/entities/gendarmes.cpp25
-rw-r--r--engines/lastexpress/entities/gendarmes.h1
-rw-r--r--engines/lastexpress/entities/hadija.cpp68
-rw-r--r--engines/lastexpress/entities/hadija.h1
-rw-r--r--engines/lastexpress/entities/ivo.cpp15
-rw-r--r--engines/lastexpress/entities/ivo.h1
-rw-r--r--engines/lastexpress/entities/kahina.cpp77
-rw-r--r--engines/lastexpress/entities/kahina.h1
-rw-r--r--engines/lastexpress/entities/kronos.cpp19
-rw-r--r--engines/lastexpress/entities/kronos.h1
-rw-r--r--engines/lastexpress/entities/mahmud.cpp26
-rw-r--r--engines/lastexpress/entities/mahmud.h1
-rw-r--r--engines/lastexpress/entities/max.cpp23
-rw-r--r--engines/lastexpress/entities/max.h1
-rw-r--r--engines/lastexpress/entities/mertens.cpp282
-rw-r--r--engines/lastexpress/entities/mertens.h4
-rw-r--r--engines/lastexpress/entities/milos.cpp70
-rw-r--r--engines/lastexpress/entities/milos.h1
-rw-r--r--engines/lastexpress/entities/mmeboutarel.cpp41
-rw-r--r--engines/lastexpress/entities/mmeboutarel.h1
-rw-r--r--engines/lastexpress/entities/pascale.cpp51
-rw-r--r--engines/lastexpress/entities/pascale.h1
-rw-r--r--engines/lastexpress/entities/rebecca.cpp63
-rw-r--r--engines/lastexpress/entities/rebecca.h1
-rw-r--r--engines/lastexpress/entities/salko.cpp14
-rw-r--r--engines/lastexpress/entities/salko.h1
-rw-r--r--engines/lastexpress/entities/servers0.cpp37
-rw-r--r--engines/lastexpress/entities/servers0.h1
-rw-r--r--engines/lastexpress/entities/servers1.cpp19
-rw-r--r--engines/lastexpress/entities/servers1.h1
-rw-r--r--engines/lastexpress/entities/sophie.cpp75
-rw-r--r--engines/lastexpress/entities/sophie.h5
-rw-r--r--engines/lastexpress/entities/tables.cpp2
-rw-r--r--engines/lastexpress/entities/tables.h1
-rw-r--r--engines/lastexpress/entities/tatiana.cpp65
-rw-r--r--engines/lastexpress/entities/tatiana.h1
-rw-r--r--engines/lastexpress/entities/train.cpp20
-rw-r--r--engines/lastexpress/entities/train.h1
-rw-r--r--engines/lastexpress/entities/vassili.cpp16
-rw-r--r--engines/lastexpress/entities/vassili.h1
-rw-r--r--engines/lastexpress/entities/verges.cpp114
-rw-r--r--engines/lastexpress/entities/verges.h1
-rw-r--r--engines/lastexpress/entities/vesna.cpp26
-rw-r--r--engines/lastexpress/entities/vesna.h1
-rw-r--r--engines/lastexpress/entities/yasmin.cpp76
-rw-r--r--engines/lastexpress/entities/yasmin.h1
-rw-r--r--engines/lastexpress/fight/fight.cpp7
-rw-r--r--engines/lastexpress/fight/fighter.cpp27
-rw-r--r--engines/lastexpress/fight/fighter.h3
-rw-r--r--engines/lastexpress/game/action.cpp15
-rw-r--r--engines/lastexpress/game/beetle.cpp33
-rw-r--r--engines/lastexpress/game/beetle.h1
-rw-r--r--engines/lastexpress/game/entities.cpp77
-rw-r--r--engines/lastexpress/game/entities.h1
-rw-r--r--engines/lastexpress/game/inventory.cpp90
-rw-r--r--engines/lastexpress/game/inventory.h24
-rw-r--r--engines/lastexpress/game/logic.cpp11
-rw-r--r--engines/lastexpress/game/logic.h2
-rw-r--r--engines/lastexpress/game/object.cpp2
-rw-r--r--engines/lastexpress/game/savegame.cpp5
-rw-r--r--engines/lastexpress/game/savepoint.cpp13
-rw-r--r--engines/lastexpress/game/savepoint.h10
-rw-r--r--engines/lastexpress/game/scenes.cpp37
-rw-r--r--engines/lastexpress/game/scenes.h1
-rw-r--r--engines/lastexpress/helpers.h2
-rw-r--r--engines/lastexpress/lastexpress.cpp13
-rw-r--r--engines/lastexpress/menu/menu.cpp7
-rw-r--r--engines/lastexpress/resource.cpp6
-rw-r--r--engines/lastexpress/resource.h2
-rw-r--r--engines/lastexpress/shared.h3
-rw-r--r--engines/lastexpress/sound/entry.cpp23
-rw-r--r--engines/lastexpress/sound/queue.cpp14
-rw-r--r--engines/lastexpress/sound/queue.h2
-rw-r--r--engines/lastexpress/sound/sound.cpp25
-rw-r--r--engines/lure/surface.cpp4
-rw-r--r--engines/mohawk/detection_tables.h18
-rw-r--r--engines/mohawk/livingbooks.cpp15
-rw-r--r--engines/mohawk/livingbooks.h3
-rw-r--r--engines/mohawk/myst.cpp44
-rw-r--r--engines/mohawk/myst_graphics.cpp136
-rw-r--r--engines/mohawk/myst_graphics.h15
-rw-r--r--engines/mohawk/myst_stacks/intro.cpp25
-rw-r--r--engines/mohawk/riven.cpp2
-rw-r--r--engines/parallaction/disk_br.cpp2
-rw-r--r--engines/parallaction/disk_ns.cpp2
-rw-r--r--engines/parallaction/graphics.cpp2
-rw-r--r--engines/parallaction/graphics.h2
-rw-r--r--engines/parallaction/sound_ns.cpp2
-rw-r--r--engines/queen/queen.cpp4
-rw-r--r--engines/saga/detection.cpp3
-rw-r--r--engines/savestate.h2
-rw-r--r--engines/sci/console.cpp5
-rw-r--r--engines/sci/detection.cpp7
-rw-r--r--engines/sci/detection_tables.h45
-rw-r--r--engines/sci/engine/file.cpp17
-rw-r--r--engines/sci/engine/kernel.cpp125
-rw-r--r--engines/sci/engine/kernel.h21
-rw-r--r--engines/sci/engine/kernel_tables.h94
-rw-r--r--engines/sci/engine/kfile.cpp20
-rw-r--r--engines/sci/engine/kgraphics.cpp79
-rw-r--r--engines/sci/engine/kgraphics32.cpp216
-rw-r--r--engines/sci/engine/klists.cpp5
-rw-r--r--engines/sci/engine/kmath.cpp28
-rw-r--r--engines/sci/engine/kmisc.cpp12
-rw-r--r--engines/sci/engine/ksound.cpp11
-rw-r--r--engines/sci/engine/kvideo.cpp6
-rw-r--r--engines/sci/engine/message.cpp20
-rw-r--r--engines/sci/engine/script.cpp13
-rw-r--r--engines/sci/engine/script_patches.cpp23
-rw-r--r--engines/sci/engine/seg_manager.cpp34
-rw-r--r--engines/sci/engine/seg_manager.h8
-rw-r--r--engines/sci/engine/state.cpp3
-rw-r--r--engines/sci/engine/state.h2
-rw-r--r--engines/sci/engine/vm.cpp1
-rw-r--r--engines/sci/engine/vm.h4
-rw-r--r--engines/sci/engine/workarounds.cpp6
-rw-r--r--engines/sci/graphics/font.cpp2
-rw-r--r--engines/sci/graphics/frameout.cpp89
-rw-r--r--engines/sci/graphics/frameout.h4
-rw-r--r--engines/sci/graphics/palette.cpp71
-rw-r--r--engines/sci/graphics/palette.h20
-rw-r--r--engines/sci/graphics/screen.cpp48
-rw-r--r--engines/sci/graphics/screen.h1
-rw-r--r--engines/sci/graphics/view.cpp17
-rw-r--r--engines/scumm/detection.cpp1
-rw-r--r--engines/scumm/scumm-md5.h3
-rw-r--r--engines/sword1/detection.cpp3
-rw-r--r--engines/sword1/sound.cpp2
-rw-r--r--engines/teenagent/callbacks.cpp6
-rw-r--r--engines/teenagent/detection.cpp10
-rw-r--r--engines/teenagent/resources.cpp46
-rw-r--r--engines/tinsel/detection.cpp8
-rw-r--r--engines/tinsel/detection_tables.h142
-rw-r--r--engines/tinsel/dialogs.cpp35
-rw-r--r--engines/tinsel/drives.cpp2
-rw-r--r--engines/tinsel/handle.cpp12
-rw-r--r--engines/tinsel/music.cpp141
-rw-r--r--engines/tinsel/pcode.cpp43
-rw-r--r--engines/tinsel/scene.h6
-rw-r--r--engines/tinsel/sound.cpp6
-rw-r--r--engines/tinsel/tinlib.cpp25
-rw-r--r--engines/tinsel/tinsel.h26
-rw-r--r--engines/toltecs/detection.cpp2
-rw-r--r--engines/toon/anim.cpp109
-rw-r--r--engines/toon/anim.h58
-rw-r--r--engines/toon/audio.cpp2
-rw-r--r--engines/toon/character.cpp38
-rw-r--r--engines/toon/detection.cpp3
-rw-r--r--engines/toon/font.cpp46
-rw-r--r--engines/toon/font.h6
-rw-r--r--engines/toon/hotspot.cpp4
-rw-r--r--engines/toon/hotspot.h4
-rw-r--r--engines/toon/movie.cpp20
-rw-r--r--engines/toon/picture.cpp60
-rw-r--r--engines/toon/picture.h24
-rw-r--r--engines/toon/script_func.cpp4
-rw-r--r--engines/toon/toon.cpp22
-rw-r--r--engines/toon/toon.h5
-rw-r--r--engines/tsage/blue_force/blueforce_scenes9.cpp73
-rw-r--r--engines/tsage/detection.cpp2
-rw-r--r--engines/tsage/detection_tables.h8
-rw-r--r--engines/tsage/globals.cpp4
-rw-r--r--engines/tsage/globals.h2
-rw-r--r--engines/tsage/ringworld2/ringworld2_speakers.h14
-rw-r--r--graphics/iff.cpp23
-rw-r--r--gui/credits.h10
-rw-r--r--gui/themes/translations.datbin318276 -> 342397 bytes
-rw-r--r--po/POTFILES1
-rw-r--r--po/ca_ES.po19
-rw-r--r--po/cs_CZ.po46
-rw-r--r--po/da_DA.po1131
-rw-r--r--po/de_DE.po62
-rw-r--r--po/es_ES.po28
-rw-r--r--po/eu.po19
-rw-r--r--po/fr_FR.po124
-rw-r--r--po/hu_HU.po34
-rw-r--r--po/it_IT.po177
-rw-r--r--po/nb_NO.po379
-rw-r--r--po/nn_NO.po18
-rw-r--r--po/pl_PL.po19
-rw-r--r--po/pt_BR.po19
-rw-r--r--po/ru_RU.po122
-rw-r--r--po/scummvm.pot18
-rw-r--r--po/se_SE.po144
-rw-r--r--po/uk_UA.po127
-rw-r--r--ports.mk8
332 files changed, 6141 insertions, 4533 deletions
diff --git a/AUTHORS b/AUTHORS
index 9f71be9467..02c805b833 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -89,7 +89,9 @@ ScummVM Team
DreamWeb:
Torbjorn Andersson
Bertrand Augereau
+ Filippos Karapetis
Vladimir Menshakov - (retired)
+ Willem Jan Palenstijn
Gob:
Torbjorn Andersson
@@ -418,10 +420,10 @@ Other contributions
Matteo Angelino
Norwegian (Bokmaal):
- Einar Johan T. Somaae
+ Einar Johan Somaaen
Norwegian (Nynorsk):
- Einar Johan T. Somaae
+ Einar Johan Somaaen
Polish:
GrajPoPolsku.pl Team
@@ -597,3 +599,10 @@ Special thanks to
Broken Sword 2.5 team for providing sources of their engine and their
great support.
+ Neil Dodwell and David Dew from Creative Reality for providing the source
+ of Dreamweb and for their tremendous support.
+
+ Janusz Wisniewski and Miroslaw Liminowicz from Laboratorium Komputerowe
+ Avalon for providing full source code for Soltys and letting us to
+ redistribute the game.
+
diff --git a/NEWS b/NEWS
index e4ea5f3f49..3f5f10ce05 100644
--- a/NEWS
+++ b/NEWS
@@ -1,7 +1,10 @@
For a more comprehensive changelog of the latest experimental code, see:
https://github.com/scummvm/scummvm/commits/
-1.5.0 (????-??-??)
+1.6.0 (????-??-??)
+
+
+1.5.0 (2012-07-27)
New Games:
- Added support for Backyard Baseball 2003.
- Added support for Blue Force.
@@ -9,10 +12,7 @@ For a more comprehensive changelog of the latest experimental code, see:
- Added support for Dreamweb.
- Added support for Geisha.
- Added support for Gregory and the Hot Air Balloon.
- - Added support for Magic Tales: Baba Yaga and the Magic Geese.
- - Added support for Magic Tales: Imo and the King.
- Added support for Magic Tales: Liam Finds a Story.
- - Added support for Magic Tales: The Little Samurai.
- Added support for Once Upon A Time: Little Red Riding Hood
- Added support for Sleeping Cub's Test of Courage.
- Added support for Soltys.
@@ -33,9 +33,6 @@ For a more comprehensive changelog of the latest experimental code, see:
- Improved predictive dialog look.
- Various GUI improvements.
- SDL ports:
- - Added support for OpenGL (GSoC Task).
-
Broken Sword 1:
- Fixed incorrect sound effects in the DOS/Windows demo.
- Added support for PlayStation videos.
@@ -68,6 +65,10 @@ For a more comprehensive changelog of the latest experimental code, see:
- Added aspect ratio correction feature.
- Implemented 16 bits per pixel support for games.
+ Maemo port:
+ - Added support for Nokia 770 running OS2008 HE.
+ - Added configurable keymap.
+
Windows port:
- Changed default savegames location for Windows NT4/2000/XP/Vista/7.
(The migration batch file can be used to copy savegames from the old
diff --git a/README b/README
index 722f3298d3..bbca0ec0cd 100644
--- a/README
+++ b/README
@@ -2084,7 +2084,7 @@ Sierra games using the SCI engine add the following non-standard keywords:
originalsaveload bool If true, the original save/load screens are
used instead of the enhanced ScummVM ones
native_fb01 bool If true, the music driver for an IBM Music
- Feature card or a Yahama FB-01 FM synth module
+ Feature card or a Yamaha FB-01 FM synth module
is used for MIDI output
Broken Sword II adds the following non-standard keywords:
@@ -2125,7 +2125,7 @@ Lands of Lore: The Throne of Chaos adds the following non-standard keywords:
Space Quest IV CD adds the following non-standard keyword:
silver_cursors bool If true, an alternate set of silver mouse cursors
- is used instead of the original golden ones
+ is used instead of the original golden ones
Simon the Sorcerer 1 and 2 add the following non-standard keywords:
diff --git a/backends/graphics/openpandora/op-graphics.cpp b/backends/graphics/openpandora/op-graphics.cpp
index 5f0301a0c8..f371081fde 100644
--- a/backends/graphics/openpandora/op-graphics.cpp
+++ b/backends/graphics/openpandora/op-graphics.cpp
@@ -26,28 +26,59 @@
#include "backends/graphics/openpandora/op-graphics.h"
#include "backends/events/openpandora/op-events.h"
-//#include "backends/platform/openpandora/op-sdl.h"
#include "graphics/scaler/aspect.h"
#include "common/mutex.h"
#include "common/textconsole.h"
+static SDL_Cursor *hiddenCursor;
+
OPGraphicsManager::OPGraphicsManager(SdlEventSource *sdlEventSource)
: SurfaceSdlGraphicsManager(sdlEventSource) {
}
bool OPGraphicsManager::loadGFXMode() {
- /* FIXME: For now we just cheat and set the overlay to 640*480 not 800*480 and let SDL
- deal with the boarders (it saves cleaning up the overlay when the game screen is
- smaller than the overlay ;)
+
+ uint8_t hiddenCursorData = 0;
+ hiddenCursor = SDL_CreateCursor(&hiddenCursorData, &hiddenCursorData, 8, 1, 0, 0);
+
+ /* On the OpenPandora we need to work around an SDL assumption that
+ returns relative mouse coordinates when you get to the screen
+ edges using the touchscreen. The workaround is to set a blank
+ SDL cursor and not disable it (Hackish I know).
+
+ The root issues likes in the Windows Manager GRAB code in SDL.
+ That is why the issue is not seen on framebuffer devices like the
+ GP2X (there is no X window manager ;)).
*/
- _videoMode.overlayWidth = 640;
- _videoMode.overlayHeight = 480;
+ SDL_ShowCursor(SDL_ENABLE);
+ SDL_SetCursor(hiddenCursor);
+
_videoMode.fullscreen = true;
+ _videoMode.overlayWidth = _videoMode.screenWidth * _videoMode.scaleFactor;
+ _videoMode.overlayHeight = _videoMode.screenHeight * _videoMode.scaleFactor;
+
if (_videoMode.screenHeight != 200 && _videoMode.screenHeight != 400)
_videoMode.aspectRatioCorrection = false;
+ if (_videoMode.aspectRatioCorrection)
+ _videoMode.overlayHeight = real2Aspect(_videoMode.overlayHeight);
+
+ _videoMode.hardwareWidth = _videoMode.screenWidth * _videoMode.scaleFactor;
+ _videoMode.hardwareHeight = effectiveScreenHeight();
+
return SurfaceSdlGraphicsManager::loadGFXMode();
}
+void OPGraphicsManager::unloadGFXMode() {
+
+ uint8_t hiddenCursorData = 0;
+ hiddenCursor = SDL_CreateCursor(&hiddenCursorData, &hiddenCursorData, 8, 1, 0, 0);
+
+ // Free the hidden SDL cursor created in loadGFXMode
+ SDL_FreeCursor(hiddenCursor);
+
+ SurfaceSdlGraphicsManager::unloadGFXMode();
+}
+
#endif
diff --git a/backends/graphics/openpandora/op-graphics.h b/backends/graphics/openpandora/op-graphics.h
index 0b3eeae8ec..2e3d63e3ad 100644
--- a/backends/graphics/openpandora/op-graphics.h
+++ b/backends/graphics/openpandora/op-graphics.h
@@ -24,7 +24,6 @@
#define BACKENDS_GRAPHICS_OP_H
#include "backends/graphics/surfacesdl/surfacesdl-graphics.h"
-#include "graphics/scaler/aspect.h" // for aspect2Real
#include "graphics/scaler/downscaler.h"
enum {
@@ -35,28 +34,8 @@ class OPGraphicsManager : public SurfaceSdlGraphicsManager {
public:
OPGraphicsManager(SdlEventSource *sdlEventSource);
-// bool hasFeature(OSystem::Feature f);
-// void setFeatureState(OSystem::Feature f, bool enable);
-// bool getFeatureState(OSystem::Feature f);
-// int getDefaultGraphicsMode() const;
-
-// void initSize(uint w, uint h, const Graphics::PixelFormat *format = NULL);
-// const OSystem::GraphicsMode *getSupportedGraphicsModes() const;
-// bool setGraphicsMode(const char *name);
-// bool setGraphicsMode(int mode);
-// void setGraphicsModeIntern();
-// void internUpdateScreen();
-// void showOverlay();
-// void hideOverlay();
bool loadGFXMode();
-// void drawMouse();
-// void undrawMouse();
-// virtual void warpMouse(int x, int y);
-
-// SurfaceSdlGraphicsManager::MousePos *getMouseCurState();
-// SurfaceSdlGraphicsManager::VideoState *getVideoMode();
-
-// virtual void adjustMouseEvent(const Common::Event &event);
+ void unloadGFXMode();
};
#endif /* BACKENDS_GRAPHICS_OP_H */
diff --git a/backends/platform/android/android.mk b/backends/platform/android/android.mk
index 2e8fd62152..9292a16595 100644
--- a/backends/platform/android/android.mk
+++ b/backends/platform/android/android.mk
@@ -130,7 +130,18 @@ $(PATH_STAGE_PREFIX).%/res/drawable/scummvm.png: $(PATH_RESOURCES)/drawable/scum
$(FILE_RESOURCES_MAIN): $(FILE_MANIFEST) $(RESOURCES) $(ANDROID_JAR8) $(DIST_FILES_THEMES) $(DIST_FILES_ENGINEDATA)
$(INSTALL) -d $(PATH_BUILD_ASSETS)
$(INSTALL) -c -m 644 $(DIST_FILES_THEMES) $(DIST_FILES_ENGINEDATA) $(PATH_BUILD_ASSETS)/
- $(AAPT) package -f -M $< -S $(PATH_RESOURCES) -A $(PATH_BUILD_ASSETS) -I $(ANDROID_JAR8) -F $@
+ work_dir=`pwd`; \
+ for i in $(PATH_BUILD_ASSETS)/*.zip; do \
+ echo "recompress $$i"; \
+ cd $$work_dir; \
+ $(RM) -rf $(PATH_BUILD_ASSETS)/tmp; \
+ $(MKDIR) $(PATH_BUILD_ASSETS)/tmp; \
+ unzip -q $$i -d $(PATH_BUILD_ASSETS)/tmp; \
+ cd $(PATH_BUILD_ASSETS)/tmp; \
+ zip -r ../`basename $$i` *; \
+ done
+ @$(RM) -rf $(PATH_BUILD_ASSETS)/tmp
+ $(AAPT) package -f -0 zip -M $< -S $(PATH_RESOURCES) -A $(PATH_BUILD_ASSETS) -I $(ANDROID_JAR8) -F $@
$(PATH_BUILD)/%/$(FILE_RESOURCES): $(PATH_BUILD)/%/AndroidManifest.xml $(PATH_STAGE_PREFIX).%/res/values/strings.xml $(PATH_STAGE_PREFIX).%/res/drawable/scummvm.png plugins/lib%.so $(ANDROID_JAR8)
$(AAPT) package -f -M $< -S $(PATH_STAGE_PREFIX).$*/res -I $(ANDROID_JAR8) -F $@
diff --git a/backends/platform/dc/vmsave.cpp b/backends/platform/dc/vmsave.cpp
index e06dd7fa43..ba3b787942 100644
--- a/backends/platform/dc/vmsave.cpp
+++ b/backends/platform/dc/vmsave.cpp
@@ -316,8 +316,9 @@ public:
class VMSaveManager : public Common::SaveFileManager {
public:
- virtual Common::OutSaveFile *openForSaving(const Common::String &filename) {
- return Common::wrapCompressedWriteStream(new OutVMSave(filename.c_str()));
+ virtual Common::OutSaveFile *openForSaving(const Common::String &filename, bool compress = true) {
+ OutVMSave *s = new OutVMSave(filename.c_str());
+ return compress ? Common::wrapCompressedWriteStream(s) : s;
}
virtual Common::InSaveFile *openForLoading(const Common::String &filename) {
diff --git a/backends/platform/ds/arm9/source/gbampsave.cpp b/backends/platform/ds/arm9/source/gbampsave.cpp
index 03729c5e6e..3192e2d277 100644
--- a/backends/platform/ds/arm9/source/gbampsave.cpp
+++ b/backends/platform/ds/arm9/source/gbampsave.cpp
@@ -45,7 +45,7 @@ static Common::String getSavePath() {
// GBAMP Save File Manager
//////////////////////////
-Common::OutSaveFile *GBAMPSaveFileManager::openForSaving(const Common::String &filename) {
+Common::OutSaveFile *GBAMPSaveFileManager::openForSaving(const Common::String &filename, bool compress) {
Common::String fileSpec = getSavePath();
if (fileSpec.lastChar() != '/')
fileSpec += '/';
diff --git a/backends/platform/ds/arm9/source/gbampsave.h b/backends/platform/ds/arm9/source/gbampsave.h
index 492054dc52..0d9d9aca8c 100644
--- a/backends/platform/ds/arm9/source/gbampsave.h
+++ b/backends/platform/ds/arm9/source/gbampsave.h
@@ -27,7 +27,7 @@
class GBAMPSaveFileManager : public Common::SaveFileManager {
public:
- virtual Common::OutSaveFile *openForSaving(const Common::String &filename);
+ virtual Common::OutSaveFile *openForSaving(const Common::String &filename, bool compress = true);
virtual Common::InSaveFile *openForLoading(const Common::String &filename);
virtual bool removeSavefile(const Common::String &filename);
diff --git a/backends/platform/gph/gph-backend.cpp b/backends/platform/gph/gph-backend.cpp
index 49a1edf411..485780b472 100644
--- a/backends/platform/gph/gph-backend.cpp
+++ b/backends/platform/gph/gph-backend.cpp
@@ -20,6 +20,8 @@
*
*/
+#if defined(GPH_DEVICE)
+
// Disable symbol overrides so that we can use system headers.
#define FORBIDDEN_SYMBOL_ALLOW_ALL
@@ -32,8 +34,6 @@
#include "backends/saves/default/default-saves.h"
#include "backends/timer/default/default-timer.h"
-#include "base/main.h"
-
#include "common/archive.h"
#include "common/config-manager.h"
#include "common/debug.h"
@@ -64,23 +64,6 @@ void OSystem_GPH::initBackend() {
assert(!_inited);
- // Create the events manager
- if (_eventSource == 0)
- _eventSource = new GPHEventSource();
-
- // Create the graphics manager
- if (_graphicsManager == 0) {
- _graphicsManager = new GPHGraphicsManager(_eventSource);
- }
-
- // Create the mixer manager
- if (_mixer == 0) {
- _mixerManager = new DoubleBufferSDLMixerManager();
-
- // Setup and start mixer
- _mixerManager->init();
- }
-
/* Setup default save path to be workingdir/saves */
char savePath[PATH_MAX+1];
@@ -165,16 +148,42 @@ void OSystem_GPH::initBackend() {
/* Make sure that aspect ratio correction is enabled on the 1st run to stop
users asking me what the 'wasted space' at the bottom is ;-). */
ConfMan.registerDefault("aspect_ratio", true);
+ ConfMan.registerDefault("fullscreen", true);
/* Make sure SDL knows that we have a joystick we want to use. */
ConfMan.setInt("joystick_num", 0);
+ // Create the events manager
+ if (_eventSource == 0)
+ _eventSource = new GPHEventSource();
+
+ // Create the graphics manager
+ if (_graphicsManager == 0) {
+ _graphicsManager = new GPHGraphicsManager(_eventSource);
+ }
+
/* Pass to POSIX method to do the heavy lifting */
OSystem_POSIX::initBackend();
_inited = true;
}
+void OSystem_GPH::initSDL() {
+ // Check if SDL has not been initialized
+ if (!_initedSDL) {
+
+ uint32 sdlFlags = SDL_INIT_EVENTTHREAD;
+ if (ConfMan.hasKey("disable_sdl_parachute"))
+ sdlFlags |= SDL_INIT_NOPARACHUTE;
+
+ // Initialize SDL (SDL Subsystems are initiliazed in the corresponding sdl managers)
+ if (SDL_Init(sdlFlags) == -1)
+ error("Could not initialize SDL: %s", SDL_GetError());
+
+ _initedSDL = true;
+ }
+}
+
void OSystem_GPH::addSysArchivesToSearchSet(Common::SearchSet &s, int priority) {
/* Setup default extra data paths for engine data files and plugins */
@@ -222,3 +231,5 @@ void OSystem_GPH::quit() {
OSystem_POSIX::quit();
}
+
+#endif
diff --git a/backends/platform/gph/gph-main.cpp b/backends/platform/gph/gph-main.cpp
index 2c43af151f..876de0f358 100644
--- a/backends/platform/gph/gph-main.cpp
+++ b/backends/platform/gph/gph-main.cpp
@@ -21,7 +21,7 @@
*/
#include "backends/platform/gph/gph.h"
-#include "backends/plugins/posix/posix-provider.h"
+#include "backends/plugins/sdl/sdl-provider.h"
#include "base/main.h"
#if defined(GPH_DEVICE)
@@ -36,7 +36,7 @@ int main(int argc, char *argv[]) {
((OSystem_GPH *)g_system)->init();
#ifdef DYNAMIC_MODULES
- PluginManager::instance().addPluginProvider(new POSIXPluginProvider());
+ PluginManager::instance().addPluginProvider(new SDLPluginProvider());
#endif
// Invoke the actual ScummVM main entry point:
diff --git a/backends/platform/gph/gph.h b/backends/platform/gph/gph.h
index 80f43f0bab..90a798154f 100644
--- a/backends/platform/gph/gph.h
+++ b/backends/platform/gph/gph.h
@@ -26,13 +26,11 @@
#if defined(GPH_DEVICE)
#include "backends/base-backend.h"
-#include "backends/platform/sdl/sdl.h"
+#include "backends/platform/sdl/sdl-sys.h"
#include "backends/platform/sdl/posix/posix.h"
#include "backends/events/gph/gph-events.h"
#include "backends/graphics/gph/gph-graphics.h"
-#define __GP2XWIZ__
-
#ifndef PATH_MAX
#define PATH_MAX 255
#endif
@@ -45,6 +43,11 @@ public:
void addSysArchivesToSearchSet(Common::SearchSet &s, int priority);
void initBackend();
void quit();
+
+protected:
+ bool _inited;
+ bool _initedSDL;
+ virtual void initSDL();
};
#endif
diff --git a/backends/platform/maemo/debian/changelog b/backends/platform/maemo/debian/changelog
index 8a9d8ee3c3..ea44574e96 100644
--- a/backends/platform/maemo/debian/changelog
+++ b/backends/platform/maemo/debian/changelog
@@ -1,8 +1,20 @@
-scummvm (1.5.0~git) unstable; urgency=low
+scummvm (1.6.0~git) unstable; urgency=low
* Development snapshot
- -- Tarek Soliman <tsoliman@scummvm.org> Tue, 15 Nov 2011 14:56:57 -0600
+ -- Tarek Soliman <tsoliman@scummvm.org> Tue, 10 Jul 2012 23:02:00 -0500
+
+scummvm (1.5.0) unstable; urgency=low
+
+ * 1.5.0 release
+
+ -- Tarek Soliman <tsoliman@scummvm.org> Fri, 20 Jul 2012 14:48:44 -0500
+
+scummvm (1.4.1) unstable; urgency=low
+
+ * 1.4.1 release
+
+ -- Tarek Soliman <tsoliman@scummvm.org> Wed, 11 Jan 2012 17:17:26 -0600
scummvm (1.4.0) unstable; urgency=low
diff --git a/backends/platform/maemo/debian/control b/backends/platform/maemo/debian/control
index 6e1dfe2fd4..bdaccd2359 100644
--- a/backends/platform/maemo/debian/control
+++ b/backends/platform/maemo/debian/control
@@ -2,7 +2,7 @@ Source: scummvm
Section: user/games
Priority: optional
Maintainer: Tarek Soliman <tsoliman@scummvm.org>
-Build-Depends: debhelper (>> 4.0.0), libsdl1.2-dev, libmad0-dev, libasound2-dev, libvorbisidec-dev, libmpeg2-4-dev, libflac-dev (>= 1.1.2), libz-dev, quilt
+Build-Depends: debhelper (>> 4.0.0), libsdl1.2-dev, libmad0-dev, libasound2-dev, libvorbisidec-dev, libmpeg2-4-dev, libflac-dev (>= 1.1.2), libfreetype6-dev, libz-dev, quilt
Standards-Version: 3.6.1.1
Package: scummvm
diff --git a/backends/platform/maemo/debian/rules b/backends/platform/maemo/debian/rules
index 64add08de8..43a34399a3 100755
--- a/backends/platform/maemo/debian/rules
+++ b/backends/platform/maemo/debian/rules
@@ -50,7 +50,7 @@ install: build
install -m0644 dists/engine-data/drascula.dat dists/engine-data/hugo.dat dists/engine-data/kyra.dat dists/engine-data/lure.dat dists/engine-data/queen.tbl dists/engine-data/sky.cpt dists/engine-data/teenagent.dat dists/engine-data/toon.dat debian/scummvm/opt/scummvm/share
install -m0644 -d debian/scummvm/usr/share/doc/scummvm
- install -m0644 NEWS README COPYRIGHT debian/scummvm/usr/share/doc/scummvm
+ install -m0644 AUTHORS COPYING COPYING.BSD COPYING.FREEFONT COPYING.LGPL COPYRIGHT NEWS README debian/scummvm/usr/share/doc/scummvm
binary: binary-arch
binary-arch: build install
diff --git a/backends/platform/maemo/maemo.cpp b/backends/platform/maemo/maemo.cpp
index e296d4787c..6bd229177b 100644
--- a/backends/platform/maemo/maemo.cpp
+++ b/backends/platform/maemo/maemo.cpp
@@ -43,6 +43,7 @@ namespace Maemo {
OSystem_SDL_Maemo::OSystem_SDL_Maemo()
:
+ _eventObserver(0),
OSystem_POSIX() {
}
@@ -84,6 +85,9 @@ static void registerDefaultKeyBindings(Common::KeymapperDefaultBindings *_keymap
#endif
void OSystem_SDL_Maemo::initBackend() {
+ ConfMan.registerDefault("fullscreen", true);
+ ConfMan.registerDefault("aspect_ratio", true);
+
// Create the events manager
if (_eventSource == 0)
_eventSource = new MaemoSdlEventSource();
@@ -180,6 +184,7 @@ void OSystem_SDL_Maemo::setupIcon() {
// http://bugzilla.libsdl.org/show_bug.cgi?id=586
}
+#ifdef ENABLE_KEYMAPPER
static const Common::KeyTableEntry maemoKeys[] = {
// Function keys
{"MENU", Common::KEYCODE_F11, 0, "Menu", false},
@@ -191,7 +196,6 @@ static const Common::KeyTableEntry maemoKeys[] = {
{0, Common::KEYCODE_INVALID, 0, 0, false}
};
-#ifdef ENABLE_KEYMAPPER
Common::HardwareInputSet *OSystem_SDL_Maemo::getHardwareInputSet() {
return new Common::HardwareInputSet(true, maemoKeys);
}
diff --git a/backends/platform/n64/framfs_save_manager.h b/backends/platform/n64/framfs_save_manager.h
index da553e423a..0a88c8666b 100644
--- a/backends/platform/n64/framfs_save_manager.h
+++ b/backends/platform/n64/framfs_save_manager.h
@@ -100,10 +100,10 @@ public:
class FRAMSaveManager : public Common::SaveFileManager {
public:
- virtual Common::OutSaveFile *openForSaving(const Common::String &filename) {
+ virtual Common::OutSaveFile *openForSaving(const Common::String &filename, bool compress = true) {
OutFRAMSave *s = new OutFRAMSave(filename.c_str());
if (!s->err()) {
- return Common::wrapCompressedWriteStream(s);
+ return compress ? Common::wrapCompressedWriteStream(s) : s;
} else {
delete s;
return 0;
diff --git a/backends/platform/n64/pakfs_save_manager.h b/backends/platform/n64/pakfs_save_manager.h
index e0fcbc1e2d..6e67fb0f5f 100644
--- a/backends/platform/n64/pakfs_save_manager.h
+++ b/backends/platform/n64/pakfs_save_manager.h
@@ -101,10 +101,10 @@ public:
class PAKSaveManager : public Common::SaveFileManager {
public:
- virtual Common::OutSaveFile *openForSaving(const Common::String &filename) {
+ virtual Common::OutSaveFile *openForSaving(const Common::String &filename, bool compress = true) {
OutPAKSave *s = new OutPAKSave(filename.c_str());
if (!s->err()) {
- return Common::wrapCompressedWriteStream(s);
+ return compress ? Common::wrapCompressedWriteStream(s) : s;
} else {
delete s;
return NULL;
diff --git a/backends/platform/openpandora/op-backend.cpp b/backends/platform/openpandora/op-backend.cpp
index dcec387f97..354aa24b24 100644
--- a/backends/platform/openpandora/op-backend.cpp
+++ b/backends/platform/openpandora/op-backend.cpp
@@ -54,53 +54,15 @@
/* Dump console info to files. */
#define DUMP_STDOUT
-static SDL_Cursor *hiddenCursor;
-
OSystem_OP::OSystem_OP()
:
OSystem_POSIX() {
}
-//static Uint32 timer_handler(Uint32 interval, void *param) {
-// ((DefaultTimerManager *)param)->handler();
-// return interval;
-//}
-
void OSystem_OP::initBackend() {
assert(!_inited);
- // Create the events manager
- if (_eventSource == 0)
- _eventSource = new OPEventSource();
-
- // Create the graphics manager
- if (_graphicsManager == 0) {
- _graphicsManager = new OPGraphicsManager(_eventSource);
- }
-
-// int joystick_num = ConfMan.getInt("joystick_num");
-// uint32 sdlFlags = SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER;
-//
-// if (ConfMan.hasKey("disable_sdl_parachute"))
-// sdlFlags |= SDL_INIT_NOPARACHUTE;
-//
-// if (joystick_num > -1)
-// sdlFlags |= SDL_INIT_JOYSTICK;
-//
-// if (SDL_Init(sdlFlags) == -1) {
-// error("Could not initialize SDL: %s", SDL_GetError());
-// }
-//
-
- // Create the mixer manager
-// if (_mixer == 0) {
-// _mixerManager = new DoubleBufferSDLMixerManager();
-
- // Setup and start mixer
-// _mixerManager->init();
-// }
-
/* Setup default save path to be workingdir/saves */
char savePath[PATH_MAX+1];
@@ -179,7 +141,14 @@ void OSystem_OP::initBackend() {
/* Make sure SDL knows that we have a joystick we want to use. */
ConfMan.setInt("joystick_num", 0);
-// _graphicsMutex = createMutex();
+ // Create the events manager
+ if (_eventSource == 0)
+ _eventSource = new OPEventSource();
+
+ // Create the graphics manager
+ if (_graphicsManager == 0) {
+ _graphicsManager = new OPGraphicsManager(_eventSource);
+ }
/* Pass to POSIX method to do the heavy lifting */
OSystem_POSIX::initBackend();
@@ -187,24 +156,6 @@ void OSystem_OP::initBackend() {
_inited = true;
}
-// enable joystick
-// if (joystick_num > -1 && SDL_NumJoysticks() > 0) {
-// printf("Using joystick: %s\n", SDL_JoystickName(0));
-// _joystick = SDL_JoystickOpen(joystick_num);
-// }
-//
-// setupMixer();
-
-// Note: We could implement a custom SDLTimerManager by using
-// SDL_AddTimer. That might yield better timer resolution, but it would
-// also change the semantics of a timer: Right now, ScummVM timers
-// *never* run in parallel, due to the way they are implemented. If we
-// switched to SDL_AddTimer, each timer might run in a separate thread.
-// However, not all our code is prepared for that, so we can't just
-// switch. Still, it's a potential future change to keep in mind.
-// _timer = new DefaultTimerManager();
-// _timerID = SDL_AddTimer(10, &timer_handler, _timer);
-
void OSystem_OP::initSDL() {
// Check if SDL has not been initialized
if (!_initedSDL) {
@@ -217,38 +168,7 @@ void OSystem_OP::initSDL() {
if (SDL_Init(sdlFlags) == -1)
error("Could not initialize SDL: %s", SDL_GetError());
- uint8_t hiddenCursorData = 0;
-
- hiddenCursor = SDL_CreateCursor(&hiddenCursorData, &hiddenCursorData, 8, 1, 0, 0);
-
- /* On the OpenPandora we need to work around an SDL assumption that
- returns relative mouse coordinates when you get to the screen
- edges using the touchscreen. The workaround is to set a blank
- SDL cursor and not disable it (Hackish I know).
-
- The root issues likes in the Windows Manager GRAB code in SDL.
- That is why the issue is not seen on framebuffer devices like the
- GP2X (there is no X window manager ;)).
- */
- SDL_ShowCursor(SDL_ENABLE);
- SDL_SetCursor(hiddenCursor);
- SDL_EnableUNICODE(1);
-
-// memset(&_oldVideoMode, 0, sizeof(_oldVideoMode));
-// memset(&_videoMode, 0, sizeof(_videoMode));
-// memset(&_transactionDetails, 0, sizeof(_transactionDetails));
-
-// _videoMode.mode = GFX_DOUBLESIZE;
-// _videoMode.scaleFactor = 2;
-// _videoMode.aspectRatioCorrection = ConfMan.getBool("aspect_ratio");
-// _scalerProc = Normal2x;
-// _scalerType = 0;
-
-// _videoMode.fullscreen = true;
-
_initedSDL = true;
-
-// OSystem_POSIX::initSDL();
}
}
@@ -275,8 +195,6 @@ void OSystem_OP::addSysArchivesToSearchSet(Common::SearchSet &s, int priority) {
void OSystem_OP::quit() {
- SDL_FreeCursor(hiddenCursor);
-
#ifdef DUMP_STDOUT
printf("%s\n", "Debug: STDOUT and STDERR text files closed.");
fclose(stdout);
diff --git a/backends/platform/openpandora/op-sdl.h b/backends/platform/openpandora/op-sdl.h
index 8cccbb5f86..1eddad5c4a 100644
--- a/backends/platform/openpandora/op-sdl.h
+++ b/backends/platform/openpandora/op-sdl.h
@@ -31,8 +31,6 @@
#include "backends/events/openpandora/op-events.h"
#include "backends/graphics/openpandora/op-graphics.h"
-//#define MIXER_DOUBLE_BUFFERING 1
-
#ifndef PATH_MAX
#define PATH_MAX 255
#endif
diff --git a/backends/platform/ps2/savefilemgr.cpp b/backends/platform/ps2/savefilemgr.cpp
index 421edc3e2e..46af42e193 100644
--- a/backends/platform/ps2/savefilemgr.cpp
+++ b/backends/platform/ps2/savefilemgr.cpp
@@ -145,7 +145,7 @@ Common::InSaveFile *Ps2SaveFileManager::openForLoading(const Common::String &fil
return Common::wrapCompressedReadStream(sf);
}
-Common::OutSaveFile *Ps2SaveFileManager::openForSaving(const Common::String &filename) {
+Common::OutSaveFile *Ps2SaveFileManager::openForSaving(const Common::String &filename, bool compress) {
Common::FSNode savePath(ConfMan.get("savepath")); // TODO: is this fast?
Common::WriteStream *sf;
@@ -193,7 +193,7 @@ Common::OutSaveFile *Ps2SaveFileManager::openForSaving(const Common::String &fil
}
_screen->wantAnim(false);
- return Common::wrapCompressedWriteStream(sf);
+ return compress ? Common::wrapCompressedWriteStream(sf) : sf;
}
bool Ps2SaveFileManager::removeSavefile(const Common::String &filename) {
diff --git a/backends/platform/ps2/savefilemgr.h b/backends/platform/ps2/savefilemgr.h
index a25fb063ae..163706eace 100644
--- a/backends/platform/ps2/savefilemgr.h
+++ b/backends/platform/ps2/savefilemgr.h
@@ -35,7 +35,7 @@ public:
virtual ~Ps2SaveFileManager();
virtual Common::InSaveFile *openForLoading(const Common::String &filename);
- virtual Common::OutSaveFile *openForSaving(const Common::String &filename);
+ virtual Common::OutSaveFile *openForSaving(const Common::String &filename, bool compress = true);
virtual Common::StringArray listSavefiles(const Common::String &pattern);
virtual bool removeSavefile(const Common::String &filename);
diff --git a/backends/platform/psp/README.PSP b/backends/platform/psp/README.PSP
index bc0bd35a6e..969459dc5b 100644
--- a/backends/platform/psp/README.PSP
+++ b/backends/platform/psp/README.PSP
@@ -1,4 +1,4 @@
-ScummVM-PSP 1.5.0git README
+ScummVM-PSP 1.6.0git README
==============================================================================
Installation
diff --git a/backends/platform/webos/webos.cpp b/backends/platform/webos/webos.cpp
index 4ec153a7e9..fc18628235 100644
--- a/backends/platform/webos/webos.cpp
+++ b/backends/platform/webos/webos.cpp
@@ -45,24 +45,4 @@ void OSystem_SDL_WebOS::initBackend() {
OSystem_SDL::initBackend();
}
-/**
- * Gets the original SDL hardware key set, adds WebOS specific keys and
- * returns the new key set.
- *
- * @return The hardware key set with added webOS specific keys.
- */
-#ifdef ENABLE_KEYMAPPER
-HardwareInputSet *OSystem_SDL_WebOS::getHardwareInputSet() {
- // Get the original SDL hardware key set
- HardwareInputSet *inputSet = OSystem_SDL::getHardwareInputSet();
-
- // Add WebOS specific keys
- inputSet->addHardwareInput(new HardwareInput("FORWARD",
- KeyState((KeyCode) 229, 229, 0), "Forward"));
-
- // Return the modified hardware key set
- return inputSet;
-}
-#endif
-
#endif
diff --git a/backends/platform/webos/webos.h b/backends/platform/webos/webos.h
index 8dfa43239c..dda56a70da 100644
--- a/backends/platform/webos/webos.h
+++ b/backends/platform/webos/webos.h
@@ -31,9 +31,6 @@ public:
OSystem_SDL_WebOS();
virtual void initBackend();
-#ifdef ENABLE_KEYMAPPER
- virtual Common::HardwareInputSet *getHardwareInputSet();
-#endif
};
#endif
diff --git a/backends/platform/wii/osystem.cpp b/backends/platform/wii/osystem.cpp
index 681675529a..22a6495f8f 100644
--- a/backends/platform/wii/osystem.cpp
+++ b/backends/platform/wii/osystem.cpp
@@ -39,7 +39,7 @@
OSystem_Wii::OSystem_Wii() :
_startup_time(0),
- _cursorScale(1),
+ _cursorDontScale(true),
_cursorPaletteDisabled(true),
_cursorPalette(NULL),
_cursorPaletteDirty(false),
diff --git a/backends/platform/wii/osystem.h b/backends/platform/wii/osystem.h
index abafa7f642..5d6998d0b6 100644
--- a/backends/platform/wii/osystem.h
+++ b/backends/platform/wii/osystem.h
@@ -56,7 +56,7 @@ class OSystem_Wii : public EventsBaseBackend, public PaletteManager {
private:
s64 _startup_time;
- int _cursorScale;
+ bool _cursorDontScale;
bool _cursorPaletteDisabled;
u16 *_cursorPalette;
bool _cursorPaletteDirty;
diff --git a/backends/platform/wii/osystem_gfx.cpp b/backends/platform/wii/osystem_gfx.cpp
index 90e4d98c6b..fc0802dd4c 100644
--- a/backends/platform/wii/osystem_gfx.cpp
+++ b/backends/platform/wii/osystem_gfx.cpp
@@ -451,7 +451,7 @@ bool OSystem_Wii::needsScreenUpdate() {
void OSystem_Wii::updateScreen() {
static f32 ar;
static gfx_screen_coords_t cc;
- static int cs;
+ static f32 csx, csy;
u32 now = getMillis();
if (now - _lastScreenUpdate < 1000 / MAX_FPS)
@@ -466,7 +466,6 @@ void OSystem_Wii::updateScreen() {
wii_memstats();
#endif
- cs = _cursorScale;
_lastScreenUpdate = now;
if (_overlayVisible || _consoleVisible)
@@ -488,12 +487,6 @@ void OSystem_Wii::updateScreen() {
if (_gameRunning)
ar = gfx_set_ar(4.0 / 3.0);
- // ugly, but the modern theme sets a factor of 3, only god knows why
- if (cs > 2)
- cs = 1;
- else
- cs *= 2;
-
if (_overlayDirty) {
gfx_tex_convert(&_texOverlay, _overlayPixels);
_overlayDirty = false;
@@ -503,10 +496,18 @@ void OSystem_Wii::updateScreen() {
}
if (_mouseVisible) {
- cc.x = f32(_mouseX - cs * _mouseHotspotX) * _currentXScale;
- cc.y = f32(_mouseY - cs * _mouseHotspotY) * _currentYScale;
- cc.w = f32(_texMouse.width) * _currentXScale * cs;
- cc.h = f32(_texMouse.height) * _currentYScale * cs;
+ if (_cursorDontScale) {
+ csx = 1.0f / _currentXScale;
+ csy = 1.0f / _currentYScale;
+ } else {
+ csx = 1.0f;
+ csy = 1.0f;
+ }
+
+ cc.x = f32(_mouseX - csx * _mouseHotspotX) * _currentXScale;
+ cc.y = f32(_mouseY - csy * _mouseHotspotY) * _currentYScale;
+ cc.w = f32(_texMouse.width) * _currentXScale * csx;
+ cc.h = f32(_texMouse.height) * _currentYScale * csy;
if (_texMouse.palette && _cursorPaletteDirty) {
_texMouse.palette[_mouseKeyColor] = 0;
@@ -745,8 +746,7 @@ void OSystem_Wii::setMouseCursor(const void *buf, uint w, uint h, int hotspotX,
_mouseHotspotX = hotspotX;
_mouseHotspotY = hotspotY;
- // TODO: Adapt to new dontScale logic!
- _cursorScale = 1;
+ _cursorDontScale = dontScale;
if ((_texMouse.palette) && (oldKeycolor != _mouseKeyColor))
_cursorPaletteDirty = true;
diff --git a/backends/saves/default/default-saves.cpp b/backends/saves/default/default-saves.cpp
index 237c50a1ba..64e7e778b6 100644
--- a/backends/saves/default/default-saves.cpp
+++ b/backends/saves/default/default-saves.cpp
@@ -97,7 +97,7 @@ Common::InSaveFile *DefaultSaveFileManager::openForLoading(const Common::String
return Common::wrapCompressedReadStream(sf);
}
-Common::OutSaveFile *DefaultSaveFileManager::openForSaving(const Common::String &filename) {
+Common::OutSaveFile *DefaultSaveFileManager::openForSaving(const Common::String &filename, bool compress) {
// Ensure that the savepath is valid. If not, generate an appropriate error.
Common::String savePathName = getSavePath();
checkPath(Common::FSNode(savePathName));
@@ -112,7 +112,7 @@ Common::OutSaveFile *DefaultSaveFileManager::openForSaving(const Common::String
// Open the file for saving
Common::WriteStream *sf = file.createWriteStream();
- return Common::wrapCompressedWriteStream(sf);
+ return compress ? Common::wrapCompressedWriteStream(sf) : sf;
}
bool DefaultSaveFileManager::removeSavefile(const Common::String &filename) {
diff --git a/backends/saves/default/default-saves.h b/backends/saves/default/default-saves.h
index 1ea87efc67..c7fca279bc 100644
--- a/backends/saves/default/default-saves.h
+++ b/backends/saves/default/default-saves.h
@@ -38,7 +38,7 @@ public:
virtual Common::StringArray listSavefiles(const Common::String &pattern);
virtual Common::InSaveFile *openForLoading(const Common::String &filename);
- virtual Common::OutSaveFile *openForSaving(const Common::String &filename);
+ virtual Common::OutSaveFile *openForSaving(const Common::String &filename, bool compress = true);
virtual bool removeSavefile(const Common::String &filename);
protected:
diff --git a/backends/saves/windows/windows-saves.cpp b/backends/saves/windows/windows-saves.cpp
index 87348c3416..d520632394 100644
--- a/backends/saves/windows/windows-saves.cpp
+++ b/backends/saves/windows/windows-saves.cpp
@@ -26,8 +26,12 @@
#if defined(WIN32) && !defined(_WIN32_WCE) && !defined(DISABLE_DEFAULT_SAVEFILEMANAGER)
+#if defined(ARRAYSIZE)
+#undef ARRAYSIZE
+#endif
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
+#undef ARRAYSIZE // winnt.h defines ARRAYSIZE, but we want our own one...
#include "common/config-manager.h"
#include "common/savefile.h"
diff --git a/backends/timer/default/default-timer.cpp b/backends/timer/default/default-timer.cpp
index 8681102cd0..9cd803f148 100644
--- a/backends/timer/default/default-timer.cpp
+++ b/backends/timer/default/default-timer.cpp
@@ -59,7 +59,6 @@ void insertPrioQueue(TimerSlot *head, TimerSlot *newSlot) {
DefaultTimerManager::DefaultTimerManager() :
- _timerHandler(0),
_head(0) {
_head = new TimerSlot();
diff --git a/backends/timer/default/default-timer.h b/backends/timer/default/default-timer.h
index e5a9dada79..5884979da0 100644
--- a/backends/timer/default/default-timer.h
+++ b/backends/timer/default/default-timer.h
@@ -34,7 +34,6 @@ private:
typedef Common::HashMap<Common::String, TimerProc, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> TimerSlotMap;
Common::Mutex _mutex;
- void *_timerHandler;
TimerSlot *_head;
TimerSlotMap _callbacks;
diff --git a/base/internal_version.h b/base/internal_version.h
index 5392012169..40ed67ceec 100644
--- a/base/internal_version.h
+++ b/base/internal_version.h
@@ -16,4 +16,4 @@
#define SCUMMVM_REVISION
#endif
-#define SCUMMVM_VERSION "1.5.0git" SCUMMVM_REVISION
+#define SCUMMVM_VERSION "1.6.0git" SCUMMVM_REVISION
diff --git a/common/keyboard.h b/common/keyboard.h
index e6db086598..f9e94e6656 100644
--- a/common/keyboard.h
+++ b/common/keyboard.h
@@ -248,7 +248,10 @@ struct KeyState {
* ASCII-value of the pressed key (if any).
* This depends on modifiers, i.e. pressing the 'A' key results in
* different values here depending on the status of shift, alt and
- * caps lock.
+ * caps lock. This should be used rather than keycode for text input
+ * to avoid keyboard layout issues. For example you cannot assume that
+ * KEYCODE_0 without a modifier will be '0' (on AZERTY keyboards it is
+ * not).
*/
uint16 ascii;
diff --git a/common/savefile.h b/common/savefile.h
index 03a7b52add..da787289ee 100644
--- a/common/savefile.h
+++ b/common/savefile.h
@@ -104,11 +104,23 @@ public:
virtual String popErrorDesc();
/**
- * Open the savefile with the specified name in the given directory for saving.
- * @param name the name of the savefile
+ * Open the savefile with the specified name in the given directory for
+ * saving.
+ *
+ * Saved games are compressed by default, and engines are expected to
+ * always write compressed saves.
+ *
+ * A notable exception is if uncompressed files are needed for
+ * compatibility with games not supported by ScummVM, such as character
+ * exports from the Quest for Glory series. QfG5 is a 3D game and won't be
+ * supported by ScummVM.
+ *
+ * @param name the name of the savefile
+ * @param compress toggles whether to compress the resulting save file
+ * (default) or not.
* @return pointer to an OutSaveFile, or NULL if an error occurred.
*/
- virtual OutSaveFile *openForSaving(const String &name) = 0;
+ virtual OutSaveFile *openForSaving(const String &name, bool compress = true) = 0;
/**
* Open the file with the specified name in the given directory for loading.
diff --git a/common/zlib.cpp b/common/zlib.cpp
index 7d765fc539..76e34485da 100644
--- a/common/zlib.cpp
+++ b/common/zlib.cpp
@@ -107,7 +107,7 @@ protected:
public:
- GZipReadStream(SeekableReadStream *w) : _wrapped(w), _stream() {
+ GZipReadStream(SeekableReadStream *w, uint32 knownSize = 0) : _wrapped(w), _stream() {
assert(w != 0);
// Verify file header is correct
@@ -122,7 +122,8 @@ public:
_origSize = w->readUint32LE();
} else {
// Original size not available in zlib format
- _origSize = 0;
+ // use an otherwise known size if supplied.
+ _origSize = knownSize;
}
_pos = 0;
w->seek(0, SEEK_SET);
@@ -336,7 +337,7 @@ public:
#endif // USE_ZLIB
-SeekableReadStream *wrapCompressedReadStream(SeekableReadStream *toBeWrapped) {
+SeekableReadStream *wrapCompressedReadStream(SeekableReadStream *toBeWrapped, uint32 knownSize) {
#if defined(USE_ZLIB)
if (toBeWrapped) {
uint16 header = toBeWrapped->readUint16BE();
@@ -345,7 +346,7 @@ SeekableReadStream *wrapCompressedReadStream(SeekableReadStream *toBeWrapped) {
header % 31 == 0));
toBeWrapped->seek(-2, SEEK_CUR);
if (isCompressed)
- return new GZipReadStream(toBeWrapped);
+ return new GZipReadStream(toBeWrapped, knownSize);
}
#endif
return toBeWrapped;
diff --git a/common/zlib.h b/common/zlib.h
index 61322c286a..8372499922 100644
--- a/common/zlib.h
+++ b/common/zlib.h
@@ -86,10 +86,18 @@ bool inflateZlibHeaderless(byte *dst, uint dstLen, const byte *src, uint srcLen,
* format. In the former case, the original stream is returned unmodified
* (and in particular, not wrapped).
*
+ * Certain GZip-formats don't supply an easily readable length, if you
+ * still need the length carried along with the stream, and you know
+ * the decompressed length at wrap-time, then it can be supplied as knownSize
+ * here. knownSize will be ignored if the GZip-stream DOES include a length.
+ *
* It is safe to call this with a NULL parameter (in this case, NULL is
* returned).
+ *
+ * @param toBeWrapped the stream to be wrapped (if it is in gzip-format)
+ * @param knownSize a supplied length of the compressed data (if not available directly)
*/
-SeekableReadStream *wrapCompressedReadStream(SeekableReadStream *toBeWrapped);
+SeekableReadStream *wrapCompressedReadStream(SeekableReadStream *toBeWrapped, uint32 knownSize = 0);
/**
* Take an arbitrary WriteStream and wrap it in a custom stream which provides
diff --git a/devtools/README b/devtools/README
index 7db5259e7c..c7f08d6dfa 100644
--- a/devtools/README
+++ b/devtools/README
@@ -65,7 +65,7 @@ create_lure (dreammaster)
create_project (LordHoto, Littleboy)
--------------
- Creates project files for Visual Studio 2005, 2008, 2010, Xcode and
+ Creates project files for Visual Studio 2005, 2008, 2010, 2012, Xcode and
Code::Blocks out of the configure / Makefile based build system.
It also offers a way to enable or disable certain engines and the use
of external libraries similar to configure. Run the tool without
diff --git a/devtools/create_project/create_project.cpp b/devtools/create_project/create_project.cpp
index df220f0934..8499fec400 100644
--- a/devtools/create_project/create_project.cpp
+++ b/devtools/create_project/create_project.cpp
@@ -76,14 +76,6 @@ namespace {
std::string unifyPath(const std::string &path);
/**
- * Returns the last path component.
- *
- * @param path Path string.
- * @return Last path component.
- */
-std::string getLastPathComponent(const std::string &path);
-
-/**
* Display the help text for the program.
*
* @param exe Name of the executable.
@@ -221,7 +213,7 @@ int main(int argc, char *argv[]) {
msvcVersion = atoi(argv[++i]);
- if (msvcVersion != 8 && msvcVersion != 9 && msvcVersion != 10) {
+ if (msvcVersion != 8 && msvcVersion != 9 && msvcVersion != 10 && msvcVersion != 11) {
std::cerr << "ERROR: Unsupported version: \"" << msvcVersion << "\" passed to \"--msvc-version\"!\n";
return -1;
}
@@ -606,14 +598,6 @@ std::string unifyPath(const std::string &path) {
return result;
}
-std::string getLastPathComponent(const std::string &path) {
- std::string::size_type pos = path.find_last_of('/');
- if (pos == std::string::npos)
- return path;
- else
- return path.substr(pos + 1);
-}
-
void displayHelp(const char *exe) {
using std::cout;
@@ -643,6 +627,7 @@ void displayHelp(const char *exe) {
" 8 stands for \"Visual Studio 2005\"\n"
" 9 stands for \"Visual Studio 2008\"\n"
" 10 stands for \"Visual Studio 2010\"\n"
+ " 11 stands for \"Visual Studio 2012\"\n"
" The default is \"9\", thus \"Visual Studio 2008\"\n"
" --build-events Run custom build events as part of the build\n"
" (default: false)\n"
@@ -1000,7 +985,7 @@ bool isInList(const std::string &dir, const std::string &fileName, const StringL
continue;
}
- const std::string lastPathComponent = getLastPathComponent(*i);
+ const std::string lastPathComponent = ProjectProvider::getLastPathComponent(*i);
if (extensionName == "o") {
return false;
} else if (!producesObjectFile(fileName) && extensionName != "h") {
@@ -1303,6 +1288,14 @@ std::string ProjectProvider::createUUID() const {
#endif
}
+std::string ProjectProvider::getLastPathComponent(const std::string &path) {
+ std::string::size_type pos = path.find_last_of('/');
+ if (pos == std::string::npos)
+ return path;
+ else
+ return path.substr(pos + 1);
+}
+
void ProjectProvider::addFilesToProject(const std::string &dir, std::ofstream &projectFile,
const StringList &includeList, const StringList &excludeList,
const std::string &filePrefix) {
diff --git a/devtools/create_project/create_project.h b/devtools/create_project/create_project.h
index 8719143f4a..b4eda8f8d2 100644
--- a/devtools/create_project/create_project.h
+++ b/devtools/create_project/create_project.h
@@ -317,6 +317,14 @@ public:
*/
void createProject(const BuildSetup &setup);
+ /**
+ * Returns the last path component.
+ *
+ * @param path Path string.
+ * @return Last path component.
+ */
+ static std::string getLastPathComponent(const std::string &path);
+
protected:
const int _version; ///< Target project version
StringList &_globalWarnings; ///< Global warnings
diff --git a/devtools/create_project/msbuild.cpp b/devtools/create_project/msbuild.cpp
index dfd3f1d1c7..c797770955 100644
--- a/devtools/create_project/msbuild.cpp
+++ b/devtools/create_project/msbuild.cpp
@@ -46,7 +46,13 @@ const char *MSBuildProvider::getPropertiesExtension() {
}
int MSBuildProvider::getVisualStudioVersion() {
- return 2010;
+ if (_version == 10)
+ return 2010;
+
+ if (_version == 11)
+ return 2012;
+
+ error("Unsupported version passed to getVisualStudioVersion");
}
namespace {
@@ -58,9 +64,10 @@ inline void outputConfiguration(std::ostream &project, const std::string &config
"\t\t</ProjectConfiguration>\n";
}
-inline void outputConfigurationType(const BuildSetup &setup, std::ostream &project, const std::string &name, const std::string &config) {
+inline void outputConfigurationType(const BuildSetup &setup, std::ostream &project, const std::string &name, const std::string &config, int version) {
project << "\t<PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='" << config << "'\" Label=\"Configuration\">\n"
"\t\t<ConfigurationType>" << ((name == setup.projectName || setup.devTools) ? "Application" : "StaticLibrary") << "</ConfigurationType>\n"
+ "\t\t<PlatformToolset>v" << version << "0</PlatformToolset>\n"
"\t</PropertyGroup>\n";
}
@@ -98,17 +105,18 @@ void MSBuildProvider::createProjectFile(const std::string &name, const std::stri
"\t\t<ProjectGuid>{" << uuid << "}</ProjectGuid>\n"
"\t\t<RootNamespace>" << name << "</RootNamespace>\n"
"\t\t<Keyword>Win32Proj</Keyword>\n"
+ "\t\t<VCTargetsPath Condition=\"'$(VCTargetsPath11)' != '' and '$(VSVersion)' == '' and $(VisualStudioVersion) == ''\">$(VCTargetsPath11)</VCTargetsPath>\n"
"\t</PropertyGroup>\n";
// Shared configuration
project << "\t<Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n";
- outputConfigurationType(setup, project, name, "Release|Win32");
- outputConfigurationType(setup, project, name, "Analysis|Win32");
- outputConfigurationType(setup, project, name, "Debug|Win32");
- outputConfigurationType(setup, project, name, "Release|x64");
- outputConfigurationType(setup, project, name, "Analysis|x64");
- outputConfigurationType(setup, project, name, "Debug|x64");
+ outputConfigurationType(setup, project, name, "Release|Win32", _version);
+ outputConfigurationType(setup, project, name, "Analysis|Win32", _version);
+ outputConfigurationType(setup, project, name, "Debug|Win32", _version);
+ outputConfigurationType(setup, project, name, "Release|x64", _version);
+ outputConfigurationType(setup, project, name, "Analysis|x64", _version);
+ outputConfigurationType(setup, project, name, "Debug|x64", _version);
project << "\t<Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n"
"\t<ImportGroup Label=\"ExtensionSettings\">\n"
@@ -249,11 +257,11 @@ void MSBuildProvider::outputProjectSettings(std::ofstream &project, const std::s
// Compile configuration
if (setup.devTools || name == setup.projectName || name == "sword25" || name == "grim") {
project << "\t\t\t<DisableLanguageExtensions>false</DisableLanguageExtensions>\n";
- } else {
- if (name == "scummvm" && !isRelease)
- project << "\t\t\t<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n";
- if (warningsIterator != _projectWarnings.end())
+ if (name == setup.projectName && !isRelease)
+ project << "\t\t\t<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n";
+ } else {
+ if (warningsIterator != _projectWarnings.end())
project << "\t\t\t<DisableSpecificWarnings>" << warnings << ";%(DisableSpecificWarnings)</DisableSpecificWarnings>\n";
}
@@ -395,6 +403,7 @@ void MSBuildProvider::createBuildProp(const BuildSetup &setup, bool isRelease, b
"\t\t</ClCompile>\n"
"\t\t<Link>\n"
"\t\t\t<GenerateDebugInformation>true</GenerateDebugInformation>\n"
+ "\t\t\t<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n"
"\t\t\t<IgnoreSpecificDefaultLibraries>libcmt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>\n";
}
diff --git a/devtools/create_project/msvc11/create_project.sln b/devtools/create_project/msvc11/create_project.sln
new file mode 100644
index 0000000000..1552c9f502
--- /dev/null
+++ b/devtools/create_project/msvc11/create_project.sln
@@ -0,0 +1,20 @@
+яЛП
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2012
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "create_project", "create_project.vcxproj", "{CF177559-077D-4A08-AABE-BE0FD35F6C63}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {CF177559-077D-4A08-AABE-BE0FD35F6C63}.Debug|Win32.ActiveCfg = Debug|Win32
+ {CF177559-077D-4A08-AABE-BE0FD35F6C63}.Debug|Win32.Build.0 = Debug|Win32
+ {CF177559-077D-4A08-AABE-BE0FD35F6C63}.Release|Win32.ActiveCfg = Release|Win32
+ {CF177559-077D-4A08-AABE-BE0FD35F6C63}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/devtools/create_project/msvc11/create_project.vcxproj b/devtools/create_project/msvc11/create_project.vcxproj
new file mode 100644
index 0000000000..c87461c049
--- /dev/null
+++ b/devtools/create_project/msvc11/create_project.vcxproj
@@ -0,0 +1,131 @@
+яЛП<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{CF177559-077D-4A08-AABE-BE0FD35F6C63}</ProjectGuid>
+ <RootNamespace>create_project</RootNamespace>
+ <VCTargetsPath Condition="'$(VCTargetsPath11)' != '' and '$(VSVersion)' == '' and $(VisualStudioVersion) == ''">$(VCTargetsPath11)</VCTargetsPath>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ <DisableLanguageExtensions>false</DisableLanguageExtensions>
+ <DisableSpecificWarnings>4003;4512;4127</DisableSpecificWarnings>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>Rpcrt4.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <TargetMachine>MachineX86</TargetMachine>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ </Link>
+ <PostBuildEvent>
+ <Command>@echo off
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc11\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc10\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc9\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc8\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\codeblocks\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\iphone\"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <DisableSpecificWarnings>4003;4512;4127</DisableSpecificWarnings>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>Rpcrt4.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <PostBuildEvent>
+ <Command>@echo off
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc11\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc10\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc9\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc8\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\codeblocks\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\iphone\"</Command>
+ </PostBuildEvent>
+ <PreBuildEvent>
+ <Command>
+ </Command>
+ </PreBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\codeblocks.cpp" />
+ <ClCompile Include="..\create_project.cpp" />
+ <ClCompile Include="..\msbuild.cpp" />
+ <ClCompile Include="..\msvc.cpp" />
+ <ClCompile Include="..\visualstudio.cpp" />
+ <ClCompile Include="..\xcode.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\codeblocks.h" />
+ <ClInclude Include="..\config.h" />
+ <ClInclude Include="..\create_project.h" />
+ <ClInclude Include="..\msbuild.h" />
+ <ClInclude Include="..\msvc.h" />
+ <ClInclude Include="..\visualstudio.h" />
+ <ClInclude Include="..\xcode.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="..\scripts\installer.vbs" />
+ <None Include="..\scripts\postbuild.cmd" />
+ <None Include="..\scripts\prebuild.cmd" />
+ <None Include="..\scripts\revision.vbs" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/devtools/create_project/msvc11/create_project.vcxproj.filters b/devtools/create_project/msvc11/create_project.vcxproj.filters
new file mode 100644
index 0000000000..b4f0b18774
--- /dev/null
+++ b/devtools/create_project/msvc11/create_project.vcxproj.filters
@@ -0,0 +1,71 @@
+яЛП<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{2e3580c8-ec3a-4c81-8351-b668c668db2a}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{31aaf58c-d3cb-4ed6-8eca-163b4a9b31a6}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="scripts">
+ <UniqueIdentifier>{f980f6fb-41b6-4161-b035-58b200c85cad}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\codeblocks.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\create_project.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\msvc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\msbuild.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\visualstudio.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\xcode.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\config.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\codeblocks.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\create_project.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\msvc.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\msbuild.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\visualstudio.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\xcode.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="..\scripts\prebuild.cmd">
+ <Filter>scripts</Filter>
+ </None>
+ <None Include="..\scripts\revision.vbs">
+ <Filter>scripts</Filter>
+ </None>
+ <None Include="..\scripts\postbuild.cmd">
+ <Filter>scripts</Filter>
+ </None>
+ <None Include="..\scripts\installer.vbs">
+ <Filter>scripts</Filter>
+ </None>
+ </ItemGroup>
+</Project>
diff --git a/devtools/create_project/scripts/postbuild.cmd b/devtools/create_project/scripts/postbuild.cmd
index dd52c0217c..d78119d058 100644
--- a/devtools/create_project/scripts/postbuild.cmd
+++ b/devtools/create_project/scripts/postbuild.cmd
@@ -24,6 +24,7 @@ echo Copying data files
echo.
xcopy /F /Y "%~4/lib/%~3/SDL.dll" "%~2" 1>NUL 2>&1
+xcopy /F /Y "%~4/lib/%~3/freetype6.dll" "%~2" 1>NUL 2>&1
xcopy /F /Y "%~1/backends/vkeybd/packs/vkeybd_default.zip" "%~2" 1>NUL 2>&1
if "%~5"=="0" goto done
diff --git a/devtools/create_project/visualstudio.cpp b/devtools/create_project/visualstudio.cpp
index 62b30ddcd0..c301e78ad1 100644
--- a/devtools/create_project/visualstudio.cpp
+++ b/devtools/create_project/visualstudio.cpp
@@ -110,7 +110,7 @@ void VisualStudioProvider::createProjectFile(const std::string &name, const std:
std::string toolConfig;
toolConfig = (!warnings.empty() ? "DisableSpecificWarnings=\"" + warnings + "\"" : "");
- toolConfig += (name == "scummvm" ? "DebugInformationFormat=\"3\" " : "");
+ toolConfig += (name == setup.projectName ? "DebugInformationFormat=\"3\" " : "");
toolConfig += (name == "sword25" ? "DisableLanguageExtensions=\"false\" " : "");
toolConfig += (name == "grim" ? "DisableLanguageExtensions=\"false\" " : "");
diff --git a/devtools/create_project/xcode.cpp b/devtools/create_project/xcode.cpp
index 9784bb0bf5..0574814e02 100644
--- a/devtools/create_project/xcode.cpp
+++ b/devtools/create_project/xcode.cpp
@@ -202,18 +202,38 @@ void XCodeProvider::writeFileListToProject(const FileNode &dir, std::ofstream &p
// Init root group
_groups.comment = "PBXGroup";
- Object *group = new Object(this, "PBXGroup", "PBXGroup", "PBXGroup", "", "");
- //Property children;
- //children.flags = SettingsAsList;
- //group->properties["children"] = children;
- group->addProperty("children", "", "", SettingsNoValue|SettingsAsList);
+ // Create group
+ std::string name = getLastPathComponent(dir.name);
+ Object *group = new Object(this, "PBXGroup_" + name , "PBXGroup", "PBXGroup", "", name);
+
+ // List of children
+ Property children;
+ children.hasOrder = true;
+ children.flags = SettingsAsList;
+ group->addProperty("name", name, "", SettingsNoValue|SettingsQuoteVariable);
group->addProperty("sourceTree", "<group>", "", SettingsNoValue|SettingsQuoteVariable);
- _groups.add(group);
+ int order = 0;
+ for (FileNode::NodeList::const_iterator i = dir.children.begin(); i != dir.children.end(); ++i) {
+ const FileNode *node = *i;
+
+ std::string id = "FileReference_" + node->name;
+ FileProperty property = FileProperty(node->name, node->name, node->name, "<group>");
+
+ ADD_SETTING_ORDER_NOVALUE(children, getHash(id), node->name, order++);
+ ADD_BUILD_FILE(id, node->name, node->name + " in Sources");
+ ADD_FILE_REFERENCE(node->name, property);
+
+ // Process child nodes
+ if (!node->children.empty())
+ writeFileListToProject(*node, projectFile, indentation + 1, duplicate, objPrefix + node->name + '_', filePrefix + node->name + '/');
+ }
- // TODO Add files
+ group->properties["children"] = children;
+
+ _groups.add(group);
}
//////////////////////////////////////////////////////////////////////////
@@ -717,6 +737,7 @@ void XCodeProvider::setupBuildConfiguration() {
ADD_SETTING_QUOTE(scummvmSimulator_Debug, "FRAMEWORK_SEARCH_PATHS", "$(inherited)");
ADD_SETTING_LIST(scummvmSimulator_Debug, "GCC_PREPROCESSOR_DEFINITIONS", scummvm_defines, SettingsNoQuote|SettingsAsList, 5);
ADD_SETTING(scummvmSimulator_Debug, "SDKROOT", "iphonesimulator3.2");
+ ADD_SETTING_QUOTE(scummvmSimulator_Debug, "VALID_ARCHS", "i386 x86_64");
REMOVE_SETTING(scummvmSimulator_Debug, "TARGETED_DEVICE_FAMILY");
scummvmSimulator_Debug_Object->addProperty("name", "Debug", "", SettingsNoValue);
@@ -726,6 +747,7 @@ void XCodeProvider::setupBuildConfiguration() {
Object *scummvmSimulator_Release_Object = new Object(this, "XCBuildConfiguration_" PROJECT_DESCRIPTION "-Simulator_Release", _targets[2] /* ScummVM-Simulator */, "XCBuildConfiguration", "PBXNativeTarget", "Release");
Property scummvmSimulator_Release(scummvmSimulator_Debug);
ADD_SETTING(scummvmSimulator_Release, "COPY_PHASE_STRIP", "YES");
+ ADD_SETTING(scummvmSimulator_Release, "GCC_OPTIMIZATION_LEVEL", "3");
REMOVE_SETTING(scummvmSimulator_Release, "GCC_DYNAMIC_NO_PIC");
ADD_SETTING(scummvmSimulator_Release, "WRAPPER_EXTENSION", "app");
diff --git a/devtools/create_teenagent/create_teenagent.cpp b/devtools/create_teenagent/create_teenagent.cpp
index 9551acbaea..fc2ba4da0e 100644
--- a/devtools/create_teenagent/create_teenagent.cpp
+++ b/devtools/create_teenagent/create_teenagent.cpp
@@ -106,7 +106,5 @@ int main(int argc, char *argv[]) {
fclose(fin);
fclose(fout);
- fprintf(stderr, "please run \"gzip -n %s\"\n", dat_name);
-
return 0;
}
diff --git a/devtools/credits.pl b/devtools/credits.pl
index b3a506125f..6a4b97b89d 100755
--- a/devtools/credits.pl
+++ b/devtools/credits.pl
@@ -69,6 +69,7 @@ sub html_entities_to_ascii {
# &aring; -> aa
# &amp; -> &
# &#322; -> l
+ # &#347; -> s
# &Scaron; -> S
$text =~ s/&aacute;/a/g;
$text =~ s/&eacute;/e/g;
@@ -76,6 +77,7 @@ sub html_entities_to_ascii {
$text =~ s/&oacute;/o/g;
$text =~ s/&oslash;/o/g;
$text =~ s/&#322;/l/g;
+ $text =~ s/&#347;/s/g;
$text =~ s/&Scaron;/S/g;
$text =~ s/&aring;/aa/g;
@@ -101,6 +103,7 @@ sub html_entities_to_cpp {
$text =~ s/&oacute;/\\363/g;
$text =~ s/&oslash;/\\370/g;
$text =~ s/&#322;/l/g;
+ $text =~ s/&#347;/s/g;
$text =~ s/&Scaron;/S/g;
$text =~ s/&aring;/\\345/g;
@@ -550,7 +553,9 @@ begin_credits("Credits");
begin_section("DreamWeb");
add_person("Torbj&ouml;rn Andersson", "eriktorbjorn", "");
add_person("Bertrand Augereau", "Tramb", "");
+ add_person("Filippos Karapetis", "[md5]", "");
add_person("Vladimir Menshakov", "whoozle", "(retired)");
+ add_person("Willem Jan Palenstijn", "wjp", "");
end_section();
begin_section("Gob");
@@ -942,10 +947,10 @@ begin_credits("Credits");
add_person("Matteo Angelino", "Maff", "");
end_section();
begin_section("Norwegian (Bokm&aring;l)");
- add_person("Einar Johan T. S&oslash;m&aring;en", "", "");
+ add_person("Einar Johan S&oslash;m&aring;en", "somaen", "");
end_section();
begin_section("Norwegian (Nynorsk)");
- add_person("Einar Johan T. S&oslash;m&aring;en", "", "");
+ add_person("Einar Johan S&oslash;m&aring;en", "somaen", "");
end_section();
begin_section("Polish");
add_person("GrajPoPolsku.pl Team", "", "");
@@ -1127,6 +1132,14 @@ begin_credits("Credits");
"Broken Sword 2.5 team for providing sources of their engine and their great ".
"support.");
+ add_paragraph(
+ "Neil Dodwell and David Dew from Creative Reality for providing the source ".
+ "of Dreamweb and for their tremendous support.");
+
+ add_paragraph(
+ "Janusz Wi&#347;niewski and Miroslaw Liminowicz from Laboratorium Komputerowe Avalon ".
+ "for providing full source code for So&#322;tys and letting us to redistribute the game.");
+
end_section();
end_credits();
diff --git a/devtools/scumm-md5.txt b/devtools/scumm-md5.txt
index 176f04aaf8..42dcb27d1a 100644
--- a/devtools/scumm-md5.txt
+++ b/devtools/scumm-md5.txt
@@ -575,6 +575,7 @@ maze Freddi Fish and Luther's Maze Madness
4f04b321a95d4315ce6d65f8e1dd0368 -1 us All HE 80 - - Kirben
cd424f143a141bc59226ad83a6e40f51 -1 nl All HE 98.5 - - daniel9, sugarcube
4dbff3787aedcd96b0b325f2d92d7ad9 -1 us All HE 100 Updated - Kirben
+ 4522564b3c31aaf218b6a96826a549fd -1 us Windows HE 99 - - legoking831
water Freddi Fish and Luther's Water Worries
4ba37f835be11a59d969f90f272f575b -1 us All HE 80 - - Kirben
diff --git a/dists/android/AndroidManifest.xml b/dists/android/AndroidManifest.xml
index e7778fdf61..a3c02474eb 100644
--- a/dists/android/AndroidManifest.xml
+++ b/dists/android/AndroidManifest.xml
@@ -4,7 +4,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.scummvm.scummvm"
android:versionCode="@ANDROID_VERSIONCODE@"
- android:versionName="1.5.0git"
+ android:versionName="1.6.0git"
android:installLocation="preferExternal"
android:sharedUserId="org.scummvm.scummvm">
diff --git a/dists/android/plugin-manifest.xml b/dists/android/plugin-manifest.xml
index 51b39be3b1..7855c330c6 100644
--- a/dists/android/plugin-manifest.xml
+++ b/dists/android/plugin-manifest.xml
@@ -3,7 +3,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.scummvm.scummvm.plugin.@PLUGIN_NAME@"
android:versionCode="@PLUGIN_VERSION_CODE@"
- android:versionName="1.5.0git"
+ android:versionName="1.6.0git"
android:installLocation="preferExternal"
android:sharedUserId="org.scummvm.scummvm">
diff --git a/dists/engine-data/teenagent.dat b/dists/engine-data/teenagent.dat
index 0dd31dad14..1492326920 100644
--- a/dists/engine-data/teenagent.dat
+++ b/dists/engine-data/teenagent.dat
Binary files differ
diff --git a/dists/gph/README-GPH b/dists/gph/README-GPH
index 29f0175306..974c2cf266 100644
--- a/dists/gph/README-GPH
+++ b/dists/gph/README-GPH
@@ -1,4 +1,4 @@
-ScummVM 1.5.0git - GPH DEVICE SPECIFIC README
+ScummVM 1.6.0git - GPH DEVICE SPECIFIC README
------------------------------------------------------------------------
diff --git a/dists/gph/scummvm.ini b/dists/gph/scummvm.ini
index 952cd0de24..7d9d85fcc2 100644
--- a/dists/gph/scummvm.ini
+++ b/dists/gph/scummvm.ini
@@ -1,5 +1,5 @@
[info]
-name="ScummVM 1.5.0git"
+name="ScummVM 1.6.0git"
path="/scummvm/scummvm.gpe"
icon="/scummvm/scummvm.png"
title="/scummvm/scummvmb.png"
diff --git a/dists/iphone/Info.plist b/dists/iphone/Info.plist
index e25cee51ea..2f6ba85b00 100644
--- a/dists/iphone/Info.plist
+++ b/dists/iphone/Info.plist
@@ -15,11 +15,11 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
- <string>1.5.0git</string>
+ <string>1.6.0git</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
- <string>1.5.0git</string>
+ <string>1.6.0git</string>
<key>CFBundleIconFile</key>
<string>icon.png</string>
<key>CFBundleIconFiles</key>
diff --git a/dists/irix/scummvm.spec b/dists/irix/scummvm.spec
index 2e099d94a8..bbdf31cc2c 100644
--- a/dists/irix/scummvm.spec
+++ b/dists/irix/scummvm.spec
@@ -1,5 +1,5 @@
product scummvm
- id "ScummVM 1.5.0git"
+ id "ScummVM 1.6.0git"
image sw
id "software"
version 18
diff --git a/dists/macosx/Info.plist b/dists/macosx/Info.plist
index 94adc00a9b..d8c28f6a08 100644
--- a/dists/macosx/Info.plist
+++ b/dists/macosx/Info.plist
@@ -28,7 +28,7 @@
<key>CFBundleExecutable</key>
<string>scummvm</string>
<key>CFBundleGetInfoString</key>
- <string>1.5.0git, Copyright 2001-2012 The ScummVM team</string>
+ <string>1.6.0git, Copyright 2001-2012 The ScummVM team</string>
<key>CFBundleIconFile</key>
<string>scummvm.icns</string>
<key>CFBundleIdentifier</key>
@@ -40,9 +40,9 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
- <string>1.5.0git</string>
+ <string>1.6.0git</string>
<key>CFBundleVersion</key>
- <string>1.5.0git</string>
+ <string>1.6.0git</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
<key>NSHumanReadableCopyright</key>
diff --git a/dists/msvc11/create_msvc11.bat b/dists/msvc11/create_msvc11.bat
new file mode 100644
index 0000000000..b6a5413e3b
--- /dev/null
+++ b/dists/msvc11/create_msvc11.bat
@@ -0,0 +1,95 @@
+@echo off
+
+echo.
+echo Automatic creation of the MSVC11 project files
+echo.
+
+if "%~1"=="/stable" goto stable
+if "%~1"=="/STABLE" goto stable
+if "%~1"=="/all" goto all
+if "%~1"=="/ALL" goto all
+if "%~1"=="/tools" goto tools
+if "%~1"=="/TOOLS" goto tools
+if "%~1"=="/clean" goto clean_check
+if "%~1"=="/CLEAN" goto clean_check
+if "%~1"=="/help" goto command_help
+if "%~1"=="/HELP" goto command_help
+if "%~1"=="/?" goto command_help
+
+if "%~1"=="" goto check_tool
+
+echo Invalid command parameter: %~1
+echo.
+
+:command_help
+echo Valid command parameters are:
+echo stable Generated stable engines project files
+echo all Generate all engines project files
+echo tools Generate project files for the devtools
+echo clean Clean generated project files
+echo help Show help message
+goto done
+
+:check_tool
+if not exist create_project.exe goto no_tool
+
+:question
+echo.
+set batchanswer=S
+set /p batchanswer="Enable stable engines only, or all engines? (S/a)"
+if "%batchanswer%"=="s" goto stable
+if "%batchanswer%"=="S" goto stable
+if "%batchanswer%"=="a" goto all
+if "%batchanswer%"=="A" goto all
+goto question
+
+:no_tool
+echo create_project.exe not found in the current folder.
+echo You need to build it first and copy it in this
+echo folder
+goto done
+
+:all
+echo.
+echo Creating project files with all engines enabled (stable and unstable)
+echo.
+create_project ..\.. --enable-all-engines --msvc --msvc-version 11 --build-events
+goto done
+
+:stable
+echo.
+echo Creating normal project files, with only the stable engines enabled
+echo.
+create_project ..\.. --msvc --msvc-version 11
+goto done
+
+:tools
+echo.
+echo Creating tools project files
+echo.
+create_project ..\.. --tools --msvc --msvc-version 11
+goto done
+
+:clean_check
+echo.
+set cleananswer=N
+set /p cleananswer="This will remove all project files. Are you sure you want to continue? (N/y)"
+if "%cleananswer%"=="n" goto done
+if "%cleananswer%"=="N" goto done
+if "%cleananswer%"=="y" goto clean
+if "%cleananswer%"=="Y" goto clean
+goto clean_check
+
+:clean
+echo.
+echo Removing all project files
+del /Q *.vcxproj* > NUL 2>&1
+del /Q *.props > NUL 2>&1
+del /Q *.sln* > NUL 2>&1
+del /Q scummvm* > NUL 2>&1
+del /Q devtools* > NUL 2>&1
+goto done
+
+:done
+echo.
+pause
diff --git a/dists/msvc11/readme.txt b/dists/msvc11/readme.txt
new file mode 100644
index 0000000000..fa91a8cc12
--- /dev/null
+++ b/dists/msvc11/readme.txt
@@ -0,0 +1,6 @@
+The Visual Studio project files can now be created automatically from the GCC
+files using the create_project tool inside the /devtools/create_project folder.
+
+To create the default project files, build create_project.exe, copy it inside
+this folder and run the create_msvc11.bat file for a default build. You can run
+create_project.exe with no parameters to check the possible command-line options
diff --git a/dists/openpandora/PXML.xml b/dists/openpandora/PXML.xml
index 896210bf01..b759c311ba 100644
--- a/dists/openpandora/PXML.xml
+++ b/dists/openpandora/PXML.xml
@@ -4,11 +4,11 @@
<package id="scummvm.djwillis.0001">
<author name="DJWillis" website="http://www.scummvm.org/"/>
<!-- version type can be alpha, beta or release, set to release in branch -->
- <version major="1" minor="5" release="0" build="1" type="release"/>
+ <version major="1" minor="6" release="0" build="1" type="release"/>
<!-- Both title and titles are needed -->
- <title lang="en_US">ScummVM 1.5.0git</title>
+ <title lang="en_US">ScummVM 1.6.0git</title>
<titles>
- <title lang="en_US">ScummVM 1.5.0git</title>
+ <title lang="en_US">ScummVM 1.6.0git</title>
</titles>
<descriptions>
<description lang="en_US">
@@ -25,7 +25,7 @@
<exec command="./runscummvm.sh"/>
<author name="DJWillis" website="http://www.scummvm.org/"/>
<!-- version type can be alpha, beta or release, set to release in branch -->
- <version major="1" minor="5" release="0" build="1" type="release"/>
+ <version major="1" minor="6" release="0" build="1" type="release"/>
<!-- Both title and titles are needed -->
<title lang="en_US">ScummVM</title>
<titles>
diff --git a/dists/openpandora/README-OPENPANDORA b/dists/openpandora/README-OPENPANDORA
index b3947975c0..e3c7c9d631 100644
--- a/dists/openpandora/README-OPENPANDORA
+++ b/dists/openpandora/README-OPENPANDORA
@@ -1,4 +1,4 @@
-ScummVM 1.5.0git - OPENPANDORA SPECIFIC README
+ScummVM 1.6.0git - OPENPANDORA SPECIFIC README
------------------------------------------------------------------------
Please refer to the:
diff --git a/dists/openpandora/README-PND.txt b/dists/openpandora/README-PND.txt
index 240936f755..594ad293ed 100644
--- a/dists/openpandora/README-PND.txt
+++ b/dists/openpandora/README-PND.txt
@@ -1,4 +1,4 @@
-ScummVM 1.5.0git - OPENPANDORA README - HOW TO INSTALL
+ScummVM 1.6.0git - OPENPANDORA README - HOW TO INSTALL
------------------------------------------------------------------------
Please refer to the:
diff --git a/dists/openpandora/index.html b/dists/openpandora/index.html
index d7238c1889..5da951546c 100644
--- a/dists/openpandora/index.html
+++ b/dists/openpandora/index.html
@@ -5,7 +5,7 @@
</h3>
<h4>
- <p>ScummVM 1.5.0git: OpenPandora Specific Documentation</p>
+ <p>ScummVM 1.6.0git: OpenPandora Specific Documentation</p>
</h4>
<A href="docs/README-OPENPANDORA">ScummVM OpenPandora README</a><br/>
@@ -13,7 +13,7 @@
<A href="http://wiki.scummvm.org/index.php/OpenPandora">ScummVM OpenPandora WiKi</a><br/>
<h4>
- <p>ScummVM 1.5.0git: General Documentation</p>
+ <p>ScummVM 1.6.0git: General Documentation</p>
</h4>
<A href="http://www.scummvm.org/">ScummVM website</a><br/>
diff --git a/dists/redhat/scummvm-tools.spec b/dists/redhat/scummvm-tools.spec
index 99add8ba85..2f65931a70 100644
--- a/dists/redhat/scummvm-tools.spec
+++ b/dists/redhat/scummvm-tools.spec
@@ -7,7 +7,7 @@
# Prologue information
#------------------------------------------------------------------------------
Name : scummvm-tools
-Version : 1.5.0git
+Version : 1.6.0git
Release : 1
Summary : ScummVM-related tools
Group : Interpreters
diff --git a/dists/redhat/scummvm.spec b/dists/redhat/scummvm.spec
index 2ccccae79d..bd17017fbf 100644
--- a/dists/redhat/scummvm.spec
+++ b/dists/redhat/scummvm.spec
@@ -7,7 +7,7 @@
# Prologue information
#------------------------------------------------------------------------------
Name : scummvm
-Version : 1.5.0git
+Version : 1.6.0git
Release : 1
Summary : Graphic adventure game interpreter
Group : Interpreters
@@ -27,6 +27,7 @@ BuildRequires: flac-devel
BuildRequires: zlib-devel
BuildRequires: nasm
BuildRequires: SDL-devel >= 1.2.2
+BuildRequires: freetype-devel
#------------------------------------------------------------------------------
# Description
@@ -94,7 +95,7 @@ fi
#------------------------------------------------------------------------------
%files
%defattr(0644,root,root,0755)
-%doc AUTHORS README NEWS COPYING COPYING.LGPL COPYING.BSD COPYRIGHT
+%doc AUTHORS README NEWS COPYING COPYING.LGPL COPYING.FREEFONT COPYING.BSD COPYRIGHT
%attr(0755,root,root)%{_bindir}/scummvm
%{_datadir}/applications/*
%{_datadir}/pixmaps/scummvm.xpm
diff --git a/dists/redhat/scummvm.spec.in b/dists/redhat/scummvm.spec.in
index 3beef2f960..9dbd8add5b 100644
--- a/dists/redhat/scummvm.spec.in
+++ b/dists/redhat/scummvm.spec.in
@@ -27,6 +27,7 @@ BuildRequires: flac-devel
BuildRequires: zlib-devel
BuildRequires: nasm
BuildRequires: SDL-devel >= 1.2.2
+BuildRequires: freetype-devel
#------------------------------------------------------------------------------
# Description
@@ -94,7 +95,7 @@ fi
#------------------------------------------------------------------------------
%files
%defattr(0644,root,root,0755)
-%doc AUTHORS README NEWS COPYING COPYING.LGPL COPYING.BSD COPYRIGHT
+%doc AUTHORS README NEWS COPYING COPYING.LGPL COPYING.FREEFONT COPYING.BSD COPYRIGHT
%attr(0755,root,root)%{_bindir}/scummvm
%{_datadir}/applications/*
%{_datadir}/pixmaps/scummvm.xpm
diff --git a/dists/scummvm.rc b/dists/scummvm.rc
index e5d28d089a..4a67100f9f 100644
--- a/dists/scummvm.rc
+++ b/dists/scummvm.rc
@@ -14,6 +14,7 @@ IDI_COUNT ICON DISCARDABLE "icons/count.ico"
ID_GDF_XML DATA "dists/win32/scummvm.gdf.xml"
+scummclassic.zip FILE "gui/themes/scummclassic.zip"
scummmodern.zip FILE "gui/themes/scummmodern.zip"
#ifdef USE_TRANSLATION
translations.dat FILE "gui/themes/translations.dat"
@@ -48,8 +49,8 @@ pred.dic FILE "dists/pred.dic"
#endif
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 1,5,0,0
- PRODUCTVERSION 1,5,0,0
+ FILEVERSION 1,6,0,0
+ PRODUCTVERSION 1,6,0,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -66,13 +67,13 @@ BEGIN
BEGIN
VALUE "Comments", "Look! A three headed monkey (TM)! .. Nice use of the TM!\0"
VALUE "FileDescription", "http://www.scummvm.org/\0"
- VALUE "FileVersion", "1.5.0git\0"
+ VALUE "FileVersion", "1.6.0git\0"
VALUE "InternalName", "scummvm\0"
VALUE "LegalCopyright", "Copyright Љ 2001-2012 The ScummVM Team\0"
VALUE "LegalTrademarks", "'SCUMM', and all SCUMM games are a TM of LucasArts. Simon The Sorcerer is a TM of AdventureSoft. Beneath a Steel Sky and Broken Sword are a TM of Revolution. Flight of the Amazon Queen is a TM of John Passfield and Steve Stamatiadis. \0"
VALUE "OriginalFilename", "scummvm.exe\0"
VALUE "ProductName", "ScummVM\0"
- VALUE "ProductVersion", "1.5.0git\0"
+ VALUE "ProductVersion", "1.6.0git\0"
END
END
diff --git a/dists/scummvm.rc.in b/dists/scummvm.rc.in
index 6969e0b2a7..a874b98514 100644
--- a/dists/scummvm.rc.in
+++ b/dists/scummvm.rc.in
@@ -14,6 +14,7 @@ IDI_COUNT ICON DISCARDABLE "icons/count.ico"
ID_GDF_XML DATA "dists/win32/scummvm.gdf.xml"
+scummclassic.zip FILE "gui/themes/scummclassic.zip"
scummmodern.zip FILE "gui/themes/scummmodern.zip"
#ifdef USE_TRANSLATION
translations.dat FILE "gui/themes/translations.dat"
diff --git a/dists/slackware/scummvm.SlackBuild b/dists/slackware/scummvm.SlackBuild
index 4ccc2a8995..076a1d20ea 100755
--- a/dists/slackware/scummvm.SlackBuild
+++ b/dists/slackware/scummvm.SlackBuild
@@ -9,7 +9,7 @@ if [ "$TMP" = "" ]; then
fi
PKG=$TMP/package-scummvm
-VERSION=1.5.0git
+VERSION=1.6.0git
ARCH=i486
BUILD=1
diff --git a/dists/wii/meta.xml b/dists/wii/meta.xml
index e843d36e79..5a4c46e144 100644
--- a/dists/wii/meta.xml
+++ b/dists/wii/meta.xml
@@ -2,7 +2,7 @@
<app version="1">
<name>ScummVM</name>
<coder>The ScummVM Team</coder>
- <version>1.5.0git@REVISION@</version>
+ <version>1.6.0git@REVISION@</version>
<release_date>@TIMESTAMP@</release_date>
<short_description>Point &amp; Click Adventures</short_description>
<long_description>ScummVM is a program which allows you to run certain classic graphical point-and-click adventure games, provided you already have their data files. The clever part about this: ScummVM just replaces the executables shipped with the games, allowing you to play them on systems for which they were never designed!
diff --git a/dists/win32/scummvm.nsi b/dists/win32/scummvm.nsi
index 7ff174befb..795eb660b6 100644
--- a/dists/win32/scummvm.nsi
+++ b/dists/win32/scummvm.nsi
@@ -72,7 +72,7 @@ Name ScummVM
# General Symbol Definitions
#########################################################################################
!define REGKEY "Software\$(^Name)\$(^Name)"
-!define VERSION "1.5.0git"
+!define VERSION "1.6.0git"
!define COMPANY "ScummVM Team"
!define URL "http://scummvm.org/"
!define DESCRIPTION "ScummVM Installer. Look! A three headed monkey (TM)!"
@@ -92,7 +92,7 @@ XPStyle on
#TargetMinimalOS 5.0 ; Minimal version of windows for installer: Windows 2000 or more recent
; (will build unicode installer with NSIS 2.50+)
-VIProductVersion 1.5.0.0
+VIProductVersion 1.6.0.0
VIAddVersionKey ProductName $(^Name)
VIAddVersionKey ProductVersion "${VERSION}"
VIAddVersionKey CompanyName "${COMPANY}"
diff --git a/doc/cz/PrectiMe b/doc/cz/PrectiMe
index 4cb362ab3c..153ef09dcd 100644
--- a/doc/cz/PrectiMe
+++ b/doc/cz/PrectiMe
@@ -53,7 +53,9 @@ Obsah:
* 7.7 Podpora MIDI serveru TiMidity++
* 7.8 PouХОitУ­ komprimovanУНch zvukovУНch souborХЏ (MP3, Ogg Vorbis, Flac)
* 7.9 VУНstupnУ­ vzorkovacУ­ kmitoФet
-8.0) Soubor s nastavenУ­m
+8.0) Soubor sТ nastavenУ­m
+ * 8.1 RozpoznУЁvanУЁ klУ­ФovУЁ slova nastavenУ­
+ * 8.2 VlastnУ­ hernУ­ volby, kterУЉ mohou bУНt pХ™epУ­nУЁny pomoci grafickУЉho rozhranУ­
9.0) SestavenУ­
@@ -179,13 +181,18 @@ Hry AGOS od Adventuresoft/Horrorsoft:
The Feeble Files [feeble]
Hry GOB od Coktel Vision:
+ Bambou le sauveur de la jungle [bambou]
Bargon Attack [bargon]
+ Fascination [fascination]
+ Geisha [geisha]
Gobliiins [gob1]
Gobliins 2 [gob2]
Goblins 3 [gob3]
Lost in Time [lostintime]
+ Once Upon A Time: Little Red Riding Hood [littlered]
The Bizarre Adventures of Woodruff
and the Schnibble [woodruff]
+ Urban Runner [urban]
Ween: The Prophecy [ween]
Hry MADE od Activision:
@@ -216,6 +223,7 @@ DalХЁУ­ hry:
Hry SCUMM od Humongous Entertainment:
Backyard Baseball [baseball]
Backyard Baseball 2001 [baseball2001]
+ Backyard Baseball 2003 [baseball2003]
Backyard Football [football]
Big Thinkers First Grade [thinker1]
Big Thinkers Kindergarten [thinkerk]
@@ -284,7 +292,6 @@ Hry Living Books:
NУЁsledujУ­cУ­ hry by mФ›ly jУ­t spustit, ale zatУ­m nejsou УКplnФ› hratelnУЉ. Hrajte je pouze na vlastnУ­ riziko a prosУ­me, abyste pro tyto hry nenahlaХЁovali chyby.
Pokud chcete mУ­t nejnovФ›jХЁУ­ zprУЁvy o kompatibilitУЁch her, navХЁtivte naХЁУ­ strУЁnku a prohlУЉdnФ›te si tabulku kompatibilit.
- Backyard Baseball 2003 [baseball2003]
Backyard Football 2002 [football2002]
Backyard Soccer [soccer]
Backyard Soccer MLS [soccermls]
@@ -1478,6 +1485,8 @@ VzorovУН soubor sТ nastavenУ­m vypadУЁ takto:
path=C:\amiga_mi2\
music_driver=windows
+8.1) RozpoznУЁvanУЁ klУ­ФovУЁ slova nastavenУ­
+---- ------------------------------------
Jsou rozpoznУЁvУЁna nУЁsledujУ­cУ­ klУ­ФovУЁ slova:
path Х™etФ›zec Cesta, kde jsou umУ­stФ›ny datovУЉ soubory hry
@@ -1494,7 +1503,6 @@ Jsou rozpoznУЁvУЁna nУЁsledujУ­cУ­ klУ­ФovУЁ slova:
talkspeed ФУ­slo ZpoХОdФ›nУ­ textu v hrУЁch SCUMM, nebo rychlost textu vТ jinУНch hrУЁch.
fullscreen boolean ReХОim celУЉ obrazovky
aspect_ratio boolean Povolit korekci pomФ›ru stran
- disable_dithering boolean Odstranit artefakty chvФ›nУ­ vТ nФ›kterУНch hrУЁch EGA
gfx_mode Х™etФ›zec GrafickУН reХОim (normУЁlnУ­, 2x, 3x, 2xsai, super2xsai, supereagle, advmame2x, advmame3x,hq2x, hq3x, tv2x, dotmatrix)
confirm_exit boolean Zeptat se uХОivatele na potvrzenУ­ pХ™ed ukonФenУ­m (pouze jУЁdro SDL).
console boolean Povolit okno konzole (vУНchozУ­: zapnuto) (pouze Windows).
@@ -1518,6 +1526,16 @@ Jsou rozpoznУЁvУЁna nУЁsledujУ­cУ­ klУ­ФovУЁ slova:
alt_intro boolean PouХОУ­t alternativnУ­ УКvod pro CD verze Beneath a Steel Sky a Flight of the Amazon Queen
boot_param ФУ­slo PХ™edУЁ toto ФУ­slo zavУЁdФ›cУ­mu skriptu
+Hry Sierra pouХОУ­vajУ­cУ­ jУЁdro AGI pХ™idУЁvajУ­ nУЁsledujУ­cУ­ nestandardnУ­ klУ­ФovУЉ slovo:
+
+originalsaveload boolean Pokud true, jsou pouХОity pХЏvodnУ­ obrazovky nahrУЁvУЁnУ­/uloХОenУ­ mУ­sto vylepХЁenУНch ze ScummVM
+
+Hry Sierra pouХОУ­vajУ­cУ­ jУЁdro SCI pХ™idУЁvajУ­ nУЁsledujУ­cУ­ nestandardnУ­ klУ­ФovУЁ slova:
+
+ disable_dithering boolean Odstranit artefakty chvФ›nУ­ vТ nФ›kterУНch hrУЁch EGA
+ prefer_digitalsfx boolean Pokud true, jsou upХ™ednostХˆovУЁny digitУЁlnУ­ zvukovУЉ efekty pХ™ed syntetizovanУНmi
+ originalsaveload boolean Pokud true, jsou pouХОity pХЏvodnУ­ obrazovky nahrУЁvУЁnУ­/uloХОenУ­ mУ­sto vylepХЁenУНch ze ScummVM
+ native_fb01 bool Pokud true, je ovladaФ hudby pro kartu IBM Music Feature nebo modul syntetizУЁtoru Yahama FB-01 FM pouХОit jako vУНstup MIDI
Broken Sword II pХ™idУЁvУЁ nУЁsledujУ­cУ­ nestandardnУ­ klУ­ФovУЁ slova:
gfx_details ФУ­slo NastavenУ­ grafickУНch detailХЏ (0-3)
@@ -1526,16 +1544,25 @@ Broken Sword II pХ™idУЁvУЁ nУЁsledujУ­cУ­ nestandardnУ­ klУ­ФovУЁ slova:
reverse_stereo boolean Pokud true, kanУЁly stereo jsou obrУЁceny
sfx_mute boolean Pokud true, zvukovУЉ efekty jsou ztlumeny
-Flight of the Amazon Queen pХ™idУЁvУЁ nУЁsledujУ­cУ­ nestandardnУ­ klУ­ФovУЁ slova
+Flight of the Amazon Queen pХ™idУЁvУЁ nУЁsledujУ­cУ­ nestandardnУ­ klУ­ФovУЁ slova:
music_mute boolean Pokud true, hudba je ztlumena
sfx_mute boolean Pokud true, zvukovУЉ efekty jsou ztlumeny
-King's Quest VI Windows pХ™idУЁvУЁ nУЁsledujУ­cУ­ nestandardnУ­ klУ­ФovУЁ slova:
+Jones in the Fast Lane pХ™idУЁvУЁ nУЁsledujУ­cУ­ nestandardnУ­ klУ­ФovУЉ slovo:
+
+ music_mute boolean Pokud true, je pouХОito CD audio mУ­sto zvukХЏ ve hХ™e
+
+King's Quest VI Windows pХ™idУЁvУЁ nУЁsledujУ­cУ­ nestandardnУ­ klУ­ФovУЉ slovo:
windows_cursors boolean Pokud true, jsou pouХОity pХЏvodnУ­ ФernobУ­lУЉ kurzory mУ­sto kurzorХЏ z DOS. Pokud false, jsou ve verzi Windows pouХОity kurzory DOS, zvФ›tХЁenУЉ, aby se shodovaly se zbytkem zvФ›tХЁenУЉ grafiky
-Space Qust IV CD pХ™idУЁvУЁ nУЁsledujУ­cУ­ nestandardnУ­ klУ­ФovУЉ slovo:
+Lands of Lore: The Throne of Chaos pХ™idУЁvУЁ nУЁsledujУ­cУ­ nestandardnУ­ klУ­ФovУЁ slova:
+
+ smooth_scrolling boolean Pokud true, je posunovУЁnУ­ pХ™i zmФ›nФ› zТ jednУЉ obrazovky na druhou plynulejХЁУ­
+ floating_cursors boolean Pokud true, je kurzor zmФ›nФ›n na smФ›rovou ХЁipku pХ™i najetУ­ na okraj obrazovky. HrУЁФ pak mХЏХОe kliknout pro pohyb vТ tomto smФ›ru.
+
+Space Quest IV CD pХ™idУЁvУЁ nУЁsledujУ­cУ­ nestandardnУ­ klУ­ФovУЉ slovo:
silver_cursors boolean Pokud true, je mУ­sto pХЏvodnУ­ch zlatУНch kurzorХЏ pouХОita alternativnУ­ sada stХ™У­brnУНch
@@ -1548,10 +1575,23 @@ The Legend of Kyrandia pХ™idУЁvУЁ nУЁsledujУ­cУ­ nestandardnУ­ klУ­ФovУЉ slovo:
walkspeed celУЉ ФУ­slo Rychlost chХЏze (0-4)
+The Legend of Kyrandia: Malcolm's Revenge pХ™idУЁvУЁ nУЁsledujУ­cУ­ nestandardnУ­ klУ­ФovУЁ slova:
+
+ studio_audience boolean Pokud true, je slyХЁet potlesk a smУ­ch kdykoliv Malcolm provede nФ›co vtipnУЉho
+ skip_support boolean Pokud true, hrУЁФ mХЏХОe pХ™eskakovat text a scУЉny hry
+ helium_mode boolean Pokud true, lidУЉ znФ›jУ­ tak, jakoby se nadУНchali hУЉlia
+
The 7th Guest pХ™idУЁvУЁ nУЁsledujУ­cУ­ nestandardnУ­ klУ­ФovУЉ slovo:
t7g_speed Х™etФ›zec Rychlost pХ™ehrУЁvУЁnУ­ videa (normal - normУЁlnУ­, tweaked - upravenУЁ, im_an_ios - jsem na ios)
+8.2) VlastnУ­ hernУ­ volby, kterУЉ mohou bУНt pХ™epУ­nУЁny pomoci grafickУЉho
+---- ----------------------------------------------------------------
+rozhranУ­
+--------
+Mnoho vlastnУ­ch hernУ­ch voleb vТ pХ™edchozУ­ ФУЁsti mХЏХОe bУНt pХ™epnuto pХ™es grafickУЉ rozhranУ­. Pokud je takovУЁto volba pro urФitou hru dostupnУЁ, objevУ­ se karta "JУЁdro" pХ™i pХ™idУЁvУЁnУ­ nebo УКpravФ› nastavenУ­ tУЉto hry.
+Pokud vlastnУ­ moХОnosti nejsou zobrazeny, musУ­ bУНt konkrУЉtnУ­ hry spuХЁtФ›ny jednou nebo znovu pХ™idУЁny do seznamu her spouХЁtФ›Фe ScummVM. Toto aktualizuje nastavenУ­ kaХОdУЉ poloХОky, ФУ­mХО umoХОnУ­ zobrazenУ­ vlastnУ­ch voleb.
+
9.0) SestavenУ­:
---- ----------
Pro aktuУЁlnУ­ pХ™ehled o tom, jak ScummVM sestavit pro rХЏznУЉ platformy, prohlУЉdnФ›te si, prosУ­m, naХЁУ­ Wiki, zvlУЁХЁtФ› tuto strУЁnku:
@@ -1624,3 +1664,4 @@ http://www.scummvm.org/
------------------------------------------------------------------------
+
diff --git a/doc/da/HurtigStart b/doc/da/HurtigStart
new file mode 100644
index 0000000000..b54590bba3
--- /dev/null
+++ b/doc/da/HurtigStart
@@ -0,0 +1,151 @@
+Dette dokument er en delvis oversУІttelse af den engelske README filen.
+Det originale dokument har meget mere information, sУЅ hvis du ikke kan
+finde det du har brug for her og kan forstУЅ en smule engelsk, sУЅ prУИv
+at se i den Engelske README-fil.
+
+For mere information, kompatibilitet lister, detaljer om donering, den
+seneste udgivelse, statusrapporter og mere, kan du besУИge ScummVMs hjemme-
+side pУЅ: http://www.scummvm.org/
+
+Indholdsfortegnelse:
+--------------------
+1.0) Indledning
+ * 1.1 Om ScummVM
+ * 1.2 Hurtig start
+2.0) Kontakt
+ * 2.1 Rapportering af fejl
+
+1.0) Indledning:
+---- -----------
+
+1.1) Om ScummVM:
+---- -----------
+ScummVM er et program, som tillader dig at kУИre visse klassiske grafiske
+peg-og-klik eventyr spil, hvis du allerede har deres data filer. Den
+smarte del omkring dette: ScummVM erstatter bare de eksekverbare filer
+der fulgte med i spillet, sУЅ du kan afspille dem pУЅ systemer, hvor de
+aldrig var designet til!
+
+Oprindeligt var det designet til at kУИre LucasArts' SCUMM spil, sУЅsom
+Maniac Mansion, Monkey Island, Day of the Tentacle eller Sam and Max.
+SCUMM stУЅr for 'Script Creation Utility for Maniac Mansion', som var det
+fУИrste spil som LucasArts designede dette system til. Og langt senere gav
+navn til ScummVM ('VM', betyder Virtuel Maskine).
+
+EfterhУЅnden er understУИttelse for en masse ikke-SCUMM spil blevet tilfУИjet,
+og ScummVM understУИtter nu ogsУЅ mange af Sierras AGI og SCI-spil (sУЅsom
+Kings Quest 1-6, Space Quest 1-5, ...), Discworld 1 og 2, Simon the Sorcerer
+1 og 2, Beneath A Steel Sky, Lure of the Temptress, Broken Sword I og II,
+Flight of the Amazon Queen, Gobliiins 1-3, The Legend of Kyrandia serien,
+mange af Humongous Entertainments bУИrne SCUMM spil (herunder Freddi Fish
+and Putt Putt spil) og mange flere. Du kan finde en komplet liste med
+oplysninger om, hvilke eventyr der understУИttes og hvor godt, pУЅ
+kompatibilitetssiden. ScummVM forbedres lУИbende, sУЅ vend ofte tilbage.
+
+Blandt de systemer, som du kan spille disse spil pУЅ er regulУІre desktop
+computere (Windows, Linux, Mac OS X, ...), spillekonsoller (Dreamcast,
+Nintendo DS og Wii, PS2, PSP, ...), smartphones (Android, iPhone, PocketPC,
+Symbian ...) og flere.
+
+PУЅ dette tidspunkt er ScummVM stadig under kraftig udvikling. VУІr opmУІrksom
+pУЅ, at selvom vi forsУИger at sУИrge for, at mange spil kan gennemfУИres med fУЅ
+store fejl, kan nedbrud ske, og vi tilbyder ingen garanti. NУЅr det er sagt,
+er nogle af spillene blevet understУИttet i lang tid og bУИr fungerer fint
+med alle nyere stabile udgaver. Du kan fУЅ en fornemmelse af, hvor godt
+hvert spil virker i ScummVM, ved at kigge pУЅ kompatibilitetssiden. Faktisk,
+hvis du sУИger lidt rundt, vil du mУЅske opdage, at ScummVM endog anvendes
+kommercielt til genudgivelse af nogle af understУИttede spil pУЅ moderne
+platforme. Dette viser, at flere virksomheder er tilfredse med kvaliteten
+af т€‹т€‹programmet, og hvor godt det kan kУИre nogle af spillene.
+
+Hvis du har fornУИjelse af ScummVM, er du velkommen til at donere ved hjУІlp
+af PayPal-knappen pУЅ ScummVM's hjemmeside. Dette vil hjУІlpe os med at kУИbe
+vУІrktУИjer nУИdvendige for at udvikle ScummVM nemmere og hurtigere. Hvis du
+ikke kan donere, hjУІlp og bidrage med en programrettelse!
+
+1.2) Hurtig start:
+---- ------------
+VIGTIGT: Denne korte vejledning antager, at du bruger ScummVM pУЅ dansk.
+Som standard vil ScummVM bruge dit operativsystem sprog. Hvis du
+foretrУІkker at bruge ScummVM pУЅ engelsk, kan du ogsУЅ foretrУІkke at
+fУИlge vejledning fra den engelske README fil.
+
+For de utУЅlmodige blandt jer, er her hvordan du fУЅr ScummVM op at kУИre
+i fem enkle trin.
+
+1. Hent ScummVM fra <http://www.scummvm.org/downloads.php> og
+installere det.
+
+2. Opret en mappe pУЅ din harddisk og kopiere spillets datafiler fra de
+oprindelige medier til denne mappe. Gentag dette for hvert spil du
+УИnsker at spille (det er bedre at bruge en separat mappe til hvert spil).
+
+3. Start ScummVM.
+
+Hvis ScummVM pУЅ dette tidspunkt vises pУЅ engelsk i stedet for dansk, gУИr
+som fУИlger for at УІndre sprog:
+ - Klik pУЅ 'Options'.
+ - Klik pУЅ hУИjre pil i fanebjУІlken og vУІlg 'Misc' fanen.
+ - VУІlg "Dansk" i "GUI Language'og klik pУЅ 'OK'.
+ - BekrУІft meddelelsen boksen, der popper op, klik pУЅ 'Quit' for at
+ afslutte ScummVM og derefter genstarte programmet.
+
+VУІlg nu 'TilfУИj spil', vУІlge mappen med spillets datafiler (forsУИg ikke
+at vУІlge datafilerne selv!) Og tryk pУЅ 'VУІlg'
+
+4. En dialog skulle komme op, hvor du kan konfigurere forskellige
+indstillinger, hvis du УИnsker det (det burde dog vУІre fint at lade alt
+forblive pУЅ sin standard). BekrУІft dialogen.
+
+5. VУІlg det spil, du УИnsker at spille pУЅ listen, og tryk pУЅ 'Start'.
+
+ScummVM husker de spil, du tilfУИjer. SУЅ hvis du lukker ScummVM, vil
+listen over spil nУІste gang du starter den, indeholde alle de spil du
+tidligere har tilfУИjet. Du kan derfor gУЅ direkte til trin 5, medmindre
+du УИnsker at tilfУИje flere spil.
+
+Tip: Hvis du УИnsker at tilfУИje flere spil pУЅ УЉn gang, sУЅ prУИv at trykke
+og holde shift-tasten nede fУИr du klikker pУЅ 'TilfУИj spil' - teksten vil
+skifte til 'TilfУИj flere', og hvis du trykker pУЅ den, bliver du igen bedt
+om at vУІlge en mappe, men denne gang vil ScummVM sУИge gennem alle
+undermapper for understУИttede spil.
+
+2.0) Kontakt:
+---- --------
+Den nemmeste mУЅde at kontakte ScummVM holdet pУЅ er ved at sende fejlrapporter
+(se afsnit 2.1) eller ved at bruge vores fora pУЅ http://forums.scummvm.org.
+Du kan ogsУЅ deltage og e-maile til scummvm-devel postlisten, eller chatte
+med os pУЅ IRC (#scummvm pУЅ irc.freenode.net). Bed os venligst ikke om at
+understУИtte et ikke-understУИttet spil -- lУІs FAQ pУЅ vores hjemmeside fУИrst.
+BemУІrk, at det officielle sprog i dette forum, mailing liste og chat er
+engelsk og ingen andre sprog bУИr anvendes.
+
+2.1) Rapportering af fejl:
+---- ---------------------
+For at rapportere en fejl, skal du oprette en SourceForge konto, og fУИlge
+"Bug Tracker" linket fra vores hjemmeside. SУИrg for at fejlen er reproducerbare,
+og stadig forekommer i den seneste git/Daglig byggede version.
+Kontroller ogsУЅ listen med kendte problemer (nedenfor) og kompatibilitetslisten
+pУЅ vores hjemmeside for spillet, for at sikre, at problemet ikke allerede er kendt:
+
+ http://www.scummvm.org/compatibility_stable.php
+
+VУІr venlig ikke at rapportere fejl pУЅ spil, der ikke er anfУИrt som vУІrende
+mulige at gennemfУИre i 'understУИttede spil' sektionen, eller kompatibilitetslisten.
+Vi -ved- disse spil har fejl.
+
+Inkluder venligst fУИlgende oplysninger:
+ - ScummVM version (VENLIGST test pУЅ den nyeste git/Daglig byggede)
+ - Detaljer om fejlen, herunder oplysninger om genskabelsen af fejlen
+ - Sprog i spillet (engelsk, tysk, ...)
+ - Version af spillet (talkie, diskette, ...)
+ - Platform og Kompiler (Win32, Linux, FreeBSD, ...)
+ - Medsend et gemt spil hvis det er muligt
+ - Hvis fejlen kun skete for nylig, notУЉr venligst den sidste version
+ uden fejl, og den fУИrste version med fejlen. PУЅ denne mУЅde kan vi
+ ordne det hurtigere ved at kigge pУЅ de foretagne УІndringer.
+
+Endelig, bedes du rapportere hvert problem separat; indsend ikke flere
+problemer pУЅ samme billet. (Ellers bliver det svУІrt at spore status for
+hver enkelt fejl). Husk ogsУЅ pУЅ, at alle fejlrapporter skal skrives pУЅ
+engelsk. \ No newline at end of file
diff --git a/doc/de/Liesmich b/doc/de/Liesmich
index e8ee4ca3f8..88b6ce6de8 100644
--- a/doc/de/Liesmich
+++ b/doc/de/Liesmich
@@ -2241,7 +2241,7 @@ folgende nicht standardmУЄУŸige SchlУМsselwУЖrter:
erweiterten von ScummVM verwendet.
native_fb01 Bool Falls т€žtrueт€œ, wird fУМr die MIDI-Ausgabe
der Musiktreiber fУМr eine Music-Feature-Karte
- von IBM oder fУМr ein Yahama-FB-01-FM-
+ von IBM oder fУМr ein Yamaha-FB-01-FM-
Synthetisierungsmodul verwendet.
Baphomets Fluch II verfУМgt zusУЄtzlich УМber folgende nicht standardmУЄУŸige
diff --git a/doc/de/Neues b/doc/de/Neues
index 7c6699fcb0..74203148e7 100644
--- a/doc/de/Neues
+++ b/doc/de/Neues
@@ -2,7 +2,7 @@ Umfangreichere У„nderungsaufzeichnungen des neusten experimentellen Codes finden
Sie auf Englisch unter:
https://github.com/scummvm/scummvm/commits/
-1.5.0 (??.??.????)
+1.5.0 (27.07.2012)
Neue Spiele:
- UnterstУМtzung fУМr Backyard Baseball 2003 hinzugefУМgt.
- UnterstУМtzung fУМr Blue Force hinzugefУМgt.
@@ -10,10 +10,7 @@ Sie auf Englisch unter:
- UnterstУМtzung fУМr Dreamweb hinzugefУМgt.
- UnterstУМtzung fУМr Geisha hinzugefУМgt.
- UnterstУМtzung fУМr Gregor und der HeiУŸluftballon hinzugefУМgt.
- - UnterstУМtzung fУМr Magic Tales: Baba Yaga and the Magic Geese hinzugefУМgt.
- - UnterstУМtzung fУМr Magic Tales: Imo and the King hinzugefУМgt.
- UnterstУМtzung fУМr Magic Tales: Liam Finds a Story hinzugefУМgt.
- - UnterstУМtzung fУМr Magic Tales: The Little Samurai hinzugefУМgt.
- UnterstУМtzung fУМr Once Upon A Time: Little Red Riding Hood hinzugefУМgt.
- UnterstУМtzung fУМr Sleeping Cub's Test of Courage hinzugefУМgt.
- UnterstУМtzung fУМr Soltys hinzugefУМgt.
@@ -36,12 +33,10 @@ Allgemein:
- Aussehen von vorhersagendem Eingabedialog verbessert.
- Verschiedene Verbesserungen der grafischen BenutzeroberflУЄche.
- SDL-Portierungen:
- - UnterstУМtzung fУМr OpenGL hinzugefУМgt. (GSoC-Aufgabe)
-
Baphomets Fluch 1:
- Falsche Soundeffekte in der DOS-/Windows-Demo korrigiert.
- UnterstУМtzung fУМr PlayStation-Videos hinzugefУМgt.
+ - Fehlende Untertitel zur Demo hinzugefУМgt.
Baphomets Fluch 2:
- UnterstУМtzung fУМr PlayStation-Videos hinzugefУМgt.
@@ -49,6 +44,10 @@ Allgemein:
Cine:
- Roland-MT-32-Ausgabetreiber integriert.
+ Drascula:
+ - Spanische Untertitel zur Zwischensequenz mit Von Braun
+ hinzugefУМgt (3069981: Keine Untertitel in Szene mit т€žVon Braunт€œ).
+
Gob:
- Absturz in Lost in Time beseitigt.
- AdLib-Abspieler umgeschrieben. Den nun funktionierenden MDY-Abspieler in
@@ -69,6 +68,10 @@ Allgemein:
- UnterstУМtzung fУМr SeitenverhУЄltniskorrektur hinzugefУМgt.
- UnterstУМtzung fУМr 16 Bits pro Pixel bei Spielen integriert.
+ Maemo-Portierung:
+ - UnterstУМtzung fУМr Nokia 770 mit dem Betriebssystem OS2008 HE hinzugefУМgt.
+ - Konfigurierbare Tastenzuweisung hinzugefУМgt.
+
Windows-Portierung:
- Standard-Verzeichnis fУМr SpielstУЄnde bei
Windows NT4/2000/XP/Vista/7 geУЄndert.
diff --git a/doc/se/LasMig b/doc/se/LasMig
index 656210883f..9ac79b4c35 100644
--- a/doc/se/LasMig
+++ b/doc/se/LasMig
@@ -1,5 +1,4 @@
ScummVM LУ„S MIG
-Senast uppdaterad: $Date$
------------------------------------------------------------------------
FУЖr ytterligare information, kompatibilitetslistor, donationsdetaljer, den senaste programversionen, utvecklingsrapporter med mera, var god besУЖk ScummVM:s hemsida pУЅ http://www.scummvm.org/
@@ -55,6 +54,8 @@ InnehУЅll:
* 7.8 Att anvУЄnda komprimerade ljudfiler (MP3, Ogg Vorbis, Flac)
* 7.9 Uppspelningsfrekvens
8.0) Konfigurationsfilen
+ * 8.1 IgenkУЄnda nyckelord
+ * 8.2 SpelinstУЄllningar som kan aktiveras via anvУЄndargrУЄnssnittet
9.0) Kompilering
@@ -184,13 +185,18 @@ AGOS-spel frУЅn Adventuresoft/Horrorsoft:
The Feeble Files [feeble]
GOB-spel frУЅn Coktel Vision:
+ Bambou le sauveur de la jungle [bambou]
Bargon Attack [bargon]
+ Fascination [fascination]
+ Geisha [geisha]
Gobliiins [gob1]
Gobliins 2 [gob2]
Goblins 3 [gob3]
Lost in Time [lostintime]
+ Once Upon A Time: Little Red Riding Hood [littlered]
The Bizarre Adventures of Woodruff
and the Schnibble [woodruff]
+ Urban Runner [urban]
Ween: The Prophecy [ween]
MADE-spel frУЅn Activision:
@@ -221,6 +227,7 @@ MADE-spel frУЅn Activision:
SCUMM-spel frУЅn Humongous Entertainment:
Backyard Baseball [baseball]
Backyard Baseball 2001 [baseball2001]
+ Backyard Baseball 2003 [baseball2003]
Backyard Football [football]
Big Thinkers First Grade [thinker1]
Big Thinkers Kindergarten [thinkerk]
@@ -288,7 +295,6 @@ Living Books-spel:
De fУЖljande spelen borde starta, men УЄr УЄnnu ej helt spelbara. Spela dem pУЅ egen risk och var god skicka inga buggrapporter angУЅende dem. FУЖr senaste nytt angУЅende spelkompatibilitet kan du besУЖka vУЅr hemsida och lУЄsa kompatibilitetslistan.
- Backyard Baseball 2003 [baseball2003]
Backyard Football 2002 [football2002]
Backyard Soccer [soccer]
Backyard Soccer MLS [soccermls]
@@ -387,6 +393,11 @@ Instruktionerna fУЖr Broken Sword-spelen УЄr fУЖr Sold-Out Software-versionerna
------ ---------------------------------
Filmscenerna i Broken Sword-spelen har varit med om en hel del (se nУЄsta avdelning om du УЄr intresserad) men i regel behУЖver du bara kopiera .SMK-filerna frУЅn т€SMACKSт€ eller т€SMACKSHIт€-katalogerna pУЅ CD-skivorna till samma katalog dУЄr de andra datafilerna ligger. (Broken Sword har УЄven en т€SMACKSLOт€ katalog med samma filmscener, men dessa har lУЄgre kvalitet.) Du kan УЄven lУЄgga dem i en underkatalog med namnet т€videoт€, om du vill.
+FУЖr PlayStation-versionerna kan du dumpa originalfilmerna frУЅn CD:n. Dumpa varje fil med УЄndelsen т€STRт€ som rУЅa sektorer frУЅn CD:n (samtliga 2352 bitar per sektor). DU kan УЄven anvУЄnde de omkodade filmscenerna nedan istУЄllet, men detta fungerar inte fУЖr alla filmer i Broken Sword II. FУЖr ytterligare information, se:
+
+ http://wiki.scummvm.org/index.php/HOWTO-PlayStation_Videos
+
+
Vissa nyutgУЅvor av spelen, tillika PlayStation-versionen, har inga Smacker videos. Revolution Software har varit goda nog att skapa nykodade filmscener som kan laddas hem frУЅn vУЅran hemsida:
http://www.scummvm.org/downloads.php
@@ -395,7 +406,7 @@ Dessa filmscener УЄr tillgУЄngliga i DXA-format med FLAC-ljud. Kvaliteten УЄr de
FУЖr de system som УЄr fУЖr lУЅngsamma fУЖr att hantera FLAC-ljud finns ljudet fУЖr dessa filmscener att ladda hem separat som OGG Vorbis-ljud. FУЖr att se dessa filmscener med OGG Vorbis-ljud krУЄvs en version av ScummVM som kompilerats med stУЖd fУЖr bУЅde libVorbis och zlib.
-Vi erbjuder УЄven ett tillУЄgg fУЖr undertexter i Broken Sword. Packa upp tillУЄgget och fУЖlj instruktionerna i readme.txt-filen. (Broken Sword II har redan undertexter; inga modifikationer krУЄvs fУЖr dem).
+Vi erbjuder УЄven ett tillУЄgg fУЖr undertexter i Broken Sword. Packa upp tillУЄgget och fУЖlj instruktionerna i readme.txt-filen. Undertextpaketet fungerar fУЖr tillfУЄllet inte med PlayStation-filmer (Broken Sword II har redan undertexter; inga modifikationer krУЄvs fУЖr dem).
3.7.2) Broken Sword-spelens filmscener т€“ en УЅterblick:
@@ -475,7 +486,7 @@ DУЖp om voices.wav pУЅ CD4 till voices4.wav
3.14) Notiser om The Legend of Kyrandia:
----- ----------------------------------
-FУЖr att spela The Legend of Kyrandia i ScummVM behУЖver du т€œkyra.datт€-filen som УЄr tillgУЄnglig frУЅn т€Downloadsт€-avdelningen pУЅ ScummVM:s hemsida.
+FУЖr att spela The Legend of Kyrandia i ScummVM behУЖver du т€œkyra.datт€-filen. Filen borde alltid inkluderas med officiella ScummVM-paket. Om ScummVM klagar УЖver att filen saknas kan du finna den pУЅ т€œDownloadsт€-avdelningen av ScummVM:s hemsida. MУЄrk att den nuvarande Windows-versionen av ScummVM borde ha filen inbyggd i programfilen, och sУЅlunda behУЖver du bara ladda hem den om ScummVM klagar УЖver att filen saknas.
3.15) Notiser om Sierra AGI-spel med textinmatningshjУЄlp:
@@ -537,10 +548,6 @@ Den hУЄr versionen har fУЖljande kУЄnda problem. Du behУЖver inte rapportera dem
FM-TOWNS-versioner av spel:
- Kanji-versioner krУЄver en FM-TOWNS Font ROM
- - ScummVM krashar slumpmУЄssigt nУЄr FM-TOWNS Font Rom anvУЄnds fУЖr
- kanji-versionerna av de fУЖljande spelen:
- The Secret of Monkey Island, Monkey Island 2: LeChuck's Revenge
- och Indiana Jones and the Fate of Atlantis
Loom:
- Att stУЄnga av undertexterna via konfigurationsfilen УЄr inte pУЅlitligt dУЅ
@@ -590,7 +597,6 @@ Den hУЄr versionen har fУЖljande kУЄnda problem. Du behУЖver inte rapportera dem
The Legend of Kyrandia:
- Varken musik eller ljudeffekter i Macintosh diskett-versioner.
- Macintosh-CD anvУЄnder DOS-musik och ljudeffekter.
- - PC-9821-versionen saknar stУЖd fУЖr ljudeffekter.
Humongous Entertainment-spel:
- Endast originalgrУЄnssnittet fУЖr att ladda och spara kan anvУЄndas.
@@ -668,6 +674,7 @@ Ordning: scummvm [INSTУ„LLNINGAR]... [SPEL]
--themepath=PATH SУЖkvУЄg dit GUI-teman lagras
--list-themes Visa full lista med alla anvУЄndbara GUI-teman
-e, --music-driver=MODE VУЄlj musik-driver (se УЄven avdelning 7.0)
+ --list-audio-devices Visar tillgУЄngliga ljudenheter
-q, --language=LANG VУЄlj spelets sprУЅk (se УЄven avdelning 5.2)
-m, --music-volume=NUM StУЄll in musikvolym, 0-255 (standard: 192)
-s, --sfx-volume=NUM StУЄll in ljudeffektsvolym, 0-255 (standard: 192)
@@ -822,19 +829,28 @@ Motorer som fУЖr nУЄrvarande stУЖder УЅtervУЄndo till launchern:
AGI
AGOS
CINE
+ COMPOSER
+ CRUISE
DRACI
+ DRASCULA
GOB
GROOVIE
+ HUGO
KYRA
LURE
+ MADE
+ MOHAWK
PARALLACTION
QUEEN
SAGA
+ SCI
SCUMM
SKY
SWORD1
SWORD2
+ TEENAGENT
TOUCHE
+ TSAGE
TUCKER
@@ -1006,8 +1022,24 @@ Notis fУЖr WinCE-anvУЄndare: PУЅ grund av de begrУЄnsade tangentborden pУЅ de fl
Spardata lagras som standard i den aktiva katalogen pУЅ vissa plattformar och i fУЖrbestУЄmda kataloger pУЅ andra plattformar. Du kan stУЄlla in katalogen i konfigurationsfilen genom att УЄndra savepath-parametern. Se exempel fУЖr konfigurationsfilen senare i detta dokument.
Plattformar som fУЖr nУЄrvarande har annorlunda standardkataloger:
- Mac OS X: $HOME/Documents/ScummVM Savegames/
- У–vriga unix-system: $HOME/.scummvm/
+ Mac OS X:
+ $HOME/Documents/ScummVM Savegames/
+
+ У–vriga unix-system:
+ $HOME/.scummvm/
+
+ Windows Vista/7:
+ \Users\username\AppData\Roaming\ScummVM\Saved games\
+
+ Windows 2000/XP:
+ \Documents and Settings\username\Application Data\ScummVM\Saved games\
+
+ Windows NT4:
+ <windir>\Profiles\username\Application Data\ScummVM\Saved games\
+
+Spardata lagras i en gУЖmd map I Windows NT4/2000/XP/Vista/7, som kan kommas УЅt genom att kУЖra "%APPDATA%%\ScummVM\Saved Games\" eller genom att visa dolda filer i Windows Explorer.
+
+Notis fУЖr anvУЄndare av NT4/2000/XP/Vista/7: Den fУЖrutbestУЄmda platsen fУЖr spardata har УЄndrats i ScummVM 1.5.0. Migrationsfilen kan anvУЄndas fУЖr att kopiera spardata frУЅn den fУЖrra platsen till den nya.
6.1) Autosparning:
@@ -1059,20 +1091,28 @@ DУЄr т€œxxxт€ stУЅr fУЖr positionsnumret (t.ex. 001) i ScummVM.
AGI
AGOS
+ CGE
CINE
+ CRUISE
DRACI
GROOVIE
+ HUGO
KYRA
LURE
+ MOHAWK
PARALLACTION
QUEEN
SAGA
+ SCI
SCUMM
SKY
SWORD1
SWORD2
+ TEENAGENT
TINSEL
+ TOON
TOUCHE
+ TSAGE
TUCKER
--save-slot/-x:
@@ -1086,20 +1126,28 @@ DУЄr т€œxxxт€ stУЅr fУЖr positionsnumret (t.ex. 001) i ScummVM.
Motorer som fУЖr tillfУЄllet stУЖder --save-slot/-x:
AGI
+ CGE
CINE
+ CRUISE
DRACI
GROOVIE
+ HUGO
KYRA
LURE
- PARALLACTION
+ MOHAWK
QUEEN
SAGA
+ SCI
SCUMM
SKY
SWORD1
SWORD2
+ TEENAGENT
TINSEL
+ TOON
TOUCHE
+ TSAGE
+ TUCKER
7.0) Musik och ljud:
@@ -1396,7 +1444,7 @@ Att anvУЄnda frekvenser mellan de ovansagda rekommenderas ej. Till att bУЖrja me
---- --------------------
Som standard sparas och laddas konfigrationsfilen i:
- Windows Vista:
+ Windows Vista/7:
\Users\username\AppData\Roaming\ScummVM\scummvm.ini,
Windows 2000/XP:
@@ -1458,6 +1506,9 @@ Ett exempel pУЅ en konfigurationsfil ser ut sУЅ hУЄr:
path=C:\amiga_mi2\
music_driver=windows
+
+8.1) IgenkУЄnda nyckelord
+---- -------------------
FУЖljande nyckelord kan anvУЄndas:
path string SУЖkvУЄgen dit spelets datafiler ligger
@@ -1483,7 +1534,6 @@ FУЖljande nyckelord kan anvУЄndas:
fullscreen bool FullskУЄrmslУЄge
aspect_ratio bool Aktivera korrektion av bildfУЖrhУЅllande
- disable_dithering bool Anti-gitter fУЖr EGA-spel
gfx_mode string GrafiklУЄge (normalt, 2x, 3x, 2xsai,
super2xsai, supereagle, advmame2x, advmame3x,
hq2x, hq3x, tv2x, dotmatrix)
@@ -1529,6 +1579,29 @@ FУЖljande nyckelord kan anvУЄndas:
boot_param number Skicka det hУЄr numret till boot script
+Sierra-spel som anvУЄnder AGI-motorn anvУЄnder УЄven fУЖljande nyckelord:
+
+ originalsaveload bool StУЄll in till т€œtrueт€ fУЖr att anvУЄnda
+ originalskУЄrmarna fУЖr ladda/spara
+ istУЄllet fУЖr ScummVM:s fУЖrbУЄttrade
+ skУЄrmar
+
+Sierra-spel som anvУЄnder SCI-motorn anvУЄnder УЄven fУЖljande nyckelord:
+
+ disable_dithering bool Tar bort gitter artefakter frУЅn EGA-spel
+ prefer_digitalsfx bool StУЄll in till т€œtrueт€ fУЖr att fУЖredra
+ digitala ljudeffekter istУЄllet fУЖr
+ syntetiserade ljudeffekter
+ originalsaveload bool StУЄll in till т€œtrueт€ fУЖr att anvУЄnda
+ originalskУЄrmarna fУЖr ladda/spara
+ istУЄllet fУЖr ScummVM:s fУЖrbУЄttrade
+ skУЄrmar
+ native_fb01 bool StУЄll in till т€œtrueт€ fУЖr att anvУЄnda
+ ett IBM Music Feature-kort eller en
+ Yamaha FB-01 FM synthmodul fУЖr
+ MIDI-uppspelning
+
+
Broken Sword II lУЄgger till fУЖljande nyckelord:
gfx_details number Grafisk detalj (0-3)
@@ -1546,6 +1619,13 @@ Flight of the Amazon Queen lУЄgger till fУЖljande nyckelord:
sfx_mute bool StУЄll in till т€œtrueт€ fУЖr att deaktivera
ljudeffekter
+
+Jones in the Fast Lane anvУЄnder УЄven fУЖljande nyckelord:
+ music_mute bool StУЄll in till т€œtrueт€ fУЖr att anvУЄnda
+ CD-ljud, om tillgУЄngligt, istУЄllet
+ spelets vanliga ljud.
+
+
King's Quest VI Windows lУЄgger till fУЖljande nyckelord:
windows_cursors bool StУЄll in till т€œtrueт€ fУЖr att anvУЄnda de svartvita
@@ -1553,6 +1633,25 @@ King's Quest VI Windows lУЄgger till fУЖljande nyckelord:
StУЄll in till т€falseт€ fУЖr att anvУЄnda de uppskalade
muspekarna som matchar resten av grafiken.
+
+Lands of Lore: The Throne of Chaos anvУЄnder УЄven fУЖljande nyckelord:
+
+ smooth_scrolling bool StУЄll in till т€œtrueт€ fУЖr mjukare
+ skУЄrmrullning nУЄr du gУЅr frУЅn en
+ skУЄrm till en annan.
+ floating_cursors bool StУЄll in till т€œtrueт€ fУЖr att УЄndra
+ pekaren till en riktningspil nУЄr den
+ nУЄrmar sig kanten av skУЄrmen. Spelaren
+ kan sedan klicka fУЖr att gУЅ mot
+ den riktningen.
+
+
+Space Quest IV CD anvУЄnder УЄven fУЖljande nyckelord:
+
+ silver_cursors bool StУЄll in till т€œtrueт€ fУЖr att anvУЄnda
+ silverpekare istУЄllet fУЖr gulpekarna
+
+
Simon the Sorcerer 1 och 2 lУЄgger till fУЖljande nyckelord:
music_mute bool StУЄll in till т€œtrueт€ fУЖr att deaktivera musik
@@ -1565,6 +1664,28 @@ The Legend of Kyrandia lУЄgger till fУЖljande nyckelord:
walkspeed int GУЅnghastighet (0-4)
+The Legend of Kyrandia: Malcolm's Revenge anvУЄnder УЄven fУЖljande nyckelord:
+
+ studio_audience bool StУЄll in till т€œtrueт€ fУЖr att hУЖra
+ skratt och applУЅder nУЄr Malcolm
+ berУЄttar ett skУЄmt
+ skip_support bool StУЄll in till т€œtrueт€ fУЖr att kunna
+ skippa text och filmscener
+ helium_mode bool StУЄll in till т€œtrueт€ sУЅ lУЅter folk
+ som att dom inandats helium
+
+The 7th Guest anvУЄnder УЄven fУЖljande nyckelord:
+
+ t7g_speed string Hastighet pУЅ videouppspelning
+ (normal, tweaked, im_an_ios)
+
+
+8.2) SpelinstУЄllningar som kan aktiveras via anvУЄndargrУЄnssnittet
+---- ------------------------------------------------------------
+MУЅnga av instУЄllningarna i den fУЖregУЅende avdelningen kan aktiveras via anvУЄndargrУЄnssnittet. Om en instУЄllning finns tillgУЄnglig fУЖr ett specifikt spel visas en ny tabb med namnet т€Motorт€ nУЄr du lУЄgger till eller УЄndrar instУЄllningarna fУЖr spelet.
+Om specialinstУЄllningarna inte visas mУЅste spelet kУЖras en gУЅng eller lУЄggas till igen i spellistan i ScummVM:s launcher. Detta uppdaterar instУЄllningarna fУЖr varje spel, vilket lУЅter specialinstУЄllningarna visas.
+
+
9.0) Kompilering:
---- ------------
FУЖr en uppdaterad УЖverblick fУЖr hur man kompilerar ScummVM pУЅ diverse plattformar var god se vУЅr Wiki, speciellt den hУЄr hУЄr sidan:
@@ -1599,15 +1720,6 @@ PУЅ Win9x/NT/XP kan du definiera USE_WINDBG och lУЄgga till WinDbg fУЖr att visa
* Var god se:
http://wiki.scummvm.org/index.php/Compiling_ScummVM/Windows_CE
- Debian GNU/Linux:
- * Installera paketen 'build-essential', 'fakeroot', 'debhelper',
- och 'libsdl1.2-dev' pУЅ ditt system.
- * Installera de hУЄr paketen (valfria): 'libvorbis-dev' (fУЖr Ogg
- Vorbis stУЖd), 'libasound2-dev' (fУЖr ALSA sequencer stУЖd),
- 'libmad0-dev' (fУЖr MAD MP3 stУЖd), 'zlib1g-dev' (fУЖr stУЖd av kompresserad spardata).
- * KУЖr 'make deb'.
- * KУЖr sedan 'dpkg -i ../scummvm-cvs*deb', sУЅ УЄr du klar.
-
Mac OS X:
* Se till att du har utvecklingsverktygen istallerade.
* SDL-utvecklingspaketet fУЖr OS X som finns tillgУЄngligt pУЅ SLD:s hemsida
@@ -1649,4 +1761,4 @@ PУЅ Win9x/NT/XP kan du definiera USE_WINDBG och lУЄgga till WinDbg fУЖr att visa
Lycka till och glada УЄventyr!
ScummVM-teamet.
http://www.scummvm.org/
------------------------------------------------------------------------- \ No newline at end of file
+------------------------------------------------------------------------
diff --git a/engines/cge/bitmap.cpp b/engines/cge/bitmap.cpp
index 309b89bdda..4f85957b3d 100644
--- a/engines/cge/bitmap.cpp
+++ b/engines/cge/bitmap.cpp
@@ -123,12 +123,15 @@ Bitmap::~Bitmap() {
Bitmap &Bitmap::operator=(const Bitmap &bmp) {
debugC(1, kCGEDebugBitmap, "&Bitmap::operator =");
+ if (this == &bmp)
+ return *this;
uint8 *v0 = bmp._v;
_w = bmp._w;
_h = bmp._h;
_m = NULL;
_map = 0;
+ _vm = bmp._vm;
delete[] _v;
if (v0 == NULL) {
diff --git a/engines/cge/cge.cpp b/engines/cge/cge.cpp
index 8ddb9be140..6cc0c45963 100644
--- a/engines/cge/cge.cpp
+++ b/engines/cge/cge.cpp
@@ -30,6 +30,8 @@
#include "common/fs.h"
#include "engines/advancedDetector.h"
#include "engines/util.h"
+#include "gui/message.h"
+
#include "cge/cge.h"
#include "cge/vga13h.h"
#include "cge/cge_main.h"
@@ -50,7 +52,6 @@ CGEEngine::CGEEngine(OSystem *syst, const ADGameDescription *gameDescription)
DebugMan.addDebugChannel(kCGEDebugEngine, "engine", "CGE Engine debug channel");
_startupMode = 1;
- _demoText = kDemo;
_oldLev = 0;
_pocPtr = 0;
_bitmapPalette = NULL;
@@ -122,7 +123,7 @@ void CGEEngine::init() {
_maxScene = 0;
_dark = false;
_game = false;
- _finis = false;
+ _endGame = false;
_now = 1;
_lev = -1;
_recentStep = -2;
@@ -195,6 +196,16 @@ Common::Error CGEEngine::run() {
// Run the game
cge_main();
+ // If game is finished, display ending message
+ if (_flag[3]) {
+ Common::String msg = Common::String(_text->getText(kSayTheEnd));
+ if (msg.size() != 0) {
+ g_system->delayMillis(10);
+ GUI::MessageDialog dialog(msg, "OK");
+ dialog.runModal();
+ }
+ }
+
// Remove game objects
deinit();
diff --git a/engines/cge/cge.h b/engines/cge/cge.h
index 4ebc836ee0..0e8c5a05bb 100644
--- a/engines/cge/cge.h
+++ b/engines/cge/cge.h
@@ -78,6 +78,8 @@ class Talk;
#define kMapZCnt 20
#define kMapTop 80
+#define kSayTheEnd 41
+
// our engine debug channels
enum {
kCGEDebugBitmap = 1 << 0,
@@ -147,7 +149,6 @@ public:
const ADGameDescription *_gameDescription;
int _startupMode;
- int _demoText;
int _oldLev;
int _pocPtr;
bool _music;
@@ -157,7 +158,7 @@ public:
bool _flag[4];
bool _dark;
bool _game;
- bool _finis;
+ bool _endGame;
int _now;
int _lev;
int _mode;
diff --git a/engines/cge/cge_main.cpp b/engines/cge/cge_main.cpp
index bef4f610eb..a70e32de7e 100644
--- a/engines/cge/cge_main.cpp
+++ b/engines/cge/cge_main.cpp
@@ -150,11 +150,11 @@ void CGEEngine::sndSetVolume() {
void CGEEngine::syncHeader(Common::Serializer &s) {
debugC(1, kCGEDebugEngine, "CGEEngine::syncHeader(s)");
- int i;
+ int i = kDemo;
s.syncAsUint16LE(_now);
s.syncAsUint16LE(_oldLev);
- s.syncAsUint16LE(_demoText);
+ s.syncAsUint16LE(i); // unused Demo string id
for (i = 0; i < 5; i++)
s.syncAsUint16LE(_game);
s.syncAsSint16LE(i); // unused VGA::Mono variable
@@ -518,8 +518,8 @@ Square::Square(CGEEngine *vm) : Sprite(vm, NULL), _vm(vm) {
setShapeList(MB);
}
-void Square::touch(uint16 mask, int x, int y) {
- Sprite::touch(mask, x, y);
+void Square::touch(uint16 mask, int x, int y, Common::KeyCode keyCode) {
+ Sprite::touch(mask, x, y, keyCode);
if (mask & kMouseLeftUp) {
_vm->XZ(_x + x, _y + y).cell() = 0;
_vm->_commandHandlerTurbo->addCommand(kCmdKill, -1, 0, this);
@@ -706,7 +706,7 @@ void CGEEngine::qGame() {
saveGame(0, Common::String("Automatic Savegame"));
_vga->sunset();
- _finis = true;
+ _endGame = true;
}
void CGEEngine::switchScene(int newScene) {
@@ -758,11 +758,11 @@ void System::funTouch() {
_funDel = n;
}
-void System::touch(uint16 mask, int x, int y) {
+void System::touch(uint16 mask, int x, int y, Common::KeyCode keyCode) {
funTouch();
if (mask & kEventKeyb) {
- if (x == Common::KEYCODE_ESCAPE) {
+ if (keyCode == Common::KEYCODE_ESCAPE) {
// The original was calling keyClick()
// The sound is uselessly annoying and noisy, so it has been removed
_vm->killText();
@@ -926,7 +926,7 @@ void CGEEngine::optionTouch(int opt, uint16 mask) {
}
#pragma argsused
-void Sprite::touch(uint16 mask, int x, int y) {
+void Sprite::touch(uint16 mask, int x, int y, Common::KeyCode keyCode) {
_vm->_sys->funTouch();
if ((mask & kEventAttn) != 0)
@@ -1403,14 +1403,14 @@ void CGEEngine::runGame() {
_keyboard->setClient(_sys);
// main loop
- while (!_finis && !_quitFlag) {
- if (_flag[3])
+ while (!_endGame && !_quitFlag) {
+ if (_flag[3]) // Flag FINIS
_commandHandler->addCallback(kCmdExec, -1, 0, kQGame);
mainLoop();
}
// If finishing game due to closing ScummVM window, explicitly save the game
- if (!_finis && canSaveGameStateCurrently())
+ if (!_endGame && canSaveGameStateCurrently())
qGame();
_keyboard->setClient(NULL);
diff --git a/engines/cge/cge_main.h b/engines/cge/cge_main.h
index 87199ee524..bde8306f36 100644
--- a/engines/cge/cge_main.h
+++ b/engines/cge/cge_main.h
@@ -78,7 +78,7 @@ namespace CGE {
#define kScrHeight 200
#define kWorldHeight (kScrHeight - kPanHeight)
#define kStackSize 2048
-#define kSavegameCheckSum (1956 + _now + _oldLev + _game + _music + _demoText)
+#define kSavegameCheckSum (1956 + _now + _oldLev + _game + _music + kDemo)
#define kSavegame0Name ("{{INIT}}" kSvgExt)
#define kSavegameStrSize 11
#define kGameFrameDelay (1000 / 50)
@@ -92,7 +92,7 @@ public:
void setPal();
void funTouch();
- virtual void touch(uint16 mask, int x, int y);
+ virtual void touch(uint16 mask, int x, int y, Common::KeyCode keyCode);
void tick();
private:
CGEEngine *_vm;
@@ -101,7 +101,7 @@ private:
class Square : public Sprite {
public:
Square(CGEEngine *vm);
- virtual void touch(uint16 mask, int x, int y);
+ virtual void touch(uint16 mask, int x, int y, Common::KeyCode keyCode);
private:
CGEEngine *_vm;
};
diff --git a/engines/cge/detection.cpp b/engines/cge/detection.cpp
index eda4edd520..2e04b82026 100644
--- a/engines/cge/detection.cpp
+++ b/engines/cge/detection.cpp
@@ -217,8 +217,6 @@ SaveStateDescriptor CGEMetaEngine::querySaveMetaInfos(const char *target, int sl
} else {
// Create the return descriptor
SaveStateDescriptor desc(slot, header.saveName);
- desc.setDeletableFlag(true);
- desc.setWriteProtectedFlag(false);
desc.setThumbnail(header.thumbnail);
desc.setSaveDate(header.saveYear, header.saveMonth, header.saveDay);
desc.setSaveTime(header.saveHour, header.saveMinutes);
diff --git a/engines/cge/events.cpp b/engines/cge/events.cpp
index c8baf4ed61..1530c870ef 100644
--- a/engines/cge/events.cpp
+++ b/engines/cge/events.cpp
@@ -109,9 +109,19 @@ bool Keyboard::getKey(Common::Event &event) {
case Common::KEYCODE_3:
case Common::KEYCODE_4:
if (event.kbd.flags & Common::KBD_ALT) {
- _vm->_commandHandler->addCommand(kCmdLevel, -1, keycode - '0', NULL);
+ _vm->_commandHandler->addCommand(kCmdLevel, -1, keycode - Common::KEYCODE_0, NULL);
return false;
}
+ // Fallthrough intended
+ case Common::KEYCODE_5:
+ case Common::KEYCODE_6:
+ case Common::KEYCODE_7:
+ case Common::KEYCODE_8:
+ if (event.type == Common::EVENT_KEYDOWN && !(event.kbd.flags & Common::KBD_ALT) && keycode != Common::KEYCODE_0) {
+ _vm->selectPocket(keycode - Common::KEYCODE_1);
+ return false;
+ }
+ break;
default:
break;
}
@@ -125,9 +135,11 @@ void Keyboard::newKeyboard(Common::Event &event) {
if ((event.type == Common::EVENT_KEYDOWN) && (_client)) {
CGEEvent &evt = _vm->_eventManager->getNextEvent();
- evt._x = event.kbd.keycode; // Keycode
- evt._mask = kEventKeyb; // Event mask
- evt._spritePtr = _client; // Sprite pointer
+ evt._x = 0;
+ evt._y = 0;
+ evt._keyCode = event.kbd.keycode; // Keycode
+ evt._mask = kEventKeyb; // Event mask
+ evt._spritePtr = _client; // Sprite pointer
}
}
@@ -194,6 +206,7 @@ void Mouse::newMouse(Common::Event &event) {
CGEEvent &evt = _vm->_eventManager->getNextEvent();
evt._x = event.mouse.x;
evt._y = event.mouse.y;
+ evt._keyCode = Common::KEYCODE_INVALID;
evt._spritePtr = _vm->spriteAt(evt._x, evt._y);
switch (event.type) {
@@ -259,7 +272,7 @@ void EventManager::handleEvents() {
CGEEvent e = _eventQueue[_eventQueueTail];
if (e._mask) {
if (_vm->_mouse->_hold && e._spritePtr != _vm->_mouse->_hold)
- _vm->_mouse->_hold->touch(e._mask | kEventAttn, e._x - _vm->_mouse->_hold->_x, e._y - _vm->_mouse->_hold->_y);
+ _vm->_mouse->_hold->touch(e._mask | kEventAttn, e._x - _vm->_mouse->_hold->_x, e._y - _vm->_mouse->_hold->_y, e._keyCode);
// update mouse cursor position
if (e._mask & kMouseRoll)
@@ -268,11 +281,11 @@ void EventManager::handleEvents() {
// activate current touched SPRITE
if (e._spritePtr) {
if (e._mask & kEventKeyb)
- e._spritePtr->touch(e._mask, e._x, e._y);
+ e._spritePtr->touch(e._mask, e._x, e._y, e._keyCode);
else
- e._spritePtr->touch(e._mask, e._x - e._spritePtr->_x, e._y - e._spritePtr->_y);
+ e._spritePtr->touch(e._mask, e._x - e._spritePtr->_x, e._y - e._spritePtr->_y, e._keyCode);
} else if (_vm->_sys)
- _vm->_sys->touch(e._mask, e._x, e._y);
+ _vm->_sys->touch(e._mask, e._x, e._y, e._keyCode);
if (e._mask & kMouseLeftDown) {
_vm->_mouse->_hold = e._spritePtr;
diff --git a/engines/cge/events.h b/engines/cge/events.h
index 6bbd52e4a5..522aa67905 100644
--- a/engines/cge/events.h
+++ b/engines/cge/events.h
@@ -70,6 +70,7 @@ struct CGEEvent {
uint16 _mask;
uint16 _x;
uint16 _y;
+ Common::KeyCode _keyCode;
Sprite *_spritePtr;
};
diff --git a/engines/cge/vga13h.h b/engines/cge/vga13h.h
index beca19f667..a816f7756f 100644
--- a/engines/cge/vga13h.h
+++ b/engines/cge/vga13h.h
@@ -29,6 +29,7 @@
#define CGE_VGA13H_H
#include "common/serializer.h"
+#include "common/events.h"
#include "graphics/surface.h"
#include "cge/general.h"
#include "cge/bitmap.h"
@@ -146,7 +147,7 @@ public:
void step(int nr = -1);
Seq *setSeq(Seq *seq);
CommandHandler::Command *snList(SnList type);
- virtual void touch(uint16 mask, int x, int y);
+ virtual void touch(uint16 mask, int x, int y, Common::KeyCode keyCode);
virtual void tick();
void sync(Common::Serializer &s);
private:
diff --git a/engines/cge/vmenu.cpp b/engines/cge/vmenu.cpp
index a317a765d4..910e54d267 100644
--- a/engines/cge/vmenu.cpp
+++ b/engines/cge/vmenu.cpp
@@ -63,7 +63,7 @@ Vmenu *Vmenu::_addr = NULL;
int Vmenu::_recent = -1;
Vmenu::Vmenu(CGEEngine *vm, Choice *list, int x, int y)
- : Talk(vm, VMGather(list), kTBRect), _menu(list), _bar(NULL), _vm(vm) {
+ : Talk(vm, VMGather(list), kTBRect), _menu(list), _bar(NULL), _vmgt(NULL), _vm(vm) {
Choice *cp;
_addr = this;
@@ -89,11 +89,11 @@ Vmenu::~Vmenu() {
#define CALL_MEMBER_FN(object,ptrToMember) ((object).*(ptrToMember))
-void Vmenu::touch(uint16 mask, int x, int y) {
+void Vmenu::touch(uint16 mask, int x, int y, Common::KeyCode keyCode) {
if (!_items)
return;
- Sprite::touch(mask, x, y);
+ Sprite::touch(mask, x, y, keyCode);
y -= kTextVMargin - 1;
int n = 0;
diff --git a/engines/cge/vmenu.h b/engines/cge/vmenu.h
index 89ef7a9484..928b48f11c 100644
--- a/engines/cge/vmenu.h
+++ b/engines/cge/vmenu.h
@@ -58,7 +58,7 @@ public:
MenuBar *_bar;
Vmenu(CGEEngine *vm, Choice *list, int x, int y);
~Vmenu();
- virtual void touch(uint16 mask, int x, int y);
+ virtual void touch(uint16 mask, int x, int y, Common::KeyCode keyCode);
private:
char *_vmgt;
CGEEngine *_vm;
diff --git a/engines/cine/detection_tables.h b/engines/cine/detection_tables.h
index 0ec2768bae..bf02f0519c 100644
--- a/engines/cine/detection_tables.h
+++ b/engines/cine/detection_tables.h
@@ -251,7 +251,7 @@ static const CINEGameDescription gameDescriptions[] = {
AD_ENTRY1("procs00", "d6752e7d25924cb866b61eb7cb0c8b56"),
Common::EN_GRB,
Common::kPlatformPC,
- ADGF_NO_FLAGS,
+ ADGF_UNSTABLE,
GUIO0()
},
GType_OS,
@@ -267,7 +267,7 @@ static const CINEGameDescription gameDescriptions[] = {
AD_ENTRY1("procs1", "9629129b86979fa592c1787385bf3695"),
Common::EN_GRB,
Common::kPlatformPC,
- ADGF_NO_FLAGS,
+ ADGF_UNSTABLE,
GUIO0()
},
GType_OS,
@@ -281,7 +281,7 @@ static const CINEGameDescription gameDescriptions[] = {
AD_ENTRY1("procs1", "d8c3a9d05a63e4cfa801826a7063a126"),
Common::EN_USA,
Common::kPlatformPC,
- ADGF_NO_FLAGS,
+ ADGF_UNSTABLE,
GUIO0()
},
GType_OS,
@@ -295,7 +295,7 @@ static const CINEGameDescription gameDescriptions[] = {
AD_ENTRY1("procs00", "862a75d76fb7fffec30e52be9ad1c474"),
Common::EN_USA,
Common::kPlatformPC,
- ADGF_NO_FLAGS,
+ ADGF_UNSTABLE,
GUIO0()
},
GType_OS,
@@ -309,7 +309,7 @@ static const CINEGameDescription gameDescriptions[] = {
AD_ENTRY1("procs1", "39b91ae35d1297ce0a76a1a803ca1593"),
Common::DE_DEU,
Common::kPlatformPC,
- ADGF_NO_FLAGS,
+ ADGF_UNSTABLE,
GUIO0()
},
GType_OS,
@@ -323,7 +323,7 @@ static const CINEGameDescription gameDescriptions[] = {
AD_ENTRY1("procs1", "74c2dabd9d212525fca8875a5f6d8994"),
Common::ES_ESP,
Common::kPlatformPC,
- ADGF_NO_FLAGS,
+ ADGF_UNSTABLE,
GUIO0()
},
GType_OS,
@@ -341,7 +341,7 @@ static const CINEGameDescription gameDescriptions[] = {
},
Common::ES_ESP,
Common::kPlatformPC,
- ADGF_NO_FLAGS,
+ ADGF_UNSTABLE,
GUIO0()
},
GType_OS,
@@ -355,7 +355,7 @@ static const CINEGameDescription gameDescriptions[] = {
AD_ENTRY1("procs00", "f143567f08cfd1a9b1c9a41c89eadfef"),
Common::FR_FRA,
Common::kPlatformPC,
- ADGF_NO_FLAGS,
+ ADGF_UNSTABLE,
GUIO0()
},
GType_OS,
@@ -369,7 +369,7 @@ static const CINEGameDescription gameDescriptions[] = {
AD_ENTRY1("procs1", "da066e6b8dd93f2502c2a3755f08dc12"),
Common::IT_ITA,
Common::kPlatformPC,
- ADGF_NO_FLAGS,
+ ADGF_UNSTABLE,
GUIO0()
},
GType_OS,
@@ -383,7 +383,7 @@ static const CINEGameDescription gameDescriptions[] = {
AD_ENTRY1("procs0", "a9da5531ead0ebf9ad387fa588c0cbb0"),
Common::EN_GRB,
Common::kPlatformAmiga,
- ADGF_NO_FLAGS,
+ ADGF_UNSTABLE,
GUIO1(GUIO_NOMIDI)
},
GType_OS,
@@ -397,7 +397,7 @@ static const CINEGameDescription gameDescriptions[] = {
AD_ENTRY1("procs0", "8a429ced2f4acff8a15ae125174042e8"),
Common::EN_GRB,
Common::kPlatformAmiga,
- ADGF_NO_FLAGS,
+ ADGF_UNSTABLE,
GUIO1(GUIO_NOMIDI)
},
GType_OS,
@@ -411,7 +411,7 @@ static const CINEGameDescription gameDescriptions[] = {
AD_ENTRY1("procs0", "d5f27e33fc29c879f36f15b86ccfa58c"),
Common::EN_USA,
Common::kPlatformAmiga,
- ADGF_NO_FLAGS,
+ ADGF_UNSTABLE,
GUIO1(GUIO_NOMIDI)
},
GType_OS,
@@ -425,7 +425,7 @@ static const CINEGameDescription gameDescriptions[] = {
AD_ENTRY1("procs0", "8b7dce249821d3a62b314399c4334347"),
Common::DE_DEU,
Common::kPlatformAmiga,
- ADGF_NO_FLAGS,
+ ADGF_UNSTABLE,
GUIO1(GUIO_NOMIDI)
},
GType_OS,
@@ -439,7 +439,7 @@ static const CINEGameDescription gameDescriptions[] = {
AD_ENTRY1("procs0", "35fc295ddd0af9da932d256ba799a4b0"),
Common::ES_ESP,
Common::kPlatformAmiga,
- ADGF_NO_FLAGS,
+ ADGF_UNSTABLE,
GUIO1(GUIO_NOMIDI)
},
GType_OS,
@@ -453,7 +453,7 @@ static const CINEGameDescription gameDescriptions[] = {
AD_ENTRY1("procs0", "d4ea4a97e01fa67ea066f9e785050ed2"),
Common::FR_FRA,
Common::kPlatformAmiga,
- ADGF_NO_FLAGS,
+ ADGF_UNSTABLE,
GUIO1(GUIO_NOMIDI)
},
GType_OS,
@@ -467,7 +467,7 @@ static const CINEGameDescription gameDescriptions[] = {
AD_ENTRY1("demo", "8d3a750d1c840b1b1071e42f9e6f6aa2"),
Common::EN_GRB,
Common::kPlatformAmiga,
- ADGF_DEMO,
+ ADGF_DEMO | ADGF_UNSTABLE,
GUIO1(GUIO_NOMIDI)
},
GType_OS,
@@ -481,7 +481,7 @@ static const CINEGameDescription gameDescriptions[] = {
AD_ENTRY1("procs0", "1501d5ae364b2814a33ed19347c3fcae"),
Common::EN_GRB,
Common::kPlatformAtariST,
- ADGF_NO_FLAGS,
+ ADGF_UNSTABLE,
GUIO1(GUIO_NOMIDI)
},
GType_OS,
@@ -495,7 +495,7 @@ static const CINEGameDescription gameDescriptions[] = {
AD_ENTRY1("procs0", "2148d25de3219dd4a36580ca735d0afa"),
Common::FR_FRA,
Common::kPlatformAtariST,
- ADGF_NO_FLAGS,
+ ADGF_UNSTABLE,
GUIO1(GUIO_NOMIDI)
},
GType_OS,
diff --git a/engines/composer/composer.cpp b/engines/composer/composer.cpp
index 556dad7e94..23a9d2ff85 100644
--- a/engines/composer/composer.cpp
+++ b/engines/composer/composer.cpp
@@ -381,11 +381,17 @@ void ComposerEngine::loadLibrary(uint id) {
filename = getStringFromConfig(_bookGroup, Common::String::format("%d", id));
filename = mangleFilename(filename);
+ // bookGroup is the basename of the path.
+ // TODO: tidy this up.
_bookGroup.clear();
for (uint i = 0; i < filename.size(); i++) {
- if (filename[i] == '\\' || filename[i] == ':')
+ if (filename[i] == '~' || filename[i] == '/' || filename[i] == ':')
continue;
for (uint j = 0; j < filename.size(); j++) {
+ if (filename[j] == '/') {
+ _bookGroup.clear();
+ continue;
+ }
if (filename[j] == '.')
break;
_bookGroup += filename[j];
diff --git a/engines/cruise/detection.cpp b/engines/cruise/detection.cpp
index b2e267ca49..cbe17ea4d3 100644
--- a/engines/cruise/detection.cpp
+++ b/engines/cruise/detection.cpp
@@ -303,8 +303,6 @@ SaveStateDescriptor CruiseMetaEngine::querySaveMetaInfos(const char *target, int
// Create the return descriptor
SaveStateDescriptor desc(slot, header.saveName);
- desc.setDeletableFlag(true);
- desc.setWriteProtectedFlag(false);
desc.setThumbnail(header.thumbnail);
return desc;
diff --git a/engines/draci/detection.cpp b/engines/draci/detection.cpp
index de76eb83e0..61705a1e59 100644
--- a/engines/draci/detection.cpp
+++ b/engines/draci/detection.cpp
@@ -161,8 +161,6 @@ SaveStateDescriptor DraciMetaEngine::querySaveMetaInfos(const char *target, int
// Create the return descriptor
SaveStateDescriptor desc(slot, header.saveName);
- desc.setDeletableFlag(true);
- desc.setWriteProtectedFlag(false);
desc.setThumbnail(header.thumbnail);
int day = (header.date >> 24) & 0xFF;
diff --git a/engines/dreamweb/detection.cpp b/engines/dreamweb/detection.cpp
index 6468281ac2..f2e2f42216 100644
--- a/engines/dreamweb/detection.cpp
+++ b/engines/dreamweb/detection.cpp
@@ -172,8 +172,6 @@ SaveStateDescriptor DreamWebMetaEngine::querySaveMetaInfos(const char *target, i
saveName += (char)in->readByte();
SaveStateDescriptor desc(slot, saveName);
- desc.setDeletableFlag(true);
- desc.setWriteProtectedFlag(false);
// Check if there is a ScummVM data block
if (header.len(6) == SCUMMVM_BLOCK_MAGIC_SIZE) {
diff --git a/engines/dreamweb/detection_tables.h b/engines/dreamweb/detection_tables.h
index 063aabbd89..8a2f94f99b 100644
--- a/engines/dreamweb/detection_tables.h
+++ b/engines/dreamweb/detection_tables.h
@@ -46,7 +46,7 @@ static const DreamWebGameDescription gameDescriptions[] = {
},
Common::EN_ANY,
Common::kPlatformPC,
- ADGF_TESTING,
+ 0,
GUIO2(GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_BRIGHTPALETTE)
},
},
@@ -63,7 +63,7 @@ static const DreamWebGameDescription gameDescriptions[] = {
},
Common::EN_ANY,
Common::kPlatformPC,
- ADGF_CD | ADGF_TESTING,
+ ADGF_CD,
GUIO2(GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_BRIGHTPALETTE)
},
},
@@ -84,7 +84,7 @@ static const DreamWebGameDescription gameDescriptions[] = {
},
Common::EN_GRB,
Common::kPlatformPC,
- ADGF_CD | ADGF_TESTING,
+ ADGF_CD,
GUIO2(GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_BRIGHTPALETTE)
},
},
@@ -101,7 +101,7 @@ static const DreamWebGameDescription gameDescriptions[] = {
},
Common::EN_USA,
Common::kPlatformPC,
- ADGF_CD | ADGF_TESTING,
+ ADGF_CD,
GUIO2(GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_BRIGHTPALETTE)
},
},
@@ -118,7 +118,7 @@ static const DreamWebGameDescription gameDescriptions[] = {
},
Common::FR_FRA,
Common::kPlatformPC,
- ADGF_CD | ADGF_TESTING,
+ ADGF_CD,
GUIO2(GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_BRIGHTPALETTE)
},
},
@@ -136,7 +136,7 @@ static const DreamWebGameDescription gameDescriptions[] = {
},
Common::FR_FRA,
Common::kPlatformPC,
- ADGF_CD | ADGF_TESTING,
+ ADGF_CD,
GUIO2(GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_BRIGHTPALETTE)
},
},
@@ -153,7 +153,7 @@ static const DreamWebGameDescription gameDescriptions[] = {
},
Common::DE_DEU,
Common::kPlatformPC,
- ADGF_TESTING,
+ 0,
GUIO2(GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_BRIGHTPALETTE)
},
},
@@ -170,7 +170,7 @@ static const DreamWebGameDescription gameDescriptions[] = {
},
Common::DE_DEU,
Common::kPlatformPC,
- ADGF_CD | ADGF_TESTING,
+ ADGF_CD,
GUIO2(GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_BRIGHTPALETTE)
},
},
@@ -187,7 +187,7 @@ static const DreamWebGameDescription gameDescriptions[] = {
},
Common::ES_ESP,
Common::kPlatformPC,
- ADGF_TESTING,
+ 0,
GUIO2(GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_BRIGHTPALETTE)
},
},
@@ -204,7 +204,7 @@ static const DreamWebGameDescription gameDescriptions[] = {
},
Common::ES_ESP,
Common::kPlatformPC,
- ADGF_CD | ADGF_TESTING,
+ ADGF_CD,
GUIO2(GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_BRIGHTPALETTE)
},
},
@@ -222,7 +222,7 @@ static const DreamWebGameDescription gameDescriptions[] = {
},
Common::ES_ESP,
Common::kPlatformPC,
- ADGF_CD | ADGF_TESTING,
+ ADGF_CD,
GUIO2(GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_BRIGHTPALETTE)
},
},
@@ -239,7 +239,7 @@ static const DreamWebGameDescription gameDescriptions[] = {
},
Common::IT_ITA,
Common::kPlatformPC,
- ADGF_TESTING,
+ 0,
GUIO2(GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_BRIGHTPALETTE)
},
},
diff --git a/engines/dreamweb/dreamweb.h b/engines/dreamweb/dreamweb.h
index 48d44c0380..1f6deb8566 100644
--- a/engines/dreamweb/dreamweb.h
+++ b/engines/dreamweb/dreamweb.h
@@ -152,8 +152,8 @@ public:
uint8 modifyChar(uint8 c) const;
Common::String modifyFileName(const char *);
- const Common::String& getDatafilePrefix() { return _datafilePrefix; };
- const Common::String& getSpeechDirName() { return _speechDirName; };
+ const Common::String& getDatafilePrefix() { return _datafilePrefix; }
+ const Common::String& getSpeechDirName() { return _speechDirName; }
private:
void keyPressed(uint16 ascii);
diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp
index 4515939ebc..f235f7c2fd 100644
--- a/engines/dreamweb/stubs.cpp
+++ b/engines/dreamweb/stubs.cpp
@@ -2920,9 +2920,7 @@ void DreamWebEngine::setupInitialVars() {
_vars._progressPoints = 0;
_vars._watchOn = 0;
_vars._shadesOn = 0;
- _vars._secondCount = 0;
- _vars._minuteCount = 30;
- _vars._hourCount = 19;
+ getTime();
_vars._zoomOn = 1;
_vars._location = 0;
_vars._exPos = 0;
diff --git a/engines/gob/detection/tables_geisha.h b/engines/gob/detection/tables_geisha.h
index 331e17e31d..d05659d9e5 100644
--- a/engines/gob/detection/tables_geisha.h
+++ b/engines/gob/detection/tables_geisha.h
@@ -32,7 +32,35 @@
"geisha",
"",
AD_ENTRY1s("disk1.stk", "6eebbb98ad90cd3c44549fc2ab30f632", 212153),
- UNK_LANG,
+ EN_ANY,
+ kPlatformPC,
+ ADGF_NO_FLAGS,
+ GUIO2(GUIO_NOSUBTITLES, GUIO_NOSPEECH)
+ },
+ kGameTypeGeisha,
+ kFeaturesEGA | kFeaturesAdLib,
+ "disk1.stk", "intro.tot", 0
+},
+{
+ {
+ "geisha",
+ "",
+ AD_ENTRY1s("disk1.stk", "6eebbb98ad90cd3c44549fc2ab30f632", 212153),
+ DE_DEU,
+ kPlatformPC,
+ ADGF_NO_FLAGS,
+ GUIO2(GUIO_NOSUBTITLES, GUIO_NOSPEECH)
+ },
+ kGameTypeGeisha,
+ kFeaturesEGA | kFeaturesAdLib,
+ "disk1.stk", "intro.tot", 0
+},
+{ // Supplied by misterhands in bug report #3539797
+ {
+ "geisha",
+ "",
+ AD_ENTRY1s("disk1.stk", "0c4c16090921664f50baefdfd24d7f5d", 211889),
+ FR_FRA,
kPlatformPC,
ADGF_NO_FLAGS,
GUIO2(GUIO_NOSUBTITLES, GUIO_NOSPEECH)
@@ -63,7 +91,7 @@
"geisha",
"",
AD_ENTRY1s("disk1.stk", "e5892f00917c62423e93f5fd9920cf47", 208120),
- UNK_LANG,
+ EN_ANY,
kPlatformAmiga,
ADGF_NO_FLAGS,
GUIO2(GUIO_NOSUBTITLES, GUIO_NOSPEECH)
diff --git a/engines/gob/inter_geisha.cpp b/engines/gob/inter_geisha.cpp
index 8a4d4246b6..8d05cefa66 100644
--- a/engines/gob/inter_geisha.cpp
+++ b/engines/gob/inter_geisha.cpp
@@ -200,8 +200,12 @@ void Inter_Geisha::oGeisha_checkData(OpFuncParams &params) {
if (mode == SaveLoad::kSaveModeNone) {
exists = _vm->_dataIO->hasFile(file);
- if (!exists)
- warning("File \"%s\" not found", file.c_str());
+ if (!exists) {
+ // NOTE: Geisha looks if fin.tot exists to check if it needs to open disk3.stk.
+ // This is completely normal, so don't print a warning.
+ if (file != "fin.tot")
+ warning("File \"%s\" not found", file.c_str());
+ }
} else if (mode == SaveLoad::kSaveModeSave)
exists = _vm->_saveLoad->getSize(file.c_str()) >= 0;
diff --git a/engines/groovie/saveload.cpp b/engines/groovie/saveload.cpp
index 14e7a09cb2..1a92c02e0e 100644
--- a/engines/groovie/saveload.cpp
+++ b/engines/groovie/saveload.cpp
@@ -103,8 +103,6 @@ Common::InSaveFile *SaveLoad::openForLoading(const Common::String &target, int s
if (descriptor) {
// Initialize the SaveStateDescriptor
descriptor->setSaveSlot(slot);
- descriptor->setDeletableFlag(true);
- descriptor->setWriteProtectedFlag(false);
// TODO: Add extra information
//setSaveDate(int year, int month, int day)
diff --git a/engines/hugo/detection.cpp b/engines/hugo/detection.cpp
index 90708163f5..bb5944acc8 100644
--- a/engines/hugo/detection.cpp
+++ b/engines/hugo/detection.cpp
@@ -244,9 +244,6 @@ SaveStateDescriptor HugoMetaEngine::querySaveMetaInfos(const char *target, int s
Graphics::Surface *const thumbnail = Graphics::loadThumbnail(*file);
desc.setThumbnail(thumbnail);
- desc.setDeletableFlag(true);
- desc.setWriteProtectedFlag(false);
-
uint32 saveDate = file->readUint32BE();
uint16 saveTime = file->readUint16BE();
diff --git a/engines/kyra/eobcommon.cpp b/engines/kyra/eobcommon.cpp
index a63f123258..fadb1066e0 100644
--- a/engines/kyra/eobcommon.cpp
+++ b/engines/kyra/eobcommon.cpp
@@ -770,7 +770,7 @@ void EoBCoreEngine::releaseItemsAndDecorationsShapes() {
if (_spellShapes) {
for (int i = 0; i < 4; i++) {
if (_spellShapes[i])
- delete [] _spellShapes[i];
+ delete[] _spellShapes[i];
}
delete[] _spellShapes;
}
@@ -820,7 +820,7 @@ void EoBCoreEngine::releaseItemsAndDecorationsShapes() {
if (_firebeamShapes[i])
delete[] _firebeamShapes[i];
}
- delete []_firebeamShapes;
+ delete[] _firebeamShapes;
}
delete[] _redSplatShape;
diff --git a/engines/kyra/eobcommon.h b/engines/kyra/eobcommon.h
index 050fe2b794..f60e755dd7 100644
--- a/engines/kyra/eobcommon.h
+++ b/engines/kyra/eobcommon.h
@@ -263,7 +263,7 @@ protected:
// Main Menu, Intro, Finale
virtual int mainMenu() = 0;
- virtual void seq_xdeath() {};
+ virtual void seq_xdeath() {}
virtual void seq_playFinale() = 0;
bool _playFinale;
@@ -921,8 +921,8 @@ protected:
void usePotion(int charIndex, int weaponSlot);
void useWand(int charIndex, int weaponSlot);
- virtual void turnUndeadAuto() {};
- virtual void turnUndeadAutoHit() {};
+ virtual void turnUndeadAuto() {}
+ virtual void turnUndeadAutoHit() {}
void castSpell(int spell, int weaponSlot);
void removeCharacterEffect(int spell, int charIndex, int showWarning);
diff --git a/engines/kyra/screen.cpp b/engines/kyra/screen.cpp
index 4fd5985a09..04d805737f 100644
--- a/engines/kyra/screen.cpp
+++ b/engines/kyra/screen.cpp
@@ -141,7 +141,7 @@ bool Screen::init() {
if (!font)
error("Could not load any SJIS font, neither the original nor ScummVM's 'SJIS.FNT'");
- _fonts[FID_SJIS_FNT] = new SJISFont(this, font, _sjisInvisibleColor, _use16ColorMode, !_use16ColorMode);
+ _fonts[FID_SJIS_FNT] = new SJISFont(font, _sjisInvisibleColor, _use16ColorMode, !_use16ColorMode);
}
}
@@ -3595,8 +3595,8 @@ void AMIGAFont::unload() {
memset(_chars, 0, sizeof(_chars));
}
-SJISFont::SJISFont(Screen *s, Graphics::FontSJIS *font, const uint8 invisColor, bool is16Color, bool outlineSize)
- : _colorMap(0), _font(font), _invisColor(invisColor), _is16Color(is16Color), _screen(s) {
+SJISFont::SJISFont(Graphics::FontSJIS *font, const uint8 invisColor, bool is16Color, bool outlineSize)
+ : _colorMap(0), _font(font), _invisColor(invisColor), _is16Color(is16Color) {
assert(_font);
_font->setDrawingMode(outlineSize ? Graphics::FontSJIS::kOutlineMode : Graphics::FontSJIS::kDefaultMode);
diff --git a/engines/kyra/screen.h b/engines/kyra/screen.h
index b064c72bb0..60bfeb3241 100644
--- a/engines/kyra/screen.h
+++ b/engines/kyra/screen.h
@@ -213,7 +213,7 @@ private:
*/
class SJISFont : public Font {
public:
- SJISFont(Screen *s, Graphics::FontSJIS *font, const uint8 invisColor, bool is16Color, bool outlineSize);
+ SJISFont(Graphics::FontSJIS *font, const uint8 invisColor, bool is16Color, bool outlineSize);
~SJISFont() { unload(); }
bool usesOverlay() const { return true; }
@@ -233,7 +233,6 @@ private:
const uint8 _invisColor;
const bool _is16Color;
- const Screen *_screen;
int _sjisWidth, _asciiWidth;
int _fontHeight;
};
diff --git a/engines/kyra/screen_eob.cpp b/engines/kyra/screen_eob.cpp
index e06ca42c40..ae75c111b4 100644
--- a/engines/kyra/screen_eob.cpp
+++ b/engines/kyra/screen_eob.cpp
@@ -607,7 +607,7 @@ uint8 *Screen_EoB::encodeShape(uint16 x, uint16 y, uint16 w, uint16 h, bool enco
srcLineStart += SCREEN_W;
src = srcLineStart;
}
- delete [] colorMap;
+ delete[] colorMap;
}
return shp;
diff --git a/engines/kyra/screen_lol.cpp b/engines/kyra/screen_lol.cpp
index 08b232f400..3726b1f4b9 100644
--- a/engines/kyra/screen_lol.cpp
+++ b/engines/kyra/screen_lol.cpp
@@ -31,7 +31,7 @@
namespace Kyra {
-Screen_LoL::Screen_LoL(LoLEngine *vm, OSystem *system) : Screen_v2(vm, system, vm->gameFlags().use16ColorMode ? _screenDimTable16C : _screenDimTable256C, _screenDimTableCount), _vm(vm) {
+Screen_LoL::Screen_LoL(LoLEngine *vm, OSystem *system) : Screen_v2(vm, system, vm->gameFlags().use16ColorMode ? _screenDimTable16C : _screenDimTable256C, _screenDimTableCount) {
_paletteOverlay1 = new uint8[0x100];
_paletteOverlay2 = new uint8[0x100];
_grayOverlay = new uint8[0x100];
diff --git a/engines/kyra/screen_lol.h b/engines/kyra/screen_lol.h
index 3bba9f8b70..09496705bb 100644
--- a/engines/kyra/screen_lol.h
+++ b/engines/kyra/screen_lol.h
@@ -89,8 +89,6 @@ public:
static void convertPC98Gfx(uint8 *data, int w, int h, int pitch);
private:
- LoLEngine *_vm;
-
static const ScreenDim _screenDimTable256C[];
static const ScreenDim _screenDimTable16C[];
static const int _screenDimTableCount;
diff --git a/engines/kyra/sound_intern.h b/engines/kyra/sound_intern.h
index 427bef66e2..827a487685 100644
--- a/engines/kyra/sound_intern.h
+++ b/engines/kyra/sound_intern.h
@@ -130,7 +130,6 @@ private:
void fadeOutSoundEffects();
int _lastTrack;
- Audio::AudioStream *_currentSFX;
Audio::SoundHandle _sfxHandle;
uint8 *_musicTrackData;
diff --git a/engines/kyra/sound_midi.cpp b/engines/kyra/sound_midi.cpp
index 0004395f6f..70cc304192 100644
--- a/engines/kyra/sound_midi.cpp
+++ b/engines/kyra/sound_midi.cpp
@@ -475,8 +475,8 @@ SoundMidiPC::SoundMidiPC(KyraEngine_v1 *vm, Audio::Mixer *mixer, MidiDriver *dri
::GUI::MessageDialog dialog(_("You appear to be using a General MIDI device,\n"
"but your game only supports Roland MT32 MIDI.\n"
"We try to map the Roland MT32 instruments to\n"
- "General MIDI ones. After all it might happen\n"
- "that a few tracks will not be correctly played."));
+ "General MIDI ones. It is still possible that\n"
+ "some tracks sound incorrect."));
dialog.runModal();
}
}
diff --git a/engines/kyra/sound_towns.cpp b/engines/kyra/sound_towns.cpp
index 2f996de1ac..4b25db33f2 100644
--- a/engines/kyra/sound_towns.cpp
+++ b/engines/kyra/sound_towns.cpp
@@ -34,7 +34,7 @@
namespace Kyra {
SoundTowns::SoundTowns(KyraEngine_v1 *vm, Audio::Mixer *mixer)
- : Sound(vm, mixer), _lastTrack(-1), _currentSFX(0), _musicTrackData(0), _sfxFileData(0), _cdaPlaying(0),
+ : Sound(vm, mixer), _lastTrack(-1), _musicTrackData(0), _sfxFileData(0), _cdaPlaying(0),
_sfxFileIndex((uint)-1), _musicFadeTable(0), _sfxWDTable(0), _sfxBTTable(0), _sfxChannel(0x46) {
_driver = new TownsEuphonyDriver(_mixer);
diff --git a/engines/lastexpress/data/animation.cpp b/engines/lastexpress/data/animation.cpp
index 9d0ed532f2..7618259e69 100644
--- a/engines/lastexpress/data/animation.cpp
+++ b/engines/lastexpress/data/animation.cpp
@@ -32,10 +32,8 @@
#include "common/events.h"
#include "common/rational.h"
-#include "common/rect.h"
#include "common/stream.h"
#include "common/system.h"
-#include "common/textconsole.h"
#include "engines/engine.h"
@@ -232,7 +230,7 @@ AnimFrame *Animation::processChunkFrame(Common::SeekableReadStream *in, const Ch
i.read(str, false);
// Decode the frame
- AnimFrame *f = new AnimFrame(str, i);
+ AnimFrame *f = new AnimFrame(str, i, true);
// Delete the temporary chunk buffer
delete str;
@@ -250,7 +248,7 @@ void Animation::processChunkAudio(Common::SeekableReadStream *in, const Chunk &c
// Read Snd header
uint32 header1 = in->readUint32LE();
uint16 header2 = in->readUint16LE();
- warning("Start ADPCM: %d, %d", header1, header2);
+ debugC(4, kLastExpressDebugSound, "Start ADPCM: %d, %d", header1, header2);
size -= 6;
}
diff --git a/engines/lastexpress/data/cursor.cpp b/engines/lastexpress/data/cursor.cpp
index 205c46f667..d176d963d1 100644
--- a/engines/lastexpress/data/cursor.cpp
+++ b/engines/lastexpress/data/cursor.cpp
@@ -128,7 +128,7 @@ Common::Rect Icon::draw(Graphics::Surface *surface) {
for (int i = 0; i < 32; i++) {
// Adjust brightness
- if (_brightnessIndex == -1)
+ if (_brightnessIndex == -1 || _brightnessIndex >= ARRAYSIZE(brigthnessData))
*s = *image;
else
*s = (*image & brigthnessData[_brightnessIndex]) >> _brightnessIndex;
diff --git a/engines/lastexpress/data/font.cpp b/engines/lastexpress/data/font.cpp
index 79cf64e617..8ac1afce9a 100644
--- a/engines/lastexpress/data/font.cpp
+++ b/engines/lastexpress/data/font.cpp
@@ -149,7 +149,7 @@ uint8 Font::getCharWidth(uint16 c) const{
uint16 Font::getStringWidth(Common::String str) const {
uint16 width = 0;
for (uint i = 0; i < str.size(); i++)
- width += getCharWidth((unsigned) (int)str[i]);
+ width += getCharWidth((unsigned char)str[i]);
return width;
}
@@ -185,8 +185,8 @@ void Font::drawChar(Graphics::Surface *surface, int16 x, int16 y, uint16 c) {
Common::Rect Font::drawString(Graphics::Surface *surface, int16 x, int16 y, Common::String str) {
int16 currentX = x;
for (uint i = 0; i < str.size(); i++) {
- drawChar(surface, currentX, y, (unsigned) (int)str[i]);
- currentX += getCharWidth((unsigned) (int)str[i]);
+ drawChar(surface, currentX, y, (unsigned char)str[i]);
+ currentX += getCharWidth((unsigned char)str[i]);
}
return Common::Rect(x, y, x + currentX, y + (int16)_charHeight);
diff --git a/engines/lastexpress/data/scene.cpp b/engines/lastexpress/data/scene.cpp
index 8f279ffbb3..fdb1ac6d46 100644
--- a/engines/lastexpress/data/scene.cpp
+++ b/engines/lastexpress/data/scene.cpp
@@ -28,7 +28,6 @@
#include "lastexpress/lastexpress.h"
#include "lastexpress/resource.h"
-#include "common/textconsole.h"
#include "common/stream.h"
namespace LastExpress {
@@ -122,7 +121,7 @@ bool SceneHotspot::isInside(const Common::Point &point) {
// Scene
Scene::~Scene() {
// Free the hotspots
- for (int i = 0; i < (int)_hotspots.size(); i++)
+ for (uint i = 0; i < _hotspots.size(); i++)
delete _hotspots[i];
}
@@ -172,7 +171,7 @@ bool Scene::checkHotSpot(const Common::Point &coord, SceneHotspot **hotspot) {
bool found = false;
int _location = 0;
- for (int i = 0; i < (int)_hotspots.size(); i++) {
+ for (uint i = 0; i < _hotspots.size(); i++) {
if (_hotspots[i]->isInside(coord)) {
if (_location <= _hotspots[i]->location) {
_location = _hotspots[i]->location;
@@ -224,7 +223,7 @@ Common::String Scene::toString() {
// Hotspots
if (_hotspots.size() != 0) {
output += "\nHotspots:\n";
- for (int i = 0; i < (int)_hotspots.size(); i++)
+ for (uint i = 0; i < _hotspots.size(); i++)
output += _hotspots[i]->toString() + "\n";
}
@@ -241,7 +240,7 @@ SceneLoader::~SceneLoader() {
void SceneLoader::clear() {
// Remove all scenes
- for (int i = 0; i < (int)_scenes.size(); i++)
+ for (uint i = 0; i < _scenes.size(); i++)
delete _scenes[i];
_scenes.clear();
@@ -292,9 +291,9 @@ Scene *SceneLoader::get(SceneIndex index) {
return NULL;
// Load the hotspots if needed
- _scenes[(int)index]->loadHotspots(_stream);
+ _scenes[(uint)index]->loadHotspots(_stream);
- return _scenes[(int)index];
+ return _scenes[(uint)index];
}
} // End of namespace LastExpress
diff --git a/engines/lastexpress/data/sequence.cpp b/engines/lastexpress/data/sequence.cpp
index a62348f6c0..a5bcba84cd 100644
--- a/engines/lastexpress/data/sequence.cpp
+++ b/engines/lastexpress/data/sequence.cpp
@@ -27,7 +27,6 @@
#include "lastexpress/debug.h"
#include "common/stream.h"
-#include "common/textconsole.h"
namespace LastExpress {
@@ -77,7 +76,7 @@ void FrameInfo::read(Common::SeekableReadStream *in, bool isSequence) {
// AnimFrame
-AnimFrame::AnimFrame(Common::SeekableReadStream *in, const FrameInfo &f) : _palette(NULL) {
+AnimFrame::AnimFrame(Common::SeekableReadStream *in, const FrameInfo &f, bool ignoreSubtype) : _palette(NULL), _ignoreSubtype(ignoreSubtype) {
_palSize = 1;
// TODO: use just the needed rectangle
_image.create(640, 480, Graphics::PixelFormat::createFormatCLUT8());
diff --git a/engines/lastexpress/data/sequence.h b/engines/lastexpress/data/sequence.h
index 9987eae48e..610a55cebf 100644
--- a/engines/lastexpress/data/sequence.h
+++ b/engines/lastexpress/data/sequence.h
@@ -49,8 +49,9 @@
byte {1} - Compression type
byte {1} - Subtype (determines which set of decompression functions will be called) => 0, 1, 2, 3
byte {1} - Unknown
+ byte {1} - Keep previous frame while drawing
+ byte {1} - Unknown
byte {1} - Unknown
- uint16 {2} - Unknown
byte {1} - Sound action
byte {1} - Unknown
uint32 {4} - positionId
@@ -129,7 +130,7 @@ struct FrameInfo {
class AnimFrame : public Drawable {
public:
- AnimFrame(Common::SeekableReadStream *in, const FrameInfo &f);
+ AnimFrame(Common::SeekableReadStream *in, const FrameInfo &f, bool ignoreSubtype = false);
~AnimFrame();
Common::Rect draw(Graphics::Surface *s);
@@ -146,6 +147,7 @@ private:
uint16 _palSize;
uint16 *_palette;
Common::Rect _rect;
+ bool _ignoreSubtype;
};
class Sequence {
diff --git a/engines/lastexpress/data/snd.cpp b/engines/lastexpress/data/snd.cpp
index a9bee6155d..a77e4a06c6 100644
--- a/engines/lastexpress/data/snd.cpp
+++ b/engines/lastexpress/data/snd.cpp
@@ -28,11 +28,9 @@
#include "lastexpress/debug.h"
#include "audio/decoders/adpcm_intern.h"
-#include "audio/audiostream.h"
#include "common/debug.h"
#include "common/memstream.h"
#include "common/system.h"
-#include "common/textconsole.h"
namespace LastExpress {
@@ -358,6 +356,8 @@ public:
Audio::ADPCMStream(stream, disposeAfterUse, size, 44100, 1, blockSize) {
_currentFilterId = -1;
_nextFilterId = filterId;
+ _stepAdjust1 = 0;
+ _stepAdjust2 = 0;
}
int readBuffer(int16 *buffer, const int numSamples) {
@@ -378,7 +378,7 @@ public:
// Get current filter
_currentFilterId = _nextFilterId;
- _nextFilterId = -1;
+ //_nextFilterId = -1; // FIXME: the filter id should be recomputed based on the sound entry status for each block
// No filter: skip decoding
if (_currentFilterId == -1)
@@ -455,7 +455,9 @@ void SimpleSound::play(Audio::AudioStream *as) {
//////////////////////////////////////////////////////////////////////////
StreamedSound::StreamedSound() : _as(NULL), _loaded(false) {}
-StreamedSound::~StreamedSound() {}
+StreamedSound::~StreamedSound() {
+ _as = NULL;
+}
bool StreamedSound::load(Common::SeekableReadStream *stream, int32 filterId) {
if (!stream)
@@ -484,6 +486,9 @@ bool StreamedSound::isFinished() {
}
void StreamedSound::setFilterId(int32 filterId) {
+ if (!_as)
+ return;
+
((LastExpress_ADPCMStream *)_as)->setFilterId(filterId);
}
@@ -521,6 +526,7 @@ void AppendableSound::queueBuffer(Common::SeekableReadStream *bufferIn) {
// Setup the ADPCM decoder
uint32 sizeIn = (uint32)bufferIn->size();
Audio::AudioStream *adpcm = makeDecoder(bufferIn, sizeIn);
+ ((LastExpress_ADPCMStream *)adpcm)->setFilterId(16);
// Queue the stream
_as->queueAudioStream(adpcm);
diff --git a/engines/lastexpress/data/subtitle.cpp b/engines/lastexpress/data/subtitle.cpp
index 0be832cbdd..a9a8284588 100644
--- a/engines/lastexpress/data/subtitle.cpp
+++ b/engines/lastexpress/data/subtitle.cpp
@@ -32,7 +32,6 @@
#include "common/debug.h"
#include "common/rect.h"
#include "common/stream.h"
-#include "common/textconsole.h"
namespace LastExpress {
@@ -151,7 +150,7 @@ SubtitleManager::~SubtitleManager() {
}
void SubtitleManager::reset() {
- for (int i = 0; i < (int)_subtitles.size(); i++)
+ for (uint i = 0; i < _subtitles.size(); i++)
delete _subtitles[i];
_subtitles.clear();
diff --git a/engines/lastexpress/debug.cpp b/engines/lastexpress/debug.cpp
index dc2807db63..13a8a77ca9 100644
--- a/engines/lastexpress/debug.cpp
+++ b/engines/lastexpress/debug.cpp
@@ -28,13 +28,13 @@
#include "lastexpress/data/cursor.h"
#include "lastexpress/data/scene.h"
#include "lastexpress/data/sequence.h"
-#include "lastexpress/data/snd.h"
#include "lastexpress/data/subtitle.h"
#include "lastexpress/fight/fight.h"
#include "lastexpress/game/action.h"
#include "lastexpress/game/beetle.h"
+#include "lastexpress/game/entities.h"
#include "lastexpress/game/inventory.h"
#include "lastexpress/game/logic.h"
#include "lastexpress/game/object.h"
@@ -44,15 +44,12 @@
#include "lastexpress/game/state.h"
#include "lastexpress/sound/queue.h"
-#include "lastexpress/sound/sound.h"
#include "lastexpress/graphics.h"
-#include "lastexpress/helpers.h"
#include "lastexpress/lastexpress.h"
#include "lastexpress/resource.h"
#include "common/debug-channels.h"
-#include "common/events.h"
#include "common/md5.h"
namespace LastExpress {
diff --git a/engines/lastexpress/detection.cpp b/engines/lastexpress/detection.cpp
index 82a6520522..2fdeef910a 100644
--- a/engines/lastexpress/detection.cpp
+++ b/engines/lastexpress/detection.cpp
@@ -173,7 +173,7 @@ static const ADGameDescription gameDescriptions[] = {
ADGF_UNSTABLE,
GUIO1(GUIO_NOASPECT)
},
-
+
// The Last Express (Russian)
// expressw.exe 1999-04-05 15:33:56
// express.exe ???
@@ -211,6 +211,7 @@ public:
return "LastExpress Engine (C) 1997 Smoking Car Productions";
}
+protected:
bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *gd) const;
};
diff --git a/engines/lastexpress/entities/abbot.cpp b/engines/lastexpress/entities/abbot.cpp
index 301c52e142..e0fe429520 100644
--- a/engines/lastexpress/entities/abbot.cpp
+++ b/engines/lastexpress/entities/abbot.cpp
@@ -34,9 +34,7 @@
#include "lastexpress/game/state.h"
#include "lastexpress/sound/queue.h"
-#include "lastexpress/sound/sound.h"
-#include "lastexpress/helpers.h"
#include "lastexpress/lastexpress.h"
namespace LastExpress {
@@ -417,7 +415,7 @@ IMPLEMENT_FUNCTION(22, Abbot, function22)
break;
case kActionNone:
- TIME_CHECK_SAVEPOINT(kTime1971000, params->param1, kEntityAbbot, kEntityServers0, kAction218586752);
+ Entity::timeCheckSavepoint(kTime1971000, params->param1, kEntityAbbot, kEntityServers0, kAction218586752);
if (getState()->time > kTime1989000 && getEntities()->isSomebodyInsideRestaurantOrSalon()) {
getData()->inventoryItem = kItemNone;
@@ -516,7 +514,8 @@ IMPLEMENT_FUNCTION(24, Abbot, function24)
break;
case kActionNone:
- UPDATE_PARAM(params->param1, getState()->time, 900);
+ if (!Entity::updateParameter(params->param1, getState()->time, 900))
+ break;
setup_function25();
break;
@@ -617,7 +616,8 @@ IMPLEMENT_FUNCTION(26, Abbot, function26)
break;
case kActionNone:
- UPDATE_PARAM(params->param2, getState()->time, 4500);
+ if (!Entity::updateParameter(params->param2, getState()->time, 4500))
+ break;
if (getEntities()->isSomebodyInsideRestaurantOrSalon())
setup_function27();
@@ -691,7 +691,7 @@ IMPLEMENT_FUNCTION(28, Abbot, function28)
break;
case kActionNone:
- TIME_CHECK_CALLBACK(kTime2052000, params->param1, 1, setup_function29);
+ Entity::timeCheckCallback(kTime2052000, params->param1, 1, WRAP_SETUP_FUNCTION(Abbot, setup_function29));
break;
case kActionDefault:
@@ -770,7 +770,7 @@ IMPLEMENT_FUNCTION(29, Abbot, function29)
getSavePoints()->push(kEntityAbbot, kEntityBoutarel, kAction122358304);
getEntities()->drawSequenceLeft(kEntityAbbot, "508B");
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -864,7 +864,8 @@ IMPLEMENT_FUNCTION(31, Abbot, function31)
if (!params->param1)
break;
- UPDATE_PARAM(params->param5, getState()->time, 450);
+ if (!Entity::updateParameter(params->param5, getState()->time, 450))
+ break;
setCallback(6);
setup_callbackActionRestaurantOrSalon();
@@ -920,7 +921,8 @@ IMPLEMENT_FUNCTION(31, Abbot, function31)
getSavePoints()->push(kEntityAbbot, kEntityAlexei, kAction122288808);
params->param1 = 1;
- UPDATE_PARAM(params->param5, getState()->time, 450);
+ if (!Entity::updateParameter(params->param5, getState()->time, 450))
+ break;
setCallback(6);
setup_callbackActionRestaurantOrSalon();
@@ -1163,7 +1165,8 @@ IMPLEMENT_FUNCTION(36, Abbot, function36)
break;
case 2:
- UPDATE_PARAM(params->param4, getState()->time, 900);
+ if (!Entity::updateParameter(params->param4, getState()->time, 900))
+ break;
getSound()->playSound(kEntityAbbot, "Abb3042");
break;
@@ -1287,7 +1290,7 @@ IMPLEMENT_FUNCTION_II(40, Abbot, function40, CarIndex, EntityPosition)
case kActionNone:
if (getEntities()->updateEntity(kEntityAbbot, (CarIndex)params->param1, (EntityPosition)params->param2)) {
- CALLBACK_ACTION();
+ callbackAction();
} else if (!getEvent(kEventAbbotInvitationDrink)
&& getEntities()->isDistanceBetweenEntities(kEntityAbbot, kEntityPlayer, 1000)
&& !getEntities()->isInsideCompartments(kEntityPlayer)
@@ -1302,7 +1305,7 @@ IMPLEMENT_FUNCTION_II(40, Abbot, function40, CarIndex, EntityPosition)
case kActionDefault:
if (getEntities()->updateEntity(kEntityAbbot, (CarIndex)params->param1, (EntityPosition)params->param2))
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionCallback:
@@ -1321,7 +1324,7 @@ IMPLEMENT_FUNCTION(41, Abbot, chapter4Handler)
break;
case kActionNone:
- TIME_CHECK_SAVEPOINT(kTime2358000, params->param1, kEntityAbbot, kEntityServers0, kAction218128129);
+ Entity::timeCheckSavepoint(kTime2358000, params->param1, kEntityAbbot, kEntityServers0, kAction218128129);
if (getState()->time > kTime2389500 && getEntities()->isSomebodyInsideRestaurantOrSalon())
setup_function42();
@@ -1425,10 +1428,12 @@ IMPLEMENT_FUNCTION(43, Abbot, function43)
}
label_callback_1:
- TIME_CHECK(kTime2466000, params->param5, setup_function44);
+ if (Entity::timeCheck(kTime2466000, params->param5, WRAP_SETUP_FUNCTION(Abbot, setup_function44)))
+ break;
if (params->param3) {
- UPDATE_PARAM(params->param6, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param6, getState()->timeTicks, 75))
+ break;
params->param2 = 1;
params->param3 = 0;
@@ -1646,14 +1651,14 @@ IMPLEMENT_FUNCTION(48, Abbot, function48)
if (ENTITY_PARAM(0, 1))
getData()->inventoryItem = kItemInvalid;
- UPDATE_PARAM_PROC(params->param1, getState()->time, 1800)
+ if (Entity::updateParameter(params->param1, getState()->time, 1800)) {
getData()->inventoryItem = kItemNone;
setCallback(4);
setup_updatePosition("126C", kCarRedSleeping, 52);
- UPDATE_PARAM_PROC_END
+ }
- TIME_CHECK_CALLBACK_INVENTORY(kTime2533500, params->param2, 5, setup_callbackActionRestaurantOrSalon);
+ Entity::timeCheckCallbackInventory(kTime2533500, params->param2, 5, WRAP_SETUP_FUNCTION(Abbot, setup_callbackActionRestaurantOrSalon));
break;
case kAction1:
@@ -1705,7 +1710,7 @@ IMPLEMENT_FUNCTION(48, Abbot, function48)
getEntities()->drawSequenceLeft(kEntityAbbot, "126B");
params->param1 = 0;
- TIME_CHECK_CALLBACK_INVENTORY(kTime2533500, params->param2, 5, setup_callbackActionRestaurantOrSalon);
+ Entity::timeCheckCallbackInventory(kTime2533500, params->param2, 5, WRAP_SETUP_FUNCTION(Abbot, setup_callbackActionRestaurantOrSalon));
break;
case 5:
@@ -1750,7 +1755,8 @@ IMPLEMENT_FUNCTION(49, Abbot, pickBomb)
break;
case kActionNone:
- UPDATE_PARAM(params->param1, getState()->timeTicks, 150);
+ if (!Entity::updateParameter(params->param1, getState()->timeTicks, 150))
+ break;
getSavePoints()->push(kEntityAbbot, kEntityAbbot, kAction157489665);
break;
diff --git a/engines/lastexpress/entities/abbot.h b/engines/lastexpress/entities/abbot.h
index 462f5a491e..ce52bb68ce 100644
--- a/engines/lastexpress/entities/abbot.h
+++ b/engines/lastexpress/entities/abbot.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_ABBOT_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/alexei.cpp b/engines/lastexpress/entities/alexei.cpp
index 54c2d87b89..115c890f6f 100644
--- a/engines/lastexpress/entities/alexei.cpp
+++ b/engines/lastexpress/entities/alexei.cpp
@@ -31,9 +31,6 @@
#include "lastexpress/game/scenes.h"
#include "lastexpress/game/state.h"
-#include "lastexpress/sound/sound.h"
-
-#include "lastexpress/helpers.h"
#include "lastexpress/lastexpress.h"
namespace LastExpress {
@@ -207,7 +204,7 @@ IMPLEMENT_FUNCTION(13, Alexei, function13)
getData()->entityPosition = kPosition_7500;
getEntities()->clearSequences(kEntityAlexei);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -242,7 +239,7 @@ IMPLEMENT_FUNCTION(14, Alexei, function14)
getObjects()->update(kObjectCompartment2, kEntityPlayer, kObjectLocation1, kCursorHandKnock, kCursorHand);
getEntities()->exitCompartment(kEntityAlexei, kObjectCompartment2, true);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
IMPLEMENT_FUNCTION_END
@@ -254,7 +251,7 @@ IMPLEMENT_FUNCTION(15, Alexei, function15)
break;
case kActionNone:
- UPDATE_PARAM_CHECK(params->param2, getState()->time, params->param1)
+ if (Entity::updateParameterCheck(params->param2, getState()->time, params->param1)) {
if (getEntities()->isSomebodyInsideRestaurantOrSalon()) {
getData()->location = kLocationOutsideCompartment;
@@ -292,7 +289,7 @@ IMPLEMENT_FUNCTION(15, Alexei, function15)
getData()->location = kLocationInsideCompartment;
getEntities()->drawSequenceLeft(kEntityAlexei, "103B");
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -312,12 +309,13 @@ IMPLEMENT_FUNCTION_IS(16, Alexei, function16, TimeValue)
getObjects()->update(kObjectCompartment2, kEntityPlayer, kObjectLocation1, kCursorHandKnock, kCursorHand);
getObjects()->update(kObjectHandleInsideBathroom, kEntityPlayer, kObjectLocation1, kCursorHandKnock, kCursorHand);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
if (params->param5) {
- UPDATE_PARAM(CURRENT_PARAM(1, 1), getState()->timeTicks, 75);
+ if (!Entity::updateParameter(CURRENT_PARAM(1, 1), getState()->timeTicks, 75))
+ break;
params->param5 = 0;
params->param6 = 1;
@@ -448,7 +446,7 @@ IMPLEMENT_FUNCTION(17, Alexei, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler)
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Alexei, setup_chapter1Handler));
break;
case kActionDefault:
@@ -485,7 +483,9 @@ IMPLEMENT_FUNCTION(18, Alexei, chapter1Handler)
}
if (params->param1) {
- UPDATE_PARAM(params->param3, getState()->timeTicks, 90);
+ if (!Entity::updateParameter(params->param3, getState()->timeTicks, 90))
+ break;
+
getScenes()->loadSceneFromPosition(kCarRestaurant, 61);
} else {
params->param3 = 0;
@@ -689,7 +689,7 @@ IMPLEMENT_FUNCTION(21, Alexei, function21)
break;
case kActionNone:
- UPDATE_PARAM_CHECK(params->param2, getState()->time, params->param1)
+ if (Entity::updateParameterCheck(params->param2, getState()->time, params->param1)) {
getData()->location = kLocationOutsideCompartment;
getData()->inventoryItem = kItemNone;
@@ -751,7 +751,7 @@ IMPLEMENT_FUNCTION(22, Alexei, function22)
break;
case kActionNone:
- UPDATE_PARAM_PROC(params->param2, getState()->time, params->param2)
+ if (Entity::updateParameter(params->param2, getState()->time, params->param2)) {
if (getEntities()->isSomebodyInsideRestaurantOrSalon()) {
getData()->location = kLocationOutsideCompartment;
getData()->inventoryItem = kItemNone;
@@ -760,7 +760,7 @@ IMPLEMENT_FUNCTION(22, Alexei, function22)
setup_updatePosition("103D", kCarRestaurant, 52);
break;
}
- UPDATE_PARAM_PROC_END
+ }
if (params->param3 == kTimeInvalid || getState()->time <= kTime1111500)
break;
@@ -978,7 +978,7 @@ IMPLEMENT_FUNCTION(26, Alexei, function26)
break;
case kActionNone:
- TIME_CHECK(kTime1512000, params->param1, setup_function27)
+ Entity::timeCheck(kTime1512000, params->param1, WRAP_SETUP_FUNCTION(Alexei, setup_function27));
break;
case kActionDefault:
@@ -1333,25 +1333,26 @@ IMPLEMENT_FUNCTION(35, Alexei, function35)
case kActionNone:
if (getEntities()->isInSalon(kEntityPlayer)) {
- UPDATE_PARAM_PROC(params->param2, getState()->time, 2700)
+ if (Entity::updateParameter(params->param2, getState()->time, 2700)) {
setCallback(1);
setup_callbackActionRestaurantOrSalon();
break;
- UPDATE_PARAM_PROC_END
+ }
} else {
params->param2 = 0;
}
- UPDATE_PARAM_PROC(params->param3, getState()->time, params->param1)
+ if (Entity::updateParameter(params->param3, getState()->time, params->param1)) {
if (getEntities()->isSomebodyInsideRestaurantOrSalon()) {
setCallback(3);
setup_function15();
break;
}
- UPDATE_PARAM_PROC_END
+ }
label_callback_3:
- UPDATE_PARAM(params->param4, getState()->time, 9000);
+ if (!Entity::updateParameter(params->param4, getState()->time, 9000))
+ break;
setCallback(4);
setup_callbackActionRestaurantOrSalon();
@@ -1378,7 +1379,7 @@ label_callback_3:
case 2:
case 5:
- CALLBACK_ACTION();
+ callbackAction();
break;
case 3:
@@ -1400,7 +1401,8 @@ IMPLEMENT_FUNCTION(36, Alexei, function36)
if (params->param3 || params->param2)
break;
- UPDATE_PARAM(params->param4, getState()->timeTicks, params->param1);
+ if (!Entity::updateParameter(params->param4, getState()->timeTicks, params->param1))
+ break;
getEntities()->drawSequenceRight(kEntityAlexei, "124B");
@@ -1448,7 +1450,7 @@ IMPLEMENT_FUNCTION(36, Alexei, function36)
break;
case 4:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
diff --git a/engines/lastexpress/entities/alexei.h b/engines/lastexpress/entities/alexei.h
index 262826ae42..9792385863 100644
--- a/engines/lastexpress/entities/alexei.h
+++ b/engines/lastexpress/entities/alexei.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_ALEXEI_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/alouan.cpp b/engines/lastexpress/entities/alouan.cpp
index cd79870559..e834e1f7cb 100644
--- a/engines/lastexpress/entities/alouan.cpp
+++ b/engines/lastexpress/entities/alouan.cpp
@@ -28,9 +28,6 @@
#include "lastexpress/game/savepoint.h"
#include "lastexpress/game/state.h"
-#include "lastexpress/sound/sound.h"
-
-#include "lastexpress/helpers.h"
#include "lastexpress/lastexpress.h"
namespace LastExpress {
@@ -89,22 +86,22 @@ IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(6, Alouan, compartment6)
- COMPARTMENT_TO(Alouan, kObjectCompartment6, kPosition_4070, "621Cf", "621Df");
+ Entity::goToCompartment(savepoint, kObjectCompartment6, kPosition_4070, "621Cf", "621Df");
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(7, Alouan, compartment8)
- COMPARTMENT_TO(Alouan, kObjectCompartment8, kPosition_2740, "621Ch", "621Dh");
+ Entity::goToCompartment(savepoint, kObjectCompartment8, kPosition_2740, "621Ch", "621Dh");
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(8, Alouan, compartment6to8)
- COMPARTMENT_FROM_TO(Alouan, kObjectCompartment6, kPosition_4070, "621Bf", kObjectCompartment8, kPosition_2740, "621Ah");
+ Entity::goToCompartmentFromCompartment(savepoint, kObjectCompartment6, kPosition_4070, "621Bf", kObjectCompartment8, kPosition_2740, "621Ah");
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(9, Alouan, compartment8to6)
- COMPARTMENT_FROM_TO(Alouan, kObjectCompartment8, kPosition_2740, "621Bh", kObjectCompartment6, kPosition_4070, "621Af");
+ Entity::goToCompartmentFromCompartment(savepoint, kObjectCompartment8, kPosition_2740, "621Bh", kObjectCompartment6, kPosition_4070, "621Af");
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
@@ -114,7 +111,7 @@ IMPLEMENT_FUNCTION(10, Alouan, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Alouan, setup_chapter1Handler));
break;
case kActionDefault:
@@ -134,7 +131,8 @@ IMPLEMENT_FUNCTION(11, Alouan, chapter1Handler)
case kActionNone:
- TIME_CHECK_CALLBACK(kTime1096200, params->param1, 1, setup_compartment8to6);
+ if (Entity::timeCheckCallback(kTime1096200, params->param1, 1, WRAP_SETUP_FUNCTION(Alouan, setup_compartment8to6)))
+ break;
label_callback1:
if (getState()->time > kTime1162800 && !params->param2) {
@@ -284,21 +282,28 @@ IMPLEMENT_FUNCTION(16, Alouan, chapter3Handler)
break;
case kActionNone:
- TIME_CHECK_CALLBACK(kTimeCitySalzbourg, params->param1, 1, setup_compartment8to6);
+ if (Entity::timeCheckCallback(kTimeCitySalzbourg, params->param1, 1, WRAP_SETUP_FUNCTION(Alouan, setup_compartment8to6)))
+ break;
label_callback1:
- if (params->param2 != kTimeInvalid && getState()->time > kTime1989000)
- TIME_CHECK_CAR(kTime2119500, params->param5, 5, setup_compartment8);
+ if (params->param2 != kTimeInvalid && getState()->time > kTime1989000) {
+ if (Entity::timeCheckCar(kTime2119500, params->param5, 5, WRAP_SETUP_FUNCTION(Alouan, setup_compartment8)))
+ break;
+ }
label_callback2:
- TIME_CHECK_CALLBACK_1(kTime2052000, params->param3, 3, setup_playSound, "Har1005");
+ if (Entity::timeCheckCallback(kTime2052000, params->param3, 3, "Har1005", WRAP_SETUP_FUNCTION_S(Alouan, setup_playSound)))
+ break;
label_callback3:
- TIME_CHECK_CALLBACK(kTime2133000, params->param4, 4, setup_compartment6to8);
+ if (Entity::timeCheckCallback(kTime2133000, params->param4, 4, WRAP_SETUP_FUNCTION(Alouan, setup_compartment6to8)))
+ break;
label_callback4:
- if (params->param5 != kTimeInvalid && getState()->time > kTime2151000)
- TIME_CHECK_CAR(kTime2241000, params->param5, 5, setup_compartment8);
+ if (params->param5 != kTimeInvalid && getState()->time > kTime2151000) {
+ if (Entity::timeCheckCar(kTime2241000, params->param5, 5, WRAP_SETUP_FUNCTION(Alouan, setup_compartment8)))
+ break;
+ }
break;
case kActionDefault:
@@ -355,11 +360,14 @@ IMPLEMENT_FUNCTION(18, Alouan, chapter4Handler)
break;
case kActionNone:
- if (params->param1 != kTimeInvalid)
- TIME_CHECK_CAR(kTime2443500, params->param1, 1, setup_compartment8);
+ if (params->param1 != kTimeInvalid) {
+ if (Entity::timeCheckCar(kTime2443500, params->param1, 1, WRAP_SETUP_FUNCTION(Alouan, setup_compartment8)))
+ break;
+ }
label_callback1:
- TIME_CHECK_CALLBACK(kTime2455200, params->param2, 2, setup_compartment8to6);
+ if (Entity::timeCheckCallback(kTime2455200, params->param2, 2, WRAP_SETUP_FUNCTION(Alouan, setup_compartment8to6)))
+ break;
label_callback2:
if (getState()->time > kTime2475000 && !params->param3) {
@@ -441,7 +449,9 @@ IMPLEMENT_FUNCTION(22, Alouan, function22)
break;
case kActionNone:
- UPDATE_PARAM(params->param1, getState()->time, 2700);
+ if (!Entity::updateParameter(params->param1, getState()->time, 2700))
+ break;
+
setup_function23();
break;
diff --git a/engines/lastexpress/entities/alouan.h b/engines/lastexpress/entities/alouan.h
index c6a6beddd9..91254a449a 100644
--- a/engines/lastexpress/entities/alouan.h
+++ b/engines/lastexpress/entities/alouan.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_ALOUAN_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/anna.cpp b/engines/lastexpress/entities/anna.cpp
index b13aa21f6d..f8768032b5 100644
--- a/engines/lastexpress/entities/anna.cpp
+++ b/engines/lastexpress/entities/anna.cpp
@@ -34,9 +34,7 @@
#include "lastexpress/game/state.h"
#include "lastexpress/sound/queue.h"
-#include "lastexpress/sound/sound.h"
-#include "lastexpress/helpers.h"
#include "lastexpress/lastexpress.h"
namespace LastExpress {
@@ -200,16 +198,17 @@ IMPLEMENT_FUNCTION(12, Anna, function12)
params->param2 = 1;
if (params->param6) {
- UPDATE_PARAM_PROC(params->param7, getState()->timeTicks, 75)
+ if (Entity::updateParameter(params->param7, getState()->timeTicks, 75)) {
getSavePoints()->push(kEntityAnna, kEntityAnna, kActionEndSound);
params->param6 = 0;
params->param7 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (params->param4) {
- UPDATE_PARAM(params->param8, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param8, getState()->timeTicks, 75))
+ break;
params->param4 = 0;
params->param5 = 1;
@@ -227,7 +226,7 @@ IMPLEMENT_FUNCTION(12, Anna, function12)
case kActionEndSound:
if (params->param2) {
- CALLBACK_ACTION();
+ callbackAction();
break;
}
@@ -289,7 +288,7 @@ IMPLEMENT_FUNCTION(12, Anna, function12)
getObjects()->update(kObjectCompartmentF, kEntityAnna, kObjectLocation1, kCursorHandKnock, kCursorHand);
getObjects()->update(kObject53, kEntityAnna, kObjectLocation1, kCursorHandKnock, kCursorHand);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -424,12 +423,13 @@ IMPLEMENT_FUNCTION_IS(15, Anna, function15, TimeValue)
getObjects()->update(kObjectCompartmentF, kEntityPlayer, kObjectLocation1, kCursorHandKnock, kCursorHand);
getObjects()->update(kObject53, kEntityPlayer, kObjectLocation1, kCursorHandKnock, kCursorHand);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
if (params->param5) {
- UPDATE_PARAM(params->param8, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param8, getState()->timeTicks, 75))
+ break;
params->param5 = 0;
params->param6 = 1;
@@ -547,7 +547,7 @@ IMPLEMENT_FUNCTION(16, Anna, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Anna, setup_chapter1Handler));
break;
case kActionDefault:
@@ -577,7 +577,7 @@ IMPLEMENT_FUNCTION_II(17, Anna, function17, uint32, uint32)
if (getEntities()->updateEntity(kEntityAnna, (CarIndex)params->param1, (EntityPosition)params->param2)) {
getData()->inventoryItem = kItemNone;
- CALLBACK_ACTION();
+ callbackAction();
}
break;
@@ -615,7 +615,7 @@ IMPLEMENT_FUNCTION_II(17, Anna, function17, uint32, uint32)
}
if (getEntities()->updateEntity(kEntityAnna, (CarIndex)params->param1, (EntityPosition)params->param2))
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionCallback:
@@ -664,20 +664,21 @@ IMPLEMENT_FUNCTION_I(18, Anna, function18, TimeValue)
case kActionNone:
if (params->param1 && params->param1 < getState()->time && getEntities()->isSomebodyInsideRestaurantOrSalon()) {
getData()->inventoryItem = kItemNone;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
if (params->param5 && !params->param4) {
- UPDATE_PARAM_PROC(params->param6, getState()->time, 900)
+ if (Entity::updateParameter(params->param6, getState()->time, 900)) {
params->param2 |= kItemScarf;
params->param5 = 0;
params->param6 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (params->param3) {
- UPDATE_PARAM(params->param7, getState()->timeTicks, 90);
+ if (!Entity::updateParameter(params->param7, getState()->timeTicks, 90))
+ break;
getScenes()->loadSceneFromPosition(kCarRestaurant, 61);
} else {
@@ -757,7 +758,7 @@ IMPLEMENT_FUNCTION_I(18, Anna, function18, TimeValue)
case kAction259136835:
case kAction268773672:
getData()->inventoryItem = kItemNone;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
IMPLEMENT_FUNCTION_END
@@ -1151,15 +1152,16 @@ IMPLEMENT_FUNCTION(29, Anna, function29)
case kActionNone:
if (params->param2) {
- UPDATE_PARAM_PROC(params->param3, getState()->time, 900)
+ if (Entity::updateParameter(params->param3, getState()->time, 900)) {
getData()->inventoryItem = (InventoryItem)(getData()->inventoryItem | kItemScarf);
params->param2 = 0;
params->param3 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (params->param1) {
- UPDATE_PARAM(params->param4, getState()->timeTicks, 90);
+ if (!Entity::updateParameter(params->param4, getState()->timeTicks, 90))
+ break;
getScenes()->loadSceneFromPosition(kCarRestaurant, 55);
} else {
@@ -1281,7 +1283,9 @@ IMPLEMENT_FUNCTION(30, Anna, function30)
}
if (params->param1) {
- UPDATE_PARAM(params->param5, getState()->timeTicks, 90);
+ if (!Entity::updateParameter(params->param5, getState()->timeTicks, 90))
+ break;
+
getScenes()->loadSceneFromPosition(kCarRestaurant, 55);
} else {
params->param5 = 0;
@@ -1411,15 +1415,15 @@ IMPLEMENT_FUNCTION(34, Anna, function34)
case kActionNone:
if (!params->param1 && getEntities()->isPlayerPosition(kCarRedSleeping, 60)) {
- UPDATE_PARAM_PROC(params->param2, getState()->time, 150)
+ if (Entity::updateParameter(params->param2, getState()->time, 150)) {
setCallback(1);
setup_draw("419B");
break;
- UPDATE_PARAM_PROC_END
+ }
}
label_callback_1:
- TIME_CHECK(kTime1489500, params->param3, setup_function35);
+ Entity::timeCheck(kTime1489500, params->param3, WRAP_SETUP_FUNCTION(Anna, setup_function35));
break;
case kActionKnock:
@@ -1485,7 +1489,8 @@ IMPLEMENT_FUNCTION(35, Anna, function35)
if (!params->param1)
break;
- UPDATE_PARAM(params->param3, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param3, getState()->timeTicks, 75))
+ break;
switch (params->param2) {
default:
@@ -1666,7 +1671,7 @@ IMPLEMENT_FUNCTION_II(39, Anna, function39, CarIndex, EntityPosition)
if (getEntities()->updateEntity(kEntityAnna, (CarIndex)params->param1, (EntityPosition)params->param2)) {
getData()->inventoryItem = kItemNone;
- CALLBACK_ACTION();
+ callbackAction();
}
break;
@@ -1687,7 +1692,7 @@ IMPLEMENT_FUNCTION_II(39, Anna, function39, CarIndex, EntityPosition)
if (getEntities()->updateEntity(kEntityAnna, (CarIndex)params->param1, (EntityPosition)params->param2)) {
getData()->inventoryItem = kItemNone;
- CALLBACK_ACTION();
+ callbackAction();
}
break;
@@ -1799,7 +1804,8 @@ IMPLEMENT_FUNCTION(41, Anna, function41)
break;
case kActionNone:
- UPDATE_PARAM(params->param2, getState()->time, 2700);
+ if (!Entity::updateParameter(params->param2, getState()->time, 2700))
+ break;
params->param5++;
switch (params->param5) {
@@ -1985,7 +1991,7 @@ IMPLEMENT_FUNCTION_I(45, Anna, function45, bool)
case 2:
getEntities()->exitCompartment(kEntityAnna, kObjectCompartmentF, true);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -2092,11 +2098,11 @@ IMPLEMENT_FUNCTION(48, Anna, function48)
break;
if (params->param3 != kTimeInvalid && getState()->time > kTime1969200) {
- UPDATE_PARAM_PROC_TIME(kTime1983600, (!getEntities()->isInRestaurant(kEntityPlayer) || getSoundQueue()->isBuffered(kEntityBoutarel)), params->param3, 150)
+ if (Entity::updateParameterTime(kTime1983600, (!getEntities()->isInRestaurant(kEntityPlayer) || getSoundQueue()->isBuffered(kEntityBoutarel)), params->param3, 150)) {
setCallback(3);
setup_playSound("Aug3007A");
break;
- UPDATE_PARAM_PROC_END
+ }
}
label_callback_4:
@@ -2195,7 +2201,7 @@ IMPLEMENT_FUNCTION(49, Anna, leaveTableWithAugust)
getSavePoints()->push(kEntityAnna, kEntityTables3, kActionDrawTablesWithChairs, "010M");
getEntities()->clearSequences(kEntityAugust);
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionDefault:
@@ -2386,22 +2392,23 @@ IMPLEMENT_FUNCTION(53, Anna, function53)
case kActionNone:
if (getProgress().field_48 && params->param5 != kTimeInvalid) {
- UPDATE_PARAM_PROC_TIME(kTime2065500, !getEntities()->isPlayerInCar(kCarRedSleeping), params->param5, 150)
+ if (Entity::updateParameterTime(kTime2065500, !getEntities()->isPlayerInCar(kCarRedSleeping), params->param5, 150)) {
setup_function54();
break;
- UPDATE_PARAM_PROC_END
+ }
}
if (params->param3) {
- UPDATE_PARAM_PROC(params->param6, getState()->time, 9000)
+ if (Entity::updateParameter(params->param6, getState()->time, 9000)) {
params->param4 = !params->param4;
getEntities()->drawSequenceLeft(kEntityAnna, params->param4 ? "417B" : "417A");
params->param6 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (params->param1) {
- UPDATE_PARAM(params->param7, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param7, getState()->timeTicks, 75))
+ break;
CursorStyle cursor = getEntities()->isInsideCompartment(kEntityMax, kCarRedSleeping, kPosition_4070) ? kCursorHand : kCursorNormal;
@@ -2537,17 +2544,19 @@ IMPLEMENT_FUNCTION(54, Anna, function54)
case kActionNone:
if (params->param3) {
- TIME_CHECK(kTime2079000, params->param5, setup_function55);
+ if (Entity::timeCheck(kTime2079000, params->param5, WRAP_SETUP_FUNCTION(Anna, setup_function55)))
+ break;
- UPDATE_PARAM_PROC(params->param6, getState()->time, 9000)
+ if (Entity::updateParameter(params->param6, getState()->time, 9000)) {
params->param4 = !params->param4;
getEntities()->drawSequenceLeft(kEntityAnna, params->param4 ? "417B" : "417A");
params->param6 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (params->param1) {
- UPDATE_PARAM(params->param7, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param7, getState()->timeTicks, 75))
+ break;
CursorStyle cursor = getEntities()->isInsideCompartment(kEntityMax, kCarRedSleeping, kPosition_4070) ? kCursorHand : kCursorNormal;
@@ -2894,7 +2903,8 @@ IMPLEMENT_FUNCTION(59, Anna, function59)
}
if (params->param1) {
- UPDATE_PARAM(params->param5, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param5, getState()->timeTicks, 75))
+ break;
CursorStyle style = getEntities()->isInsideCompartment(kEntityMax, kCarRedSleeping, kPosition_4070) ? kCursorHand : kCursorNormal;
getObjects()->update(kObjectCompartmentF, kEntityAnna, kObjectLocation1, kCursorNormal, style);
@@ -3040,7 +3050,7 @@ IMPLEMENT_FUNCTION(60, Anna, function60)
getData()->location = kLocationInsideCompartment;
getEntities()->clearSequences(kEntityAnna);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -3268,7 +3278,8 @@ IMPLEMENT_FUNCTION(67, Anna, chapter4Handler)
case kActionNone:
if (getEntities()->isPlayerPosition(kCarRedSleeping, 46)) {
- UPDATE_PARAM_GOTO(params->param4, getState()->timeTicks, 30, label_next);
+ if (!Entity::updateParameter(params->param4, getState()->timeTicks, 30))
+ goto label_next;
getScenes()->loadSceneFromPosition(kCarRedSleeping, 8);
}
@@ -3277,7 +3288,8 @@ IMPLEMENT_FUNCTION(67, Anna, chapter4Handler)
label_next:
if (params->param1) {
- UPDATE_PARAM(params->param5, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param5, getState()->timeTicks, 75))
+ break;
params->param1 = 0;
params->param2 = 1;
@@ -3407,7 +3419,8 @@ IMPLEMENT_FUNCTION(69, Anna, function69)
case kActionNone:
if (params->param1) {
- UPDATE_PARAM(params->param2, getState()->time, 4500);
+ if (!Entity::updateParameter(params->param2, getState()->time, 4500))
+ break;
getData()->car = kCarRedSleeping;
getData()->entityPosition = kPosition_9270;
@@ -3417,7 +3430,7 @@ IMPLEMENT_FUNCTION(69, Anna, function69)
break;
}
- TIME_CHECK_CALLBACK(kTime2535300, params->param3, 4, setup_callbackActionRestaurantOrSalon);
+ Entity::timeCheckCallback(kTime2535300, params->param3, 4, WRAP_SETUP_FUNCTION(Anna, setup_callbackActionRestaurantOrSalon));
break;
case kActionDefault:
@@ -3533,7 +3546,7 @@ IMPLEMENT_FUNCTION(71, Anna, function71)
getEntities()->exitCompartment(kEntityAnna, kObjectCompartmentF);
getData()->entityPosition = kPosition_4070;
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionDefault:
@@ -3589,7 +3602,7 @@ IMPLEMENT_FUNCTION_II(72, Anna, function72, CarIndex, EntityPosition)
if (getEntities()->updateEntity(kEntityAnna, (CarIndex)params->param1, (EntityPosition)params->param2)) {
getData()->inventoryItem = kItemNone;
- CALLBACK_ACTION();
+ callbackAction();
}
break;
@@ -3602,7 +3615,7 @@ IMPLEMENT_FUNCTION_II(72, Anna, function72, CarIndex, EntityPosition)
case kActionDefault:
if (getEntities()->updateEntity(kEntityAnna, (CarIndex)params->param1, (EntityPosition)params->param2)) {
- CALLBACK_ACTION();
+ callbackAction();
} else if (!getEvent(kEventAnnaTired))
getData()->inventoryItem = kItemInvalid;
break;
@@ -3911,7 +3924,8 @@ IMPLEMENT_FUNCTION(80, Anna, function80)
break;
case kActionNone:
- UPDATE_PARAM(params->param1, getState()->timeTicks, 450);
+ if (!Entity::updateParameter(params->param1, getState()->timeTicks, 450))
+ break;
getSound()->playSound(kEntityPlayer, "Kro5001", kFlagDefault);
break;
@@ -3980,7 +3994,8 @@ IMPLEMENT_FUNCTION(81, Anna, finalSequence)
break;
case kActionNone:
- UPDATE_PARAM(params->param1, getState()->timeTicks, 180);
+ if (!Entity::updateParameter(params->param1, getState()->timeTicks, 180))
+ break;
getSound()->playSound(kEntityTrain, "LIB069");
getLogic()->gameOver(kSavegameTypeIndex, 2, kSceneNone, true);
diff --git a/engines/lastexpress/entities/anna.h b/engines/lastexpress/entities/anna.h
index 72c6db4bd9..205ff9d42c 100644
--- a/engines/lastexpress/entities/anna.h
+++ b/engines/lastexpress/entities/anna.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_ANNA_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/august.cpp b/engines/lastexpress/entities/august.cpp
index cfde8a2d6f..67d810fde2 100644
--- a/engines/lastexpress/entities/august.cpp
+++ b/engines/lastexpress/entities/august.cpp
@@ -36,9 +36,7 @@
#include "lastexpress/game/state.h"
#include "lastexpress/sound/queue.h"
-#include "lastexpress/sound/sound.h"
-#include "lastexpress/helpers.h"
#include "lastexpress/lastexpress.h"
namespace LastExpress {
@@ -150,7 +148,7 @@ IMPLEMENT_FUNCTION_END
IMPLEMENT_FUNCTION_SI(7, August, enterExitCompartment3, ObjectIndex)
if (savepoint.action == kAction4) {
getEntities()->exitCompartment(kEntityAugust, (ObjectIndex)params->param4);
- CALLBACK_ACTION();
+ callbackAction();
return;
}
@@ -177,7 +175,7 @@ IMPLEMENT_FUNCTION_IIS(10, August, callSavepointNoDrawing, EntityIndex, ActionIn
if (!params->param6)
getSavePoints()->call(kEntityAugust, (EntityIndex)params->param1, (ActionIndex)params->param2, (char *)&params->seq);
- CALLBACK_ACTION();
+ callbackAction();
break;
case kAction10:
@@ -233,7 +231,7 @@ IMPLEMENT_FUNCTION_I(17, August, function17, TimeValue)
case kActionNone:
if (params->param1 < getState()->time && !params->param2) {
params->param2 = 1;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
@@ -262,7 +260,7 @@ IMPLEMENT_FUNCTION_I(17, August, function17, TimeValue)
case 1:
if (ENTITY_PARAM(0, 1)) {
- CALLBACK_ACTION();
+ callbackAction();
break;
}
@@ -272,7 +270,7 @@ IMPLEMENT_FUNCTION_I(17, August, function17, TimeValue)
case 2:
case 3:
if (ENTITY_PARAM(0, 1)) {
- CALLBACK_ACTION();
+ callbackAction();
break;
}
@@ -289,7 +287,7 @@ IMPLEMENT_FUNCTION_I(17, August, function17, TimeValue)
case 5:
if (ENTITY_PARAM(0, 1)) {
- CALLBACK_ACTION();
+ callbackAction();
break;
}
@@ -308,7 +306,7 @@ IMPLEMENT_FUNCTION_II(18, August, updateEntity2, CarIndex, EntityPosition)
case kActionNone:
if (getEntities()->updateEntity(_entityIndex, (CarIndex)params->param1, (EntityPosition)params->param2)) {
- CALLBACK_ACTION();
+ callbackAction();
} else if (getEntities()->isDistanceBetweenEntities(kEntityAugust, kEntityPlayer, 1000)
&& !getEntities()->isInGreenCarEntrance(kEntityPlayer)
&& !getEntities()->isInsideCompartments(kEntityPlayer)
@@ -316,14 +314,14 @@ IMPLEMENT_FUNCTION_II(18, August, updateEntity2, CarIndex, EntityPosition)
if (getData()->car == kCarGreenSleeping || getData()->car == kCarRedSleeping) {
ENTITY_PARAM(0, 1) = 1;
- CALLBACK_ACTION();
+ callbackAction();
}
}
break;
case kActionDefault:
if (getEntities()->updateEntity(_entityIndex, (CarIndex)params->param1, (EntityPosition)params->param2))
- CALLBACK_ACTION();
+ callbackAction();
break;
}
IMPLEMENT_FUNCTION_END
@@ -407,7 +405,7 @@ IMPLEMENT_FUNCTION_II(19, August, function19, bool, bool)
getData()->location = kLocationInsideCompartment;
getEntities()->clearSequences(kEntityAugust);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -503,7 +501,7 @@ IMPLEMENT_FUNCTION_I(20, August, function20, bool)
getObjects()->update(kObjectCompartment3, kEntityPlayer, kObjectLocation1, kCursorHandKnock, kCursorHand);
getEntities()->exitCompartment(kEntityAugust, kObjectCompartment3, true);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
IMPLEMENT_FUNCTION_END
@@ -520,12 +518,13 @@ IMPLEMENT_FUNCTION_I(21, August, function21, TimeValue)
getObjects()->update(kObjectCompartment3, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
if (params->param2) {
- UPDATE_PARAM_GOTO(params->param8, getState()->timeTicks, 75, label_continue);
+ if (!Entity::updateParameter(params->param8, getState()->timeTicks, 75))
+ goto label_continue;
params->param2 = 0;
params->param3 = 1;
@@ -540,10 +539,10 @@ label_continue:
break;
if (params->param6) {
- UPDATE_PARAM_PROC(CURRENT_PARAM(1, 1), getState()->time, 6300)
+ if (Entity::updateParameter(CURRENT_PARAM(1, 1), getState()->time, 6300)) {
params->param6 = 0;
CURRENT_PARAM(1, 1) = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (!params->param4
@@ -753,7 +752,7 @@ IMPLEMENT_FUNCTION(22, August, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(August, setup_chapter1Handler));
break;
case kActionDefault:
@@ -786,7 +785,7 @@ IMPLEMENT_FUNCTION_I(23, August, function23, TimeValue)
} else {
getEntities()->exitCompartment(kEntityAugust, kObjectCompartment1, true);
getObjects()->update(kObjectCompartment1, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);
- CALLBACK_ACTION();
+ callbackAction();
}
break;
}
@@ -806,7 +805,7 @@ IMPLEMENT_FUNCTION_I(23, August, function23, TimeValue)
}
label_callback_8:
- UPDATE_PARAM_PROC(CURRENT_PARAM(1, 4), getState()->timeTicks, 75)
+ if (Entity::updateParameter(CURRENT_PARAM(1, 4), getState()->timeTicks, 75)) {
getEntities()->exitCompartment(kEntityAugust, kObjectCompartment1, true);
if (getProgress().eventCorpseMovedFromFloor) {
@@ -822,7 +821,7 @@ label_callback_8:
setup_savegame(kSavegameTypeEvent, kEventAugustFindCorpse);
}
break;
- UPDATE_PARAM_PROC_END
+ }
label_callback_9:
if (params->param3 && params->param1 < getState()->time && !CURRENT_PARAM(1, 5)) {
@@ -842,7 +841,8 @@ label_callback_9:
break;
if (getObjects()->get(kObjectCompartment1).location == kObjectLocation1) {
- UPDATE_PARAM(CURRENT_PARAM(1, 2), getState()->timeTicks, 75);
+ if (!Entity::updateParameter(CURRENT_PARAM(1, 2), getState()->timeTicks, 75))
+ break;
getObjects()->update(kObjectCompartment1, kEntityAugust, getObjects()->get(kObjectCompartment1).location, kCursorNormal, kCursorNormal);
@@ -867,7 +867,7 @@ label_callback_9:
if (params->param8 >= 3) {
getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).location, kCursorHandKnock, kCursorHand);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
@@ -959,7 +959,7 @@ label_callback_9:
case 2:
getObjects()->update(kObjectCompartment1, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);
- CALLBACK_ACTION();
+ callbackAction();
break;
case 3:
@@ -986,7 +986,7 @@ label_callback_9:
getScenes()->loadScene(kScene41);
- CALLBACK_ACTION();
+ callbackAction();
break;
case 5:
@@ -1028,7 +1028,7 @@ label_callback_9:
case 12:
getData()->location = kLocationOutsideCompartment;
- CALLBACK_ACTION();
+ callbackAction();
break;
case 13:
@@ -1056,7 +1056,7 @@ label_callback_9:
getScenes()->loadScene(kScene41);
- CALLBACK_ACTION();
+ callbackAction();
break;
case 15:
@@ -1096,7 +1096,7 @@ IMPLEMENT_FUNCTION(24, August, dinner)
getScenes()->loadSceneFromPosition(kCarRestaurant, 61);
- CALLBACK_ACTION();
+ callbackAction();
}
break;
}
@@ -1485,7 +1485,8 @@ IMPLEMENT_FUNCTION(30, August, restaurant)
break;
case kActionNone:
- UPDATE_PARAM(params->param3, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param3, getState()->timeTicks, 75))
+ break;
getData()->inventoryItem = kItemInvalid;
break;
@@ -1634,9 +1635,9 @@ IMPLEMENT_FUNCTION(32, August, function32)
break;
case kActionNone:
- UPDATE_PARAM_PROC_TIME(kTime1179000, (!getEntities()->isInSalon(kEntityAnna) || getEntities()->isInSalon(kEntityPlayer)), params->param6, 0);
+ if (Entity::updateParameterTime(kTime1179000, (!getEntities()->isInSalon(kEntityAnna) || getEntities()->isInSalon(kEntityPlayer)), params->param6, 0)) {
getSavePoints()->push(kEntityAugust, kEntityAnna, kAction123712592);
- UPDATE_PARAM_PROC_END
+ }
if (params->param1 && getEntities()->isSomebodyInsideRestaurantOrSalon()) {
if (!params->param4) {
@@ -1645,18 +1646,19 @@ IMPLEMENT_FUNCTION(32, August, function32)
}
if (params->param7 != kTimeInvalid && params->param4 < getState()->time) {
- UPDATE_PARAM_PROC_TIME(params->param5, getEntities()->isInSalon(kEntityPlayer), params->param7, 0);
+ if (Entity::updateParameterTime((TimeValue)params->param5, getEntities()->isInSalon(kEntityPlayer), params->param7, 0)) {
getData()->location = kLocationOutsideCompartment;
setCallback(5);
setup_updatePosition("109D", kCarRestaurant, 56);
break;
- UPDATE_PARAM_PROC_END
+ }
}
}
if (params->param3) {
- UPDATE_PARAM(params->param8, getState()->timeTicks, 90);
+ if (!Entity::updateParameter(params->param8, getState()->timeTicks, 90))
+ break;
getScenes()->loadSceneFromPosition(kCarRestaurant, 55);
} else {
@@ -1813,7 +1815,7 @@ IMPLEMENT_FUNCTION(36, August, chapter2Handler)
break;
case kActionNone:
- TIME_CHECK_SAVEPOINT(kTime1755000, params->param2, kEntityAugust, kEntityServers0, kAction252568704);
+ Entity::timeCheckSavepoint(kTime1755000, params->param2, kEntityAugust, kEntityServers0, kAction252568704);
if (getState()->time > kTime1773000 && params->param1 && getEntities()->isSomebodyInsideRestaurantOrSalon()) {
getData()->inventoryItem = kItemNone;
@@ -1904,7 +1906,7 @@ IMPLEMENT_FUNCTION(37, August, function37)
break;
case kActionNone:
- TIME_CHECK_CALLBACK_1(kTime1791000, params->param2, 5, setup_function20, true);
+ Entity::timeCheckCallback(kTime1791000, params->param2, 5, true, WRAP_SETUP_FUNCTION_B(August, setup_function20));
break;
case kActionDefault:
@@ -1962,9 +1964,9 @@ IMPLEMENT_FUNCTION(38, August, function38)
break;
case kActionNone:
- TIME_CHECK_SAVEPOINT(kTime1801800, params->param1, kEntityAugust, kEntityRebecca, kAction155980128);
+ Entity::timeCheckSavepoint(kTime1801800, params->param1, kEntityAugust, kEntityRebecca, kAction155980128);
- TIME_CHECK_CALLBACK(kTime1820700, params->param2, 3, setup_callbackActionRestaurantOrSalon);
+ Entity::timeCheckCallback(kTime1820700, params->param2, 3, WRAP_SETUP_FUNCTION(August, setup_callbackActionRestaurantOrSalon));
break;
case kActionDefault:
@@ -2110,7 +2112,7 @@ IMPLEMENT_FUNCTION_II(41, August, function41, CarIndex, EntityPosition)
getData()->inventoryItem = kItemNone;
if (getEntities()->updateEntity(kEntityAugust, (CarIndex)params->param1, (EntityPosition)params->param2)) {
- CALLBACK_ACTION();
+ callbackAction();
break;
}
@@ -2147,7 +2149,7 @@ IMPLEMENT_FUNCTION_II(41, August, function41, CarIndex, EntityPosition)
case kActionDefault:
if (getEntities()->updateEntity(kEntityAugust, (CarIndex)params->param1, (EntityPosition)params->param2)) {
- CALLBACK_ACTION();
+ callbackAction();
break;
}
@@ -2172,7 +2174,7 @@ IMPLEMENT_FUNCTION_III(42, August, function42, CarIndex, EntityPosition, bool)
if (getEntities()->updateEntity(kEntityAugust, (CarIndex)params->param1, (EntityPosition)params->param2)) {
getData()->inventoryItem = kItemNone;
- CALLBACK_ACTION();
+ callbackAction();
}
break;
@@ -2191,7 +2193,7 @@ IMPLEMENT_FUNCTION_III(42, August, function42, CarIndex, EntityPosition, bool)
case kActionDefault:
if (getEntities()->updateEntity(kEntityAugust, (CarIndex)params->param1, (EntityPosition)params->param2)) {
- CALLBACK_ACTION();
+ callbackAction();
break;
}
@@ -2212,7 +2214,7 @@ IMPLEMENT_FUNCTION(43, August, chapter3Handler)
break;
case kActionNone:
- TIME_CHECK_SAVEPOINT(kTime1953000, params->param2, kEntityAugust, kEntityAnna, kAction291662081);
+ Entity::timeCheckSavepoint(kTime1953000, params->param2, kEntityAugust, kEntityAnna, kAction291662081);
// Set as same position as Anna
if (params->param1) {
@@ -2402,7 +2404,7 @@ IMPLEMENT_FUNCTION_END
IMPLEMENT_FUNCTION(46, August, function46)
switch (savepoint.action) {
default:
- TIME_CHECK_CALLBACK(kTime2088000, params->param1, 1, setup_function47);
+ Entity::timeCheckCallback(kTime2088000, params->param1, 1, WRAP_SETUP_FUNCTION(August, setup_function47));
break;
case kActionNone:
@@ -2473,7 +2475,7 @@ IMPLEMENT_FUNCTION(47, August, function47)
break;
case 5:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -2487,7 +2489,7 @@ IMPLEMENT_FUNCTION(48, August, function48)
break;
case kActionNone:
- TIME_CHECK(kTimeCityLinz, params->param1, setup_function49);
+ Entity::timeCheck(kTimeCityLinz, params->param1, WRAP_SETUP_FUNCTION(August, setup_function49));
break;
case kActionKnock:
@@ -2770,7 +2772,8 @@ IMPLEMENT_FUNCTION(54, August, function54)
getData()->inventoryItem = kItemInvalid;
if (!params->param2 && params->param1) {
- UPDATE_PARAM(params->param5, getState()->time, params->param1);
+ if (!Entity::updateParameter(params->param5, getState()->time, params->param1))
+ break;
getData()->inventoryItem = kItemNone;
setup_function55();
@@ -3046,7 +3049,8 @@ IMPLEMENT_FUNCTION(60, August, function60)
if (!params->param1)
break;
- UPDATE_PARAM(params->param3, getState()->time, 9000);
+ if (!Entity::updateParameter(params->param3, getState()->time, 9000))
+ break;
setCallback(1);
setup_callbackActionRestaurantOrSalon();
@@ -3142,7 +3146,8 @@ IMPLEMENT_FUNCTION(62, August, function62)
break;
case kActionNone:
- UPDATE_PARAM(params->param1, getState()->time, 900);
+ if (!Entity::updateParameter(params->param1, getState()->time, 900))
+ break;
getSound()->playSound(kEntityAugust, "Aug4003A");
@@ -3220,9 +3225,9 @@ IMPLEMENT_FUNCTION(63, August, function63)
break;
case kActionNone:
- UPDATE_PARAM_PROC(params->param3, getState()->time, 1800)
+ if (Entity::updateParameter(params->param3, getState()->time, 1800)) {
getData()->inventoryItem = kItemInvalid;
- UPDATE_PARAM_PROC_END
+ }
if (getState()->time > kTime2488500 && !params->param4) {
params->param4 = 1;
@@ -3231,7 +3236,8 @@ IMPLEMENT_FUNCTION(63, August, function63)
break;
}
- UPDATE_PARAM(params->param5, getState()->timeTicks, params->param1);
+ if (!Entity::updateParameter(params->param5, getState()->timeTicks, params->param1))
+ break;
params->param2 = (params->param6 < 1 ? 1 : 0);
@@ -3388,7 +3394,8 @@ IMPLEMENT_FUNCTION(68, August, function68)
case kActionNone:
if (params->param1) {
- UPDATE_PARAM(params->param4, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param4, getState()->timeTicks, 75))
+ break;
params->param1 = 0;
params->param2 = 1;
diff --git a/engines/lastexpress/entities/august.h b/engines/lastexpress/entities/august.h
index 2cbb31b968..606321955b 100644
--- a/engines/lastexpress/entities/august.h
+++ b/engines/lastexpress/entities/august.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_AUGUST_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/boutarel.cpp b/engines/lastexpress/entities/boutarel.cpp
index 315b12a69e..219ddf901b 100644
--- a/engines/lastexpress/entities/boutarel.cpp
+++ b/engines/lastexpress/entities/boutarel.cpp
@@ -32,9 +32,7 @@
#include "lastexpress/game/state.h"
#include "lastexpress/sound/queue.h"
-#include "lastexpress/sound/sound.h"
-#include "lastexpress/helpers.h"
#include "lastexpress/lastexpress.h"
namespace LastExpress {
@@ -231,7 +229,7 @@ IMPLEMENT_FUNCTION_I(11, Boutarel, function11, bool)
case 7:
getData()->location = kLocationInsideCompartment;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -249,7 +247,7 @@ IMPLEMENT_FUNCTION(12, Boutarel, enterTableWithMmeBoutarel)
getSavePoints()->push(kEntityBoutarel, kEntityTables2, kAction136455232);
getData()->location = kLocationInsideCompartment;
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionDefault:
@@ -276,7 +274,7 @@ IMPLEMENT_FUNCTION(13, Boutarel, leaveTableWithMmeBoutarel)
getSavePoints()->push(kEntityBoutarel, kEntityTables2, kActionDrawTablesWithChairs, "008F");
getEntities()->clearSequences(kEntityMmeBoutarel);
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionDefault:
@@ -358,7 +356,7 @@ IMPLEMENT_FUNCTION_I(14, Boutarel, function14, bool)
getEntities()->clearSequences(kEntityBoutarel);
getData()->location = kLocationInsideCompartment;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -416,7 +414,7 @@ IMPLEMENT_FUNCTION_IS(15, Boutarel, function15, bool)
case 5:
getData()->location = kLocationInsideCompartment;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -464,7 +462,7 @@ IMPLEMENT_FUNCTION_IS(16, Boutarel, function16, bool)
getData()->location = kLocationInsideCompartment;
getEntities()->clearSequences(kEntityBoutarel);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -478,10 +476,13 @@ IMPLEMENT_FUNCTION_IS(17, Boutarel, function17, TimeValue)
break;
case kActionNone:
- TIME_CHECK_CALLBACK_ACTION(params->param1, params->param6);
+ if (Entity::timeCheckCallbackAction((TimeValue)params->param1, params->param6))
+ break;
if (params->param5) {
- UPDATE_PARAM(params->param7, getState()->timeTicks, 90)
+ if (!Entity::updateParameter(params->param7, getState()->timeTicks, 90))
+ break;
+
getScenes()->loadSceneFromPosition(kCarRestaurant, 51);
} else {
params->param7 = 0;
@@ -511,12 +512,13 @@ IMPLEMENT_FUNCTION_I(18, Boutarel, function18, TimeValue)
getObjects()->update(kObjectCompartmentC, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);
getObjects()->update(kObject50, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
if (params->param2) {
- UPDATE_PARAM(params->param5, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param5, getState()->timeTicks, 75))
+ break;
params->param2 = 0;
params->param3 = 1;
@@ -615,7 +617,7 @@ IMPLEMENT_FUNCTION(19, Boutarel, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Boutarel, setup_chapter1Handler));
break;
case kActionDefault:
@@ -644,14 +646,14 @@ IMPLEMENT_FUNCTION(20, Boutarel, function20)
break;
if (!params->param2) {
- UPDATE_PARAM_PROC(params->param3, getState()->time, 4500)
+ if (Entity::updateParameter(params->param3, getState()->time, 4500)) {
setCallback(3);
setup_playSound("MRB1078A");
break;
- UPDATE_PARAM_PROC_END
+ }
}
- TIME_CHECK_CALLBACK_1(kTime1138500, params->param4, 4, setup_function14, false);
+ Entity::timeCheckCallback(kTime1138500, params->param4, 4, false, WRAP_SETUP_FUNCTION_B(Boutarel, setup_function14));
break;
case kActionDefault:
@@ -676,13 +678,13 @@ IMPLEMENT_FUNCTION(20, Boutarel, function20)
break;
case 3:
- TIME_CHECK_CALLBACK_1(kTime1138500, params->param4, 4, setup_function14, false);
+ Entity::timeCheckCallback(kTime1138500, params->param4, 4, false, WRAP_SETUP_FUNCTION_B(Boutarel, setup_function14));
break;
case 4:
getSavePoints()->push(kEntityBoutarel, kEntityCooks, kAction224849280);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -834,7 +836,7 @@ IMPLEMENT_FUNCTION(24, Boutarel, chapter2Handler)
break;
case kActionNone:
- TIME_CHECK_CALLBACK_1(kTime1759500, params->param2, 1, setup_function14, false);
+ Entity::timeCheckCallback(kTime1759500, params->param2, 1, false, WRAP_SETUP_FUNCTION_B(Boutarel, setup_function14));
break;
case kActionDefault:
@@ -934,9 +936,9 @@ IMPLEMENT_FUNCTION(29, Boutarel, function29)
break;
case kActionNone:
- UPDATE_PARAM_PROC(params->param2, getState()->time, 450)
+ if (Entity::updateParameter(params->param2, getState()->time, 450)) {
getSavePoints()->push(kEntityBoutarel, kEntityServers1, kAction256200848);
- UPDATE_PARAM_PROC_END
+ }
if (!params->param1)
break;
@@ -959,7 +961,7 @@ IMPLEMENT_FUNCTION(29, Boutarel, function29)
}
}
- TIME_CHECK_CALLBACK_1(kTime2002500, params->param4, 1, setup_function14, true);
+ Entity::timeCheckCallback(kTime2002500, params->param4, 1, true, WRAP_SETUP_FUNCTION_B(Boutarel, setup_function14));
break;
case kActionDefault:
@@ -972,7 +974,7 @@ IMPLEMENT_FUNCTION(29, Boutarel, function29)
break;
case 1:
- TIME_CHECK_CALLBACK_1(kTime2002500, params->param4, 1, setup_function14, true);
+ Entity::timeCheckCallback(kTime2002500, params->param4, 1, true, WRAP_SETUP_FUNCTION_B(Boutarel, setup_function14));
break;
case 2:
@@ -1045,7 +1047,7 @@ IMPLEMENT_FUNCTION(32, Boutarel, chapter4Handler)
break;
case kActionNone:
- TIME_CHECK(kTime2367000, params->param1, setup_function33);
+ Entity::timeCheck(kTime2367000, params->param1, WRAP_SETUP_FUNCTION(Boutarel, setup_function33));
break;
case kActionDefault:
@@ -1063,7 +1065,7 @@ IMPLEMENT_FUNCTION(33, Boutarel, function33)
case kActionNone:
if (params->param1)
- TIME_CHECK_CALLBACK_1(kTime2389500, params->param2, 3, setup_function14, false);
+ Entity::timeCheckCallback(kTime2389500, params->param2, 3, false, WRAP_SETUP_FUNCTION_B(Boutarel, setup_function14));
break;
case kActionDefault:
@@ -1111,7 +1113,8 @@ IMPLEMENT_FUNCTION(34, Boutarel, function34)
break;
case kActionNone:
- TIME_CHECK(kTime2470500, params->param1, setup_function35);
+ if (Entity::timeCheck(kTime2470500, params->param1, WRAP_SETUP_FUNCTION(Boutarel, setup_function35)))
+ break;
if (getState()->time > kTime2457000 && getEvent(kEventAugustDrink)) {
getSavePoints()->push(kEntityBoutarel, kEntityAbbot, kAction159003408);
diff --git a/engines/lastexpress/entities/boutarel.h b/engines/lastexpress/entities/boutarel.h
index 5eb264631c..04838f6527 100644
--- a/engines/lastexpress/entities/boutarel.h
+++ b/engines/lastexpress/entities/boutarel.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_BOUTAREL_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/chapters.cpp b/engines/lastexpress/entities/chapters.cpp
index 4ef2dc50e8..a2f3a3d871 100644
--- a/engines/lastexpress/entities/chapters.cpp
+++ b/engines/lastexpress/entities/chapters.cpp
@@ -63,11 +63,9 @@
#include "lastexpress/game/state.h"
#include "lastexpress/menu/menu.h"
-#include "lastexpress/sound/sound.h"
#include "lastexpress/sound/queue.h"
-#include "lastexpress/helpers.h"
#include "lastexpress/lastexpress.h"
#include "lastexpress/resource.h"
@@ -152,7 +150,7 @@ IMPLEMENT_FUNCTION(5, Chapters, resetMainEntities)
RESET_ENTITY_STATE(kEntityVesna, Vesna, setup_reset);
RESET_ENTITY_STATE(kEntityYasmin, Yasmin, setup_reset);
- CALLBACK_ACTION();
+ callbackAction();
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
@@ -191,7 +189,7 @@ IMPLEMENT_FUNCTION(6, Chapters, chapter1End)
getScenes()->loadScene(kScene41);
- CALLBACK_ACTION();
+ callbackAction();
} else {
getSound()->playSound(kEntityPlayer, "LIB014");
getSound()->playSound(kEntityPlayer, "LIB015", kFlagDefault, 15);
@@ -386,12 +384,6 @@ IMPLEMENT_FUNCTION(7, Chapters, chapter1Init)
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
-#define PLAY_STEAM() { \
- getSoundQueue()->resetState(); \
- getSound()->playSteam((CityIndex)ENTITY_PARAM(0, 4)); \
- ENTITY_PARAM(0, 2) = 0; \
- }
-
IMPLEMENT_FUNCTION(8, Chapters, chapter1Handler)
switch (savepoint.action) {
default:
@@ -401,21 +393,28 @@ IMPLEMENT_FUNCTION(8, Chapters, chapter1Handler)
if (!getProgress().isTrainRunning || getState()->time >= kTime1458000)
goto label_processStations;
- UPDATE_PARAM_PROC(params->param6, getState()->timeTicks, params->param2)
+ if (Entity::updateParameter(params->param6, getState()->timeTicks, params->param2)) {
// Play sound FX
getSound()->playLocomotiveSound();
params->param2 = 225 * (4 * rnd(5) + 20);
params->param6 = 0;
- UPDATE_PARAM_PROC_END
+ }
label_processStations:
// Process stations
- TIME_CHECK_CALLBACK_2(kTime1039500, params->param7, 1, setup_savegame, kSavegameTypeTime, kTimeNone);
+ if (getState()->time > kTime1039500 && !params->param7) {
+ params->param7 = 1;
+ setCallback(1);
+ setup_savegame(kSavegameTypeTime, kTimeNone);
+
+ break;
+ }
label_enter_epernay:
// Entering Epernay station
- TIME_CHECK_CALLBACK_2(kTimeEnterEpernay, params->param8, 1, setup_enterStation, "Epernay", kCityEpernay);
+ if (timeCheckEnterStation(kTimeEnterEpernay, params->param8, 1, "Epernay", kCityEpernay))
+ break;
label_exit_epernay:
// Exiting Epernay station
@@ -445,19 +444,23 @@ label_enter_chalons:
goto label_exit_strasbourg;
// Entering Chalons station
- TIME_CHECK_CALLBACK_2(kTimeEnterChalons, CURRENT_PARAM(1, 3), 5, setup_enterStation, "Chalons", kCityChalons);
+ if (timeCheckEnterStation(kTimeEnterChalons, CURRENT_PARAM(1, 3), 5, "Chalons", kCityChalons))
+ break;
label_exit_chalons:
// Exiting Chalons station
- TIME_CHECK_CALLBACK_1(kTimeExitChalons, CURRENT_PARAM(1, 4), 6, setup_exitStation, "Chalons");
+ if (timeCheckExitStation(kTimeExitChalons, CURRENT_PARAM(1, 4), 6, "Chalons"))
+ break;
label_enter_barleduc:
// Entering Bar-Le-Duc station
- TIME_CHECK_CALLBACK_2(kTimeCityBarLeDuc, CURRENT_PARAM(1, 5), 7, setup_enterStation, "BarLeDuc", kCityBarleduc);
+ if (timeCheckEnterStation(kTimeCityBarLeDuc, CURRENT_PARAM(1, 5), 7, "BarLeDuc", kCityBarleduc))
+ break;
label_exit_barleduc:
// Exiting Bar-Le-Duc station
- TIME_CHECK_CALLBACK_1(kTimeExitBarLeDuc, CURRENT_PARAM(1, 6), 8, setup_exitStation, "BarLeDuc");
+ if (timeCheckExitStation(kTimeExitBarLeDuc, CURRENT_PARAM(1, 6), 8, "BarLeDuc"))
+ break;
label_enter_nancy:
if (getState()->time > kTime1260000 && !CURRENT_PARAM(1, 7)) {
@@ -466,50 +469,67 @@ label_enter_nancy:
}
// Entering Nancy station
- TIME_CHECK_CALLBACK_2(kTimeCityNancy, CURRENT_PARAM(1, 8), 9, setup_enterStation, "Nancy", kCityNancy);
+ if (timeCheckEnterStation(kTimeCityNancy, CURRENT_PARAM(1, 8), 9, "Nancy", kCityNancy))
+ break;
label_exit_nancy:
// Exiting Nancy station
- TIME_CHECK_CALLBACK_1(kTimeExitNancy, CURRENT_PARAM(2, 1), 10, setup_exitStation, "Nancy");
+ if (timeCheckExitStation(kTimeExitNancy, CURRENT_PARAM(2, 1), 10, "Nancy"))
+ break;
label_enter_luneville:
// Entering Luneville station
- TIME_CHECK_CALLBACK_2(kTimeCityLuneville, CURRENT_PARAM(2, 2), 11, setup_enterStation, "Luneville", kCityLuneville);
+ if (timeCheckEnterStation(kTimeCityLuneville, CURRENT_PARAM(2, 2), 11, "Luneville", kCityLuneville))
+ break;
label_exit_luneville:
// Exiting Luneville station
- TIME_CHECK_CALLBACK_1(kTimeExitLuneville, CURRENT_PARAM(2, 3), 12, setup_exitStation, "Luneville");
+ if (timeCheckExitStation(kTimeExitLuneville, CURRENT_PARAM(2, 3), 12, "Luneville"))
+ break;
label_enter_avricourt:
// Entering Avricourt station
- TIME_CHECK_CALLBACK_2(kTimeCityAvricourt, CURRENT_PARAM(2, 4), 13, setup_enterStation, "Avricourt", kCityAvricourt);
+ if (timeCheckEnterStation(kTimeCityAvricourt, CURRENT_PARAM(2, 4), 13, "Avricourt", kCityAvricourt))
+ break;
label_exit_avricourt:
// Exiting Avricourt station
- TIME_CHECK_CALLBACK_1(kTimeExitAvricourt, CURRENT_PARAM(2, 5), 14, setup_exitStation, "Avricourt");
+ if (timeCheckExitStation(kTimeExitAvricourt, CURRENT_PARAM(2, 5), 14, "Avricourt"))
+ break;
label_enter_deutschavricourt:
// Entering Deutsch-Avricourt station
- TIME_CHECK_CALLBACK_2(kTimeCityDeutschAvricourt, CURRENT_PARAM(2, 6), 15, setup_enterStation, "DeutschA", kCityDeutschAvricourt);
+ if (timeCheckEnterStation(kTimeCityDeutschAvricourt, CURRENT_PARAM(2, 6), 15, "DeutschA", kCityDeutschAvricourt))
+ break;
label_exit_deutschavricourt:
// Exiting Avricourt station
- TIME_CHECK_CALLBACK_1(kTimeExitDeutschAvricourt, CURRENT_PARAM(2, 7), 16, setup_exitStation, "DeutschA");
+ if (timeCheckExitStation(kTimeExitDeutschAvricourt, CURRENT_PARAM(2, 7), 16, "DeutschA"))
+ break;
label_enter_strasbourg:
- TIME_CHECK_CALLBACK_2(kTimeCityStrasbourg, CURRENT_PARAM(2, 8), 17, setup_savegame, kSavegameTypeTime, kTimeNone);
+ if (getState()->time > kTimeCityStrasbourg && !CURRENT_PARAM(2, 8)) {
+ CURRENT_PARAM(2, 8) = 1;
+ setCallback(17);
+ setup_savegame(kSavegameTypeTime, kTimeNone);
+
+ break;
+ }
label_exit_strasbourg:
// Exiting Strasbourg station
- TIME_CHECK_CALLBACK_1(kTimeExitStrasbourg, CURRENT_PARAM(3, 1), 19, setup_exitStation, "Strasbou");
+ if (timeCheckExitStation(kTimeExitStrasbourg, CURRENT_PARAM(3, 1), 19, "Strasbou"))
+ break;
label_enter_badenoos:
// Entering Baden Oos station
- TIME_CHECK_CALLBACK_2(kTimeCityBadenOos, CURRENT_PARAM(3, 2), 20, setup_enterStation, "BadenOos", kCityBadenOos);
+ if (timeCheckEnterStation(kTimeCityBadenOos, CURRENT_PARAM(3, 2), 20, "BadenOos", kCityBadenOos))
+ break;
label_exit_badenoos:
// Exiting Baden Oos station
- TIME_CHECK_CALLBACK_1(kTimeExitBadenOos, CURRENT_PARAM(3, 3), 21, setup_exitStation, "BadenOos");
+ if (timeCheckExitStation(kTimeExitBadenOos, CURRENT_PARAM(3, 3), 21, "BadenOos"))
+ break;
label_chapter1_next:
if (getState()->time > kTimeChapter1End3 && ! CURRENT_PARAM(3, 4)) {
@@ -524,43 +544,43 @@ label_chapter1_next:
getSavePoints()->push(kEntityChapters, kEntityTrain, kActionTrainStopRunning);
if (getEntityData(kEntityPlayer)->location != kLocationOutsideTrain) {
- PLAY_STEAM();
+ playSteam();
break;
}
if (getEntities()->isOutsideAlexeiWindow()) {
getScenes()->loadSceneFromPosition(kCarGreenSleeping, 49);
- PLAY_STEAM();
+ playSteam();
break;
}
if (getEntities()->isOutsideAnnaWindow()) {
getScenes()->loadSceneFromPosition(kCarRedSleeping, 49);
- PLAY_STEAM();
+ playSteam();
break;
}
CarIndex car = getEntityData(kEntityPlayer)->car;
if (car < kCarRedSleeping || car > kCarCoalTender) {
if (car < kCarBaggageRear || car > kCarGreenSleeping) {
- PLAY_STEAM();
+ playSteam();
break;
}
if (getEntities()->isPlayerPosition(kCarGreenSleeping, 98)) {
getSound()->playSound(kEntityPlayer, "LIB015");
getScenes()->loadSceneFromPosition(kCarGreenSleeping, 71);
- PLAY_STEAM();
+ playSteam();
break;
}
getScenes()->loadSceneFromPosition(kCarGreenSleeping, 82);
- PLAY_STEAM();
+ playSteam();
break;
}
getScenes()->loadSceneFromPosition(kCarRestaurant, 82);
- PLAY_STEAM();
+ playSteam();
break;
}
@@ -817,7 +837,8 @@ IMPLEMENT_FUNCTION(12, Chapters, chapter2Handler)
if (!getProgress().isTrainRunning)
break;
- UPDATE_PARAM(params->param2, getState()->timeTicks, params->param1);
+ if (!Entity::updateParameter(params->param2, getState()->timeTicks, params->param1))
+ break;
getSound()->playLocomotiveSound();
@@ -903,15 +924,15 @@ IMPLEMENT_FUNCTION(15, Chapters, chapter3Handler)
case kActionNone:
if (getProgress().isTrainRunning) {
- UPDATE_PARAM_PROC(params->param4, getState()->timeTicks, params->param1)
+ if (Entity::updateParameter(params->param4, getState()->timeTicks, params->param1)) {
getSound()->playLocomotiveSound();
params->param1 = 225 * (4 * rnd(5) + 20);
params->param4 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
- UPDATE_PARAM_PROC(params->param5, getState()->timeTicks, params->param2)
+ if (Entity::updateParameter(params->param5, getState()->timeTicks, params->param2)) {
switch (rnd(2)) {
default:
break;
@@ -927,30 +948,38 @@ IMPLEMENT_FUNCTION(15, Chapters, chapter3Handler)
params->param2 = 225 * (4 * rnd(6) + 8);
params->param5 = 0;
- UPDATE_PARAM_PROC_END
+ }
- TIME_CHECK_CALLBACK_2(kTimeEnterSalzbourg, params->param6, 1, setup_enterStation, "Salzburg", kCitySalzbourg);
+ if (timeCheckEnterStation(kTimeEnterSalzbourg, params->param6, 1, "Salzburg", kCitySalzbourg))
+ break;
label_callback_1:
- TIME_CHECK_CALLBACK_1(kTimeExitSalzbourg, params->param7, 2, setup_exitStation, "Salzburg");
+ if (timeCheckExitStation(kTimeExitSalzbourg, params->param7, 2, "Salzburg"))
+ break;
label_callback_2:
- TIME_CHECK_CALLBACK_2(kTimeEnterAttnangPuchheim, params->param8, 3, setup_enterStation, "Attnang", kCityAttnangPuchheim);
+ if (timeCheckEnterStation(kTimeEnterAttnangPuchheim, params->param8, 3, "Attnang", kCityAttnangPuchheim))
+ break;
label_callback_3:
- TIME_CHECK_CALLBACK_1(kTimeExitAttnangPuchheim, CURRENT_PARAM(1, 1), 4, setup_exitStation, "Attnang");
+ if (timeCheckExitStation(kTimeExitAttnangPuchheim, CURRENT_PARAM(1, 1), 4, "Attnang"))
+ break;
label_callback_4:
- TIME_CHECK_CALLBACK_2(kTimeEnterWels, CURRENT_PARAM(1, 2), 5, setup_enterStation, "Wels", kCityWels);
+ if (timeCheckEnterStation(kTimeEnterWels, CURRENT_PARAM(1, 2), 5, "Wels", kCityWels))
+ break;
label_callback_5:
- TIME_CHECK_CALLBACK_1(kTimeEnterWels, CURRENT_PARAM(1, 3), 6, setup_exitStation, "Wels");
+ if (timeCheckExitStation(kTimeEnterWels, CURRENT_PARAM(1, 3), 6, "Wels"))
+ break;
label_callback_6:
- TIME_CHECK_CALLBACK_2(kTimeEnterLinz, CURRENT_PARAM(1, 4), 7, setup_enterStation, "Linz", kCityLinz);
+ if (timeCheckEnterStation(kTimeEnterLinz, CURRENT_PARAM(1, 4), 7, "Linz", kCityLinz))
+ break;
label_callback_7:
- TIME_CHECK_CALLBACK_1(kTimeCityLinz, CURRENT_PARAM(1, 5), 8, setup_exitStation, "Linz");
+ if (timeCheckExitStation(kTimeCityLinz, CURRENT_PARAM(1, 5), 8, "Linz"))
+ break;
label_callback_8:
if (getState()->time > kTime2187000 && !CURRENT_PARAM(1, 6)) {
@@ -958,7 +987,7 @@ label_callback_8:
getState()->timeDelta = 5;
}
- TIME_CHECK_CALLBACK_2(kTimeCityVienna, CURRENT_PARAM(1, 7), 9, setup_enterStation, "Vienna", kCityVienna);
+ timeCheckEnterStation(kTimeCityVienna, CURRENT_PARAM(1, 7), 9, "Vienna", kCityVienna);
break;
case kActionEndSound:
@@ -1202,15 +1231,15 @@ IMPLEMENT_FUNCTION(19, Chapters, chapter4Handler)
case kActionNone:
if (getProgress().isTrainRunning) {
- UPDATE_PARAM_PROC(params->param6, getState()->timeTicks, params->param4);
+ if (Entity::updateParameter(params->param6, getState()->timeTicks, params->param4)) {
getSound()->playLocomotiveSound();
params->param4 = 225 * (4 * rnd(5) + 20);
params->param6 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
- UPDATE_PARAM_PROC(params->param7, getState()->timeTicks, params->param5)
+ if (Entity::updateParameter(params->param7, getState()->timeTicks, params->param5)) {
switch (rnd(2)) {
default:
break;
@@ -1226,12 +1255,14 @@ IMPLEMENT_FUNCTION(19, Chapters, chapter4Handler)
params->param5 = 225 * (4 * rnd(6) + 8);
params->param7 = 0;
- UPDATE_PARAM_PROC_END
+ }
- TIME_CHECK_CALLBACK_2(kTimeEnterPoszony, params->param8, 1, setup_enterStation, "Pozsony", kCityPoszony);
+ if (timeCheckEnterStation(kTimeEnterPoszony, params->param8, 1, "Pozsony", kCityPoszony))
+ break;
label_exitPozsony:
- TIME_CHECK_CALLBACK_1(kTimeExitPoszony, CURRENT_PARAM(1, 1), 2, setup_exitStation, "Pozsony");
+ if (timeCheckExitStation(kTimeExitPoszony, CURRENT_PARAM(1, 1), 2, "Pozsony"))
+ break;
label_enterGalanta:
if (getObjects()->get(kObjectCompartment1).location2 == kObjectLocation1) {
@@ -1244,10 +1275,12 @@ label_enterGalanta:
if (params->param1)
goto label_callback_4;
- TIME_CHECK_CALLBACK_2(kTimeEnterGalanta, CURRENT_PARAM(1, 3), 3, setup_enterStation, "Galanta", kCityGalanta);
+ if (timeCheckEnterStation(kTimeEnterGalanta, CURRENT_PARAM(1, 3), 3, "Galanta", kCityGalanta))
+ break;
label_exitGalanta:
- TIME_CHECK_CALLBACK_1(kTimeExitGalanta, CURRENT_PARAM(1, 4), 4, setup_exitStation, "Galanta");
+ if (timeCheckExitStation(kTimeExitGalanta, CURRENT_PARAM(1, 4), 4, "Galanta"))
+ break;
label_callback_4:
if (getState()->time > kTime2470500 && !CURRENT_PARAM(1, 5)) {
@@ -1280,43 +1313,43 @@ label_callback_4:
getSavePoints()->push(kEntityChapters, kEntityTrain, kActionTrainStopRunning);
if (getEntityData(kEntityPlayer)->location != kLocationOutsideTrain) {
- PLAY_STEAM();
+ playSteam();
break;
}
if (getEntities()->isOutsideAlexeiWindow()) {
getScenes()->loadSceneFromPosition(kCarGreenSleeping, 49);
- PLAY_STEAM();
+ playSteam();
break;
}
if (getEntities()->isOutsideAnnaWindow()) {
getScenes()->loadSceneFromPosition(kCarRedSleeping, 49);
- PLAY_STEAM();
+ playSteam();
break;
}
CarIndex car = getEntityData(kEntityPlayer)->car;
if (car < kCarRedSleeping || car > kCarCoalTender) {
if (car < kCarBaggageRear || car > kCarGreenSleeping) {
- PLAY_STEAM();
+ playSteam();
break;
}
if (getEntities()->isPlayerPosition(kCarGreenSleeping, 98)) {
getSound()->playSound(kEntityPlayer, "LIB015");
getScenes()->loadSceneFromPosition(kCarGreenSleeping, 71);
- PLAY_STEAM();
+ playSteam();
break;
}
getScenes()->loadSceneFromPosition(kCarGreenSleeping, 82);
- PLAY_STEAM();
+ playSteam();
break;
}
getScenes()->loadSceneFromPosition(kCarRestaurant, 82);
- PLAY_STEAM();
+ playSteam();
break;
}
@@ -1815,7 +1848,37 @@ void Chapters::enterExitHelper(bool isEnteringStation) {
ENTITY_PARAM(0, 3) = 1;
}
- CALLBACK_ACTION();
+ callbackAction();
+}
+
+void Chapters::playSteam() {
+ getSoundQueue()->resetState();
+ getSound()->playSteam((CityIndex)ENTITY_PARAM(0, 4));
+ ENTITY_PARAM(0, 2) = 0;
+}
+
+bool Chapters::timeCheckEnterStation(TimeValue timeValue, uint &parameter, byte callback, const char *sequence, CityIndex cityIndex) {
+ if (getState()->time > timeValue && !parameter) {
+ parameter = 1;
+ setCallback(callback);
+ setup_enterStation(sequence, cityIndex);
+
+ return true;
+ }
+
+ return false;
+}
+
+bool Chapters::timeCheckExitStation(TimeValue timeValue, uint &parameter, byte callback, const char *sequence) {
+ if (getState()->time > timeValue && !parameter) {
+ parameter = 1;
+ setCallback(callback);
+ setup_exitStation(sequence);
+
+ return true;
+ }
+
+ return false;
}
} // End of namespace LastExpress
diff --git a/engines/lastexpress/entities/chapters.h b/engines/lastexpress/entities/chapters.h
index 353d3a6b5b..ddb3de3bea 100644
--- a/engines/lastexpress/entities/chapters.h
+++ b/engines/lastexpress/entities/chapters.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_CHAPTERS_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
@@ -154,8 +153,11 @@ public:
DECLARE_FUNCTION(chapter5Handler)
private:
+ bool timeCheckEnterStation(TimeValue timeValue, uint &parameter, byte callback, const char *sequence, CityIndex cityIndex);
+ bool timeCheckExitStation(TimeValue timeValue, uint &parameter, byte callback, const char *sequence);
void enterExitStation(const SavePoint &savepoint, bool isEnteringStation);
void enterExitHelper(bool isEnteringStation);
+ void playSteam();
};
} // End of namespace LastExpress
diff --git a/engines/lastexpress/entities/cooks.cpp b/engines/lastexpress/entities/cooks.cpp
index 42e888cc7c..5e8a2df8cb 100644
--- a/engines/lastexpress/entities/cooks.cpp
+++ b/engines/lastexpress/entities/cooks.cpp
@@ -29,9 +29,7 @@
#include "lastexpress/game/state.h"
#include "lastexpress/sound/queue.h"
-#include "lastexpress/sound/sound.h"
-#include "lastexpress/helpers.h"
#include "lastexpress/lastexpress.h"
namespace LastExpress {
@@ -96,7 +94,7 @@ IMPLEMENT_FUNCTION(3, Cooks, function3)
case kActionDrawScene:
if (!getEntities()->isInKitchen(kEntityPlayer)) {
getEntities()->clearSequences(kEntityCooks);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
@@ -108,7 +106,7 @@ IMPLEMENT_FUNCTION(3, Cooks, function3)
if (!getEntities()->hasValidFrame(kEntityCooks)) {
getSound()->playSound(kEntityCooks, "LIB015");
getEntities()->clearSequences(kEntityCooks);
- CALLBACK_ACTION();
+ callbackAction();
}
break;
}
@@ -122,7 +120,7 @@ IMPLEMENT_FUNCTION(3, Cooks, function3)
if (params->param1 && !getEntities()->hasValidFrame(kEntityCooks)) {
getSound()->playSound(kEntityCooks, "LIB015");
getEntities()->clearSequences(kEntityCooks);
- CALLBACK_ACTION();
+ callbackAction();
}
break;
@@ -182,7 +180,7 @@ IMPLEMENT_FUNCTION(4, Cooks, function4)
case kActionDrawScene:
if (!getEntities()->isInKitchen(kEntityPlayer)) {
getEntities()->clearSequences(kEntityCooks);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
@@ -194,7 +192,7 @@ IMPLEMENT_FUNCTION(4, Cooks, function4)
if (!getEntities()->hasValidFrame(kEntityCooks)) {
getSound()->playSound(kEntityCooks, "LIB015");
getEntities()->clearSequences(kEntityCooks);
- CALLBACK_ACTION();
+ callbackAction();
}
break;
}
@@ -208,7 +206,7 @@ IMPLEMENT_FUNCTION(4, Cooks, function4)
if (params->param1 && !getEntities()->hasValidFrame(kEntityCooks)) {
getSound()->playSound(kEntityCooks, "LIB015");
getEntities()->clearSequences(kEntityCooks);
- CALLBACK_ACTION();
+ callbackAction();
}
break;
@@ -241,7 +239,7 @@ IMPLEMENT_FUNCTION(5, Cooks, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Cooks, setup_chapter1Handler));
break;
case kActionDefault:
@@ -262,7 +260,8 @@ IMPLEMENT_FUNCTION(6, Cooks, chapter1Handler)
break;
case kActionNone:
- UPDATE_PARAM(params->param4, getState()->time, params->param2);
+ if (!Entity::updateParameter(params->param4, getState()->time, params->param2))
+ break;
// Broken plate sound
getSound()->playSound(kEntityPlayer, "LIB122", getSound()->getSoundFlag(kEntityCooks));
@@ -375,7 +374,8 @@ IMPLEMENT_FUNCTION(9, Cooks, chapter2Handler)
break;
case kActionNone:
- UPDATE_PARAM(params->param3, getState()->time, params->param1);
+ if (!Entity::updateParameter(params->param3, getState()->time, params->param1))
+ break;
// Broken plate sound
getSound()->playSound(kEntityPlayer, "LIB122", getSound()->getSoundFlag(kEntityCooks));
@@ -434,12 +434,12 @@ IMPLEMENT_FUNCTION(11, Cooks, chapter3Handler)
break;
case kActionNone:
- UPDATE_PARAM_PROC(params->param4, getState()->time, params->param2)
+ if (Entity::updateParameter(params->param4, getState()->time, params->param2)) {
// Broken plate sound
getSound()->playSound(kEntityPlayer, "LIB122", getSound()->getSoundFlag(kEntityCooks));
params->param2 = 225 * (4 * rnd(30) + 120);
params->param4 = 0;
- UPDATE_PARAM_PROC_END
+ }
if (getState()->time > kTime2079000 && !params->param5) {
params->param1 = 0;
@@ -526,7 +526,8 @@ IMPLEMENT_FUNCTION(13, Cooks, chapter4Handler)
break;
case kActionNone:
- UPDATE_PARAM(params->param3, getState()->time, params->param1)
+ if (!Entity::updateParameter(params->param3, getState()->time, params->param1))
+ break;
// Broken plate sound
getSound()->playSound(kEntityPlayer, "LIB122", getSound()->getSoundFlag(kEntityCooks));
diff --git a/engines/lastexpress/entities/cooks.h b/engines/lastexpress/entities/cooks.h
index 3ab7d35161..f01d0b2ca0 100644
--- a/engines/lastexpress/entities/cooks.h
+++ b/engines/lastexpress/entities/cooks.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_COOKS_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/coudert.cpp b/engines/lastexpress/entities/coudert.cpp
index c3e7e37b88..b604277903 100644
--- a/engines/lastexpress/entities/coudert.cpp
+++ b/engines/lastexpress/entities/coudert.cpp
@@ -32,22 +32,11 @@
#include "lastexpress/game/state.h"
#include "lastexpress/sound/queue.h"
-#include "lastexpress/sound/sound.h"
-#include "lastexpress/helpers.h"
#include "lastexpress/lastexpress.h"
namespace LastExpress {
-#define SAVEGAME_BLOOD_JACKET() \
- if (getProgress().jacket == kJacketBlood \
- && getEntities()->isDistanceBetweenEntities(kEntityCoudert, kEntityPlayer, 1000) \
- && !getEntities()->isInsideCompartments(kEntityPlayer) \
- && !getEntities()->checkFields10(kEntityPlayer)) { \
- setCallback(1); \
- setup_savegame(kSavegameTypeEvent, kEventMertensBloodJacket); \
- }
-
Coudert::Coudert(LastExpressEngine *engine) : Entity(engine, kEntityCoudert) {
ADD_CALLBACK_FUNCTION(Coudert, reset);
ADD_CALLBACK_FUNCTION(Coudert, bloodJacket);
@@ -126,11 +115,11 @@ IMPLEMENT_FUNCTION_S(2, Coudert, bloodJacket)
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
break;
case kActionExitCompartment:
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionDefault:
@@ -153,7 +142,7 @@ IMPLEMENT_FUNCTION_SI(3, Coudert, enterExitCompartment, ObjectIndex)
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
return;
case kActionCallback:
@@ -175,15 +164,15 @@ IMPLEMENT_FUNCTION(4, Coudert, callbackActionOnDirection)
case kActionNone:
if (getData()->direction != kDirectionRight) {
- CALLBACK_ACTION();
+ callbackAction();
break;
}
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
break;
case kActionExitCompartment:
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionCallback:
@@ -202,7 +191,7 @@ IMPLEMENT_FUNCTION_SIII(5, Coudert, enterExitCompartment2, ObjectIndex, EntityPo
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
return;
case kActionCallback:
@@ -223,11 +212,11 @@ IMPLEMENT_FUNCTION_S(6, Coudert, playSound)
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
break;
case kActionEndSound:
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionDefault:
@@ -252,11 +241,11 @@ IMPLEMENT_FUNCTION_NOSETUP(7, Coudert, playSound16)
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
break;
case kActionEndSound:
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionDefault:
@@ -296,7 +285,7 @@ IMPLEMENT_FUNCTION_II(9, Coudert, updateEntity, CarIndex, EntityPosition)
if (getEntities()->updateEntity(kEntityCoudert, (CarIndex)params->param1, (EntityPosition)params->param2)) {
getData()->inventoryItem = kItemNone;
- CALLBACK_ACTION();
+ callbackAction();
}
break;
}
@@ -332,7 +321,7 @@ IMPLEMENT_FUNCTION_II(9, Coudert, updateEntity, CarIndex, EntityPosition)
params->param3 = kItemInvalid;
if (getEntities()->updateEntity(kEntityCoudert, (CarIndex)params->param1, (EntityPosition)params->param2))
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionCallback:
@@ -365,11 +354,12 @@ IMPLEMENT_FUNCTION_I(10, Coudert, updateFromTime, uint32)
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
- UPDATE_PARAM(params->param2, getState()->time, params->param1);
+ if (!Entity::updateParameter(params->param2, getState()->time, params->param1))
+ break;
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionCallback:
@@ -388,11 +378,12 @@ IMPLEMENT_FUNCTION_I(11, Coudert, updateFromTicks, uint32)
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
- UPDATE_PARAM(params->param2, getState()->timeTicks, params->param1);
+ if (!Entity::updateParameter(params->param2, getState()->timeTicks, params->param1))
+ break;
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionCallback:
@@ -412,7 +403,7 @@ IMPLEMENT_FUNCTION_I(12, Coudert, excuseMe, EntityIndex)
return;
if (getSoundQueue()->isBuffered(kEntityCoudert)) {
- CALLBACK_ACTION();
+ callbackAction();
return;
}
@@ -452,7 +443,7 @@ IMPLEMENT_FUNCTION_I(12, Coudert, excuseMe, EntityIndex)
getSound()->playSound(kEntityCoudert, "JAC1112E");
}
- CALLBACK_ACTION();
+ callbackAction();
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
@@ -462,7 +453,7 @@ IMPLEMENT_FUNCTION_II(13, Coudert, function13, bool, EntityIndex)
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
if (!params->param2 && !params->param3) {
@@ -487,7 +478,8 @@ IMPLEMENT_FUNCTION_II(13, Coudert, function13, bool, EntityIndex)
}
}
- UPDATE_PARAM(params->param5, getState()->timeTicks, 225);
+ if (!Entity::updateParameter(params->param5, getState()->timeTicks, 225))
+ break;
getData()->inventoryItem = kItemNone;
setCallback(5);
@@ -561,7 +553,7 @@ IMPLEMENT_FUNCTION_II(13, Coudert, function13, bool, EntityIndex)
case 5:
case 6:
case 7:
- CALLBACK_ACTION();
+ callbackAction();
break;
case 9:
@@ -584,7 +576,7 @@ IMPLEMENT_FUNCTION_I(14, Coudert, function14, EntityIndex)
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
break;
case kActionDefault:
@@ -629,7 +621,7 @@ IMPLEMENT_FUNCTION_I(14, Coudert, function14, EntityIndex)
break;
case 5:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -706,7 +698,7 @@ IMPLEMENT_FUNCTION_I(15, Coudert, function15, bool)
break;
case 5:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -724,7 +716,7 @@ IMPLEMENT_FUNCTION(16, Coudert, function16)
ENTITY_PARAM(2, 1) = 0;
getInventory()->setLocationAndProcess(kItem5, kObjectLocation1);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
@@ -743,7 +735,7 @@ IMPLEMENT_FUNCTION(16, Coudert, function16)
if (!getEntities()->isPlayerPosition(kCarRedSleeping, 2))
getData()->entityPosition = kPosition_2088;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -761,7 +753,7 @@ IMPLEMENT_FUNCTION_I(17, Coudert, function17, bool)
if (ENTITY_PARAM(2, 1)) {
ENTITY_PARAM(2, 1) = 0;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
@@ -789,7 +781,7 @@ IMPLEMENT_FUNCTION_I(17, Coudert, function17, bool)
case 1:
case 2:
case 3:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -817,7 +809,7 @@ IMPLEMENT_FUNCTION(18, Coudert, function18)
getEntities()->drawSequenceLeft(kEntityCoudert, "627K");
getScenes()->loadSceneFromItemPosition(kItem5);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
@@ -849,7 +841,7 @@ IMPLEMENT_FUNCTION(18, Coudert, function18)
break;
case 2:
- CALLBACK_ACTION();
+ callbackAction();
break;
case 3:
@@ -857,7 +849,7 @@ IMPLEMENT_FUNCTION(18, Coudert, function18)
ENTITY_PARAM(0, 1) = 0;
getSavePoints()->push(kEntityCoudert, kEntityCoudert, kActionDrawScene);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -876,14 +868,14 @@ IMPLEMENT_FUNCTION_I(19, Coudert, function19, bool)
|| ENTITY_PARAM(2, 4) || ENTITY_PARAM(2, 6)) {
getInventory()->setLocationAndProcess(kItem5, kObjectLocation1);
ENTITY_PARAM(2, 1) = 1;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
if (ENTITY_PARAM(0, 3) || ENTITY_PARAM(0, 5) || ENTITY_PARAM(0, 4)) {
getScenes()->loadSceneFromItemPosition(kItem5);
ENTITY_PARAM(2, 1) = 1;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
@@ -903,7 +895,7 @@ IMPLEMENT_FUNCTION_I(19, Coudert, function19, bool)
getEntities()->drawSequenceLeft(kEntityCoudert, ENTITY_PARAM(0, 2) ? "627B" : "627E");
ENTITY_PARAM(0, 1) = 0;
- CALLBACK_ACTION();
+ callbackAction();
}
break;
}
@@ -916,11 +908,12 @@ IMPLEMENT_FUNCTION_II(20, Coudert, function20, ObjectIndex, ObjectIndex)
break;
case kActionNone:
- UPDATE_PARAM_PROC(CURRENT_PARAM(1, 3), getState()->time, 300)
+ if (Entity::updateParameter(CURRENT_PARAM(1, 3), getState()->time, 300)) {
getSound()->playSound(kEntityPlayer, "ZFX1004", getSound()->getSoundFlag(kEntityCoudert));
- UPDATE_PARAM_PROC_END
+ }
- UPDATE_PARAM(CURRENT_PARAM(1, 4), getState()->time, 900);
+ if (!Entity::updateParameter(CURRENT_PARAM(1, 4), getState()->time, 900))
+ break;
getObjects()->updateLocation2((ObjectIndex)params->param1, kObjectLocation1);
@@ -930,7 +923,7 @@ IMPLEMENT_FUNCTION_II(20, Coudert, function20, ObjectIndex, ObjectIndex)
if (params->param2)
getObjects()->update((ObjectIndex)params->param2, (EntityIndex)params->param7, (ObjectLocation)params->param8, (CursorStyle)CURRENT_PARAM(1, 1), (CursorStyle)CURRENT_PARAM(1, 2));
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionKnock:
@@ -999,7 +992,8 @@ IMPLEMENT_FUNCTION(21, Coudert, function21)
case kActionNone:
if (!params->param1) {
- UPDATE_PARAM(params->param2, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param2, getState()->timeTicks, 75))
+ break;
setCallback(3);
setup_enterExitCompartment("627Zh", kObjectCompartmentH);
@@ -1044,7 +1038,7 @@ IMPLEMENT_FUNCTION(21, Coudert, function21)
case 5:
getData()->location = kLocationOutsideCompartment;
- CALLBACK_ACTION();
+ callbackAction();
break;
case 6:
@@ -1073,7 +1067,7 @@ IMPLEMENT_FUNCTION(21, Coudert, function21)
getData()->location = kLocationOutsideCompartment;
getSavePoints()->push(kEntityCoudert, kEntityIvo, kAction123852928);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -1100,7 +1094,8 @@ IMPLEMENT_FUNCTION(22, Coudert, function22)
case kActionNone:
if (!params->param1) {
- UPDATE_PARAM(params->param2, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param2, getState()->timeTicks, 75))
+ break;
setCallback(3);
setup_enterExitCompartment("627Rg", kObjectCompartmentG);
@@ -1145,7 +1140,7 @@ IMPLEMENT_FUNCTION(22, Coudert, function22)
case 5:
getData()->location = kLocationOutsideCompartment;
- CALLBACK_ACTION();
+ callbackAction();
break;
case 6:
@@ -1174,7 +1169,7 @@ IMPLEMENT_FUNCTION(22, Coudert, function22)
getData()->location = kLocationOutsideCompartment;
getSavePoints()->push(kEntityCoudert, kEntityMilos, kAction123852928);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -1225,7 +1220,7 @@ IMPLEMENT_FUNCTION(23, Coudert, function23)
case 3:
getEntities()->exitCompartment(kEntityCoudert, kObjectCompartmentF, true);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -1296,7 +1291,7 @@ IMPLEMENT_FUNCTION(25, Coudert, function25)
getData()->location = kLocationOutsideCompartment;
getSavePoints()->push(kEntityCoudert, kEntityRebecca, kAction123852928);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -1311,7 +1306,8 @@ IMPLEMENT_FUNCTION(26, Coudert, function26)
case kActionNone:
if (params->param1) {
- UPDATE_PARAM(params->param2, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param2, getState()->timeTicks, 75))
+ break;
setCallback(3);
setup_enterExitCompartment2("627Zd", kObjectCompartmentD, kPosition_5790, kPosition_6130);
@@ -1357,7 +1353,7 @@ IMPLEMENT_FUNCTION(26, Coudert, function26)
case 5:
getData()->location = kLocationOutsideCompartment;
- CALLBACK_ACTION();
+ callbackAction();
break;
case 6:
@@ -1375,7 +1371,7 @@ IMPLEMENT_FUNCTION(26, Coudert, function26)
getData()->location = kLocationOutsideCompartment;
getSavePoints()->push(kEntityCoudert, kEntityMmeBoutarel, kAction123852928);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -1402,7 +1398,8 @@ IMPLEMENT_FUNCTION(27, Coudert, function27)
case kActionNone:
if (!params->param1) {
- UPDATE_PARAM(params->param2, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param2, getState()->timeTicks, 75))
+ break;
setCallback(3);
setup_enterExitCompartment2("627Rc", kObjectCompartmentC, kPosition_6470, kPosition_6130);
@@ -1446,7 +1443,7 @@ IMPLEMENT_FUNCTION(27, Coudert, function27)
case 5:
getData()->location = kLocationOutsideCompartment;
- CALLBACK_ACTION();
+ callbackAction();
break;
case 6:
@@ -1473,7 +1470,7 @@ IMPLEMENT_FUNCTION(27, Coudert, function27)
getData()->location = kLocationOutsideCompartment;
getSavePoints()->push(kEntityCoudert, kEntityBoutarel, kAction123852928);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -1515,7 +1512,7 @@ IMPLEMENT_FUNCTION_I(30, Coudert, function30, ObjectIndex)
case kActionDefault:
switch (parameters->param1) {
default:
- CALLBACK_ACTION();
+ callbackAction();
// Stop processing here
return;
@@ -1615,7 +1612,7 @@ IMPLEMENT_FUNCTION_I(30, Coudert, function30, ObjectIndex)
break;
case 6:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -1654,7 +1651,7 @@ IMPLEMENT_FUNCTION_I(31, Coudert, function31, uint32)
case 2:
case 3:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -1699,7 +1696,7 @@ IMPLEMENT_FUNCTION(32, Coudert, function32)
break;
case 5:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -1726,7 +1723,7 @@ IMPLEMENT_FUNCTION(33, Coudert, function33)
setup_updateEntity(kCarRedSleeping, kPosition_540);
}
} else {
- CALLBACK_ACTION();
+ callbackAction();
}
break;
@@ -1763,7 +1760,7 @@ IMPLEMENT_FUNCTION(33, Coudert, function33)
case 4:
ENTITY_PARAM(2, 6) = 0;
- CALLBACK_ACTION();
+ callbackAction();
break;
case 5:
@@ -1808,7 +1805,7 @@ IMPLEMENT_FUNCTION(33, Coudert, function33)
case 10:
ENTITY_PARAM(2, 6) = 0;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -1882,7 +1879,7 @@ IMPLEMENT_FUNCTION_I(34, Coudert, function34, bool)
break;
case 7:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -1902,7 +1899,8 @@ IMPLEMENT_FUNCTION_I(35, Coudert, function35, bool)
getScenes()->loadSceneFromPosition(kCarRestaurant, 65);
}
- UPDATE_PARAM(params->param2, getState()->time, 2700);
+ if (!Entity::updateParameter(params->param2, getState()->time, 2700))
+ break;
getSavePoints()->push(kEntityCoudert, kEntityMax, kActionMaxFreeFromCage);
@@ -1951,7 +1949,7 @@ IMPLEMENT_FUNCTION_I(35, Coudert, function35, bool)
break;
case 4:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -1965,7 +1963,7 @@ IMPLEMENT_FUNCTION(36, Coudert, chapter1)
break;
case kActionNone:
- TIME_CHECK_CALLBACK(kTimeChapter1, params->param1, 1, setup_chapter1Handler)
+ Entity::timeCheckCallback(kTimeChapter1, params->param1, 1, WRAP_SETUP_FUNCTION(Coudert, setup_chapter1Handler));
break;
case kActionDefault:
@@ -2174,7 +2172,7 @@ IMPLEMENT_FUNCTION(39, Coudert, function39)
getSavePoints()->push(kEntityCoudert, kEntityVerges, kAction167854368);
ENTITY_PARAM(2, 2) = 0;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -2283,22 +2281,22 @@ label_callback_9:
label_callback_10:
if (getState()->time > kTime1189800 && !ENTITY_PARAM(0, 1) && !ENTITY_PARAM(2, 1)) {
- UPDATE_PARAM_PROC(params->param3, getState()->time, 2700);
+ if (Entity::updateParameter(params->param3, getState()->time, 2700)) {
ENTITY_PARAM(0, 2) = 1;
ENTITY_PARAM(0, 1) = 1;
getEntities()->drawSequenceLeft(kEntityCoudert, "697F");
params->param3 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (!ENTITY_PARAM(0, 2))
break;
- TIME_CHECK_OBJECT(kTime1107000, params->param4, kObject111, kObjectLocation2);
- TIME_CHECK_OBJECT(kTime1161000, params->param5, kObject111, kObjectLocation3);
- TIME_CHECK_OBJECT(kTime1206000, params->param6, kObject111, kObjectLocation4);
+ timeCheckObject(kTime1107000, params->param4, kObject111, kObjectLocation2);
+ timeCheckObject(kTime1161000, params->param5, kObject111, kObjectLocation3);
+ timeCheckObject(kTime1206000, params->param6, kObject111, kObjectLocation4);
break;
case kAction1:
@@ -2536,7 +2534,7 @@ IMPLEMENT_FUNCTION(41, Coudert, function41)
case 18:
getSavePoints()->push(kEntityCoudert, kEntityMilos, kAction208228224);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -2827,28 +2825,34 @@ label_callback_12:
}
label_callback_13:
- TIME_CHECK_CALLBACK(kTime2088900, params->param1, 14, setup_function32);
+ if (Entity::timeCheckCallback(kTime2088900, params->param1, 14, WRAP_SETUP_FUNCTION(Coudert, setup_function32)))
+ break;
label_callback_14:
- TIME_CHECK_CALLBACK(kTime2119500, params->param2, 15, setup_function32);
+ if (Entity::timeCheckCallback(kTime2119500, params->param2, 15, WRAP_SETUP_FUNCTION(Coudert, setup_function32)))
+ break;
label_callback_15:
- TIME_CHECK_CALLBACK(kTime2138400, params->param3, 16, setup_function32);
+ if (Entity::timeCheckCallback(kTime2138400, params->param3, 16, WRAP_SETUP_FUNCTION(Coudert, setup_function32)))
+ break;
label_callback_16:
- TIME_CHECK_CALLBACK(kTime2147400, params->param4, 17, setup_function32);
+ if (Entity::timeCheckCallback(kTime2147400, params->param4, 17, WRAP_SETUP_FUNCTION(Coudert, setup_function32)))
+ break;
label_callback_17:
- TIME_CHECK_CALLBACK(kTime2160000, params->param5, 18, setup_function32);
+ if (Entity::timeCheckCallback(kTime2160000, params->param5, 18, WRAP_SETUP_FUNCTION(Coudert, setup_function32)))
+ break;
label_callback_18:
- TIME_CHECK_CALLBACK(kTime2205000, params->param6, 19, setup_function32);
+ if (Entity::timeCheckCallback(kTime2205000, params->param6, 19, WRAP_SETUP_FUNCTION(Coudert, setup_function32)))
+ break;
label_callback_19:
if (ENTITY_PARAM(0, 2)) {
- TIME_CHECK_OBJECT(kTime2025000, params->param7, kObject111, kObjectLocation7);
- TIME_CHECK_OBJECT(kTime2133000, params->param8, kObject111, kObjectLocation8);
- TIME_CHECK_OBJECT(kTime2173500, CURRENT_PARAM(1, 1), kObject111, kObjectLocation9);
+ timeCheckObject(kTime2025000, params->param7, kObject111, kObjectLocation7);
+ timeCheckObject(kTime2133000, params->param8, kObject111, kObjectLocation8);
+ timeCheckObject(kTime2173500, CURRENT_PARAM(1, 1), kObject111, kObjectLocation9);
}
break;
@@ -3051,7 +3055,7 @@ IMPLEMENT_FUNCTION(46, Coudert, function46)
break;
case 11:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -3116,7 +3120,7 @@ IMPLEMENT_FUNCTION_I(47, Coudert, function47, bool)
break;
case 7:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -3164,7 +3168,7 @@ IMPLEMENT_FUNCTION(48, Coudert, function48)
break;
case 5:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -3261,7 +3265,7 @@ IMPLEMENT_FUNCTION(49, Coudert, function49)
break;
case 11:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -3347,7 +3351,7 @@ IMPLEMENT_FUNCTION(50, Coudert, function50)
break;
case 9:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -3541,11 +3545,11 @@ label_callback_1:
params->param2 = (uint)(getState()->time + 4500);
if (params->param3 != kTimeInvalid) {
- UPDATE_PARAM_PROC_TIME(params->param2, !getEntities()->isPlayerInCar(kCarRedSleeping), params->param3, 0)
+ if (Entity::updateParameterTime((TimeValue)params->param2, !getEntities()->isPlayerInCar(kCarRedSleeping), params->param3, 0)) {
setCallback(2);
setup_function55();
break;
- UPDATE_PARAM_PROC_END
+ }
}
}
@@ -3558,18 +3562,22 @@ label_callback_2:
label_callback_3:
if (!params->param1) {
- TIME_CHECK_CALLBACK(kTime2394000, params->param4, 4, setup_function56);
+ if (Entity::timeCheckCallback(kTime2394000, params->param4, 4, WRAP_SETUP_FUNCTION(Coudert, setup_function56)))
+ break;
label_callback_4:
- TIME_CHECK_CALLBACK(kTime2434500, params->param5, 5, setup_function32);
+ if (Entity::timeCheckCallback(kTime2434500, params->param5, 5, WRAP_SETUP_FUNCTION(Coudert, setup_function32)))
+ break;
label_callback_5:
- TIME_CHECK_CALLBACK(kTime2448000, params->param6, 6, setup_function32);
+ if (Entity::timeCheckCallback(kTime2448000, params->param6, 6, WRAP_SETUP_FUNCTION(Coudert, setup_function32)))
+ break;
}
label_callback_6:
if (getState()->time > kTime2538000 && !ENTITY_PARAM(0, 1) && !ENTITY_PARAM(2, 1)) {
- UPDATE_PARAM(params->param7, getState()->time, 2700);
+ if (!Entity::updateParameter(params->param7, getState()->time, 2700))
+ break;
ENTITY_PARAM(0, 2) = 0;
ENTITY_PARAM(0, 1) = 1;
@@ -3696,7 +3704,7 @@ IMPLEMENT_FUNCTION(54, Coudert, function54)
break;
case 3:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -3764,7 +3772,7 @@ IMPLEMENT_FUNCTION(55, Coudert, function55)
break;
case 7:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -3868,7 +3876,7 @@ IMPLEMENT_FUNCTION(56, Coudert, function56)
break;
case 16:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -4034,7 +4042,8 @@ IMPLEMENT_FUNCTION(62, Coudert, function62)
case kActionNone:
if (params->param1) {
- UPDATE_PARAM(params->param4, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param4, getState()->timeTicks, 75))
+ break;
params->param1 = 0;
params->param2 = 1;
@@ -4168,7 +4177,7 @@ void Coudert::visitCompartment(const SavePoint &savepoint, EntityPosition positi
case 6:
getData()->location = kLocationOutsideCompartment;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
diff --git a/engines/lastexpress/entities/coudert.h b/engines/lastexpress/entities/coudert.h
index 45d13ce9bb..8303c80a32 100644
--- a/engines/lastexpress/entities/coudert.h
+++ b/engines/lastexpress/entities/coudert.h
@@ -24,8 +24,6 @@
#define LASTEXPRESS_COUDERT_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
-
namespace LastExpress {
class LastExpressEngine;
diff --git a/engines/lastexpress/entities/entity.cpp b/engines/lastexpress/entities/entity.cpp
index e136ca4776..4b1fda9c12 100644
--- a/engines/lastexpress/entities/entity.cpp
+++ b/engines/lastexpress/entities/entity.cpp
@@ -22,23 +22,13 @@
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
-
#include "lastexpress/data/sequence.h"
#include "lastexpress/game/action.h"
#include "lastexpress/game/entities.h"
-#include "lastexpress/game/logic.h"
-#include "lastexpress/game/scenes.h"
-#include "lastexpress/game/state.h"
+#include "lastexpress/game/object.h"
#include "lastexpress/game/savegame.h"
-#include "lastexpress/game/savepoint.h"
-#include "lastexpress/game/state.h"
-
-#include "lastexpress/sound/sound.h"
-
-#include "lastexpress/helpers.h"
-#include "lastexpress/lastexpress.h"
+#include "lastexpress/game/scenes.h"
namespace LastExpress {
@@ -55,6 +45,17 @@ EntityData::EntityCallData::~EntityCallData() {
SAFE_DELETE(sequence3);
}
+void EntityData::EntityCallData::syncString(Common::Serializer &s, Common::String &string, int length) {
+ char seqName[13];
+ memset(&seqName, 0, length);
+
+ if (s.isSaving()) strcpy((char *)&seqName, string.c_str());
+ s.syncBytes((byte *)&seqName, length);
+
+ if (s.isLoading())
+ string = seqName;
+}
+
void EntityData::EntityCallData::saveLoadWithSerializer(Common::Serializer &s) {
for (uint i = 0; i < ARRAYSIZE(callbacks); i++)
s.syncAsByte(callbacks[i]);
@@ -81,20 +82,10 @@ void EntityData::EntityCallData::saveLoadWithSerializer(Common::Serializer &s) {
s.syncAsByte(directionSwitch);
// Sync strings
-#define SYNC_STRING(varName, count) { \
- char seqName[13]; \
- memset(&seqName, 0, count); \
- if (s.isSaving()) strcpy((char *)&seqName, varName.c_str()); \
- s.syncBytes((byte *)&seqName, count); \
- if (s.isLoading()) varName = seqName; \
-}
-
- SYNC_STRING(sequenceName, 13);
- SYNC_STRING(sequenceName2, 13);
- SYNC_STRING(sequenceNamePrefix, 7);
- SYNC_STRING(sequenceNameCopy, 13);
-
-#undef SYNC_STRING
+ syncString(s, sequenceName, 13);
+ syncString(s, sequenceName2, 13);
+ syncString(s, sequenceNamePrefix, 7);
+ syncString(s, sequenceNameCopy, 13);
// Skip pointers to frame & sequences
s.skip(5 * 4);
@@ -246,16 +237,38 @@ void Entity::savegame(const SavePoint &savepoint) {
break;
case kActionNone:
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionDefault:
getSaveLoad()->saveGame((SavegameType)params->param1, _entityIndex, (EventIndex)params->param2);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
}
+void Entity::savegameBloodJacket() {
+ if (getProgress().jacket == kJacketBlood
+ && getEntities()->isDistanceBetweenEntities(_entityIndex, kEntityPlayer, 1000)
+ && !getEntities()->isInsideCompartments(kEntityPlayer)
+ && !getEntities()->checkFields10(kEntityPlayer)) {
+ setCallback(1);
+
+ switch (_entityIndex) {
+ default:
+ break;
+
+ case kEntityCoudert:
+ setup_savegame(kSavegameTypeEvent, kEventCoudertBloodJacket);
+ break;
+
+ case kEntityMertens:
+ setup_savegame(kSavegameTypeEvent, kEventCoudertBloodJacket);
+ break;
+ }
+ }
+}
+
void Entity::playSound(const SavePoint &savepoint, bool resetItem, SoundFlag flag) {
EXPOSE_PARAMS(EntityData::EntityParametersSIIS)
@@ -264,7 +277,7 @@ void Entity::playSound(const SavePoint &savepoint, bool resetItem, SoundFlag fla
break;
case kActionEndSound:
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionDefault:
@@ -284,7 +297,7 @@ void Entity::draw(const SavePoint &savepoint, bool handleExcuseMe) {
break;
case kActionExitCompartment:
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionExcuseMeCath:
@@ -308,7 +321,7 @@ void Entity::draw2(const SavePoint &savepoint) {
break;
case kActionExitCompartment:
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionDefault:
@@ -326,8 +339,10 @@ void Entity::updateFromTicks(const SavePoint &savepoint) {
break;
case kActionNone:
- UPDATE_PARAM(params->param2, getState()->timeTicks, params->param1)
- CALLBACK_ACTION();
+ if (Entity::updateParameter(params->param2, getState()->timeTicks, params->param1))
+ break;
+
+ callbackAction();
break;
}
}
@@ -340,8 +355,10 @@ void Entity::updateFromTime(const SavePoint &savepoint) {
break;
case kActionNone:
- UPDATE_PARAM(params->param2, getState()->time, params->param1)
- CALLBACK_ACTION();
+ if (Entity::updateParameter(params->param2, getState()->time, params->param1))
+ break;
+
+ callbackAction();
break;
}
}
@@ -352,12 +369,12 @@ void Entity::callbackActionOnDirection(const SavePoint &savepoint) {
break;
case kActionExitCompartment:
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionDefault:
if (getData()->direction != kDirectionRight)
- CALLBACK_ACTION();
+ callbackAction();
break;
}
}
@@ -370,7 +387,7 @@ void Entity::callbackActionRestaurantOrSalon(const SavePoint &savepoint) {
case kActionNone:
case kActionDefault:
if (getEntities()->isSomebodyInsideRestaurantOrSalon())
- CALLBACK_ACTION();
+ callbackAction();
break;
}
}
@@ -395,7 +412,7 @@ void Entity::updateEntity(const SavePoint &savepoint, bool handleExcuseMe) {
case kActionNone:
case kActionDefault:
if (getEntities()->updateEntity(_entityIndex, (CarIndex)params->param1, (EntityPosition)params->param2))
- CALLBACK_ACTION();
+ callbackAction();
break;
}
}
@@ -410,7 +427,7 @@ void Entity::callSavepoint(const SavePoint &savepoint, bool handleExcuseMe) {
case kActionExitCompartment:
if (!CURRENT_PARAM(1, 1))
getSavePoints()->call(_entityIndex, (EntityIndex)params->param4, (ActionIndex)params->param5, (char *)&params->seq2);
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionExcuseMeCath:
@@ -448,7 +465,7 @@ void Entity::enterExitCompartment(const SavePoint &savepoint, EntityPosition pos
if (updateLocation)
getData()->location = kLocationInsideCompartment;
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionDefault:
@@ -468,6 +485,74 @@ void Entity::enterExitCompartment(const SavePoint &savepoint, EntityPosition pos
}
}
+void Entity::goToCompartment(const SavePoint &savepoint, ObjectIndex compartmentFrom, EntityPosition positionFrom, Common::String sequenceFrom, Common::String sequenceTo) {
+ switch (savepoint.action) {
+ default:
+ break;
+
+ case kActionDefault:
+ getData()->entityPosition = positionFrom;
+ setCallback(1);
+ setup_enterExitCompartment(sequenceFrom.c_str(), compartmentFrom);
+ break;
+
+ case kActionCallback:
+ switch (getCallback()) {
+ default:
+ break;
+
+ case 1:
+ setCallback(2);
+ setup_enterExitCompartment(sequenceTo.c_str(), compartmentFrom);
+ break;
+
+ case 2:
+ getData()->entityPosition = positionFrom;
+ getEntities()->clearSequences(_entityIndex);
+ callbackAction();
+ break;
+ }
+ break;
+ }
+}
+
+void Entity::goToCompartmentFromCompartment(const SavePoint &savepoint, ObjectIndex compartmentFrom, EntityPosition positionFrom, Common::String sequenceFrom, ObjectIndex compartmentTo, EntityPosition positionTo, Common::String sequenceTo) {
+ switch (savepoint.action) {
+ default:
+ break;
+
+ case kActionDefault:
+ getData()->entityPosition = positionFrom;
+ getData()->location = kLocationOutsideCompartment;
+ setCallback(1);
+ setup_enterExitCompartment(sequenceFrom.c_str(), compartmentFrom);
+ break;
+
+ case kActionCallback:
+ switch (getCallback()) {
+ default:
+ break;
+
+ case 1:
+ setCallback(2);
+ setup_updateEntity(kCarGreenSleeping, positionTo);
+ break;
+
+ case 2:
+ setCallback(3);
+ setup_enterExitCompartment(sequenceTo.c_str(), compartmentTo);
+ break;
+
+ case 3:
+ getData()->location = kLocationInsideCompartment;
+ getEntities()->clearSequences(_entityIndex);
+ callbackAction();
+ break;
+ }
+ break;
+ }
+}
+
void Entity::updatePosition(const SavePoint &savepoint, bool handleExcuseMe) {
EXPOSE_PARAMS(EntityData::EntityParametersSIII)
@@ -477,7 +562,7 @@ void Entity::updatePosition(const SavePoint &savepoint, bool handleExcuseMe) {
case kActionExitCompartment:
getEntities()->updatePositionExit(_entityIndex, (CarIndex)params->param4, (Position)params->param5);
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionExcuseMeCath:
@@ -494,4 +579,385 @@ void Entity::updatePosition(const SavePoint &savepoint, bool handleExcuseMe) {
}
}
+void Entity::callbackAction() {
+ if (getData()->currentCall == 0)
+ error("[Entity::callbackAction] currentCall is already 0, cannot proceed");
+
+ getData()->currentCall--;
+
+ getSavePoints()->setCallback(_entityIndex, _callbacks[_data->getCurrentCallback()]);
+
+ getSavePoints()->call(_entityIndex, _entityIndex, kActionCallback);
+}
+
+//////////////////////////////////////////////////////////////////////////
+// Setup functions
+//////////////////////////////////////////////////////////////////////////
+void Entity::setup(const char *name, uint index) {
+ debugC(6, kLastExpressDebugLogic, "Entity: %s()", name);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->setCallback(_entityIndex, _callbacks[index]);
+ _data->setCurrentCallback(index);
+ _data->resetCurrentParameters<EntityData::EntityParametersIIII>();
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->call(_entityIndex, _entityIndex, kActionDefault);
+}
+
+void Entity::setupI(const char *name, uint index, uint param1) {
+ debugC(6, kLastExpressDebugLogic, "Entity: %s(%u)", name, param1);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->setCallback(_entityIndex, _callbacks[index]);
+ _data->setCurrentCallback(index);
+ _data->resetCurrentParameters<EntityData::EntityParametersIIII>();
+
+ EntityData::EntityParametersIIII *params = (EntityData::EntityParametersIIII *)_data->getCurrentParameters();
+ params->param1 = (unsigned int)param1;
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->call(_entityIndex, _entityIndex, kActionDefault);
+}
+
+void Entity::setupII(const char *name, uint index, uint param1, uint param2) {
+ debugC(6, kLastExpressDebugLogic, "Entity: %s(%u, %u)", name, param1, param2);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->setCallback(_entityIndex, _callbacks[index]);
+ _data->setCurrentCallback(index);
+ _data->resetCurrentParameters<EntityData::EntityParametersIIII>();
+
+ EntityData::EntityParametersIIII *params = (EntityData::EntityParametersIIII *)_data->getCurrentParameters();
+ params->param1 = param1;
+ params->param2 = param2;
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->call(_entityIndex, _entityIndex, kActionDefault);
+}
+
+void Entity::setupIII(const char *name, uint index, uint param1, uint param2, uint param3) {
+ debugC(6, kLastExpressDebugLogic, "Entity: %s(%u, %u, %u)", name, param1, param2, param3);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->setCallback(_entityIndex, _callbacks[index]);
+ _data->setCurrentCallback(index);
+ _data->resetCurrentParameters<EntityData::EntityParametersIIII>();
+
+ EntityData::EntityParametersIIII *params = (EntityData::EntityParametersIIII *)_data->getCurrentParameters();
+ params->param1 = param1;
+ params->param2 = param2;
+ params->param3 = param3;
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->call(_entityIndex, _entityIndex, kActionDefault);
+}
+
+void Entity::setupS(const char *name, uint index, const char *seq1) {
+ debugC(6, kLastExpressDebugLogic, "Entity: %s(%s)", name, seq1);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->setCallback(_entityIndex, _callbacks[index]);
+ _data->setCurrentCallback(index);
+ _data->resetCurrentParameters<EntityData::EntityParametersSIIS>();
+
+ EntityData::EntityParametersSIIS *params = (EntityData::EntityParametersSIIS*)_data->getCurrentParameters();
+ strncpy(params->seq1, seq1, 12);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->call(_entityIndex, _entityIndex, kActionDefault);
+}
+
+void Entity::setupSS(const char *name, uint index, const char *seq1, const char *seq2) {
+ debugC(6, kLastExpressDebugLogic, "Entity: %s(%s, %s)", name, seq1, seq2);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->setCallback(_entityIndex, _callbacks[index]);
+ _data->setCurrentCallback(index);
+ _data->resetCurrentParameters<EntityData::EntityParametersSSII>();
+
+ EntityData::EntityParametersSSII *params = (EntityData::EntityParametersSSII*)_data->getCurrentParameters();
+ strncpy(params->seq1, seq1, 12);
+ strncpy(params->seq2, seq2, 12);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->call(_entityIndex, _entityIndex, kActionDefault);
+}
+
+void Entity::setupSI(const char *name, uint index, const char *seq1, uint param4) {
+ debugC(6, kLastExpressDebugLogic, "Entity: %s(%s, %u)", name, seq1, param4);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->setCallback(_entityIndex, _callbacks[index]);
+ _data->setCurrentCallback(index);
+ _data->resetCurrentParameters<EntityData::EntityParametersSIIS>();
+
+ EntityData::EntityParametersSIIS *params = (EntityData::EntityParametersSIIS *)_data->getCurrentParameters();
+ strncpy(params->seq1, seq1, 12);
+ params->param4 = param4;
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->call(_entityIndex, _entityIndex, kActionDefault);
+}
+
+void Entity::setupSII(const char *name, uint index, const char *seq1, uint param4, uint param5) {
+ debugC(6, kLastExpressDebugLogic, "Entity: %s(%s, %u, %u)", name, seq1, param4, param5);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->setCallback(_entityIndex, _callbacks[index]);
+ _data->setCurrentCallback(index);
+ _data->resetCurrentParameters<EntityData::EntityParametersSIIS>();
+
+ EntityData::EntityParametersSIIS *params = (EntityData::EntityParametersSIIS *)_data->getCurrentParameters();
+ strncpy(params->seq1, seq1, 12);
+ params->param4 = param4;
+ params->param5 = param5;
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->call(_entityIndex, _entityIndex, kActionDefault);
+}
+
+void Entity::setupSIII(const char *name, uint index, const char *seq, uint param4, uint param5, uint param6) {
+ debugC(6, kLastExpressDebugLogic, "Entity: %s(%s, %u, %u, %u)", name, seq, param4, param5, param6);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->setCallback(_entityIndex, _callbacks[index]);
+ _data->setCurrentCallback(index);
+ _data->resetCurrentParameters<EntityData::EntityParametersSIII>();
+
+ EntityData::EntityParametersSIII *params = (EntityData::EntityParametersSIII *)_data->getCurrentParameters();
+ strncpy(params->seq, seq, 12);
+ params->param4 = param4;
+ params->param5 = param5;
+ params->param6 = param6;
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->call(_entityIndex, _entityIndex, kActionDefault);
+}
+
+void Entity::setupSIIS(const char *name, uint index, const char *seq1, uint param4, uint param5, const char *seq2) {
+ debugC(6, kLastExpressDebugLogic, "Entity: %s(%s, %u, %u, %s)", name, seq1, param4, param5, seq2);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->setCallback(_entityIndex, _callbacks[index]);
+ _data->setCurrentCallback(index);
+ _data->resetCurrentParameters<EntityData::EntityParametersSIIS>();
+
+ EntityData::EntityParametersSIIS *params = (EntityData::EntityParametersSIIS *)_data->getCurrentParameters();
+ strncpy(params->seq1, seq1, 12);
+ params->param4 = param4;
+ params->param5 = param5;
+ strncpy(params->seq2, seq2, 12);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->call(_entityIndex, _entityIndex, kActionDefault);
+}
+
+void Entity::setupSSI(const char *name, uint index, const char *seq1, const char *seq2, uint param7) {
+ debugC(6, kLastExpressDebugLogic, "Entity: %s(%s, %s, %u)", name, seq1, seq2, param7);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->setCallback(_entityIndex, _callbacks[index]);
+ _data->setCurrentCallback(index);
+ _data->resetCurrentParameters<EntityData::EntityParametersSSII>();
+
+ EntityData::EntityParametersSSII *params = (EntityData::EntityParametersSSII *)_data->getCurrentParameters();
+ strncpy(params->seq1, seq1, 12);
+ strncpy(params->seq2, seq2, 12);
+ params->param7 = param7;
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->call(_entityIndex, _entityIndex, kActionDefault);
+}
+
+void Entity::setupIS(const char *name, uint index, uint param1, const char *seq) {
+ debugC(6, kLastExpressDebugLogic, "Entity: %s(%u, %s)", name, param1, seq);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->setCallback(_entityIndex, _callbacks[index]);
+ _data->setCurrentCallback(index);
+ _data->resetCurrentParameters<EntityData::EntityParametersISII>();
+
+ EntityData::EntityParametersISII *params = (EntityData::EntityParametersISII *)_data->getCurrentParameters();
+ params->param1 = (unsigned int)param1;
+ strncpy(params->seq, seq, 12);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->call(_entityIndex, _entityIndex, kActionDefault);
+}
+
+void Entity::setupISS(const char *name, uint index, uint param1, const char *seq1, const char *seq2) {
+ debugC(6, kLastExpressDebugLogic, "Entity: %s(%u, %s, %s)", name, param1, seq1, seq2);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->setCallback(_entityIndex, _callbacks[index]);
+ _data->setCurrentCallback(index);
+ _data->resetCurrentParameters<EntityData::EntityParametersISSI>();
+
+ EntityData::EntityParametersISSI *params = (EntityData::EntityParametersISSI *)_data->getCurrentParameters();
+ params->param1 = param1;
+ strncpy(params->seq1, seq1, 12);
+ strncpy(params->seq2, seq2, 12);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->call(_entityIndex, _entityIndex, kActionDefault);
+}
+
+void Entity::setupIIS(const char *name, uint index, uint param1, uint param2, const char *seq) {
+ debugC(6, kLastExpressDebugLogic, "Entity: %s(%u, %u, %s)", name, param1, param2, seq);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->setCallback(_entityIndex, _callbacks[index]);
+ _data->setCurrentCallback(index);
+ _data->resetCurrentParameters<EntityData::EntityParametersIISI>();
+
+ EntityData::EntityParametersIISI *params = (EntityData::EntityParametersIISI *)_data->getCurrentParameters();
+ params->param1 = param1;
+ params->param2 = param2;
+ strncpy(params->seq, seq, 12);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->call(_entityIndex, _entityIndex, kActionDefault);
+}
+
+void Entity::setupIISS(const char *name, uint index, uint param1, uint param2, const char *seq1, const char *seq2) {
+ debugC(6, kLastExpressDebugLogic, "Entity: %s(%u, %u, %s, %s)", name, param1, param2, seq1, seq2);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->setCallback(_entityIndex, _callbacks[index]);
+ _data->setCurrentCallback(index);
+ _data->resetCurrentParameters<EntityData::EntityParametersIISS>();
+
+ EntityData::EntityParametersIISS *params = (EntityData::EntityParametersIISS *)_data->getCurrentParameters();
+ params->param1 = param1;
+ params->param2 = param2;
+ strncpy(params->seq1, seq1, 12);
+ strncpy(params->seq2, seq2, 12);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->call(_entityIndex, _entityIndex, kActionDefault);
+}
+
+//////////////////////////////////////////////////////////////////////////
+// Helper functions
+//////////////////////////////////////////////////////////////////////////
+
+bool Entity::updateParameter(uint &parameter, uint timeType, uint delta) {
+ if (!parameter)
+ parameter = (uint)(timeType + delta);
+
+ if (parameter >= timeType)
+ return false;
+
+ parameter = kTimeInvalid;
+
+ return true;
+}
+
+bool Entity::updateParameterTime(TimeValue timeValue, bool check, uint &parameter, uint delta) {
+ if (getState()->time <= timeValue) {
+ if (check || !parameter)
+ parameter = (uint)(getState()->time + delta);
+ }
+
+ if (parameter >= getState()->time && getState()->time <= timeValue)
+ return false;
+
+ parameter = kTimeInvalid;
+
+ return true;
+}
+
+bool Entity::updateParameterCheck(uint &parameter, uint timeType, uint delta) {
+ if (parameter && parameter >= timeType)
+ return false;
+
+ if (!parameter)
+ parameter = (uint)(timeType + delta);
+
+ return true;
+}
+
+bool Entity::timeCheck(TimeValue timeValue, uint &parameter, Common::Functor0<void> *function) {
+ if (getState()->time > timeValue && !parameter) {
+ parameter = 1;
+ (*function)();
+
+ return true;
+ }
+
+ return false;
+}
+
+bool Entity::timeCheckCallback(TimeValue timeValue, uint &parameter, byte callback, Common::Functor0<void> *function) {
+ if (getState()->time > timeValue && !parameter) {
+ parameter = 1;
+ setCallback(callback);
+ (*function)();
+
+ return true;
+ }
+
+ return false;
+}
+
+bool Entity::timeCheckCallback(TimeValue timeValue, uint &parameter, byte callback, const char *str, Common::Functor1<const char *, void> *function) {
+ if (getState()->time > timeValue && !parameter) {
+ parameter = 1;
+ setCallback(callback);
+ (*function)(str);
+
+ return true;
+ }
+
+ return false;
+}
+
+bool Entity::timeCheckCallback(TimeValue timeValue, uint &parameter, byte callback, bool check, Common::Functor1<bool, void> *function) {
+ if (getState()->time > timeValue && !parameter) {
+ parameter = 1;
+ setCallback(callback);
+ (*function)(check);
+
+ return true;
+ }
+
+ return false;
+}
+
+bool Entity::timeCheckCallbackInventory(TimeValue timeValue, uint &parameter, byte callback, Common::Functor0<void> *function) {
+ if (getState()->time > timeValue && !parameter) {
+ parameter = 1;
+ getData()->inventoryItem = kItemNone;
+ setCallback(callback);
+ (*function)();
+
+ return true;
+ }
+
+ return false;
+}
+
+bool Entity::timeCheckCar(TimeValue timeValue, uint &parameter, byte callback, Common::Functor0<void> *function) {
+ if ((getState()->time <= timeValue && !getEntities()->isPlayerInCar(kCarGreenSleeping)) || !parameter)
+ parameter = (uint)getState()->time + 75;
+
+ if (getState()->time > timeValue || parameter < getState()->time) {
+ parameter = kTimeInvalid;
+ setCallback(callback);
+ (*function)();
+
+ return true;
+ }
+
+ return false;
+}
+
+void Entity::timeCheckSavepoint(TimeValue timeValue, uint &parameter, EntityIndex entity1, EntityIndex entity2, ActionIndex action) {
+ if (getState()->time > timeValue && !parameter) {
+ parameter = 1;
+ getSavePoints()->push(entity1, entity2, action);
+ }
+}
+
+void Entity::timeCheckObject(TimeValue timeValue, uint &parameter, ObjectIndex object, ObjectLocation location) {
+ if (getState()->time > timeValue && !parameter) {
+ parameter = 1;
+ getObjects()->updateLocation2(object, location);
+ }
+}
+
+bool Entity::timeCheckCallbackAction(TimeValue timeValue, uint &parameter) {
+ if (getState()->time > timeValue && !parameter) {
+ parameter = 1;
+ callbackAction();
+ return true;
+ }
+
+ return false;
+}
+
+bool Entity::timeCheckPlaySoundUpdatePosition(TimeValue timeValue, uint &parameter, byte callback, const char* sound, EntityPosition position) {
+ if (getState()->time > timeValue && !parameter) {
+ parameter = 1;
+ getData()->entityPosition = position;
+ setCallback(callback);
+ setup_playSound(sound);
+ return true;
+ }
+
+ return false;
+}
+
+
} // End of namespace LastExpress
diff --git a/engines/lastexpress/entities/entity.h b/engines/lastexpress/entities/entity.h
index 039f461c7b..3601f34f6f 100644
--- a/engines/lastexpress/entities/entity.h
+++ b/engines/lastexpress/entities/entity.h
@@ -25,8 +25,13 @@
#include "lastexpress/shared.h"
+#include "lastexpress/game/logic.h"
+#include "lastexpress/game/savepoint.h"
+#include "lastexpress/game/state.h"
+
#include "lastexpress/sound/sound.h"
+#include "lastexpress/lastexpress.h"
#include "lastexpress/helpers.h"
#include "common/array.h"
@@ -41,10 +46,229 @@ class Sequence;
class SequenceFrame;
struct SavePoint;
+//////////////////////////////////////////////////////////////////////////
+// Declaration
+//////////////////////////////////////////////////////////////////////////
+#define DECLARE_FUNCTION(name) \
+ void setup_##name(); \
+ void name(const SavePoint &savepoint);
+
+#define DECLARE_FUNCTION_1(name, param1) \
+ void setup_##name(param1); \
+ void name(const SavePoint &savepoint);
+
+#define DECLARE_FUNCTION_2(name, param1, param2) \
+ void setup_##name(param1, param2); \
+ void name(const SavePoint &savepoint);
+
+#define DECLARE_FUNCTION_3(name, param1, param2, param3) \
+ void setup_##name(param1, param2, param3); \
+ void name(const SavePoint &savepoint);
+
+#define DECLARE_FUNCTION_4(name, param1, param2, param3, param4) \
+ void setup_##name(param1, param2, param3, param4); \
+ void name(const SavePoint &savepoint);
+
+#define DECLARE_FUNCTION_NOSETUP(name) \
+ void name(const SavePoint &savepoint);
+
+#define DECLARE_NULL_FUNCTION() \
+ void setup_nullfunction();
+
+//////////////////////////////////////////////////////////////////////////
+// Callbacks
+//////////////////////////////////////////////////////////////////////////
+#define ENTITY_CALLBACK(class, name, pointer) \
+ Common::Functor1Mem<const SavePoint&, void, class>(pointer, &class::name)
+
+#define ADD_CALLBACK_FUNCTION(class, name) \
+ _callbacks.push_back(new ENTITY_CALLBACK(class, name, this));
+
+#define ADD_NULL_FUNCTION() \
+ _callbacks.push_back(new ENTITY_CALLBACK(Entity, nullfunction, this));
+
+#define WRAP_SETUP_FUNCTION(className, method) \
+ new Common::Functor0Mem<void, className>(this, &className::method)
+
+#define WRAP_SETUP_FUNCTION_S(className, method) \
+ new Common::Functor1Mem<const char *, void, className>(this, &className::method)
+
+#define WRAP_SETUP_FUNCTION_B(className, method) \
+ new Common::Functor1Mem<bool, void, className>(this, &className::method)
+
+//////////////////////////////////////////////////////////////////////////
+// Parameters macros
+//////////////////////////////////////////////////////////////////////////
+#define CURRENT_PARAM(index, id) \
+ ((EntityData::EntityParametersIIII*)_data->getCurrentParameters(index))->param##id
+
+#define ENTITY_PARAM(index, id) \
+ ((EntityData::EntityParametersIIII*)_data->getParameters(8, index))->param##id
+
+//////////////////////////////////////////////////////////////////////////
+// Misc
+//////////////////////////////////////////////////////////////////////////
+#define RESET_ENTITY_STATE(entity, class, function) \
+ getEntities()->resetState(entity); \
+ ((class *)getEntities()->get(entity))->function();
+
+//////////////////////////////////////////////////////////////////////////
+// Implementation
+//////////////////////////////////////////////////////////////////////////
+
+// Expose parameters and check validity
+#define EXPOSE_PARAMS(type) \
+ type *params = (type *)_data->getCurrentParameters(); \
+ if (!params) \
+ error("[EXPOSE_PARAMS] Trying to call an entity function with invalid parameters"); \
+
+// function signature without setup (we keep the index for consistency but never use it)
+#define IMPLEMENT_FUNCTION_NOSETUP(index, class, name) \
+ void class::name(const SavePoint &savepoint) { \
+ debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(index=" #index ")");
+
+// simple setup with no parameters
+#define IMPLEMENT_FUNCTION(index, class, name) \
+ void class::setup_##name() { \
+ Entity::setup(#class "::setup_" #name, index); \
+ } \
+ void class::name(const SavePoint &savepoint) { \
+ EXPOSE_PARAMS(EntityData::EntityParametersIIII) \
+ debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "() - action: %s", ACTION_NAME(savepoint.action));
+
+#define IMPLEMENT_FUNCTION_END }
+
+// nullfunction call
+#define IMPLEMENT_NULL_FUNCTION(index, class) \
+ void class::setup_nullfunction() { \
+ Entity::setup(#class "::setup_nullfunction", index); \
+ }
+
+// setup with one uint parameter
+#define IMPLEMENT_FUNCTION_I(index, class, name, paramType) \
+ void class::setup_##name(paramType param1) { \
+ Entity::setupI(#class "::setup_" #name, index, param1); \
+ } \
+ void class::name(const SavePoint &savepoint) { \
+ EXPOSE_PARAMS(EntityData::EntityParametersIIII) \
+ debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%d) - action: %s", params->param1, ACTION_NAME(savepoint.action));
+
+// setup with two uint parameters
+#define IMPLEMENT_FUNCTION_II(index, class, name, paramType1, paramType2) \
+ void class::setup_##name(paramType1 param1, paramType2 param2) { \
+ Entity::setupII(#class "::setup_" #name, index, param1, param2); \
+ } \
+ void class::name(const SavePoint &savepoint) { \
+ EXPOSE_PARAMS(EntityData::EntityParametersIIII) \
+ debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%d, %d) - action: %s", params->param1, params->param2, ACTION_NAME(savepoint.action));
+
+// setup with three uint parameters
+#define IMPLEMENT_FUNCTION_III(index, class, name, paramType1, paramType2, paramType3) \
+ void class::setup_##name(paramType1 param1, paramType2 param2, paramType3 param3) { \
+ Entity::setupIII(#class "::setup_" #name, index, param1, param2, param3); \
+ } \
+ void class::name(const SavePoint &savepoint) { \
+ EXPOSE_PARAMS(EntityData::EntityParametersIIII) \
+ debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%d, %d, %d) - action: %s", params->param1, params->param2, params->param3, ACTION_NAME(savepoint.action));
+
+// setup with one char *parameter
+#define IMPLEMENT_FUNCTION_S(index, class, name) \
+ void class::setup_##name(const char *seq1) { \
+ Entity::setupS(#class "::setup_" #name, index, seq1); \
+ } \
+ void class::name(const SavePoint &savepoint) { \
+ EXPOSE_PARAMS(EntityData::EntityParametersSIIS) \
+ debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%s) - action: %s", (char *)&params->seq1, ACTION_NAME(savepoint.action));
+
+// setup with one char *parameter and one uint
+#define IMPLEMENT_FUNCTION_SI(index, class, name, paramType2) \
+ void class::setup_##name(const char *seq1, paramType2 param4) { \
+ Entity::setupSI(#class "::setup_" #name, index, seq1, param4); \
+ } \
+ void class::name(const SavePoint &savepoint) { \
+ EXPOSE_PARAMS(EntityData::EntityParametersSIIS) \
+ debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%s, %d) - action: %s", (char *)&params->seq1, params->param4, ACTION_NAME(savepoint.action));
+
+// setup with one char *parameter and two uints
+#define IMPLEMENT_FUNCTION_SII(index, class, name, paramType2, paramType3) \
+ void class::setup_##name(const char *seq1, paramType2 param4, paramType3 param5) { \
+ Entity::setupSII(#class "::setup_" #name, index, seq1, param4, param5); \
+ } \
+ void class::name(const SavePoint &savepoint) { \
+ EXPOSE_PARAMS(EntityData::EntityParametersSIIS) \
+ debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%s, %d, %d) - action: %s", (char *)&params->seq1, params->param4, params->param5, ACTION_NAME(savepoint.action));
+
+// setup with one char *parameter and three uints
+#define IMPLEMENT_FUNCTION_SIII(index, class, name, paramType2, paramType3, paramType4) \
+ void class::setup_##name(const char *seq, paramType2 param4, paramType3 param5, paramType4 param6) { \
+ Entity::setupSIII(#class "::setup_" #name, index, seq, param4, param5, param6); \
+ } \
+ void class::name(const SavePoint &savepoint) { \
+ EXPOSE_PARAMS(EntityData::EntityParametersSIII) \
+ debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%s, %d, %d, %d) - action: %s", (char *)&params->seq, params->param4, params->param5, params->param6, ACTION_NAME(savepoint.action));
+
+#define IMPLEMENT_FUNCTION_SIIS(index, class, name, paramType2, paramType3) \
+ void class::setup_##name(const char *seq1, paramType2 param4, paramType3 param5, const char *seq2) { \
+ Entity::setupSIIS(#class "::setup_" #name, index, seq1, param4, param5, seq2); \
+ } \
+ void class::name(const SavePoint &savepoint) { \
+ EXPOSE_PARAMS(EntityData::EntityParametersSIIS) \
+ debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%s, %d, %d, %s) - action: %s", (char *)&params->seq1, params->param4, params->param5, (char *)&params->seq2, ACTION_NAME(savepoint.action));
+
+#define IMPLEMENT_FUNCTION_SS(index, class, name) \
+ void class::setup_##name(const char *seq1, const char *seq2) { \
+ Entity::setupSS(#class "::setup_" #name, index, seq1, seq2); \
+ } \
+ void class::name(const SavePoint &savepoint) { \
+ EXPOSE_PARAMS(EntityData::EntityParametersSSII) \
+ debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%s, %s) - action: %s", (char *)&params->seq1, (char *)&params->seq2, ACTION_NAME(savepoint.action));
+
+#define IMPLEMENT_FUNCTION_SSI(index, class, name, paramType3) \
+ void class::setup_##name(const char *seq1, const char *seq2, paramType3 param7) { \
+ Entity::setupSSI(#class "::setup_" #name, index, seq1, seq2, param7); \
+ } \
+ void class::name(const SavePoint &savepoint) { \
+ EXPOSE_PARAMS(EntityData::EntityParametersSSII) \
+ debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%s, %s, %d) - action: %s", (char *)&params->seq1, (char *)&params->seq2, params->param7, ACTION_NAME(savepoint.action));
+
+#define IMPLEMENT_FUNCTION_IS(index, class, name, paramType) \
+ void class::setup_##name(paramType param1, const char *seq) { \
+ Entity::setupIS(#class "::setup_" #name, index, param1, seq); \
+ } \
+ void class::name(const SavePoint &savepoint) { \
+ EXPOSE_PARAMS(EntityData::EntityParametersISII) \
+ debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%d, %s) - action: %s", params->param1, (char *)&params->seq, ACTION_NAME(savepoint.action));
+
+#define IMPLEMENT_FUNCTION_ISS(index, class, name, paramType) \
+ void class::setup_##name(paramType param1, const char *seq1, const char *seq2) { \
+ Entity::setupISS(#class "::setup_" #name, index, param1, seq1, seq2); \
+ } \
+ void class::name(const SavePoint &savepoint) { \
+ EXPOSE_PARAMS(EntityData::EntityParametersISSI) \
+ debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%d, %s, %s) - action: %s", params->param1, (char *)&params->seq1, (char *)&params->seq2, ACTION_NAME(savepoint.action));
+
+#define IMPLEMENT_FUNCTION_IIS(index, class, name, paramType1, paramType2) \
+ void class::setup_##name(paramType1 param1, paramType2 param2, const char *seq) { \
+ Entity::setupIIS(#class "::setup_" #name, index, param1, param2, seq); \
+ } \
+ void class::name(const SavePoint &savepoint) { \
+ EXPOSE_PARAMS(EntityData::EntityParametersIISI) \
+ debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%d, %d, %s) - action: %s", params->param1, params->param2, (char *)&params->seq, ACTION_NAME(savepoint.action));
+
+#define IMPLEMENT_FUNCTION_IISS(index, class, name, paramType1, paramType2) \
+ void class::setup_##name(paramType1 param1, paramType2 param2, const char *seq1, const char *seq2) { \
+ Entity::setupIISS(#class "::setup_" #name, index, param1, param2, seq1, seq2); \
+ } \
+ void class::name(const SavePoint &savepoint) { \
+ EXPOSE_PARAMS(EntityData::EntityParametersIISS) \
+ debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%d, %d, %s, %s) - action: %s", params->param1, params->param2, (char *)&params->seq1, (char *)&params->seq2, ACTION_NAME(savepoint.action));
+
+
+//////////////////////////////////////////////////////////////////////////
class EntityData : Common::Serializable {
public:
- struct EntityParameters : Common::Serializable{
+ struct EntityParameters : Common::Serializable {
virtual ~EntityParameters() {}
virtual Common::String toString() = 0;
@@ -596,6 +820,15 @@ public:
return str;
}
+ /**
+ * Synchronizes a string.
+ *
+ * @param s The Common::Serializer to use.
+ * @param string The string.
+ * @param length Length of the string.
+ */
+ void syncString(Common::Serializer &s, Common::String &string, int length);
+
// Serializable
void saveLoadWithSerializer(Common::Serializer &s);
};
@@ -611,32 +844,30 @@ public:
params->parameters[i] = new T();
}
- EntityCallData *getCallData() { return &_data; }
+ EntityCallData *getCallData() { return &_data; }
- EntityParameters *getParameters(uint callback, byte index) const;
- EntityParameters *getCurrentParameters(byte index = 0) { return getParameters(_data.currentCall, index); }
+ EntityParameters *getParameters(uint callback, byte index) const;
+ EntityParameters *getCurrentParameters(byte index = 0) { return getParameters(_data.currentCall, index); }
+ EntityCallParameters *getCurrentCallParameters() { return &_parameters[_data.currentCall]; }
- int getCallback(uint callback) const;
- int getCurrentCallback() { return getCallback(_data.currentCall); }
- void setCallback(uint callback, byte index);
- void setCurrentCallback(uint index) { setCallback(_data.currentCall, index); }
+ int getCallback(uint callback) const;
+ int getCurrentCallback() { return getCallback(_data.currentCall); }
+ void setCallback(uint callback, byte index);
+ void setCurrentCallback(uint index) { setCallback(_data.currentCall, index); }
- void updateParameters(uint32 index) const;
+ void updateParameters(uint32 index) const;
// Serializable
- void saveLoadWithSerializer(Common::Serializer &ser);
+ void saveLoadWithSerializer(Common::Serializer &ser);
private:
- EntityCallData _data;
+ EntityCallData _data;
EntityCallParameters _parameters[9];
};
class Entity : Common::Serializable {
public:
-
- typedef Common::Functor1<const SavePoint&, void> Callback;
-
Entity(LastExpressEngine *engine, EntityIndex index);
virtual ~Entity();
@@ -657,6 +888,12 @@ public:
virtual void setup_chapter4() = 0;
virtual void setup_chapter5() = 0;
+ // Shared functions
+ virtual void setup_savegame(SavegameType, uint32) { error("[Entity::setup_savegame] Trying to call the parent setup function. Use the specific entity function directly"); }
+ virtual void setup_enterExitCompartment(const char *, ObjectIndex) { error("[Entity::setup_enterExitCompartment] Trying to call the parent setup function. Use the specific entity function directly"); }
+ virtual void setup_updateEntity(CarIndex, EntityPosition) { error("[Entity::setup_updateEntity] Trying to call the parent setup function. Use the specific entity function directly"); }
+ virtual void setup_playSound(const char*) { error("[Entity::setup_playSound] Trying to call the parent setup function. Use the specific entity function directly"); }
+
// Serializable
void saveLoadWithSerializer(Common::Serializer &ser) { _data->saveLoadWithSerializer(ser); }
@@ -664,10 +901,11 @@ public:
protected:
LastExpressEngine *_engine;
+ typedef Common::Functor1<const SavePoint&, void> Callback;
- EntityIndex _entityIndex;
- EntityData *_data;
- Common::Array<Callback *> _callbacks;
+ EntityIndex _entityIndex;
+ EntityData *_data;
+ Common::Array<Callback *> _callbacks;
/**
* Saves the game
@@ -679,6 +917,13 @@ protected:
void savegame(const SavePoint &savepoint);
/**
+ * Saves the game before being found out with a blood covered jacket.
+ *
+ * @param saveFunction The setup function to call to save the game
+ */
+ void savegameBloodJacket();
+
+ /**
* Play sound
*
* @param savepoint The savepoint
@@ -782,15 +1027,83 @@ protected:
void enterExitCompartment(const SavePoint &savepoint, EntityPosition position1 = kPositionNone, EntityPosition position2 = kPositionNone, CarIndex car = kCarNone, ObjectIndex compartment = kObjectNone, bool alternate = false, bool updateLocation = false);
/**
+ * Go to compartment.
+ *
+ * @param savepoint The savepoint.
+ * @param compartmentFrom The compartment from.
+ * @param positionFrom The position from.
+ * @param sequenceFrom The sequence from.
+ * @param sequenceTo The sequence to.
+ */
+ void goToCompartment(const SavePoint &savepoint, ObjectIndex compartmentFrom, EntityPosition positionFrom, Common::String sequenceFrom, Common::String sequenceTo);
+
+ /**
+ * Go to compartment from compartment.
+ *
+ * @param savepoint The savepoint.
+ * @param compartmentFrom The compartment from.
+ * @param positionFrom The position from.
+ * @param sequenceFrom The sequence from.
+ * @param compartmentTo The compartment to.
+ * @param positionTo The position to.
+ * @param sequenceTo The sequence to.
+ */
+ void goToCompartmentFromCompartment(const SavePoint &savepoint, ObjectIndex compartmentFrom, EntityPosition positionFrom, Common::String sequenceFrom, ObjectIndex compartmentTo, EntityPosition positionTo, Common::String sequenceTo);
+
+ /**
* Updates the position
*
- * @param savepoint The savepoint
+ * @param savepoint The savepoint
* - Sequence name
* - CarIndex
* - Position
* @param handleExcuseMe true to handle excuseMe actions
*/
void updatePosition(const SavePoint &savepoint, bool handleExcuseMe = false);
+
+ /**
+ * Store the current callback information and perform the callback action
+ */
+ void callbackAction();
+
+ //////////////////////////////////////////////////////////////////////////
+ // Setup functions
+ //////////////////////////////////////////////////////////////////////////
+ void setup(const char *name, uint index);
+ void setupI(const char *name, uint index, uint param1);
+ void setupII(const char *name, uint index, uint param1, uint param2);
+ void setupIII(const char *name, uint index, uint param1, uint param2, uint param3);
+ void setupS(const char *name, uint index, const char *seq1);
+ void setupSS(const char *name, uint index, const char *seq1, const char *seq2);
+ void setupSI(const char *name, uint index, const char *seq1, uint param4);
+ void setupSII(const char *name, uint index, const char *seq1, uint param4, uint param5);
+ void setupSIII(const char *name, uint index, const char *seq, uint param4, uint param5, uint param6);
+ void setupSIIS(const char *name, uint index, const char *seq1, uint param4, uint param5, const char *seq2);
+ void setupSSI(const char *name, uint index, const char *seq1, const char *seq2, uint param7);
+ void setupIS(const char *name, uint index, uint param1, const char *seq);
+ void setupISS(const char *name, uint index, uint param1, const char *seq1, const char *seq2);
+ void setupIIS(const char *name, uint index, uint param1, uint param2, const char *seq);
+ void setupIISS(const char *name, uint index, uint param1, uint param2, const char *seq1, const char *seq2);
+
+ //////////////////////////////////////////////////////////////////////////
+ // Helper functions
+ //////////////////////////////////////////////////////////////////////////
+
+ bool updateParameter(uint &parameter, uint timeType, uint delta);
+ bool updateParameterCheck(uint &parameter, uint timeType, uint delta);
+ bool updateParameterTime(TimeValue timeValue, bool check, uint &parameter, uint delta);
+
+ bool timeCheck(TimeValue timeValue, uint &parameter, Common::Functor0<void> *function);
+ bool timeCheckCallback(TimeValue timeValue, uint &parameter, byte callback, Common::Functor0<void> *function);
+ bool timeCheckCallback(TimeValue timeValue, uint &parameter, byte callback, const char *str, Common::Functor1<const char *, void> *function);
+ bool timeCheckCallback(TimeValue timeValue, uint &parameter, byte callback, bool check, Common::Functor1<bool, void> *function);
+ bool timeCheckCallbackInventory(TimeValue timeValue, uint &parameter, byte callback, Common::Functor0<void> *function);
+ bool timeCheckCar(TimeValue timeValue, uint &parameter, byte callback, Common::Functor0<void> *function);
+ void timeCheckSavepoint(TimeValue timeValue, uint &parameter, EntityIndex entity1, EntityIndex entity2, ActionIndex action);
+ void timeCheckObject(TimeValue timeValue, uint &parameter, ObjectIndex index, ObjectLocation location);
+ bool timeCheckCallbackAction(TimeValue timeValue, uint &parameter);
+ bool timeCheckPlaySoundUpdatePosition(TimeValue timeValue, uint &parameter, byte callback, const char* sound, EntityPosition position);
+
};
diff --git a/engines/lastexpress/entities/entity39.cpp b/engines/lastexpress/entities/entity39.cpp
index e786d153a0..1786cd2201 100644
--- a/engines/lastexpress/entities/entity39.cpp
+++ b/engines/lastexpress/entities/entity39.cpp
@@ -28,7 +28,6 @@
#include "lastexpress/game/savepoint.h"
#include "lastexpress/game/state.h"
-#include "lastexpress/helpers.h"
#include "lastexpress/lastexpress.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/entity39.h b/engines/lastexpress/entities/entity39.h
index 4335a9566e..54b65408c7 100644
--- a/engines/lastexpress/entities/entity39.h
+++ b/engines/lastexpress/entities/entity39.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_ENTITY39_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
@@ -72,4 +71,4 @@ private:
} // End of namespace LastExpress
-#endif // LASTEXPRESS_##define##_H
+#endif // LASTEXPRESS_ENTITY39_H
diff --git a/engines/lastexpress/entities/entity_intern.h b/engines/lastexpress/entities/entity_intern.h
index 2da0da15b3..fd803676a9 100644
--- a/engines/lastexpress/entities/entity_intern.h
+++ b/engines/lastexpress/entities/entity_intern.h
@@ -25,502 +25,6 @@
namespace LastExpress {
-#define LOW_BYTE(w) ((unsigned char)(((unsigned long)(w)) & 0xff))
-
-//////////////////////////////////////////////////////////////////////////
-// Callbacks
-#define ENTITY_CALLBACK(class, name, pointer) \
- Common::Functor1Mem<const SavePoint&, void, class>(pointer, &class::name)
-
-#define ADD_CALLBACK_FUNCTION(class, name) \
- _callbacks.push_back(new ENTITY_CALLBACK(class, name, this));
-
-#define ADD_NULL_FUNCTION() \
- _callbacks.push_back(new ENTITY_CALLBACK(Entity, nullfunction, this));
-
-//////////////////////////////////////////////////////////////////////////
-// Declaration
-//////////////////////////////////////////////////////////////////////////
-
-#define DECLARE_FUNCTION(name) \
- void setup_##name(); \
- void name(const SavePoint &savepoint);
-
-#define DECLARE_FUNCTION_1(name, param1) \
- void setup_##name(param1); \
- void name(const SavePoint &savepoint);
-
-#define DECLARE_FUNCTION_2(name, param1, param2) \
- void setup_##name(param1, param2); \
- void name(const SavePoint &savepoint);
-
-#define DECLARE_FUNCTION_3(name, param1, param2, param3) \
- void setup_##name(param1, param2, param3); \
- void name(const SavePoint &savepoint);
-
-#define DECLARE_FUNCTION_4(name, param1, param2, param3, param4) \
- void setup_##name(param1, param2, param3, param4); \
- void name(const SavePoint &savepoint);
-
-#define DECLARE_FUNCTION_NOSETUP(name) \
- void name(const SavePoint &savepoint);
-
-#define DECLARE_NULL_FUNCTION() \
- void setup_nullfunction();
-
-//////////////////////////////////////////////////////////////////////////
-// Setup
-//////////////////////////////////////////////////////////////////////////
-
-#define IMPLEMENT_SETUP(class, callback_class, name, index) \
-void class::setup_##name() { \
- BEGIN_SETUP(callback_class, name, index, EntityData::EntityParametersIIII) \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::setup_" #name "()"); \
- END_SETUP() \
-}
-
-#define BEGIN_SETUP(class, name, index, type) \
- _engine->getGameLogic()->getGameState()->getGameSavePoints()->setCallback(_entityIndex, _callbacks[index]); \
- _data->setCurrentCallback(index); \
- _data->resetCurrentParameters<type>();
-
-#define END_SETUP() \
- _engine->getGameLogic()->getGameState()->getGameSavePoints()->call(_entityIndex, _entityIndex, kActionDefault);
-
-
-//////////////////////////////////////////////////////////////////////////
-// Implementation
-//////////////////////////////////////////////////////////////////////////
-
-// Expose parameters and check validity
-#define EXPOSE_PARAMS(type) \
- type *params = (type *)_data->getCurrentParameters(); \
- if (!params) \
- error("[EXPOSE_PARAMS] Trying to call an entity function with invalid parameters"); \
-
-
-// function signature without setup (we keep the index for consistency but never use it)
-#define IMPLEMENT_FUNCTION_NOSETUP(index, class, name) \
- void class::name(const SavePoint &savepoint) { \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(index=" #index ")");
-
-// simple setup with no parameters
-#define IMPLEMENT_FUNCTION(index, class, name) \
- IMPLEMENT_SETUP(class, class, name, index) \
- void class::name(const SavePoint &savepoint) { \
- EXPOSE_PARAMS(EntityData::EntityParametersIIII) \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "() - action: %s", ACTION_NAME(savepoint.action));
-
-#define IMPLEMENT_FUNCTION_END }
-
-// nullfunction call
-#define IMPLEMENT_NULL_FUNCTION(index, class) \
- IMPLEMENT_SETUP(class, Entity, nullfunction, index)
-
-// setup with one uint parameter
-#define IMPLEMENT_FUNCTION_I(index, class, name, paramType) \
- void class::setup_##name(paramType param1) { \
- BEGIN_SETUP(class, name, index, EntityData::EntityParametersIIII) \
- EntityData::EntityParametersIIII *params = (EntityData::EntityParametersIIII*)_data->getCurrentParameters(); \
- params->param1 = (unsigned int)param1; \
- END_SETUP() \
- } \
- void class::name(const SavePoint &savepoint) { \
- EXPOSE_PARAMS(EntityData::EntityParametersIIII) \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%d) - action: %s", params->param1, ACTION_NAME(savepoint.action));
-
-// setup with two uint parameters
-#define IMPLEMENT_FUNCTION_II(index, class, name, paramType1, paramType2) \
- void class::setup_##name(paramType1 param1, paramType2 param2) { \
- BEGIN_SETUP(class, name, index, EntityData::EntityParametersIIII) \
- EntityData::EntityParametersIIII *params = (EntityData::EntityParametersIIII*)_data->getCurrentParameters(); \
- params->param1 = param1; \
- params->param2 = param2; \
- END_SETUP() \
- } \
- void class::name(const SavePoint &savepoint) { \
- EXPOSE_PARAMS(EntityData::EntityParametersIIII) \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%d, %d) - action: %s", params->param1, params->param2, ACTION_NAME(savepoint.action));
-
-// setup with three uint parameters
-#define IMPLEMENT_FUNCTION_III(index, class, name, paramType1, paramType2, paramType3) \
- void class::setup_##name(paramType1 param1, paramType2 param2, paramType3 param3) { \
- BEGIN_SETUP(class, name, index, EntityData::EntityParametersIIII) \
- EntityData::EntityParametersIIII *params = (EntityData::EntityParametersIIII*)_data->getCurrentParameters(); \
- params->param1 = param1; \
- params->param2 = param2; \
- params->param3 = param3; \
- END_SETUP() \
- } \
- void class::name(const SavePoint &savepoint) { \
- EXPOSE_PARAMS(EntityData::EntityParametersIIII) \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%d, %d, %d) - action: %s", params->param1, params->param2, params->param3, ACTION_NAME(savepoint.action));
-
-// setup with one char *parameter
-#define IMPLEMENT_FUNCTION_S(index, class, name) \
- void class::setup_##name(const char *seq1) { \
- BEGIN_SETUP(class, name, index, EntityData::EntityParametersSIIS) \
- EntityData::EntityParametersSIIS *params = (EntityData::EntityParametersSIIS*)_data->getCurrentParameters(); \
- strncpy((char *)&params->seq1, seq1, 12); \
- END_SETUP() \
- } \
- void class::name(const SavePoint &savepoint) { \
- EXPOSE_PARAMS(EntityData::EntityParametersSIIS) \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%s) - action: %s", (char *)&params->seq1, ACTION_NAME(savepoint.action));
-
-// setup with one char *parameter and one uint
-#define IMPLEMENT_FUNCTION_SI(index, class, name, paramType2) \
- void class::setup_##name(const char *seq1, paramType2 param4) { \
- BEGIN_SETUP(class, name, index, EntityData::EntityParametersSIIS) \
- EntityData::EntityParametersSIIS *params = (EntityData::EntityParametersSIIS*)_data->getCurrentParameters(); \
- strncpy((char *)&params->seq1, seq1, 12); \
- params->param4 = param4; \
- END_SETUP() \
- } \
- void class::name(const SavePoint &savepoint) { \
- EXPOSE_PARAMS(EntityData::EntityParametersSIIS) \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%s, %d) - action: %s", (char *)&params->seq1, params->param4, ACTION_NAME(savepoint.action));
-
-// setup with one char *parameter and two uints
-#define IMPLEMENT_FUNCTION_SII(index, class, name, paramType2, paramType3) \
- void class::setup_##name(const char *seq1, paramType2 param4, paramType3 param5) { \
- BEGIN_SETUP(class, name, index, EntityData::EntityParametersSIIS) \
- EntityData::EntityParametersSIIS *params = (EntityData::EntityParametersSIIS*)_data->getCurrentParameters(); \
- strncpy((char *)&params->seq1, seq1, 12); \
- params->param4 = param4; \
- params->param5 = param5; \
- END_SETUP() \
- } \
- void class::name(const SavePoint &savepoint) { \
- EXPOSE_PARAMS(EntityData::EntityParametersSIIS) \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%s, %d, %d) - action: %s", (char *)&params->seq1, params->param4, params->param5, ACTION_NAME(savepoint.action));
-
-// setup with one char *parameter and three uints
-#define IMPLEMENT_FUNCTION_SIII(index, class, name, paramType2, paramType3, paramType4) \
- void class::setup_##name(const char *seq, paramType2 param4, paramType3 param5, paramType4 param6) { \
- BEGIN_SETUP(class, name, index, EntityData::EntityParametersSIII) \
- EntityData::EntityParametersSIII *params = (EntityData::EntityParametersSIII*)_data->getCurrentParameters(); \
- strncpy((char *)&params->seq, seq, 12); \
- params->param4 = param4; \
- params->param5 = param5; \
- params->param6 = param6; \
- END_SETUP() \
- } \
- void class::name(const SavePoint &savepoint) { \
- EXPOSE_PARAMS(EntityData::EntityParametersSIII) \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%s, %d, %d, %d) - action: %s", (char *)&params->seq, params->param4, params->param5, params->param6, ACTION_NAME(savepoint.action));
-
-#define IMPLEMENT_FUNCTION_SIIS(index, class, name, paramType2, paramType3) \
- void class::setup_##name(const char *seq1, paramType2 param4, paramType3 param5, const char *seq2) { \
- BEGIN_SETUP(class, name, index, EntityData::EntityParametersSIIS) \
- EntityData::EntityParametersSIIS *params = (EntityData::EntityParametersSIIS*)_data->getCurrentParameters(); \
- strncpy((char *)&params->seq1, seq1, 12); \
- params->param4 = param4; \
- params->param5 = param5; \
- strncpy((char *)&params->seq2, seq2, 12); \
- END_SETUP() \
- } \
- void class::name(const SavePoint &savepoint) { \
- EXPOSE_PARAMS(EntityData::EntityParametersSIIS) \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%s, %d, %d, %s) - action: %s", (char *)&params->seq1, params->param4, params->param5, (char *)&params->seq2, ACTION_NAME(savepoint.action));
-
-#define IMPLEMENT_FUNCTION_SS(index, class, name) \
- void class::setup_##name(const char *seq1, const char *seq2) { \
- BEGIN_SETUP(class, name, index, EntityData::EntityParametersSSII) \
- EntityData::EntityParametersSSII *params = (EntityData::EntityParametersSSII*)_data->getCurrentParameters(); \
- strncpy((char *)&params->seq1, seq1, 12); \
- strncpy((char *)&params->seq2, seq2, 12); \
- END_SETUP() \
- } \
- void class::name(const SavePoint &savepoint) { \
- EXPOSE_PARAMS(EntityData::EntityParametersSSII) \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%s, %s) - action: %s", (char *)&params->seq1, (char *)&params->seq2, ACTION_NAME(savepoint.action));
-
-#define IMPLEMENT_FUNCTION_SSI(index, class, name, paramType3) \
- void class::setup_##name(const char *seq1, const char *seq2, paramType3 param7) { \
- BEGIN_SETUP(class, name, index, EntityData::EntityParametersSSII) \
- EntityData::EntityParametersSSII *params = (EntityData::EntityParametersSSII*)_data->getCurrentParameters(); \
- strncpy((char *)&params->seq1, seq1, 12); \
- strncpy((char *)&params->seq2, seq2, 12); \
- params->param7 = param7; \
- END_SETUP() \
- } \
- void class::name(const SavePoint &savepoint) { \
- EXPOSE_PARAMS(EntityData::EntityParametersSSII) \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%s, %s, %d) - action: %s", (char *)&params->seq1, (char *)&params->seq2, params->param7, ACTION_NAME(savepoint.action));
-
-#define IMPLEMENT_FUNCTION_IS(index, class, name, paramType) \
- void class::setup_##name(paramType param1, const char *seq) { \
- BEGIN_SETUP(class, name, index, EntityData::EntityParametersISII) \
- EntityData::EntityParametersISII *params = (EntityData::EntityParametersISII*)_data->getCurrentParameters(); \
- params->param1 = (unsigned int)param1; \
- strncpy((char *)&params->seq, seq, 12); \
- END_SETUP() \
- } \
- void class::name(const SavePoint &savepoint) { \
- EXPOSE_PARAMS(EntityData::EntityParametersISII) \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%d, %s) - action: %s", params->param1, (char *)&params->seq, ACTION_NAME(savepoint.action));
-
-#define IMPLEMENT_FUNCTION_ISS(index, class, name, paramType) \
- void class::setup_##name(paramType param1, const char *seq1, const char *seq2) { \
- BEGIN_SETUP(class, name, index, EntityData::EntityParametersISSI) \
- EntityData::EntityParametersISSI *params = (EntityData::EntityParametersISSI*)_data->getCurrentParameters(); \
- params->param1 = param1; \
- strncpy((char *)&params->seq1, seq1, 12); \
- strncpy((char *)&params->seq2, seq2, 12); \
- END_SETUP() \
- } \
- void class::name(const SavePoint &savepoint) { \
- EXPOSE_PARAMS(EntityData::EntityParametersISSI) \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%d, %s, %s) - action: %s", params->param1, (char *)&params->seq1, (char *)&params->seq2, ACTION_NAME(savepoint.action));
-
-#define IMPLEMENT_FUNCTION_IIS(index, class, name, paramType1, paramType2) \
- void class::setup_##name(paramType1 param1, paramType2 param2, const char *seq) { \
- BEGIN_SETUP(class, name, index, EntityData::EntityParametersIISI) \
- EntityData::EntityParametersIISI *params = (EntityData::EntityParametersIISI*)_data->getCurrentParameters(); \
- params->param1 = param1; \
- params->param2 = param2; \
- strncpy((char *)&params->seq, seq, 12); \
- END_SETUP() \
- } \
- void class::name(const SavePoint &savepoint) { \
- EXPOSE_PARAMS(EntityData::EntityParametersIISI) \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%d, %d, %s) - action: %s", params->param1, params->param2, (char *)&params->seq, ACTION_NAME(savepoint.action));
-
-#define IMPLEMENT_FUNCTION_IISS(index, class, name, paramType1, paramType2) \
- void class::setup_##name(paramType1 param1, paramType2 param2, const char *seq1, const char *seq2) { \
- BEGIN_SETUP(class, name, index, EntityData::EntityParametersIISS) \
- EntityData::EntityParametersIISS *params = (EntityData::EntityParametersIISS*)_data->getCurrentParameters(); \
- params->param1 = param1; \
- params->param2 = param2; \
- strncpy((char *)&params->seq1, seq1, 12); \
- strncpy((char *)&params->seq2, seq2, 12); \
- END_SETUP() \
- } \
- void class::name(const SavePoint &savepoint) { \
- EXPOSE_PARAMS(EntityData::EntityParametersIISS) \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%d, %d, %s, %s) - action: %s", params->param1, params->param2, (char *)&params->seq1, (char *)&params->seq2, ACTION_NAME(savepoint.action));
-
-
-//////////////////////////////////////////////////////////////////////////
-// Misc
-//////////////////////////////////////////////////////////////////////////
-#define RESET_ENTITY_STATE(entity, class, function) \
- getEntities()->resetState(entity); \
- ((class *)getEntities()->get(entity))->function();
-
-//////////////////////////////////////////////////////////////////////////
-// Parameters macros (for default IIII parameters)
-//////////////////////////////////////////////////////////////////////////
-#define CURRENT_PARAM(index, id) \
- ((EntityData::EntityParametersIIII*)_data->getCurrentParameters(index))->param##id
-
-#define ENTITY_PARAM(index, id) \
- ((EntityData::EntityParametersIIII*)_data->getParameters(8, index))->param##id
-
-//////////////////////////////////////////////////////////////////////////
-// Time check macros
-//////////////////////////////////////////////////////////////////////////
-#define TIME_CHECK(timeValue, parameter, function) \
- if (getState()->time > timeValue && !parameter) { \
- parameter = 1; \
- function(); \
- break; \
- }
-
-#define TIME_CHECK_SAVEPOINT(timeValue, parameter, entity1, entity2, action) \
- if (getState()->time > timeValue && !parameter) { \
- parameter = 1; \
- getSavePoints()->push(entity1, entity2, action); \
- }
-
-#define TIME_CHECK_CALLBACK(timeValue, parameter, callback, function) \
- if (getState()->time > timeValue && !parameter) { \
- parameter = 1; \
- setCallback(callback); \
- function(); \
- break; \
- }
-
-#define TIME_CHECK_CALLBACK_1(timeValue, parameter, callback, function, param1) \
- if (getState()->time > timeValue && !parameter) { \
- parameter = 1; \
- setCallback(callback); \
- function(param1); \
- break; \
- }
-
-#define TIME_CHECK_CALLBACK_2(timeValue, parameter, callback, function, param1, param2) \
- if (getState()->time > timeValue && !parameter) { \
- parameter = 1; \
- setCallback(callback); \
- function(param1, param2); \
- break; \
- }
-
-#define TIME_CHECK_CALLBACK_3(timeValue, parameter, callback, function, param1, param2, param3) \
- if (getState()->time > timeValue && !parameter) { \
- parameter = 1; \
- setCallback(callback); \
- function(param1, param2, param3); \
- break; \
- }
-
-#define TIME_CHECK_CALLBACK_INVENTORY(timeValue, parameter, callback, function) \
- if (getState()->time > timeValue && !parameter) { \
- parameter = 1; \
- getData()->inventoryItem = kItemNone; \
- setCallback(callback); \
- function(); \
- break; \
- }
-
-#define TIME_CHECK_CALLBACK_ACTION(timeValue, parameter) \
- if (getState()->time > timeValue && !parameter) { \
- parameter = 1; \
- CALLBACK_ACTION(); \
- break; \
- }
-
-#define TIME_CHECK_PLAYSOUND_UPDATEPOSITION(timeValue, parameter, callback, sound, position) \
- if (getState()->time > timeValue && !parameter) { \
- parameter = 1; \
- getData()->entityPosition = position; \
- setCallback(callback); \
- setup_playSound(sound); \
- break; \
- }
-
-#define TIME_CHECK_OBJECT(timeValue, parameter, object, location) \
- if (getState()->time > timeValue && !parameter) { \
- parameter = 1; \
- getObjects()->updateLocation2(object, location); \
- }
-
-#define TIME_CHECK_CAR(timeValue, parameter, callback, function) {\
- if ((getState()->time <= timeValue && !getEntities()->isPlayerInCar(kCarGreenSleeping)) || !parameter) \
- parameter = (uint)getState()->time + 75; \
- if (getState()->time > timeValue || parameter < getState()->time) { \
- parameter = kTimeInvalid; \
- setCallback(callback); \
- function(); \
- break; \
- } \
-}
-
-//////////////////////////////////////////////////////////////////////////
-// Callback action
-//////////////////////////////////////////////////////////////////////////
-#define CALLBACK_ACTION() { \
- if (getData()->currentCall == 0) \
- error("[CALLBACK_ACTION] currentCall is already 0, cannot proceed"); \
- getData()->currentCall--; \
- getSavePoints()->setCallback(_entityIndex, _callbacks[_data->getCurrentCallback()]); \
- getSavePoints()->call(_entityIndex, _entityIndex, kActionCallback); \
- }
-
-//////////////////////////////////////////////////////////////////////////
-// Param update
-//////////////////////////////////////////////////////////////////////////
-#define UPDATE_PARAM(parameter, type, value) { \
- if (!parameter) \
- parameter = (uint)(type + value); \
- if (parameter >= type) \
- break; \
- parameter = kTimeInvalid; \
-}
-
-// Todo: replace with UPDATE_PARAM_PROC as appropriate
-#define UPDATE_PARAM_GOTO(parameter, type, value, label) { \
- if (!parameter) \
- parameter = (uint)(type + value); \
- if (parameter >= type) \
- goto label; \
- parameter = kTimeInvalid; \
-}
-
-// Updating parameter with code inside the check
-#define UPDATE_PARAM_PROC(parameter, type, value) \
- if (!parameter) \
- parameter = (uint)(type + value); \
- if (parameter < type) { \
- parameter = kTimeInvalid;
-
-#define UPDATE_PARAM_PROC_TIME(timeValue, test, parameter, value) \
- if (getState()->time <= timeValue) { \
- if (test || !parameter) \
- parameter = (uint)(getState()->time + value); \
- } \
- if (parameter < getState()->time || getState()->time > timeValue) { \
- parameter = kTimeInvalid;
-
-#define UPDATE_PARAM_PROC_END }
-
-// Updating parameter with an added check (and code inside the check)
-#define UPDATE_PARAM_CHECK(parameter, type, value) \
- if (!parameter || parameter < type) { \
- if (!parameter) \
- parameter = (uint)(type + value);
-
-//////////////////////////////////////////////////////////////////////////
-// Compartments
-//////////////////////////////////////////////////////////////////////////
-// Go from one compartment to another (or the same one if no optional args are passed
-#define COMPARTMENT_TO(class, compartmentFrom, positionFrom, sequenceFrom, sequenceTo) \
- switch (savepoint.action) { \
- default: \
- break; \
- case kActionDefault: \
- getData()->entityPosition = positionFrom; \
- setCallback(1); \
- setup_enterExitCompartment(sequenceFrom, compartmentFrom); \
- break; \
- case kActionCallback: \
- switch (getCallback()) { \
- default: \
- break; \
- case 1: \
- setCallback(2); \
- setup_enterExitCompartment(sequenceTo, compartmentFrom); \
- break; \
- case 2: \
- getData()->entityPosition = positionFrom; \
- getEntities()->clearSequences(_entityIndex); \
- CALLBACK_ACTION(); \
- } \
- break; \
- }
-
-#define COMPARTMENT_FROM_TO(class, compartmentFrom, positionFrom, sequenceFrom, compartmentTo, positionTo, sequenceTo) \
- switch (savepoint.action) { \
- default: \
- break; \
- case kActionDefault: \
- getData()->entityPosition = positionFrom; \
- getData()->location = kLocationOutsideCompartment; \
- setCallback(1); \
- setup_enterExitCompartment(sequenceFrom, compartmentFrom); \
- break; \
- case kActionCallback: \
- switch (getCallback()) { \
- default: \
- break; \
- case 1: \
- setCallback(2); \
- setup_updateEntity(kCarGreenSleeping, positionTo); \
- break; \
- case 2: \
- setCallback(3); \
- setup_enterExitCompartment(sequenceTo, compartmentTo); \
- break; \
- case 3: \
- getData()->location = kLocationInsideCompartment; \
- getEntities()->clearSequences(_entityIndex); \
- CALLBACK_ACTION(); \
- break; \
- } \
- break; \
- }
} // End of namespace LastExpress
diff --git a/engines/lastexpress/entities/francois.cpp b/engines/lastexpress/entities/francois.cpp
index 46cd790ffb..d2bbc9854c 100644
--- a/engines/lastexpress/entities/francois.cpp
+++ b/engines/lastexpress/entities/francois.cpp
@@ -32,7 +32,6 @@
#include "lastexpress/sound/queue.h"
-#include "lastexpress/helpers.h"
#include "lastexpress/lastexpress.h"
namespace LastExpress {
@@ -114,7 +113,7 @@ IMPLEMENT_FUNCTION_II(8, Francois, updateEntity, CarIndex, EntityPosition)
case kActionNone:
if (getEntities()->updateEntity(_entityIndex, (CarIndex)params->param1, (EntityPosition)params->param2)) {
- CALLBACK_ACTION();
+ callbackAction();
} else {
if (!getEntities()->isDistanceBetweenEntities(kEntityFrancois, kEntityPlayer, 2000)
|| !getInventory()->hasItem(kItemFirebird)
@@ -169,7 +168,7 @@ IMPLEMENT_FUNCTION_II(8, Francois, updateEntity, CarIndex, EntityPosition)
case kActionDefault:
if (getEntities()->updateEntity(_entityIndex, (CarIndex)params->param1, (EntityPosition)params->param2))
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionCallback:
@@ -225,7 +224,7 @@ IMPLEMENT_FUNCTION(9, Francois, function9)
case 2:
getData()->location = kLocationOutsideCompartment;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -263,7 +262,7 @@ IMPLEMENT_FUNCTION(10, Francois, function10)
getData()->location = kLocationInsideCompartment;
getEntities()->clearSequences(kEntityFrancois);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -279,7 +278,7 @@ IMPLEMENT_FUNCTION_I(11, Francois, function11, TimeValue)
case kActionNone:
if (!getSoundQueue()->isBuffered(kEntityFrancois)) {
- UPDATE_PARAM_PROC(CURRENT_PARAM(1, 1), getState()->timeTicks, params->param6)
+ if (Entity::updateParameter(CURRENT_PARAM(1, 1), getState()->timeTicks, params->param6)) {
switch (rnd(7)) {
default:
break;
@@ -312,7 +311,7 @@ IMPLEMENT_FUNCTION_I(11, Francois, function11, TimeValue)
params->param6 = 15 * rnd(7);
CURRENT_PARAM(1, 1) = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (!getEntities()->hasValidFrame(kEntityFrancois) || !getEntities()->isWalkingOppositeToPlayer(kEntityFrancois))
@@ -442,7 +441,7 @@ label_callback:
break;
case 5:
- CALLBACK_ACTION();
+ callbackAction();
break;
case 6:
@@ -465,7 +464,7 @@ label_callback:
getData()->field_4A3 = 30;
getData()->inventoryItem = kItemNone;
- CALLBACK_ACTION();
+ callbackAction();
break;
case kAction205346192:
@@ -524,7 +523,7 @@ IMPLEMENT_FUNCTION(12, Francois, function12)
break;
case 7:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -609,7 +608,7 @@ IMPLEMENT_FUNCTION(13, Francois, function13)
break;
case 11:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -708,7 +707,7 @@ IMPLEMENT_FUNCTION_IIS(14, Francois, function14, ObjectIndex, EntityPosition)
break;
case 13:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -764,7 +763,7 @@ IMPLEMENT_FUNCTION(15, Francois, function15)
case 7:
if (!getEntities()->isInsideCompartment(kEntityMmeBoutarel, kCarRedSleeping, kPosition_5790)) {
- CALLBACK_ACTION();
+ callbackAction();
break;
}
@@ -773,7 +772,7 @@ IMPLEMENT_FUNCTION(15, Francois, function15)
break;
case 8:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -830,7 +829,7 @@ IMPLEMENT_FUNCTION(16, Francois, function16)
getData()->entityPosition = kPosition_5790;
getData()->location = kLocationInsideCompartment;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -849,7 +848,7 @@ IMPLEMENT_FUNCTION(17, Francois, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Francois, setup_chapter1Handler));
break;
case kActionDefault:
@@ -867,7 +866,7 @@ IMPLEMENT_FUNCTION(18, Francois, chapter1Handler)
break;
case kActionNone:
- TIME_CHECK_CALLBACK_1(kTimeParisEpernay, params->param1, 1, setup_function11, kTime1093500);
+ timeCheckCallback(kTimeParisEpernay, params->param1, 1, kTime1093500);
break;
case kActionCallback:
@@ -884,7 +883,7 @@ IMPLEMENT_FUNCTION(19, Francois, function19)
break;
case kActionNone:
- TIME_CHECK_CALLBACK(kTime1161000, params->param1, 2, setup_function12);
+ Entity::timeCheckCallback(kTime1161000, params->param1, 2, WRAP_SETUP_FUNCTION(Francois, setup_function12));
break;
case kAction101107728:
@@ -979,17 +978,21 @@ IMPLEMENT_FUNCTION(23, Francois, function23)
}
label_callback_1:
- TIME_CHECK_CALLBACK_1(kTime1764000, params->param1, 2, setup_playSound, "Fra2011");
+ if (Entity::timeCheckCallback(kTime1764000, params->param1, 2, "Fra2011", WRAP_SETUP_FUNCTION_S(Francois, setup_playSound)))
+ break;
label_callback_2:
- TIME_CHECK_CALLBACK(kTime1800000, params->param2, 3, setup_function13);
+ if (Entity::timeCheckCallback(kTime1800000, params->param2, 3, WRAP_SETUP_FUNCTION(Francois, setup_function13)))
+ break;
label_callback_3:
if (!getInventory()->hasItem(kItemWhistle) && getInventory()->get(kItemWhistle)->location != kObjectLocation3) {
- TIME_CHECK_CALLBACK_1(kTime1768500, params->param3, 4, setup_function11, kTime1773000);
+ if (timeCheckCallback(kTime1768500, params->param3, 4, kTime1773000))
+ break;
label_callback_4:
- TIME_CHECK_CALLBACK_1(kTime1827000, params->param4, 5, setup_function11, kTime1831500);
+ if (timeCheckCallback(kTime1827000, params->param4, 5, kTime1831500))
+ break;
}
label_callback_5:
@@ -999,18 +1002,19 @@ label_callback_5:
}
if (params->param5 != kTimeInvalid) {
- UPDATE_PARAM_PROC_TIME(kTimeEnd, !getEntities()->isDistanceBetweenEntities(kEntityFrancois, kEntityPlayer, 2000), params->param5, 75);
+ if (Entity::updateParameterTime(kTimeEnd, !getEntities()->isDistanceBetweenEntities(kEntityFrancois, kEntityPlayer, 2000), params->param5, 75)) {
setCallback(6);
setup_playSound("Fra2010");
break;
- UPDATE_PARAM_PROC_END
+ }
}
label_callback_6:
- TIME_CHECK_CALLBACK_3(kTime1782000, params->param6, 7, setup_function14, kObjectCompartmentC, kPosition_6470, "c");
+ if (timeCheckCallbackCompartment(kTime1782000, params->param6, 7, kObjectCompartmentC, kPosition_6470, "c"))
+ break;
label_callback_7:
- TIME_CHECK_CALLBACK_3(kTime1813500, params->param7, 8, setup_function14, kObjectCompartmentF, kPosition_4070, "f");
+ timeCheckCallbackCompartment(kTime1813500, params->param7, 8, kObjectCompartmentF, kPosition_4070, "f");
break;
case kActionCallback:
@@ -1086,32 +1090,41 @@ IMPLEMENT_FUNCTION(25, Francois, chapter3Handler)
}
label_callback_2:
- TIME_CHECK_CALLBACK(kTime2025000, params->param3, 3, setup_function12);
+ if (Entity::timeCheckCallback(kTime2025000, params->param3, 3, WRAP_SETUP_FUNCTION(Francois, setup_function12)))
+ break;
label_callback_3:
- TIME_CHECK_CALLBACK(kTime2052000, params->param4, 4, setup_function12);
+ if (Entity::timeCheckCallback(kTime2052000, params->param4, 4, WRAP_SETUP_FUNCTION(Francois, setup_function12)))
+ break;
label_callback_4:
- TIME_CHECK_CALLBACK(kTime2079000, params->param5, 5, setup_function12);
+ if (Entity::timeCheckCallback(kTime2079000, params->param5, 5, WRAP_SETUP_FUNCTION(Francois, setup_function12)))
+ break;
label_callback_5:
- TIME_CHECK_CALLBACK(kTime2092500, params->param6, 6, setup_function12);
+ if (Entity::timeCheckCallback(kTime2092500, params->param6, 6, WRAP_SETUP_FUNCTION(Francois, setup_function12)))
+ break;
label_callback_6:
- TIME_CHECK_CALLBACK(kTime2173500, params->param7, 7, setup_function12);
+ if (Entity::timeCheckCallback(kTime2173500, params->param7, 7, WRAP_SETUP_FUNCTION(Francois, setup_function12)))
+ break;
label_callback_7:
- TIME_CHECK_CALLBACK(kTime2182500, params->param8, 8, setup_function12);
+ if (Entity::timeCheckCallback(kTime2182500, params->param8, 8, WRAP_SETUP_FUNCTION(Francois, setup_function12)))
+ break;
label_callback_8:
- TIME_CHECK_CALLBACK(kTime2241000, CURRENT_PARAM(1, 1), 9, setup_function12);
+ if (Entity::timeCheckCallback(kTime2241000, CURRENT_PARAM(1, 1), 9, WRAP_SETUP_FUNCTION(Francois, setup_function12)))
+ break;
label_callback_9:
if (!getInventory()->hasItem(kItemWhistle) && getInventory()->get(kItemWhistle)->location != kObjectLocation3) {
- TIME_CHECK_CALLBACK_1(kTime2011500, CURRENT_PARAM(1, 2), 10, setup_function11, kTime2016000);
+ if (timeCheckCallback(kTime2011500, CURRENT_PARAM(1, 2), 10, kTime2016000))
+ break;
label_callback_10:
- TIME_CHECK_CALLBACK_1(kTime2115000, CURRENT_PARAM(1, 3), 11, setup_function11, kTime2119500);
+ if (timeCheckCallback(kTime2115000, CURRENT_PARAM(1, 3), 11, kTime2119500))
+ break;
}
label_callback_11:
@@ -1129,13 +1142,15 @@ label_callback_11:
}
label_callback_12:
- TIME_CHECK_CALLBACK_3(kTime2040300, CURRENT_PARAM(1, 5), 13, setup_function14, kObjectCompartmentE, kPosition_4840, "e");
+ if (timeCheckCallbackCompartment(kTime2040300, CURRENT_PARAM(1, 5), 13, kObjectCompartmentE, kPosition_4840, "e"))
+ break;
label_callback_13:
- TIME_CHECK_CALLBACK_3(kTime2040300, CURRENT_PARAM(1, 6), 14, setup_function14, kObjectCompartmentF, kPosition_4070, "f");
+ if (timeCheckCallbackCompartment(kTime2040300, CURRENT_PARAM(1, 6), 14, kObjectCompartmentF, kPosition_4070, "f"))
+ break;
label_callback_14:
- TIME_CHECK_CALLBACK_3(kTime2040300, CURRENT_PARAM(1, 7), 15, setup_function14, kObjectCompartmentB, kPosition_7500, "b");
+ timeCheckCallbackCompartment(kTime2040300, CURRENT_PARAM(1, 7), 15, kObjectCompartmentB, kPosition_7500, "b");
}
}
break;
@@ -1291,4 +1306,33 @@ IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_NULL_FUNCTION(31, Francois)
+
+//////////////////////////////////////////////////////////////////////////
+// Helper functions
+//////////////////////////////////////////////////////////////////////////
+bool Francois::timeCheckCallbackCompartment(TimeValue timeValue, uint &parameter, byte callback, ObjectIndex compartment, EntityPosition position, const char* sequenceSuffix) {
+ if (getState()->time > timeValue && !parameter) {
+ parameter = 1;
+ setCallback(callback);
+ setup_function14(compartment, position, sequenceSuffix);
+
+ return true;
+ }
+
+ return false;
+}
+
+bool Francois::timeCheckCallback(TimeValue timeValue, uint &parameter, byte callback, TimeValue timeValue2) {
+ if (getState()->time > timeValue && !parameter) {
+ parameter = 1;
+ setCallback(callback);
+ setup_function11(timeValue2);
+
+ return true;
+ }
+
+ return false;
+}
+
+
} // End of namespace LastExpress
diff --git a/engines/lastexpress/entities/francois.h b/engines/lastexpress/entities/francois.h
index 19eca6fb50..51270fa4b6 100644
--- a/engines/lastexpress/entities/francois.h
+++ b/engines/lastexpress/entities/francois.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_FRANCOIS_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
@@ -160,6 +159,10 @@ public:
DECLARE_FUNCTION(function30)
DECLARE_NULL_FUNCTION()
+
+private:
+ bool timeCheckCallbackCompartment(TimeValue timeValue, uint &parameter, byte callback, ObjectIndex compartment, EntityPosition position, const char* sequenceSuffix);
+ bool timeCheckCallback(TimeValue timeValue, uint &parameter, byte callback, TimeValue timeValue2);
};
} // End of namespace LastExpress
diff --git a/engines/lastexpress/entities/gendarmes.cpp b/engines/lastexpress/entities/gendarmes.cpp
index daa50956d3..a912fa4ecb 100644
--- a/engines/lastexpress/entities/gendarmes.cpp
+++ b/engines/lastexpress/entities/gendarmes.cpp
@@ -31,7 +31,6 @@
#include "lastexpress/game/state.h"
#include "lastexpress/lastexpress.h"
-#include "lastexpress/helpers.h"
namespace LastExpress {
@@ -67,7 +66,7 @@ IMPLEMENT_FUNCTION(2, Gendarmes, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Gendarmes, setup_chapter1Handler));
break;
case kActionDefault:
@@ -195,7 +194,7 @@ IMPLEMENT_FUNCTION_IISS(9, Gendarmes, function9, CarIndex, EntityPosition)
break;
case 1:
- CALLBACK_ACTION();
+ callbackAction();
break;
case 2:
@@ -233,7 +232,7 @@ IMPLEMENT_FUNCTION_IISS(9, Gendarmes, function9, CarIndex, EntityPosition)
case 6:
getData()->location = kLocationOutsideCompartment;
getEntities()->exitCompartment(kEntityGendarmes, (ObjectIndex)parameters2->param5);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -267,11 +266,12 @@ IMPLEMENT_FUNCTION_III(10, Gendarmes, function10, CarIndex, EntityPosition, Obje
getSound()->playSound(kEntityGendarmes, "POL1046A", kFlagDefault);
}
- UPDATE_PARAM(params->param7, getState()->timeTicks, 300);
+ if (!Entity::updateParameter(params->param7, getState()->timeTicks, 300))
+ break;
if (!params->param4 && getEntities()->isOutsideAlexeiWindow()) {
getObjects()->update((ObjectIndex)params->param3, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);
- CALLBACK_ACTION();
+ callbackAction();
} else {
if (getEntities()->isOutsideAlexeiWindow())
getScenes()->loadSceneFromPosition(kCarGreenSleeping, 49);
@@ -322,7 +322,7 @@ IMPLEMENT_FUNCTION_III(10, Gendarmes, function10, CarIndex, EntityPosition, Obje
getLogic()->gameOver(kSavegameTypeIndex, 1, kSceneGameOverBloodJacket, true);
getObjects()->update((ObjectIndex)params->param3, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);
- CALLBACK_ACTION();
+ callbackAction();
break;
case 4:
@@ -330,7 +330,7 @@ IMPLEMENT_FUNCTION_III(10, Gendarmes, function10, CarIndex, EntityPosition, Obje
getLogic()->gameOver(kSavegameTypeIndex, 1, kSceneGameOverPolice1, true);
getObjects()->update((ObjectIndex)params->param3, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);
- CALLBACK_ACTION();
+ callbackAction();
break;
case 5:
@@ -552,13 +552,14 @@ void Gendarmes::arrest(const SavePoint &savepoint, bool shouldPlaySound, SoundFl
case kActionNone:
if (checkCallback) {
EXPOSE_PARAMS(EntityData::EntityParametersIIII);
- TIME_CHECK_CALLBACK_ACTION(params->param1, params->param2);
+ if (Entity::timeCheckCallbackAction((TimeValue)params->param1, params->param2))
+ break;
}
if (shouldUpdateEntity) {
EXPOSE_PARAMS(EntityData::EntityParametersIIII);
if (getEntities()->updateEntity(kEntityGendarmes, (CarIndex)params->param1, (EntityPosition)params->param2)) {
- CALLBACK_ACTION();
+ callbackAction();
break;
}
}
@@ -582,7 +583,7 @@ void Gendarmes::arrest(const SavePoint &savepoint, bool shouldPlaySound, SoundFl
break;
case kActionExitCompartment:
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionDefault:
@@ -599,7 +600,7 @@ void Gendarmes::arrest(const SavePoint &savepoint, bool shouldPlaySound, SoundFl
if (shouldUpdateEntity) {
EXPOSE_PARAMS(EntityData::EntityParametersIIII);
if (getEntities()->updateEntity(kEntityGendarmes, (CarIndex)params->param1, (EntityPosition)params->param2)) {
- CALLBACK_ACTION();
+ callbackAction();
break;
}
}
diff --git a/engines/lastexpress/entities/gendarmes.h b/engines/lastexpress/entities/gendarmes.h
index d999cfc1fd..a761643531 100644
--- a/engines/lastexpress/entities/gendarmes.h
+++ b/engines/lastexpress/entities/gendarmes.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_GENDARMES_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
#include "lastexpress/sound/sound.h"
diff --git a/engines/lastexpress/entities/hadija.cpp b/engines/lastexpress/entities/hadija.cpp
index 8ec972b939..e9abcd888a 100644
--- a/engines/lastexpress/entities/hadija.cpp
+++ b/engines/lastexpress/entities/hadija.cpp
@@ -28,10 +28,7 @@
#include "lastexpress/game/savepoint.h"
#include "lastexpress/game/state.h"
-#include "lastexpress/sound/sound.h"
-
#include "lastexpress/lastexpress.h"
-#include "lastexpress/helpers.h"
namespace LastExpress {
@@ -89,22 +86,22 @@ IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(6, Hadija, compartment6)
- COMPARTMENT_TO(Hadija, kObjectCompartment6, kPosition_4070, "619Cf", "619Df");
+ Entity::goToCompartment(savepoint, kObjectCompartment6, kPosition_4070, "619Cf", "619Df");
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(7, Hadija, compartment8)
- COMPARTMENT_TO(Hadija, kObjectCompartment8, kPosition_2740, "619Ch", "619Dh");
+ Entity::goToCompartment(savepoint, kObjectCompartment8, kPosition_2740, "619Ch", "619Dh");
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(8, Hadija, compartment6to8)
- COMPARTMENT_FROM_TO(Hadija, kObjectCompartment6, kPosition_4070, "619Bf", kObjectCompartment8, kPosition_2740, "619Ah");
+ Entity::goToCompartmentFromCompartment(savepoint, kObjectCompartment6, kPosition_4070, "619Bf", kObjectCompartment8, kPosition_2740, "619Ah");
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(9, Hadija, compartment8to6)
- COMPARTMENT_FROM_TO(Hadija, kObjectCompartment8, kPosition_2740, "619Bh", kObjectCompartment6, kPosition_4070, "619Af");
+ Entity::goToCompartmentFromCompartment(savepoint, kObjectCompartment8, kPosition_2740, "619Bh", kObjectCompartment6, kPosition_4070, "619Af");
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
@@ -114,7 +111,7 @@ IMPLEMENT_FUNCTION(10, Hadija, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Hadija, setup_chapter1Handler));
break;
case kActionDefault:
@@ -133,10 +130,12 @@ IMPLEMENT_FUNCTION(11, Hadija, chapter1Handler)
break;
case kActionNone:
- TIME_CHECK_PLAYSOUND_UPDATEPOSITION(kTimeParisEpernay, params->param1, 1, "Har1100", kPosition_4840);
+ if (Entity::timeCheckPlaySoundUpdatePosition(kTimeParisEpernay, params->param1, 1, "Har1100", kPosition_4840))
+ break;
label_callback1:
- TIME_CHECK_CALLBACK(kTime1084500, params->param2, 2, setup_compartment6to8);
+ if (Entity::timeCheckCallback(kTime1084500, params->param2, 2, WRAP_SETUP_FUNCTION(Hadija, setup_compartment6to8)))
+ break;
label_callback2:
if (params->param3 != kTimeInvalid && getState()->time > kTime1093500) {
@@ -164,7 +163,8 @@ label_callback2:
}
label_callback3:
- TIME_CHECK_CALLBACK(kTime1156500, params->param4, 4, setup_compartment8to6);
+ if (Entity::timeCheckCallback(kTime1156500, params->param4, 4, WRAP_SETUP_FUNCTION(Hadija, setup_compartment8to6)))
+ break;
label_callback4:
if (params->param5 != kTimeInvalid && getState()->time > kTime1165500) {
@@ -254,7 +254,7 @@ IMPLEMENT_FUNCTION(14, Hadija, chapter2Handler)
}
if (params->param2 == kTimeInvalid || getState()->time <= kTime1786500) {
- TIME_CHECK_CALLBACK(kTime1822500, params->param3, 2, setup_compartment8to6);
+ Entity::timeCheckCallback(kTime1822500, params->param3, 2, WRAP_SETUP_FUNCTION(Hadija, setup_compartment8to6));
break;
}
@@ -264,7 +264,7 @@ IMPLEMENT_FUNCTION(14, Hadija, chapter2Handler)
params->param2 = (uint)getState()->time + 75;
if (params->param2 >= getState()->time) {
- TIME_CHECK_CALLBACK(kTime1822500, params->param3, 2, setup_compartment8to6);
+ Entity::timeCheckCallback(kTime1822500, params->param3, 2, WRAP_SETUP_FUNCTION(Hadija, setup_compartment8to6));
break;
}
}
@@ -281,7 +281,7 @@ IMPLEMENT_FUNCTION(14, Hadija, chapter2Handler)
break;
case 1:
- TIME_CHECK_CALLBACK(kTime1822500, params->param3, 2, setup_compartment8to6);
+ Entity::timeCheckCallback(kTime1822500, params->param3, 2, WRAP_SETUP_FUNCTION(Hadija, setup_compartment8to6));
break;
case 2:
@@ -321,20 +321,26 @@ IMPLEMENT_FUNCTION(16, Hadija, chapter3Handler)
break;
case kActionNone:
- TIME_CHECK_CALLBACK(kTime1998000, params->param1, 1, setup_compartment6to8);
+ if (Entity::timeCheckCallback(kTime1998000, params->param1, 1, WRAP_SETUP_FUNCTION(Hadija, setup_compartment6to8)))
+ break;
label_callback1:
- TIME_CHECK_CALLBACK(kTime2020500, params->param2, 2, setup_compartment8to6);
+ if (Entity::timeCheckCallback(kTime2020500, params->param2, 2, WRAP_SETUP_FUNCTION(Hadija, setup_compartment8to6)))
+ break;
label_callback2:
- TIME_CHECK_CALLBACK(kTime2079000, params->param3, 3, setup_compartment6to8);
+ if (Entity::timeCheckCallback(kTime2079000, params->param3, 3, WRAP_SETUP_FUNCTION(Hadija, setup_compartment6to8)))
+ break;
label_callback3:
- TIME_CHECK_CALLBACK(kTime2187000, params->param4, 4, setup_compartment8to6);
+ if (Entity::timeCheckCallback(kTime2187000, params->param4, 4, WRAP_SETUP_FUNCTION(Hadija, setup_compartment8to6)))
+ break;
label_callback4:
- if (params->param5 != kTimeInvalid && getState()->time > kTime2196000)
- TIME_CHECK_CAR(kTime2254500, params->param5, 5, setup_compartment6);
+ if (params->param5 != kTimeInvalid && getState()->time > kTime2196000) {
+ if (Entity::timeCheckCar(kTime2254500, params->param5, 5, WRAP_SETUP_FUNCTION(Hadija, setup_compartment6)))
+ break;
+ }
break;
case kActionDefault:
@@ -387,18 +393,24 @@ IMPLEMENT_FUNCTION(18, Hadija, chapter4Handler)
break;
case kActionNone:
- if (params->param1 != kTimeInvalid)
- TIME_CHECK_CAR(kTime1714500, params->param1, 1, setup_compartment6);
+ if (params->param1 != kTimeInvalid) {
+ if (Entity::timeCheckCar(kTime1714500, params->param1, 1, WRAP_SETUP_FUNCTION(Hadija, setup_compartment6)))
+ break;
+ }
label_callback1:
- TIME_CHECK_CALLBACK(kTime2367000, params->param2, 2, setup_compartment6to8);
+ if (Entity::timeCheckCallback(kTime2367000, params->param2, 2, WRAP_SETUP_FUNCTION(Hadija, setup_compartment6to8)))
+ break;
label_callback2:
- TIME_CHECK_CALLBACK(kTime2421000, params->param3, 3, setup_compartment8to6);
+ if (Entity::timeCheckCallback(kTime2421000, params->param3, 3, WRAP_SETUP_FUNCTION(Hadija, setup_compartment8to6)))
+ break;
label_callback3:
- if (params->param4 != kTimeInvalid && getState()->time > kTime2425500)
- TIME_CHECK_CAR(kTime2484000, params->param4, 4, setup_compartment6);
+ if (params->param4 != kTimeInvalid && getState()->time > kTime2425500) {
+ if (Entity::timeCheckCar(kTime2484000, params->param4, 4, WRAP_SETUP_FUNCTION(Hadija, setup_compartment6)))
+ break;
+ }
break;
case kActionCallback:
@@ -468,7 +480,9 @@ IMPLEMENT_FUNCTION(22, Hadija, function22)
break;
case kActionNone:
- UPDATE_PARAM(params->param1, getState()->time, 2700);
+ if (!Entity::updateParameter(params->param1, getState()->time, 2700))
+ break;
+
setup_function23();
break;
diff --git a/engines/lastexpress/entities/hadija.h b/engines/lastexpress/entities/hadija.h
index d2495955e0..545f21ee03 100644
--- a/engines/lastexpress/entities/hadija.h
+++ b/engines/lastexpress/entities/hadija.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_HADIJA_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/ivo.cpp b/engines/lastexpress/entities/ivo.cpp
index f2261b438c..c53f4689fb 100644
--- a/engines/lastexpress/entities/ivo.cpp
+++ b/engines/lastexpress/entities/ivo.cpp
@@ -32,10 +32,7 @@
#include "lastexpress/game/scenes.h"
#include "lastexpress/game/state.h"
-#include "lastexpress/sound/sound.h"
-
#include "lastexpress/lastexpress.h"
-#include "lastexpress/helpers.h"
namespace LastExpress {
@@ -184,7 +181,7 @@ IMPLEMENT_FUNCTION(11, Ivo, function11)
getData()->location = kLocationInsideCompartment;
getEntities()->clearSequences(kEntityIvo);
- CALLBACK_ACTION();
+ callbackAction();
break;
case 4:
@@ -193,7 +190,7 @@ IMPLEMENT_FUNCTION(11, Ivo, function11)
getData()->location = kLocationInsideCompartment;
getEntities()->clearSequences(kEntityIvo);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -210,7 +207,7 @@ IMPLEMENT_FUNCTION(12, Ivo, sitAtTableWithSalko)
getEntities()->clearSequences(kEntitySalko);
getSavePoints()->push(kEntityIvo, kEntityTables2, kAction136455232);
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionDefault:
@@ -231,7 +228,7 @@ IMPLEMENT_FUNCTION(13, Ivo, leaveTableWithSalko)
getSavePoints()->push(kEntityIvo, kEntityTables2, kActionDrawTablesWithChairs, "009E");
getEntities()->clearSequences(kEntitySalko);
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionDefault:
@@ -249,7 +246,7 @@ IMPLEMENT_FUNCTION(14, Ivo, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Ivo, setup_chapter1Handler));
break;
case kActionDefault:
@@ -374,7 +371,7 @@ IMPLEMENT_FUNCTION(18, Ivo, chapter2)
break;
case kActionNone:
- TIME_CHECK(kTime1777500, params->param1, setup_function19);
+ Entity::timeCheck(kTime1777500, params->param1, WRAP_SETUP_FUNCTION(Ivo, setup_function19));
break;
case kActionDefault:
diff --git a/engines/lastexpress/entities/ivo.h b/engines/lastexpress/entities/ivo.h
index cd5cb7b6be..75814336e0 100644
--- a/engines/lastexpress/entities/ivo.h
+++ b/engines/lastexpress/entities/ivo.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_IVO_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/kahina.cpp b/engines/lastexpress/entities/kahina.cpp
index 2918b1e8bd..7860836a26 100644
--- a/engines/lastexpress/entities/kahina.cpp
+++ b/engines/lastexpress/entities/kahina.cpp
@@ -32,10 +32,8 @@
#include "lastexpress/game/state.h"
#include "lastexpress/sound/queue.h"
-#include "lastexpress/sound/sound.h"
#include "lastexpress/lastexpress.h"
-#include "lastexpress/helpers.h"
namespace LastExpress {
@@ -90,7 +88,7 @@ IMPLEMENT_FUNCTION_END
IMPLEMENT_FUNCTION_I(4, Kahina, updateFromTime, uint32)
if (savepoint.action == kAction137503360) {
ENTITY_PARAM(0, 2) = 1;
- CALLBACK_ACTION();
+ callbackAction();
}
Entity::updateFromTime(savepoint);
@@ -111,7 +109,7 @@ IMPLEMENT_FUNCTION_I(6, Kahina, function6, TimeValue)
if (params->param1 < getState()->time && !params->param2) {
params->param2 = 1;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
@@ -141,7 +139,7 @@ IMPLEMENT_FUNCTION_I(6, Kahina, function6, TimeValue)
case 1:
if (ENTITY_PARAM(0, 1) || ENTITY_PARAM(0, 2)) {
- CALLBACK_ACTION();
+ callbackAction();
break;
}
@@ -151,7 +149,7 @@ IMPLEMENT_FUNCTION_I(6, Kahina, function6, TimeValue)
case 2:
case 3:
if (ENTITY_PARAM(0, 1) || ENTITY_PARAM(0, 2)) {
- CALLBACK_ACTION();
+ callbackAction();
break;
}
@@ -163,7 +161,7 @@ IMPLEMENT_FUNCTION_I(6, Kahina, function6, TimeValue)
case 4:
if (ENTITY_PARAM(0, 2)) {
- CALLBACK_ACTION();
+ callbackAction();
break;
}
@@ -173,7 +171,7 @@ IMPLEMENT_FUNCTION_I(6, Kahina, function6, TimeValue)
case 5:
if (ENTITY_PARAM(0, 1) || ENTITY_PARAM(0, 2)) {
- CALLBACK_ACTION();
+ callbackAction();
break;
}
@@ -185,7 +183,7 @@ IMPLEMENT_FUNCTION_I(6, Kahina, function6, TimeValue)
case kAction137503360:
ENTITY_PARAM(0, 2) = 1;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
IMPLEMENT_FUNCTION_END
@@ -198,12 +196,12 @@ IMPLEMENT_FUNCTION_II(7, Kahina, updateEntity2, CarIndex, EntityPosition)
case kActionNone:
if (getEntities()->updateEntity(_entityIndex, (CarIndex)params->param1, (EntityPosition)params->param2))
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionDefault:
if (getEntities()->updateEntity(_entityIndex, (CarIndex)params->param1, (EntityPosition)params->param2)) {
- CALLBACK_ACTION();
+ callbackAction();
} else if (getEntities()->isDistanceBetweenEntities(kEntityKahina, kEntityPlayer, 1000)
&& !getEntities()->isInGreenCarEntrance(kEntityPlayer)
&& !getEntities()->isInsideCompartments(kEntityPlayer)
@@ -211,14 +209,14 @@ IMPLEMENT_FUNCTION_II(7, Kahina, updateEntity2, CarIndex, EntityPosition)
if (getData()->car == kCarGreenSleeping || getData()->car == kCarRedSleeping) {
ENTITY_PARAM(0, 1) = 1;
- CALLBACK_ACTION();
+ callbackAction();
}
}
break;
case kAction137503360:
ENTITY_PARAM(0, 2) = 1;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
IMPLEMENT_FUNCTION_END
@@ -249,7 +247,7 @@ IMPLEMENT_FUNCTION(10, Kahina, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Kahina, setup_chapter1Handler));
break;
case kActionDefault:
@@ -269,7 +267,7 @@ IMPLEMENT_FUNCTION(11, Kahina, chapter1Handler)
return;
if (getProgress().jacket != kJacketOriginal)
- TIME_CHECK_SAVEPOINT(kTime1107000, params->param1, kEntityKahina, kEntityMertens, kAction238732837);
+ Entity::timeCheckSavepoint(kTime1107000, params->param1, kEntityKahina, kEntityMertens, kAction238732837);
if (getProgress().eventMertensKronosInvitation)
setup_function12();
@@ -282,7 +280,7 @@ IMPLEMENT_FUNCTION(12, Kahina, function12)
break;
case kActionNone:
- TIME_CHECK(kTime1485000, params->param2, setup_function13);
+ Entity::timeCheck(kTime1485000, params->param2, WRAP_SETUP_FUNCTION(Kahina, setup_function13));
break;
case kActionKnock:
@@ -372,12 +370,12 @@ IMPLEMENT_FUNCTION(14, Kahina, function14)
case kActionExitCompartment:
getEntities()->exitCompartment(kEntityKahina, kObjectCompartmentF);
- CALLBACK_ACTION();
+ callbackAction();
break;
case kAction4:
getEntities()->exitCompartment(kEntityKahina, kObjectCompartmentF);
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionDefault:
@@ -396,10 +394,10 @@ IMPLEMENT_FUNCTION(15, Kahina, function15)
case kActionNone:
if (params->param2 != kTimeInvalid) {
- UPDATE_PARAM_PROC_TIME(params->param1, !getEntities()->isPlayerInCar(kCarRedSleeping), params->param2, 0)
+ if (Entity::updateParameterTime((TimeValue)params->param1, !getEntities()->isPlayerInCar(kCarRedSleeping), params->param2, 0)) {
setCallback(9);
setup_updateEntity(kCarRedSleeping, kPosition_4070);
- UPDATE_PARAM_PROC_END
+ }
}
break;
@@ -542,7 +540,7 @@ IMPLEMENT_FUNCTION(15, Kahina, function15)
case 17:
getEntities()->clearSequences(kEntityKahina);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -582,18 +580,18 @@ IMPLEMENT_FUNCTION(17, Kahina, chapter2Handler)
case kActionNone:
if (params->param1) {
- UPDATE_PARAM_PROC(params->param2, getState()->time, 9000)
+ if (Entity::updateParameter(params->param2, getState()->time, 9000)) {
params->param1 = 1;
params->param2 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (getEvent(kEventKahinaAskSpeakFirebird) && getEvent(kEventKronosConversationFirebird) && getEntities()->isInsideTrainCar(kEntityPlayer, kCarKronos)) {
- UPDATE_PARAM_PROC(params->param3, getState()->time, 900)
+ if (Entity::updateParameter(params->param3, getState()->time, 900)) {
setCallback(1);
setup_savegame(kSavegameTypeEvent, kEventKronosConversationFirebird);
break;
- UPDATE_PARAM_PROC_END
+ }
}
label_callback_3:
@@ -729,7 +727,7 @@ IMPLEMENT_FUNCTION_II(19, Kahina, function19, CarIndex, EntityPosition)
RESET_ENTITY_STATE(kEntityKahina, Kahina, setup_function22);
if (getEntities()->updateEntity(kEntityKahina, (CarIndex)params->param1, (EntityPosition)params->param2))
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionExcuseMeCath:
@@ -745,7 +743,7 @@ IMPLEMENT_FUNCTION_II(19, Kahina, function19, CarIndex, EntityPosition)
case kActionDefault:
if (getEntities()->updateEntity(kEntityKahina, (CarIndex)params->param1, (EntityPosition)params->param2))
- CALLBACK_ACTION();
+ callbackAction();
break;
}
IMPLEMENT_FUNCTION_END
@@ -787,16 +785,17 @@ label_callback_2:
}
if (!params->param1) {
- UPDATE_PARAM_PROC(params->param3, getState()->time, 9000)
+ if (Entity::updateParameter(params->param3, getState()->time, 9000)) {
params->param1 = 1;
params->param3 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (getEvent(kEventKahinaAskSpeakFirebird)
&& !getEvent(kEventKronosConversationFirebird)
&& getEntities()->isInsideTrainCar(kEntityPlayer, kCarKronos)) {
- UPDATE_PARAM(params->param4, getState()->time, 900);
+ if (!Entity::updateParameter(params->param4, getState()->time, 900))
+ break;
setCallback(3);
setup_savegame(kSavegameTypeEvent, kEventKronosConversationFirebird);
@@ -928,11 +927,11 @@ IMPLEMENT_FUNCTION(21, Kahina, function21)
params->param3 = (uint)getState()->time + 4500;
if (params->param6 != kTimeInvalid) {
- UPDATE_PARAM_PROC_TIME(params->param3, (getEntities()->isPlayerPosition(kCarKronos, 80) || getEntities()->isPlayerPosition(kCarKronos, 88)), params->param5, 0)
+ if (Entity::updateParameterTime((TimeValue)params->param3, (getEntities()->isPlayerPosition(kCarKronos, 80) || getEntities()->isPlayerPosition(kCarKronos, 88)), params->param5, 0)) {
setCallback(2);
setup_function23();
break;
- UPDATE_PARAM_PROC_END
+ }
}
}
@@ -943,14 +942,14 @@ label_callback_2:
params->param4 = (uint)getState()->time + 4500;
if (params->param6 != kTimeInvalid) {
- UPDATE_PARAM_PROC_TIME(params->param3, (getEntities()->isPlayerPosition(kCarKronos, 80) || getEntities()->isPlayerPosition(kCarKronos, 88)), params->param6, 0)
+ if (Entity::updateParameterTime((TimeValue)params->param3, (getEntities()->isPlayerPosition(kCarKronos, 80) || getEntities()->isPlayerPosition(kCarKronos, 88)), params->param6, 0)) {
getSound()->playSound(kEntityPlayer, "LIB014", getSound()->getSoundFlag(kEntityKahina));
getSound()->playSound(kEntityPlayer, "LIB015", getSound()->getSoundFlag(kEntityKahina));
getEntities()->drawSequenceLeft(kEntityKahina, "202a");
params->param2 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
}
@@ -1125,7 +1124,7 @@ IMPLEMENT_FUNCTION(23, Kahina, function23)
case 7:
getEntities()->clearSequences(kEntityKahina);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -1262,7 +1261,7 @@ IMPLEMENT_FUNCTION(25, Kahina, function25)
getProgress().field_78 = 1;
ENTITY_PARAM(0, 3) = 0;
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionCallback:
@@ -1303,7 +1302,7 @@ IMPLEMENT_FUNCTION(25, Kahina, function25)
case 13:
getEntities()->clearSequences(kEntityKahina);
- CALLBACK_ACTION();
+ callbackAction();
break;
case 6:
@@ -1387,7 +1386,7 @@ IMPLEMENT_FUNCTION(26, Kahina, function26)
getInventory()->setLocationAndProcess(kItemBriefcase, kObjectLocation2);
getProgress().field_78 = 1;
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionCallback:
@@ -1429,7 +1428,7 @@ IMPLEMENT_FUNCTION(26, Kahina, function26)
case 9:
getEntities()->clearSequences(kEntityKahina);
- CALLBACK_ACTION();
+ callbackAction();
break;
case 6:
diff --git a/engines/lastexpress/entities/kahina.h b/engines/lastexpress/entities/kahina.h
index b25053e339..7479cf76f9 100644
--- a/engines/lastexpress/entities/kahina.h
+++ b/engines/lastexpress/entities/kahina.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_KAHINA_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/kronos.cpp b/engines/lastexpress/entities/kronos.cpp
index 134dce9c81..26ce3ca424 100644
--- a/engines/lastexpress/entities/kronos.cpp
+++ b/engines/lastexpress/entities/kronos.cpp
@@ -39,10 +39,8 @@
#include "lastexpress/game/state.h"
#include "lastexpress/sound/queue.h"
-#include "lastexpress/sound/sound.h"
#include "lastexpress/lastexpress.h"
-#include "lastexpress/helpers.h"
namespace LastExpress {
@@ -128,7 +126,7 @@ IMPLEMENT_FUNCTION(7, Kronos, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Kronos, setup_chapter1Handler));
break;
case kActionDefault:
@@ -149,7 +147,7 @@ IMPLEMENT_FUNCTION(8, Kronos, chapter1Handler)
break;
case kActionNone:
- TIME_CHECK(kTime1489500, params->param2, setup_function11);
+ Entity::timeCheck(kTime1489500, params->param2, WRAP_SETUP_FUNCTION(Kronos, setup_function11));
break;
case kAction171849314:
@@ -191,7 +189,7 @@ IMPLEMENT_FUNCTION(10, Kronos, function10)
break;
case kActionNone:
- TIME_CHECK(kTime1489500, params->param1, setup_function11);
+ Entity::timeCheck(kTime1489500, params->param1, WRAP_SETUP_FUNCTION(Kronos, setup_function11));
break;
case kActionDefault:
@@ -295,10 +293,10 @@ IMPLEMENT_FUNCTION(15, Kronos, function15)
case kActionNone:
if (params->param1 && !getEntities()->isInSalon(kEntityBoutarel)) {
- UPDATE_PARAM_PROC(params->param2, getState()->timeTicks, 75)
+ if (Entity::updateParameter(params->param2, getState()->timeTicks, 75)) {
setup_function16();
break;
- UPDATE_PARAM_PROC_END
+ }
}
if (params->param3 != kTimeInvalid && getState()->time > kTime2002500) {
@@ -407,8 +405,7 @@ IMPLEMENT_FUNCTION(18, Kronos, function18)
params->param2 = 1;
}
- TIME_CHECK(kTime2106000, params->param3, setup_function19)
- else {
+ if (!Entity::timeCheck(kTime2106000, params->param3, WRAP_SETUP_FUNCTION(Kronos, setup_function19))) {
if (params->param1 && getEntities()->isInKronosSanctum(kEntityPlayer)) {
setCallback(1);
setup_savegame(kSavegameTypeEvent, kEventKahinaPunchSuite4);
@@ -528,9 +525,9 @@ IMPLEMENT_FUNCTION(20, Kronos, function20)
}
if (CURRENT_PARAM(1, 2) != kTimeInvalid && params->param7 < getState()->time) {
- UPDATE_PARAM_PROC_TIME(params->param8, !params->param1, CURRENT_PARAM(1, 2), 450)
+ if (Entity::updateParameterTime((TimeValue)params->param8, !params->param1, CURRENT_PARAM(1, 2), 450)) {
getSavePoints()->push(kEntityKronos, kEntityKahina, kAction237555748);
- UPDATE_PARAM_PROC_END
+ }
}
if (!params->param1)
diff --git a/engines/lastexpress/entities/kronos.h b/engines/lastexpress/entities/kronos.h
index 4c61b98620..a7693fcd46 100644
--- a/engines/lastexpress/entities/kronos.h
+++ b/engines/lastexpress/entities/kronos.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_KRONOS_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/mahmud.cpp b/engines/lastexpress/entities/mahmud.cpp
index 0e67b45cd2..af86ef8cdd 100644
--- a/engines/lastexpress/entities/mahmud.cpp
+++ b/engines/lastexpress/entities/mahmud.cpp
@@ -34,10 +34,8 @@
#include "lastexpress/game/state.h"
#include "lastexpress/sound/queue.h"
-#include "lastexpress/sound/sound.h"
#include "lastexpress/lastexpress.h"
-#include "lastexpress/helpers.h"
namespace LastExpress {
@@ -86,7 +84,8 @@ IMPLEMENT_FUNCTION_SIII(4, Mahmud, enterExitCompartment2, ObjectIndex, uint32, O
break;
case kActionNone:
- UPDATE_PARAM(params->param7, getState()->timeTicks, params->param5);
+ if (!Entity::updateParameter(params->param7, getState()->timeTicks, params->param5))
+ break;
if (!getScenes()->checkPosition(kSceneNone, SceneManager::kCheckPositionLookingUp))
getScenes()->loadSceneFromObject((ObjectIndex)params->param6, true);
@@ -95,7 +94,7 @@ IMPLEMENT_FUNCTION_SIII(4, Mahmud, enterExitCompartment2, ObjectIndex, uint32, O
case kActionExitCompartment:
getEntities()->exitCompartment(kEntityMahmud, (ObjectIndex)params->param4);
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionDefault:
@@ -146,7 +145,8 @@ IMPLEMENT_FUNCTION_II(10, Mahmud, function10, ObjectIndex, bool)
break;
case kActionNone:
- UPDATE_PARAM(params->param6, getState()->time, 13500);
+ if (!Entity::updateParameter(params->param6, getState()->time, 13500))
+ break;
getObjects()->update(kObjectCompartment5, kEntityTrain, kObjectLocation3, kCursorHandKnock, kCursorHand);
getObjects()->update(kObjectCompartment6, kEntityTrain, kObjectLocation3, kCursorHandKnock, kCursorHand);
@@ -267,7 +267,7 @@ IMPLEMENT_FUNCTION_II(10, Mahmud, function10, ObjectIndex, bool)
getData()->location = kLocationInsideCompartment;
getEntities()->clearSequences(kEntityMahmud);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -392,7 +392,7 @@ IMPLEMENT_FUNCTION(11, Mahmud, function11)
getEntities()->clearSequences(kEntityMahmud);
getObjects()->update(kObjectCompartment4, kEntityMahmud, kObjectLocation3, kCursorHandKnock, kCursorHand);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -471,7 +471,7 @@ IMPLEMENT_FUNCTION(12, Mahmud, function12)
getData()->location = kLocationInsideCompartment;
getEntities()->clearSequences(kEntityMahmud);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
@@ -537,7 +537,7 @@ IMPLEMENT_FUNCTION(13, Mahmud, function13)
getData()->location = kLocationInsideCompartment;
getEntities()->clearSequences(kEntityMahmud);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
@@ -560,7 +560,8 @@ IMPLEMENT_FUNCTION(14, Mahmud, chaptersHandler)
if (!params->param2 && getProgress().chapter == kChapter1) {
- TIME_CHECK_CALLBACK(kTime1098000, params->param6, 1, setup_function13);
+ if (Entity::timeCheckCallback(kTime1098000, params->param6, 1, WRAP_SETUP_FUNCTION(Mahmud, setup_function13)))
+ break;
if (!getSoundQueue()->isBuffered("HAR1104") && getState()->time > kTime1167300 && !params->param7) {
params->param7 = 1;
@@ -572,7 +573,8 @@ IMPLEMENT_FUNCTION(14, Mahmud, chaptersHandler)
}
if (params->param5) {
- UPDATE_PARAM(params->param8, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param8, getState()->timeTicks, 75))
+ break;
params->param4 = 1;
params->param5 = 0;
@@ -732,7 +734,7 @@ IMPLEMENT_FUNCTION(15, Mahmud, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chaptersHandler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Mahmud, setup_chaptersHandler));
break;
case kActionDefault:
diff --git a/engines/lastexpress/entities/mahmud.h b/engines/lastexpress/entities/mahmud.h
index 5feb95cba5..685100f078 100644
--- a/engines/lastexpress/entities/mahmud.h
+++ b/engines/lastexpress/entities/mahmud.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_MAHMUD_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/max.cpp b/engines/lastexpress/entities/max.cpp
index eacc38bf60..abd2aae9e4 100644
--- a/engines/lastexpress/entities/max.cpp
+++ b/engines/lastexpress/entities/max.cpp
@@ -31,10 +31,8 @@
#include "lastexpress/game/state.h"
#include "lastexpress/sound/queue.h"
-#include "lastexpress/sound/sound.h"
#include "lastexpress/lastexpress.h"
-#include "lastexpress/helpers.h"
namespace LastExpress {
@@ -91,7 +89,8 @@ IMPLEMENT_FUNCTION(6, Max, chapter12_handler)
break;
case kActionNone:
- UPDATE_PARAM(params->param2, getState()->time, params->param1);
+ if (!Entity::updateParameter(params->param2, getState()->time, params->param1))
+ break;
if (!getSoundQueue()->isBuffered(kEntityMax))
getSound()->playSound(kEntityMax, "Max1122");
@@ -125,7 +124,8 @@ IMPLEMENT_FUNCTION(7, Max, function7)
break;
case kActionNone:
- UPDATE_PARAM(params->param2, getState()->time, params->param1)
+ if (!Entity::updateParameter(params->param2, getState()->time, params->param1))
+ break;
if (!getSoundQueue()->isBuffered(kEntityMax))
getSound()->playSound(kEntityMax, "Max1122");
@@ -186,7 +186,7 @@ IMPLEMENT_FUNCTION(7, Max, function7)
case kAction101687594:
getEntities()->clearSequences(kEntityMax);
- CALLBACK_ACTION();
+ callbackAction();
break;
case kAction122358304:
@@ -195,7 +195,7 @@ IMPLEMENT_FUNCTION(7, Max, function7)
getObjects()->update(kObjectCompartmentF, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);
getObjects()->update(kObject53, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);
- CALLBACK_ACTION();
+ callbackAction();
break;
case kAction158007856:
@@ -214,7 +214,8 @@ IMPLEMENT_FUNCTION(8, Max, chapter4Handler)
break;
case kActionNone:
- UPDATE_PARAM(params->param3, getState()->time, params->param2);
+ if (!Entity::updateParameter(params->param3, getState()->time, params->param2))
+ break;
if (!getSoundQueue()->isBuffered(kEntityMax))
getSound()->playSound(kEntityMax, "Max3101");
@@ -323,7 +324,7 @@ IMPLEMENT_FUNCTION(10, Max, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter12_handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Max, setup_chapter12_handler));
break;
case kActionDefault:
@@ -392,7 +393,8 @@ IMPLEMENT_FUNCTION(13, Max, chapter3Handler)
break;
}
- UPDATE_PARAM(params->param3, getState()->time, params->param1);
+ if (!Entity::updateParameter(params->param3, getState()->time, params->param1))
+ break;
if (!getSoundQueue()->isBuffered(kEntityMax))
getSound()->playSound(kEntityMax, "Max1122");
@@ -514,7 +516,8 @@ IMPLEMENT_FUNCTION(15, Max, function15)
}
if (!params->param1) {
- UPDATE_PARAM(params->param3, getState()->time, 900);
+ if (!Entity::updateParameter(params->param3, getState()->time, 900))
+ break;
getSavePoints()->push(kEntityMax, kEntityCoudert, kAction157026693);
}
diff --git a/engines/lastexpress/entities/max.h b/engines/lastexpress/entities/max.h
index 17b58475aa..acd8235e89 100644
--- a/engines/lastexpress/entities/max.h
+++ b/engines/lastexpress/entities/max.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_MAX_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/mertens.cpp b/engines/lastexpress/entities/mertens.cpp
index d88962fce2..97dd293793 100644
--- a/engines/lastexpress/entities/mertens.cpp
+++ b/engines/lastexpress/entities/mertens.cpp
@@ -32,21 +32,11 @@
#include "lastexpress/game/state.h"
#include "lastexpress/sound/queue.h"
-#include "lastexpress/sound/sound.h"
#include "lastexpress/lastexpress.h"
-#include "lastexpress/helpers.h"
namespace LastExpress {
-#define SAVEGAME_BLOOD_JACKET() \
- if (getProgress().jacket == kJacketBlood \
- && getEntities()->isDistanceBetweenEntities(kEntityMertens, kEntityPlayer, 1000) \
- && !getEntities()->isInsideCompartments(kEntityPlayer) \
- && !getEntities()->checkFields10(kEntityPlayer)) { \
- setCallback(1); \
- setup_savegame(kSavegameTypeEvent, kEventMertensBloodJacket); \
- }
Mertens::Mertens(LastExpressEngine *engine) : Entity(engine, kEntityMertens) {
ADD_CALLBACK_FUNCTION(Mertens, reset);
@@ -117,11 +107,11 @@ IMPLEMENT_FUNCTION_S(2, Mertens, bloodJacket)
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
break;
case kActionExitCompartment:
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionDefault:
@@ -144,7 +134,7 @@ IMPLEMENT_FUNCTION_SI(3, Mertens, enterExitCompartment, ObjectIndex)
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
return;
case kActionCallback:
@@ -165,12 +155,12 @@ IMPLEMENT_FUNCTION_SI(4, Mertens, enterExitCompartment2, ObjectIndex)
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
return;
case kAction4:
getEntities()->exitCompartment(kEntityMertens, (ObjectIndex)params->param4);
- CALLBACK_ACTION();
+ callbackAction();
return;
case kActionCallback:
@@ -191,13 +181,13 @@ IMPLEMENT_FUNCTION_SIII(5, Mertens, enterExitCompartment3, ObjectIndex, EntityPo
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
break;
case kActionExitCompartment:
getEntities()->exitCompartment(_entityIndex, (ObjectIndex)params->param4);
getData()->entityPosition = (EntityPosition)params->param5;
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionDefault:
@@ -229,15 +219,15 @@ IMPLEMENT_FUNCTION(6, Mertens, callbackActionOnDirection)
case kActionNone:
if (getData()->direction != kDirectionRight) {
- CALLBACK_ACTION();
+ callbackAction();
break;
}
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
break;
case kActionExitCompartment:
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionCallback:
@@ -256,11 +246,11 @@ IMPLEMENT_FUNCTION_S(7, Mertens, playSound)
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
break;
case kActionEndSound:
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionDefault:
@@ -283,11 +273,11 @@ IMPLEMENT_FUNCTION_S(8, Mertens, playSound16)
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
break;
case kActionEndSound:
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionDefault:
@@ -310,14 +300,6 @@ IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION_II(10, Mertens, updateEntity, CarIndex, EntityPosition)
-
-#define LOADSCENE_FROM_POSITION() \
- if (getData()->direction != kDirectionUp) { \
- getEntities()->loadSceneFromEntityPosition(getData()->car, (EntityPosition)(getData()->entityPosition + 750)); \
- } else { \
- getEntities()->loadSceneFromEntityPosition(getData()->car, (EntityPosition)(getData()->entityPosition - 750), true); \
- }
-
switch (savepoint.action) {
default:
break;
@@ -333,7 +315,7 @@ IMPLEMENT_FUNCTION_II(10, Mertens, updateEntity, CarIndex, EntityPosition)
|| getEntities()->checkFields10(kEntityPlayer)) {
if (getEntities()->updateEntity(kEntityMertens, (CarIndex)params->param1, (EntityPosition)params->param2)) {
getData()->inventoryItem = kItemNone;
- CALLBACK_ACTION();
+ callbackAction();
}
break;
}
@@ -364,7 +346,7 @@ IMPLEMENT_FUNCTION_II(10, Mertens, updateEntity, CarIndex, EntityPosition)
if (getEntities()->updateEntity(kEntityMertens, (CarIndex)params->param1, (EntityPosition)params->param2)) {
getData()->inventoryItem = kItemNone;
- CALLBACK_ACTION();
+ callbackAction();
}
break;
@@ -395,7 +377,7 @@ IMPLEMENT_FUNCTION_II(10, Mertens, updateEntity, CarIndex, EntityPosition)
params->param3 = 1;
if (getEntities()->updateEntity(kEntityMertens, (CarIndex)params->param1, (EntityPosition)params->param2))
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionCallback:
@@ -416,7 +398,7 @@ IMPLEMENT_FUNCTION_II(10, Mertens, updateEntity, CarIndex, EntityPosition)
ENTITY_PARAM(0, 7) = 0;
if (params->param1 != 3 || (params->param2 != kPosition_8200 && params->param2 != kPosition_9510)) {
- LOADSCENE_FROM_POSITION();
+ loadSceneFromPosition();
break;
}
@@ -428,7 +410,7 @@ IMPLEMENT_FUNCTION_II(10, Mertens, updateEntity, CarIndex, EntityPosition)
getEntities()->updateEntity(kEntityMertens, kCarGreenSleeping, kPosition_2000);
getEntities()->loadSceneFromEntityPosition(getData()->car, (EntityPosition)(getData()->entityPosition + 750));
- CALLBACK_ACTION();
+ callbackAction();
break;
case 3:
@@ -444,35 +426,33 @@ IMPLEMENT_FUNCTION_II(10, Mertens, updateEntity, CarIndex, EntityPosition)
getEntities()->updateEntity(kEntityMertens, kCarGreenSleeping, kPosition_2000);
getEntities()->loadSceneFromEntityPosition(getData()->car, (EntityPosition)(getData()->entityPosition + 750));
- CALLBACK_ACTION();
+ callbackAction();
break;
}
- LOADSCENE_FROM_POSITION();
+ loadSceneFromPosition();
break;
case 4:
getAction()->playAnimation(kEventMertensKronosConcertInvitation);
ENTITY_PARAM(2, 4) = 0;
- LOADSCENE_FROM_POSITION();
+ loadSceneFromPosition();
break;
case 5:
getAction()->playAnimation(getData()->entityPosition < getEntityData(kEntityPlayer)->entityPosition ? kEventMertensAskTylerCompartmentD : kEventMertensAskTylerCompartment);
- LOADSCENE_FROM_POSITION();
+ loadSceneFromPosition();
break;
case 6:
getAction()->playAnimation(kEventMertensDontMakeBed);
- LOADSCENE_FROM_POSITION();
+ loadSceneFromPosition();
ENTITY_PARAM(0, 4) = 0;
break;
}
break;
}
-
-#undef LOADSCENE_FROM_POSITION
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
@@ -482,11 +462,12 @@ IMPLEMENT_FUNCTION_I(11, Mertens, function11, uint32)
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
- UPDATE_PARAM(params->param2, getState()->time, params->param1)
+ if (!Entity::updateParameter(params->param2, getState()->time, params->param1))
+ break;
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionCallback:
@@ -506,7 +487,7 @@ IMPLEMENT_FUNCTION_I(12, Mertens, bonsoir, EntityIndex)
return;
if (getSoundQueue()->isBuffered(kEntityMertens)) {
- CALLBACK_ACTION();
+ callbackAction();
return;
}
@@ -540,7 +521,7 @@ IMPLEMENT_FUNCTION_I(12, Mertens, bonsoir, EntityIndex)
getSound()->playSound(kEntityMertens, "CON1112G");
}
- CALLBACK_ACTION();
+ callbackAction();
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
@@ -550,23 +531,23 @@ IMPLEMENT_FUNCTION_II(13, Mertens, function13, bool, bool)
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
if (!params->param2 && !params->param3) {
- UPDATE_PARAM_PROC(params->param4, getState()->timeTicks, 75)
+ if (Entity::updateParameter(params->param4, getState()->timeTicks, 75)) {
getData()->inventoryItem = kItemNone;
setCallback(5);
setup_function18();
break;
- UPDATE_PARAM_PROC_END
+ }
}
- UPDATE_PARAM_PROC(params->param5, getState()->timeTicks, 225)
+ if (Entity::updateParameter(params->param5, getState()->timeTicks, 225)) {
getData()->inventoryItem = kItemNone;
setCallback(6);
setup_function18();
break;
- UPDATE_PARAM_PROC_END
+ }
getData()->inventoryItem = (getProgress().chapter == kChapter1
&& !ENTITY_PARAM(2, 1)
@@ -640,7 +621,7 @@ IMPLEMENT_FUNCTION_II(13, Mertens, function13, bool, bool)
case 6:
case 9:
case 10:
- CALLBACK_ACTION();
+ callbackAction();
break;
case 7:
@@ -672,7 +653,7 @@ IMPLEMENT_FUNCTION_I(14, Mertens, function14, EntityIndex)
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
break;
case kActionDefault:
@@ -719,7 +700,7 @@ IMPLEMENT_FUNCTION_I(14, Mertens, function14, EntityIndex)
break;
case 5:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -783,7 +764,7 @@ IMPLEMENT_FUNCTION_I(15, Mertens, function15, bool)
break;
case 6:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -860,7 +841,7 @@ IMPLEMENT_FUNCTION_I(16, Mertens, function16, bool)
break;
case 6:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -888,7 +869,7 @@ IMPLEMENT_FUNCTION(17, Mertens, function17)
getScenes()->loadSceneFromItemPosition(kItem7);
ENTITY_PARAM(2, 1) = 1;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
@@ -926,7 +907,7 @@ IMPLEMENT_FUNCTION(17, Mertens, function17)
break;
case 2:
- CALLBACK_ACTION();
+ callbackAction();
break;
case 3:
@@ -944,7 +925,7 @@ IMPLEMENT_FUNCTION(17, Mertens, function17)
getSavePoints()->push(kEntityMertens, kEntityMertens, kActionDrawScene);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -970,7 +951,7 @@ IMPLEMENT_FUNCTION(18, Mertens, function18)
getInventory()->setLocationAndProcess(kItem7, kObjectLocation1);
ENTITY_PARAM(2, 1) = 1;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
@@ -978,7 +959,7 @@ IMPLEMENT_FUNCTION(18, Mertens, function18)
getScenes()->loadSceneFromItemPosition(kItem7);
ENTITY_PARAM(2, 1) = 1;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
@@ -1009,7 +990,7 @@ IMPLEMENT_FUNCTION(18, Mertens, function18)
ENTITY_PARAM(0, 1) = 0;
getData()->inventoryItem = kItemNone;
- CALLBACK_ACTION();
+ callbackAction();
}
break;
}
@@ -1025,7 +1006,7 @@ IMPLEMENT_FUNCTION(19, Mertens, function19)
if (ENTITY_PARAM(2, 1)) {
getInventory()->setLocationAndProcess(kItem7, kObjectLocation1);
ENTITY_PARAM(2, 1) = 0;
- CALLBACK_ACTION();
+ callbackAction();
} else {
setCallback(1);
setup_bloodJacket("601C");
@@ -1039,7 +1020,7 @@ IMPLEMENT_FUNCTION(19, Mertens, function19)
if (!getEntities()->isPlayerPosition(kCarGreenSleeping, 2))
getData()->entityPosition = kPosition_2088;
- CALLBACK_ACTION();
+ callbackAction();
}
break;
}
@@ -1057,7 +1038,7 @@ IMPLEMENT_FUNCTION(20, Mertens, function20)
if (ENTITY_PARAM(2, 1)) {
ENTITY_PARAM(2, 1) = 0;
- CALLBACK_ACTION();
+ callbackAction();
} else {
setCallback(1);
setup_bloodJacket("601C");
@@ -1066,7 +1047,7 @@ IMPLEMENT_FUNCTION(20, Mertens, function20)
case kActionCallback:
if (getCallback() == 1)
- CALLBACK_ACTION();
+ callbackAction();
break;
}
IMPLEMENT_FUNCTION_END
@@ -1078,11 +1059,12 @@ IMPLEMENT_FUNCTION_II(21, Mertens, function21, ObjectIndex, ObjectIndex)
break;
case kActionNone:
- UPDATE_PARAM_PROC(CURRENT_PARAM(1, 4), getState()->time, 300)
+ if (Entity::updateParameter(CURRENT_PARAM(1, 4), getState()->time, 300)) {
getSound()->playSound(kEntityPlayer, "ZFX1004", getSound()->getSoundFlag(kEntityMertens));
- UPDATE_PARAM_PROC_END
+ }
- UPDATE_PARAM(CURRENT_PARAM(1, 5), getState()->time, 900);
+ if (!Entity::updateParameter(CURRENT_PARAM(1, 5), getState()->time, 900))
+ break;
// Update objects
getObjects()->updateLocation2((ObjectIndex)params->param1, kObjectLocation1);
@@ -1092,7 +1074,7 @@ IMPLEMENT_FUNCTION_II(21, Mertens, function21, ObjectIndex, ObjectIndex)
if (params->param2)
getObjects()->update((ObjectIndex)params->param2, (EntityIndex)params->param8, (ObjectLocation)CURRENT_PARAM(1, 1), (CursorStyle)CURRENT_PARAM(1, 2), (CursorStyle)CURRENT_PARAM(1, 3));
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionKnock:
@@ -1222,7 +1204,7 @@ IMPLEMENT_FUNCTION(22, Mertens, function22)
break;
case 9:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -1291,7 +1273,7 @@ IMPLEMENT_FUNCTION(23, Mertens, function23)
case 6:
getData()->location = kLocationOutsideCompartment;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -1306,7 +1288,8 @@ IMPLEMENT_FUNCTION(24, Mertens, function24)
case kActionNone:
if (!params->param1) {
- UPDATE_PARAM(params->param2, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param2, getState()->timeTicks, 75))
+ break;
setCallback(3);
setup_enterExitCompartment3("601Rc", kObjectCompartment3, kPosition_6470, kPosition_6130);
@@ -1351,7 +1334,7 @@ IMPLEMENT_FUNCTION(24, Mertens, function24)
case 5:
getData()->location = kLocationOutsideCompartment;
- CALLBACK_ACTION();
+ callbackAction();
break;
case 6:
@@ -1380,7 +1363,7 @@ IMPLEMENT_FUNCTION(24, Mertens, function24)
break;
case 9:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -1409,7 +1392,8 @@ IMPLEMENT_FUNCTION(25, Mertens, function25)
case kActionNone:
if (!params->param1) {
- UPDATE_PARAM(params->param2, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param2, getState()->timeTicks, 75))
+ break;
setCallback(3);
setup_enterExitCompartment3("601Zb", kObjectCompartment2, kPosition_7500, kPositionNone);
@@ -1458,7 +1442,7 @@ IMPLEMENT_FUNCTION(25, Mertens, function25)
case 5:
getData()->location = kLocationOutsideCompartment;
- CALLBACK_ACTION();
+ callbackAction();
break;
case 6:
@@ -1492,7 +1476,7 @@ IMPLEMENT_FUNCTION(25, Mertens, function25)
break;
case 9:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -1547,7 +1531,7 @@ IMPLEMENT_FUNCTION_I(26, Mertens, function26, bool)
case 2:
getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).location, kCursorHandKnock, kCursorHand);
- CALLBACK_ACTION();
+ callbackAction();
break;
case 3:
@@ -1613,7 +1597,7 @@ IMPLEMENT_FUNCTION_I(26, Mertens, function26, bool)
getData()->location = kLocationOutsideCompartment;
getObjects()->update(kObjectCompartment1, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -1628,17 +1612,17 @@ IMPLEMENT_FUNCTION_I(27, Mertens, tylerCompartment, MertensActionType)
case kActionNone:
if (getProgress().field_14 == 29) {
- CALLBACK_ACTION();
+ callbackAction();
break;
}
- UPDATE_PARAM_PROC(params->param2, getState()->timeTicks, 150)
+ if (Entity::updateParameter(params->param2, getState()->timeTicks, 150)) {
getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).location, kCursorNormal, kCursorNormal);
setCallback(10);
setup_playSound16("CON1018A");
break;
- UPDATE_PARAM_PROC_END
+ }
label_callback10:
if (!params->param3)
@@ -1646,7 +1630,8 @@ label_callback10:
if (params->param3 >= getState()->timeTicks) {
label_callback11:
- UPDATE_PARAM(params->param4, getState()->timeTicks, 375);
+ if (!Entity::updateParameter(params->param4, getState()->timeTicks, 375))
+ break;
getSound()->playSound(kEntityPlayer, "LIB033");
@@ -1680,7 +1665,7 @@ label_callback11:
getSound()->playSound(kEntityPlayer, "LIB015");
getScenes()->loadScene(kScene41);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
} else {
@@ -1738,7 +1723,7 @@ label_callback11:
getSound()->playSound(kEntityPlayer, "LIB015");
getScenes()->loadScene(kScene41);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
} else {
@@ -1763,7 +1748,7 @@ label_callback11:
default:
getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).location, kCursorHandKnock, kCursorHand);
- CALLBACK_ACTION();
+ callbackAction();
break;
case 1:
@@ -1821,7 +1806,7 @@ label_callback11:
getSound()->playSound(kEntityPlayer, "LIB015");
getScenes()->loadScene(kScene41);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
} else {
@@ -1930,7 +1915,7 @@ label_callback11:
getData()->location = kLocationOutsideCompartment;
getObjects()->update(kObjectCompartment1, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);
- CALLBACK_ACTION();
+ callbackAction();
break;
case 8:
@@ -1957,7 +1942,7 @@ label_callback11:
case 19:
case 22:
case 28:
- CALLBACK_ACTION();
+ callbackAction();
break;
case 15:
@@ -1969,7 +1954,7 @@ label_callback11:
getSound()->playSound(kEntityPlayer, "LIB015");
getScenes()->loadScene(kScene41);
- CALLBACK_ACTION();
+ callbackAction();
break;
case 16:
@@ -1981,27 +1966,27 @@ label_callback11:
getSound()->playSound(kEntityPlayer, "LIB015");
getScenes()->loadScene(kScene41);
- CALLBACK_ACTION();
+ callbackAction();
break;
case 23:
getProgress().eventMertensAugustWaiting = true;
getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).location, kCursorHandKnock, kCursorHand);
- CALLBACK_ACTION();
+ callbackAction();
break;
case 24:
getProgress().eventMertensKronosInvitation = true;
getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).location, kCursorHandKnock, kCursorHand);
- CALLBACK_ACTION();
+ callbackAction();
break;
case 25:
getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).location, kCursorHandKnock, kCursorHand);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -2053,7 +2038,7 @@ IMPLEMENT_FUNCTION_S(28, Mertens, function28)
break;
case 4:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -2115,7 +2100,7 @@ IMPLEMENT_FUNCTION_SS(29, Mertens, function29)
break;
case 4:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -2140,14 +2125,14 @@ IMPLEMENT_FUNCTION_I(30, Mertens, function30, MertensActionType)
case kActionDefault:
switch (params->param1) {
default:
- CALLBACK_ACTION();
+ callbackAction();
return;
case 1:
params->param2 = kPosition_8200;
if (getProgress().field_14) {
- CALLBACK_ACTION();
+ callbackAction();
return;
}
@@ -2273,7 +2258,7 @@ IMPLEMENT_FUNCTION_I(30, Mertens, function30, MertensActionType)
break;
case 9:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -2312,7 +2297,7 @@ IMPLEMENT_FUNCTION_I(31, Mertens, function31, MertensActionType)
case 2:
case 3:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -2360,7 +2345,7 @@ IMPLEMENT_FUNCTION(32, Mertens, function32)
break;
case 5:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -2382,7 +2367,7 @@ IMPLEMENT_FUNCTION(33, Mertens, function33)
setCallback(ENTITY_PARAM(0, 8) ? 1 : 3);
setup_updateEntity(kCarGreenSleeping, ENTITY_PARAM(0, 8) ? kPosition_1500 : kPosition_540);
} else {
- CALLBACK_ACTION();
+ callbackAction();
}
break;
@@ -2401,7 +2386,7 @@ IMPLEMENT_FUNCTION(33, Mertens, function33)
case 2:
ENTITY_PARAM(1, 8) = 0;
- CALLBACK_ACTION();
+ callbackAction();
break;
case 3:
@@ -2480,7 +2465,7 @@ IMPLEMENT_FUNCTION(33, Mertens, function33)
break;
}
- CALLBACK_ACTION();
+ callbackAction();
break;
case 12:
@@ -2493,13 +2478,13 @@ IMPLEMENT_FUNCTION(33, Mertens, function33)
break;
}
- CALLBACK_ACTION();
+ callbackAction();
break;
case 13:
ENTITY_PARAM(2, 2) = 0;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -2513,7 +2498,7 @@ IMPLEMENT_FUNCTION(34, Mertens, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Mertens, setup_chapter1Handler));
break;
case kActionDefault:
@@ -2548,7 +2533,7 @@ IMPLEMENT_FUNCTION(35, Mertens, function35)
case kActionDefault:
if (getProgress().field_14 == 29) {
- CALLBACK_ACTION();
+ callbackAction();
break;
} else {
getProgress().field_14 = 3;
@@ -2589,7 +2574,7 @@ IMPLEMENT_FUNCTION(35, Mertens, function35)
break;
case 4:
- CALLBACK_ACTION();
+ callbackAction();
break;
case 5:
@@ -2611,7 +2596,7 @@ IMPLEMENT_FUNCTION(35, Mertens, function35)
break;
case 7:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -2626,7 +2611,7 @@ IMPLEMENT_FUNCTION(36, Mertens, function36)
case kActionDefault:
if (getProgress().field_14 == 29) {
- CALLBACK_ACTION();
+ callbackAction();
} else {
getProgress().field_14 = 3;
@@ -2712,7 +2697,7 @@ IMPLEMENT_FUNCTION(36, Mertens, function36)
case 6:
case 9:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -2767,7 +2752,7 @@ IMPLEMENT_FUNCTION(37, Mertens, function37)
break;
case 4:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -2791,12 +2776,12 @@ IMPLEMENT_FUNCTION(38, Mertens, function38)
case kActionDefault:
if (!ENTITY_PARAM(0, 4)) {
- CALLBACK_ACTION();
+ callbackAction();
break;
}
if (getProgress().field_14 == 29) {
- CALLBACK_ACTION();
+ callbackAction();
} else {
setCallback(1);
setup_updateEntity(kCarGreenSleeping, kPosition_8200);
@@ -2810,7 +2795,7 @@ IMPLEMENT_FUNCTION(38, Mertens, function38)
case 1:
if (!ENTITY_PARAM(0, 4)) {
- CALLBACK_ACTION();
+ callbackAction();
break;
}
@@ -2820,7 +2805,7 @@ IMPLEMENT_FUNCTION(38, Mertens, function38)
case 2:
ENTITY_PARAM(0, 4) = 0;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -2894,7 +2879,7 @@ IMPLEMENT_FUNCTION(39, Mertens, function39)
break;
case 10:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -2940,7 +2925,7 @@ IMPLEMENT_FUNCTION(40, Mertens, function40)
case 5:
ENTITY_PARAM(0, 6) = 1;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -3013,7 +2998,7 @@ IMPLEMENT_FUNCTION(42, Mertens, function42)
getData()->inventoryItem = kItemInvalid;
if (!params->param2) {
- TIME_CHECK_SAVEPOINT(kTime1125000, params->param3, kEntityMertens, kEntityMahmud, kAction170483072);
+ Entity::timeCheckSavepoint(kTime1125000, params->param3, kEntityMertens, kEntityMahmud, kAction170483072);
if (params->param4 != kTimeInvalid && getState()->time > kTimeCityChalons) {
@@ -3040,11 +3025,11 @@ IMPLEMENT_FUNCTION(42, Mertens, function42)
label_callback_8:
if (getState()->time > kTime1215000 && !ENTITY_PARAM(0, 1) && !ENTITY_PARAM(2, 1)) {
- UPDATE_PARAM_PROC(params->param5, getState()->time, 2700)
+ if (Entity::updateParameter(params->param5, getState()->time, 2700)) {
getEntities()->drawSequenceLeft(kEntityMertens, "601E");
ENTITY_PARAM(0, 1) = 1;
params->param5 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (ENTITY_PARAM(0, 8)) {
@@ -3547,19 +3532,23 @@ label_callback_5:
}
label_callback_6:
- TIME_CHECK_CALLBACK_1(kTime1971000, params->param1, 7, setup_function28, "CON3012");
+ if (Entity::timeCheckCallback(kTime1971000, params->param1, 7, "CON3012", WRAP_SETUP_FUNCTION_S(Mertens, setup_function28)))
+ break;
label_callback_7:
- TIME_CHECK_CALLBACK(kTime2117700, params->param2, 8, setup_function32);
+ if (Entity::timeCheckCallback(kTime2117700, params->param2, 8, WRAP_SETUP_FUNCTION(Mertens, setup_function32)))
+ break;
label_callback_8:
- TIME_CHECK_CALLBACK_1(kTime2124000, params->param3, 9, setup_function28, "CON2010");
+ if (Entity::timeCheckCallback(kTime2124000, params->param3, 9, "CON2010", WRAP_SETUP_FUNCTION_S(Mertens, setup_function28)))
+ break;
label_callback_9:
- TIME_CHECK_CALLBACK(kTime2146500, params->param4, 10, setup_function32);
+ if (Entity::timeCheckCallback(kTime2146500, params->param4, 10, WRAP_SETUP_FUNCTION(Mertens, setup_function32)))
+ break;
label_callback_10:
- TIME_CHECK_CALLBACK(kTime2169000, params->param5, 11, setup_function32);
+ Entity::timeCheckCallback(kTime2169000, params->param5, 11, WRAP_SETUP_FUNCTION(Mertens, setup_function32));
break;
case kAction11:
@@ -3742,21 +3731,26 @@ label_callback_3:
label_callback_4:
if (!params->param1) {
- TIME_CHECK_CALLBACK(kTime2403000, params->param2, 5, setup_function49);
+ if (Entity::timeCheckCallback(kTime2403000, params->param2, 5, WRAP_SETUP_FUNCTION(Mertens, setup_function49)))
+ break;
label_callback_5:
- TIME_CHECK_CALLBACK(kTime2430000, params->param3, 6, setup_function32);
+ if (Entity::timeCheckCallback(kTime2430000, params->param3, 6, WRAP_SETUP_FUNCTION(Mertens, setup_function32)))
+ break;
label_callback_6:
- TIME_CHECK_CALLBACK(kTime2439000, params->param4, 7, setup_function32);
+ if (Entity::timeCheckCallback(kTime2439000, params->param4, 7, WRAP_SETUP_FUNCTION(Mertens, setup_function32)))
+ break;
label_callback_7:
- TIME_CHECK_CALLBACK(kTime2448000, params->param5, 8, setup_function32);
+ if (Entity::timeCheckCallback(kTime2448000, params->param5, 8, WRAP_SETUP_FUNCTION(Mertens, setup_function32)))
+ break;
}
label_callback_8:
if (getState()->time > kTime2538000 && !ENTITY_PARAM(0, 1) && !ENTITY_PARAM(2, 1)) {
- UPDATE_PARAM(params->param6, getState()->time, 2700);
+ if (!Entity::updateParameter(params->param6, getState()->time, 2700))
+ break;
getEntities()->drawSequenceLeft(kEntityMertens, "601E");
@@ -3913,7 +3907,7 @@ IMPLEMENT_FUNCTION(49, Mertens, function49)
break;
case 11:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -4010,7 +4004,8 @@ IMPLEMENT_FUNCTION(53, Mertens, function53)
case kActionNone:
if (params->param1) {
- UPDATE_PARAM(params->param4, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param4, getState()->timeTicks, 75))
+ break;
params->param1 = 0;
params->param2 = 0;
@@ -4108,4 +4103,15 @@ IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_NULL_FUNCTION(54, Mertens)
+//////////////////////////////////////////////////////////////////////////
+// Helper functions
+//////////////////////////////////////////////////////////////////////////
+
+void Mertens::loadSceneFromPosition() {
+ if (getData()->direction != kDirectionUp)
+ getEntities()->loadSceneFromEntityPosition(getData()->car, (EntityPosition)(getData()->entityPosition + 750));
+ else
+ getEntities()->loadSceneFromEntityPosition(getData()->car, (EntityPosition)(getData()->entityPosition - 750), true);
+}
+
} // End of namespace LastExpress
diff --git a/engines/lastexpress/entities/mertens.h b/engines/lastexpress/entities/mertens.h
index 31b7a97dcd..4cc58fd4ba 100644
--- a/engines/lastexpress/entities/mertens.h
+++ b/engines/lastexpress/entities/mertens.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_MERTENS_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
@@ -210,6 +209,9 @@ public:
DECLARE_FUNCTION(function53)
DECLARE_NULL_FUNCTION()
+
+private:
+ void loadSceneFromPosition();
};
} // End of namespace LastExpress
diff --git a/engines/lastexpress/entities/milos.cpp b/engines/lastexpress/entities/milos.cpp
index ff3d2b6744..519a613497 100644
--- a/engines/lastexpress/entities/milos.cpp
+++ b/engines/lastexpress/entities/milos.cpp
@@ -36,10 +36,8 @@
#include "lastexpress/game/state.h"
#include "lastexpress/sound/queue.h"
-#include "lastexpress/sound/sound.h"
#include "lastexpress/lastexpress.h"
-#include "lastexpress/helpers.h"
namespace LastExpress {
@@ -135,7 +133,7 @@ IMPLEMENT_FUNCTION_II(10, Milos, enterCompartmentDialog, CarIndex, EntityPositio
case kActionNone:
case kActionDefault:
if (getEntities()->updateEntity(kEntityMilos, (CarIndex)params->param1, (EntityPosition)params->param2))
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionExcuseMeCath:
@@ -173,16 +171,16 @@ IMPLEMENT_FUNCTION_I(11, Milos, function11, TimeValue)
if (!params->param5 && params->param1 < getState()->time && !params->param7) {
params->param7 = 1;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
if (params->param2) {
- UPDATE_PARAM_PROC(params->param8, getState()->timeTicks, 75)
+ if (Entity::updateParameter(params->param8, getState()->timeTicks, 75)) {
params->param2 = 0;
params->param3 = 1;
getObjects()->update(kObjectCompartmentG, kEntityMilos, kObjectLocation1, kCursorNormal, kCursorNormal);
- UPDATE_PARAM_PROC_END
+ }
}
params->param8 = 0;
@@ -191,10 +189,10 @@ IMPLEMENT_FUNCTION_I(11, Milos, function11, TimeValue)
break;
if (params->param6) {
- UPDATE_PARAM_PROC(CURRENT_PARAM(1, 1), getState()->time, 4500)
+ if (Entity::updateParameter(CURRENT_PARAM(1, 1), getState()->time, 4500)) {
params->param6 = 0;
CURRENT_PARAM(1, 1) = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (!getProgress().field_CC) {
@@ -364,7 +362,7 @@ IMPLEMENT_FUNCTION(12, Milos, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Milos, setup_chapter1Handler));
break;
case kActionDefault:
@@ -394,7 +392,7 @@ IMPLEMENT_FUNCTION(13, Milos, function13)
getEntities()->clearSequences(kEntityIvo);
getEntities()->clearSequences(kEntitySalko);
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionDefault:
@@ -422,7 +420,7 @@ IMPLEMENT_FUNCTION(14, Milos, function14)
getEntities()->exitCompartment(kEntityMilos, kObjectCompartment1, true);
getObjects()->update(kObjectCompartment1, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);
- CALLBACK_ACTION();
+ callbackAction();
}
break;
}
@@ -436,7 +434,8 @@ IMPLEMENT_FUNCTION(14, Milos, function14)
if (CURRENT_PARAM(1, 1) < getState()->timeTicks) {
if (getObjects()->get(kObjectCompartment1).location == kObjectLocation1) {
- UPDATE_PARAM(CURRENT_PARAM(1, 2), getState()->timeTicks, 75);
+ if (!Entity::updateParameter(CURRENT_PARAM(1, 2), getState()->timeTicks, 75))
+ break;
getObjects()->update(kObjectCompartment1, kEntityMilos, getObjects()->get(kObjectCompartment1).location, kCursorNormal, kCursorNormal);
@@ -474,7 +473,7 @@ IMPLEMENT_FUNCTION(14, Milos, function14)
getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).location, kCursorHandKnock, kCursorHand);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
} else {
@@ -507,7 +506,8 @@ IMPLEMENT_FUNCTION(14, Milos, function14)
}
label_callback_12:
- UPDATE_PARAM(CURRENT_PARAM(1, 4), getState()->timeTicks, 75);
+ if (!Entity::updateParameter(CURRENT_PARAM(1, 4), getState()->timeTicks, 75))
+ break;
getEntities()->exitCompartment(kEntityMilos, kObjectCompartment1, true);
@@ -593,7 +593,7 @@ label_callback_12:
getData()->location = kLocationOutsideCompartment;
getObjects()->update(kObjectCompartment1, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);
- CALLBACK_ACTION();
+ callbackAction();
break;
case 2:
@@ -633,7 +633,7 @@ label_callback_12:
getScenes()->loadScene(kScene41);
getData()->location = kLocationOutsideCompartment;
- CALLBACK_ACTION();
+ callbackAction();
break;
case 6:
@@ -722,7 +722,7 @@ IMPLEMENT_FUNCTION(15, Milos, chapter1Handler)
break;
case kActionNone:
- TIME_CHECK_SAVEPOINT(kTime1071000, params->param3, kEntityMilos, kEntityServers1, kAction223002560);
+ Entity::timeCheckSavepoint(kTime1071000, params->param3, kEntityMilos, kEntityServers1, kAction223002560);
if (getState()->time > kTime1089000 && getEntities()->isSomebodyInsideRestaurantOrSalon()) {
setup_function16();
@@ -730,15 +730,16 @@ IMPLEMENT_FUNCTION(15, Milos, chapter1Handler)
}
if (getEntities()->isPlayerPosition(kCarRestaurant, 61) && !params->param1) {
- UPDATE_PARAM_PROC(params->param4, getState()->timeTicks, 45)
+ if (Entity::updateParameter(params->param4, getState()->timeTicks, 45)) {
setCallback(1);
setup_draw("009C");
break;
- UPDATE_PARAM_PROC_END
+ }
}
if (getEntities()->isPlayerPosition(kCarRestaurant, 70) && !params->param2) {
- UPDATE_PARAM(params->param5, getState()->timeTicks, 45);
+ if (!Entity::updateParameter(params->param5, getState()->timeTicks, 45))
+ break;
setCallback(2);
setup_draw("009C");
@@ -953,7 +954,8 @@ IMPLEMENT_FUNCTION(21, Milos, function21)
break;
case kActionNone:
- UPDATE_PARAM(params->param2, getState()->time, 4500);
+ if (!Entity::updateParameter(params->param2, getState()->time, 4500))
+ break;
params->param1 = 1;
break;
@@ -1118,7 +1120,8 @@ IMPLEMENT_FUNCTION(24, Milos, function24)
}
if (params->param1) {
- UPDATE_PARAM(params->param5, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param5, getState()->timeTicks, 75))
+ break;
params->param1 = 0;
params->param2 = 1;
@@ -1284,14 +1287,15 @@ IMPLEMENT_FUNCTION(25, Milos, function25)
case kActionNone:
if (!getEvent(kEventMilosCompartmentVisitTyler) && !getProgress().field_54 && !ENTITY_PARAM(0, 4)) {
- UPDATE_PARAM_PROC(params->param3, getState()->time, 13500)
+ if (Entity::updateParameter(params->param3, getState()->time, 13500)) {
getSavePoints()->push(kEntityMilos, kEntityVesna, kAction155913424);
params->param3 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (params->param1) {
- UPDATE_PARAM(params->param4, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param4, getState()->timeTicks, 75))
+ break;
params->param1 = 0;
params->param2 = 1;
@@ -1386,7 +1390,7 @@ IMPLEMENT_FUNCTION_I(26, Milos, function26, TimeValue)
case kActionNone:
if (params->param1 < getState()->time && !params->param2) {
- CALLBACK_ACTION();
+ callbackAction();
break;
}
@@ -1415,7 +1419,7 @@ IMPLEMENT_FUNCTION_I(26, Milos, function26, TimeValue)
case 1:
if (ENTITY_PARAM(0, 2)) {
- CALLBACK_ACTION();
+ callbackAction();
break;
}
@@ -1425,7 +1429,7 @@ IMPLEMENT_FUNCTION_I(26, Milos, function26, TimeValue)
case 2:
case 3:
if (ENTITY_PARAM(0, 2)) {
- CALLBACK_ACTION();
+ callbackAction();
break;
}
@@ -1442,7 +1446,7 @@ IMPLEMENT_FUNCTION_I(26, Milos, function26, TimeValue)
case 5:
if (ENTITY_PARAM(0, 2)) {
- CALLBACK_ACTION();
+ callbackAction();
break;
}
@@ -1461,7 +1465,7 @@ IMPLEMENT_FUNCTION_II(27, Milos, function27, CarIndex, EntityPosition)
case kActionNone:
if (getEntities()->updateEntity(kEntityMilos, (CarIndex)params->param1, (EntityPosition)params->param2)) {
- CALLBACK_ACTION();
+ callbackAction();
break;
}
@@ -1472,14 +1476,14 @@ IMPLEMENT_FUNCTION_II(27, Milos, function27, CarIndex, EntityPosition)
if (getData()->car == kCarRedSleeping || getData()->car == kCarGreenSleeping) {
ENTITY_PARAM(0, 2) = 1;
- CALLBACK_ACTION();
+ callbackAction();
}
}
break;
case kActionDefault:
if (getEntities()->updateEntity(kEntityMilos, (CarIndex)params->param1, (EntityPosition)params->param2))
- CALLBACK_ACTION();
+ callbackAction();
break;
}
IMPLEMENT_FUNCTION_END
@@ -1536,7 +1540,7 @@ IMPLEMENT_FUNCTION(29, Milos, chapter4Handler)
TIME_CHECK_PLAYSOUND_MILOS(kTime2370600, params->param5, "Mil4015");
- TIME_CHECK_SAVEPOINT(kTime2407500, params->param6, kEntityMilos, kEntityVesna, kAction55996766);
+ Entity::timeCheckSavepoint(kTime2407500, params->param6, kEntityMilos, kEntityVesna, kAction55996766);
break;
case kActionCallback:
diff --git a/engines/lastexpress/entities/milos.h b/engines/lastexpress/entities/milos.h
index d58d717f8a..e8f95dc5ff 100644
--- a/engines/lastexpress/entities/milos.h
+++ b/engines/lastexpress/entities/milos.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_MILOS_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/mmeboutarel.cpp b/engines/lastexpress/entities/mmeboutarel.cpp
index 9ca10ca374..950644cb8f 100644
--- a/engines/lastexpress/entities/mmeboutarel.cpp
+++ b/engines/lastexpress/entities/mmeboutarel.cpp
@@ -31,10 +31,8 @@
#include "lastexpress/game/state.h"
#include "lastexpress/sound/queue.h"
-#include "lastexpress/sound/sound.h"
#include "lastexpress/lastexpress.h"
-#include "lastexpress/helpers.h"
namespace LastExpress {
@@ -124,7 +122,7 @@ IMPLEMENT_FUNCTION_S(8, MmeBoutarel, function8)
if (!getEntities()->isPlayerPosition(kCarRedSleeping, 2))
getData()->entityPosition = kPosition_2088;
- CALLBACK_ACTION();
+ callbackAction();
}
break;
@@ -211,7 +209,7 @@ IMPLEMENT_FUNCTION(9, MmeBoutarel, function9)
getData()->location = kLocationInsideCompartment;
getEntities()->clearSequences(kEntityMmeBoutarel);
- CALLBACK_ACTION();
+ callbackAction();
break;
case 5:
@@ -220,7 +218,7 @@ IMPLEMENT_FUNCTION(9, MmeBoutarel, function9)
getData()->location = kLocationInsideCompartment;
getEntities()->clearSequences(kEntityMmeBoutarel);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -246,7 +244,7 @@ IMPLEMENT_FUNCTION(10, MmeBoutarel, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(MmeBoutarel, setup_chapter1Handler));
break;
case kActionDefault:
@@ -312,7 +310,7 @@ IMPLEMENT_FUNCTION(11, MmeBoutarel, function11)
break;
case 4:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -402,7 +400,7 @@ IMPLEMENT_FUNCTION(13, MmeBoutarel, function13)
case kActionNone:
if (!getSoundQueue()->isBuffered(kEntityMmeBoutarel) && params->param6 != kTimeInvalid) {
- UPDATE_PARAM_PROC_TIME(params->param1, !getEntities()->isDistanceBetweenEntities(kEntityMmeBoutarel, kEntityPlayer, 2000), params->param6, 0)
+ if (Entity::updateParameterTime((TimeValue)params->param1, !getEntities()->isDistanceBetweenEntities(kEntityMmeBoutarel, kEntityPlayer, 2000), params->param6, 0)) {
getObjects()->update(kObjectCompartmentD, kEntityPlayer, kObjectLocation1, kCursorNormal, kCursorNormal);
getObjects()->update(kObject51, kEntityPlayer, kObjectLocation1, kCursorNormal, kCursorNormal);
@@ -414,22 +412,24 @@ IMPLEMENT_FUNCTION(13, MmeBoutarel, function13)
setCallback(1);
setup_playSound("MME1037");
break;
- UPDATE_PARAM_PROC_END
+ }
}
label_callback_1:
if (getProgress().field_24 && params->param7 != kTimeInvalid) {
- UPDATE_PARAM_PROC_TIME(kTime1093500, (!params->param5 || !getEntities()->isPlayerInCar(kCarRedSleeping)), params->param7, 0)
+ if (Entity::updateParameterTime(kTime1093500, (!params->param5 || !getEntities()->isPlayerInCar(kCarRedSleeping)), params->param7, 0)) {
setCallback(2);
setup_function11();
break;
- UPDATE_PARAM_PROC_END
+ }
}
- TIME_CHECK(kTime1094400, params->param8, setup_function14);
+ if (Entity::timeCheck(kTime1094400, params->param8, WRAP_SETUP_FUNCTION(MmeBoutarel, setup_function14)))
+ break;
if (params->param4) {
- UPDATE_PARAM(CURRENT_PARAM(1, 1), getState()->timeTicks, 75);
+ if (!Entity::updateParameter(CURRENT_PARAM(1, 1), getState()->timeTicks, 75))
+ break;
params->param3 = 1;
params->param4 = 0;
@@ -589,7 +589,8 @@ IMPLEMENT_FUNCTION(15, MmeBoutarel, function15)
label_callback_5:
if (params->param2) {
- UPDATE_PARAM(params->param5, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param5, getState()->timeTicks, 75))
+ break;
params->param1 = 1;
params->param2 = 0;
@@ -1018,7 +1019,8 @@ IMPLEMENT_FUNCTION(23, MmeBoutarel, chapter4Handler)
case kActionNone:
if (params->param1) {
- UPDATE_PARAM(params->param2, getState()->time, 900);
+ if (!Entity::updateParameter(params->param2, getState()->time, 900))
+ break;
getObjects()->update(kObjectCompartmentD, kEntityPlayer, kObjectLocation1, kCursorKeepValue, kCursorKeepValue);
@@ -1064,10 +1066,12 @@ IMPLEMENT_FUNCTION(24, MmeBoutarel, function24)
break;
case kActionNone:
- TIME_CHECK(kTime2470500, params->param4, setup_function25);
+ if (Entity::timeCheck(kTime2470500, params->param4, WRAP_SETUP_FUNCTION(MmeBoutarel, setup_function25)))
+ break;
if (params->param2) {
- UPDATE_PARAM(params->param5, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param5, getState()->timeTicks, 75))
+ break;
params->param1 = 1;
params->param2 = 0;
@@ -1210,7 +1214,8 @@ IMPLEMENT_FUNCTION(28, MmeBoutarel, function28)
case kActionNone:
if (params->param1) {
- UPDATE_PARAM(params->param3, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param3, getState()->timeTicks, 75))
+ break;
params->param1 = 0;
params->param2 = 1;
diff --git a/engines/lastexpress/entities/mmeboutarel.h b/engines/lastexpress/entities/mmeboutarel.h
index 772451ba15..0f6e6349fe 100644
--- a/engines/lastexpress/entities/mmeboutarel.h
+++ b/engines/lastexpress/entities/mmeboutarel.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_MMEBOUTAREL_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/pascale.cpp b/engines/lastexpress/entities/pascale.cpp
index a191273702..6e9f992390 100644
--- a/engines/lastexpress/entities/pascale.cpp
+++ b/engines/lastexpress/entities/pascale.cpp
@@ -30,10 +30,8 @@
#include "lastexpress/game/state.h"
#include "lastexpress/sound/queue.h"
-#include "lastexpress/sound/sound.h"
#include "lastexpress/lastexpress.h"
-#include "lastexpress/helpers.h"
namespace LastExpress {
@@ -171,7 +169,7 @@ IMPLEMENT_FUNCTION(8, Pascale, welcomeSophieAndRebecca)
getData()->entityPosition = kPosition_5900;
ENTITY_PARAM(0, 4) = 0;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -185,8 +183,8 @@ IMPLEMENT_FUNCTION(9, Pascale, sitSophieAndRebecca)
break;
case kActionExitCompartment:
- CALLBACK_ACTION();
- break;
+ callbackAction();
+ break;
case kActionDefault:
getEntities()->drawSequenceLeft(kEntityPascale, "012C1");
@@ -217,7 +215,7 @@ IMPLEMENT_FUNCTION(10, Pascale, welcomeCath)
getScenes()->loadSceneFromPosition(kCarRestaurant, 69);
}
- CALLBACK_ACTION();
+ callbackAction();
break;
case kAction4:
@@ -239,7 +237,7 @@ IMPLEMENT_FUNCTION(10, Pascale, welcomeCath)
getScenes()->loadSceneFromPosition(kCarRestaurant, 69);
- CALLBACK_ACTION();
+ callbackAction();
}
break;
}
@@ -283,7 +281,7 @@ IMPLEMENT_FUNCTION(11, Pascale, function11)
getEntities()->clearSequences(kEntityPascale);
getData()->entityPosition = kPosition_5900;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -298,7 +296,7 @@ IMPLEMENT_FUNCTION(12, Pascale, chapter1)
case kActionNone:
setup_chapter1Handler();
- break;
+ break;
case kActionDefault:
getSavePoints()->addData(kEntityPascale, kAction239072064, 0);
@@ -366,7 +364,7 @@ IMPLEMENT_FUNCTION(13, Pascale, getMessageFromAugustToTyler)
getSavePoints()->push(kEntityPascale, kEntityVerges, kActionDeliverMessageToTyler);
ENTITY_PARAM(0, 1) = 0;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -382,7 +380,7 @@ IMPLEMENT_FUNCTION(14, Pascale, sitAnna)
case kActionExitCompartment:
getEntities()->updatePositionExit(kEntityPascale, kCarRestaurant, 62);
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionDefault:
@@ -433,7 +431,7 @@ IMPLEMENT_FUNCTION(15, Pascale, welcomeAnna)
getData()->entityPosition = kPosition_5900;
ENTITY_PARAM(0, 2) = 0;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -486,7 +484,7 @@ IMPLEMENT_FUNCTION(16, Pascale, serveTatianaVassili)
getData()->entityPosition = kPosition_5900;
ENTITY_PARAM(0, 3) = 0;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -648,7 +646,7 @@ IMPLEMENT_FUNCTION(21, Pascale, chapter3)
case kActionNone:
setup_chapter3Handler();
- break;
+ break;
case kActionDefault:
getEntities()->clearSequences(kEntityPascale);
@@ -685,7 +683,7 @@ label_callback:
setCallback(2);
setup_welcomeSophieAndRebecca();
}
- break;
+ break;
case kActionCallback:
if (getCallback() == 1)
@@ -727,7 +725,7 @@ IMPLEMENT_FUNCTION(23, Pascale, function23)
ENTITY_PARAM(0, 7) = 0;
getEntities()->clearSequences(kEntityPascale);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -748,7 +746,7 @@ IMPLEMENT_FUNCTION(24, Pascale, welcomeAbbot)
break;
case kActionExitCompartment:
- CALLBACK_ACTION();
+ callbackAction();
break;
case kAction10:
@@ -771,7 +769,7 @@ IMPLEMENT_FUNCTION(25, Pascale, chapter4)
case kActionNone:
setup_chapter4Handler();
- break;
+ break;
case kActionDefault:
getEntities()->clearSequences(kEntityPascale);
@@ -953,7 +951,7 @@ IMPLEMENT_FUNCTION(27, Pascale, function27)
ENTITY_PARAM(1, 1) = 0;
ENTITY_PARAM(1, 2) = 1;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -999,7 +997,7 @@ IMPLEMENT_FUNCTION(28, Pascale, messageFromAnna)
getData()->entityPosition = kPosition_5900;
ENTITY_PARAM(1, 2) = 0;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -1037,7 +1035,7 @@ IMPLEMENT_FUNCTION(29, Pascale, function29)
case 2:
getData()->entityPosition = kPosition_850;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -1075,7 +1073,7 @@ IMPLEMENT_FUNCTION(30, Pascale, function30)
case 2:
getData()->entityPosition = kPosition_5900;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -1090,7 +1088,7 @@ IMPLEMENT_FUNCTION(31, Pascale, chapter5)
case kActionNone:
setup_chapter5Handler();
- break;
+ break;
case kActionDefault:
getEntities()->clearSequences(kEntityPascale);
@@ -1117,18 +1115,19 @@ IMPLEMENT_FUNCTION(33, Pascale, function33)
case kActionNone:
if (params->param4) {
- UPDATE_PARAM_PROC(params->param5, getState()->time, 4500)
+ if (Entity::updateParameter(params->param5, getState()->time, 4500)) {
getObjects()->update(kObjectCompartmentG, kEntityPascale, kObjectLocation1, kCursorNormal, kCursorNormal);
setCallback(1);
setup_playSound("Wat5010");
break;
- UPDATE_PARAM_PROC_END
+ }
}
label_callback1:
if (params->param1) {
- UPDATE_PARAM(params->param6, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param6, getState()->timeTicks, 75))
+ break;
params->param1 = 0;
params->param2 = 2;
diff --git a/engines/lastexpress/entities/pascale.h b/engines/lastexpress/entities/pascale.h
index 333ebcae3e..eaf0f3ba0c 100644
--- a/engines/lastexpress/entities/pascale.h
+++ b/engines/lastexpress/entities/pascale.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_PASCALE_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/rebecca.cpp b/engines/lastexpress/entities/rebecca.cpp
index b1a176b47e..5bcb6aef85 100644
--- a/engines/lastexpress/entities/rebecca.cpp
+++ b/engines/lastexpress/entities/rebecca.cpp
@@ -30,10 +30,8 @@
#include "lastexpress/game/state.h"
#include "lastexpress/sound/queue.h"
-#include "lastexpress/sound/sound.h"
#include "lastexpress/lastexpress.h"
-#include "lastexpress/helpers.h"
namespace LastExpress {
@@ -179,7 +177,7 @@ IMPLEMENT_FUNCTION(15, Rebecca, function15)
getData()->location = kLocationInsideCompartment;
getEntities()->clearSequences(kEntityRebecca);
- CALLBACK_ACTION();
+ callbackAction();
}
break;
}
@@ -261,7 +259,7 @@ IMPLEMENT_FUNCTION_I(16, Rebecca, function16, bool)
getSavePoints()->push(kEntityRebecca, kEntityTables3, kAction136455232);
getData()->location = kLocationInsideCompartment;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
IMPLEMENT_FUNCTION_END
@@ -334,7 +332,7 @@ IMPLEMENT_FUNCTION_I(17, Rebecca, function17, bool)
case 5:
getData()->location = kLocationInsideCompartment;
- CALLBACK_ACTION();
+ callbackAction();
break;
case 6:
@@ -343,7 +341,7 @@ IMPLEMENT_FUNCTION_I(17, Rebecca, function17, bool)
getData()->location = kLocationInsideCompartment;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -397,7 +395,7 @@ IMPLEMENT_FUNCTION(18, Rebecca, function18)
case 2:
case 3:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -473,7 +471,7 @@ IMPLEMENT_FUNCTION(19, Rebecca, function19)
case 5:
case 6:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -493,21 +491,21 @@ IMPLEMENT_FUNCTION_I(20, Rebecca, function20, TimeValue)
getObjects()->update(kObjectCompartmentE, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);
getObjects()->update(kObject52, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
if (!params->param2) {
params->param6 = 0;
} else {
- UPDATE_PARAM_PROC(params->param6, getState()->timeTicks, 75)
+ if (Entity::updateParameter(params->param6, getState()->timeTicks, 75)) {
params->param2 = 0;
params->param3 = 1;
getObjects()->update(kObjectCompartmentE, kEntityRebecca, kObjectLocation1, kCursorNormal, kCursorNormal);
getObjects()->update(kObject52, kEntityRebecca, kObjectLocation1, kCursorNormal, kCursorNormal);
params->param6 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (getProgress().chapter == kChapter1 && !ENTITY_PARAM(0, 3)) {
@@ -657,7 +655,7 @@ IMPLEMENT_FUNCTION(21, Rebecca, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Rebecca, setup_chapter1Handler));
break;
case kActionDefault:
@@ -685,7 +683,8 @@ IMPLEMENT_FUNCTION(22, Rebecca, chapter1Handler)
break;
case kActionNone:
- TIME_CHECK_CALLBACK_1(kTime1084500, params->param3, 1, setup_playSound, "REB1015");
+ if (Entity::timeCheckCallback(kTime1084500, params->param3, 1, "REB1015", WRAP_SETUP_FUNCTION_S(Rebecca, setup_playSound)))
+ break;
if (params->param4 == kTimeInvalid)
goto label_callback_4;
@@ -699,7 +698,7 @@ IMPLEMENT_FUNCTION(22, Rebecca, chapter1Handler)
if (params->param4 >= getState()->time) {
label_callback_4:
if (params->param1) {
- UPDATE_PARAM_CHECK(params->param5, getState()->time, 900)
+ if (Entity::updateParameterCheck(params->param5, getState()->time, 900)) {
if (getEntities()->isInSalon(kEntityPlayer)) {
setCallback(5);
setup_playSound("REB1013");
@@ -710,7 +709,9 @@ label_callback_4:
label_callback_5:
if (params->param2) {
- UPDATE_PARAM(params->param6, getState()->timeTicks, 90);
+ if (!Entity::updateParameter(params->param6, getState()->timeTicks, 90))
+ break;
+
getScenes()->loadSceneFromPosition(kCarRestaurant, 55);
} else {
params->param6 = 0;
@@ -774,7 +775,13 @@ IMPLEMENT_FUNCTION(23, Rebecca, function23)
break;
case kActionNone:
- TIME_CHECK_CALLBACK_2(kTime1111500, params->param2, 3, setup_enterExitCompartment, "623De", kObjectCompartmentE);
+ if (getState()->time > kTime1111500 && !params->param2) {
+ params->param2 = 1;
+ setCallback(3);
+ setup_enterExitCompartment("623De", kObjectCompartmentE);
+
+ break;
+ }
break;
case kActionDefault:
@@ -843,12 +850,13 @@ IMPLEMENT_FUNCTION(24, Rebecca, function24)
break;
case kActionNone:
- TIME_CHECK_SAVEPOINT(kTime1134000, params->param2, kEntityRebecca, kEntityServers0, kAction223712416);
+ Entity::timeCheckSavepoint(kTime1134000, params->param2, kEntityRebecca, kEntityServers0, kAction223712416);
if (!params->param1)
break;
- TIME_CHECK_CALLBACK(kTime1165500, params->param3, 6, setup_function19);
+ if (Entity::timeCheckCallback(kTime1165500, params->param3, 6, WRAP_SETUP_FUNCTION(Rebecca, setup_function19)))
+ break;
if (params->param4 != kTimeInvalid) {
if (getState()->time <= kTime1161000) {
@@ -965,10 +973,16 @@ IMPLEMENT_FUNCTION(26, Rebecca, function26)
break;
case kActionNone:
- TIME_CHECK_CALLBACK_3(kTime1224000, params->param2, 1, setup_updatePosition, "118H", kCarRestaurant, 52);
+ if (getState()->time > kTime1224000 && !params->param2) {
+ params->param2 = 1;
+ setCallback(1);
+ setup_updatePosition("118H", kCarRestaurant, 52);
+ break;
+ }
if (params->param1) {
- UPDATE_PARAM(params->param3, getState()->timeTicks, 90);
+ if (!Entity::updateParameter(params->param3, getState()->timeTicks, 90))
+ break;
getScenes()->loadSceneFromPosition(kCarRestaurant, 51);
}
@@ -1223,7 +1237,7 @@ IMPLEMENT_FUNCTION(34, Rebecca, function34)
params->param2 = (uint)getState()->time;
if (params->param2 >= getState()->time) {
- TIME_CHECK_CALLBACK(kTime2052000, params->param3, 1, setup_function19);
+ Entity::timeCheckCallback(kTime2052000, params->param3, 1, WRAP_SETUP_FUNCTION(Rebecca, setup_function19));
break;
}
}
@@ -1233,7 +1247,7 @@ IMPLEMENT_FUNCTION(34, Rebecca, function34)
getSavePoints()->push(kEntityRebecca, kEntityServers0, kAction223712416);
}
- TIME_CHECK_CALLBACK(kTime2052000, params->param3, 1, setup_function19);
+ Entity::timeCheckCallback(kTime2052000, params->param3, 1, WRAP_SETUP_FUNCTION(Rebecca, setup_function19));
break;
case kActionEndSound:
@@ -1632,7 +1646,7 @@ label_next:
label_callback_2:
if (params->param2)
- TIME_CHECK_CALLBACK(kTime2443500, params->param5, 3, setup_function19);
+ Entity::timeCheckCallback(kTime2443500, params->param5, 3, WRAP_SETUP_FUNCTION(Rebecca, setup_function19));
break;
case kActionEndSound:
@@ -1755,7 +1769,8 @@ IMPLEMENT_FUNCTION(48, Rebecca, function48)
case kActionNone:
if (params->param1) {
- UPDATE_PARAM(params->param3, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param3, getState()->timeTicks, 75))
+ break;
params->param1 = 0;
params->param2 = 1;
diff --git a/engines/lastexpress/entities/rebecca.h b/engines/lastexpress/entities/rebecca.h
index e91ee30d4d..885632f884 100644
--- a/engines/lastexpress/entities/rebecca.h
+++ b/engines/lastexpress/entities/rebecca.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_REBECCA_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/salko.cpp b/engines/lastexpress/entities/salko.cpp
index 63d995dc42..e8b4b4247b 100644
--- a/engines/lastexpress/entities/salko.cpp
+++ b/engines/lastexpress/entities/salko.cpp
@@ -33,10 +33,8 @@
#include "lastexpress/game/state.h"
#include "lastexpress/sound/queue.h"
-#include "lastexpress/sound/sound.h"
#include "lastexpress/lastexpress.h"
-#include "lastexpress/helpers.h"
namespace LastExpress {
@@ -137,7 +135,7 @@ IMPLEMENT_FUNCTION_II(7, Salko, function7, CarIndex, EntityPosition)
break;
case kAction123668192:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
IMPLEMENT_FUNCTION_END
@@ -158,7 +156,7 @@ IMPLEMENT_FUNCTION(9, Salko, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Salko, setup_chapter1Handler));
break;
case kActionDefault:
@@ -301,7 +299,8 @@ IMPLEMENT_FUNCTION(15, Salko, chapter3Handler)
case kActionNone:
if (getState()->time < kTime2200500) {
- UPDATE_PARAM(params->param1, getState()->time, 81000);
+ if (!Entity::updateParameter(params->param1, getState()->time, 81000))
+ break;
setCallback(1);
setup_function16();
@@ -331,7 +330,8 @@ IMPLEMENT_FUNCTION(16, Salko, function16)
}
label_callback3:
- UPDATE_PARAM(params->param1, getState()->time, 4500);
+ if (!Entity::updateParameter(params->param1, getState()->time, 4500))
+ break;
getSavePoints()->push(kEntitySalko, kEntitySalko, kAction101169464);
break;
@@ -390,7 +390,7 @@ label_callback3:
getData()->entityPosition = kPosition_2740;
getEntities()->clearSequences(kEntitySalko);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
diff --git a/engines/lastexpress/entities/salko.h b/engines/lastexpress/entities/salko.h
index 6308211053..6ca73e39f6 100644
--- a/engines/lastexpress/entities/salko.h
+++ b/engines/lastexpress/entities/salko.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_SALKO_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/servers0.cpp b/engines/lastexpress/entities/servers0.cpp
index 989bddd662..73e0d34722 100644
--- a/engines/lastexpress/entities/servers0.cpp
+++ b/engines/lastexpress/entities/servers0.cpp
@@ -28,10 +28,7 @@
#include "lastexpress/game/savepoint.h"
#include "lastexpress/game/state.h"
-#include "lastexpress/sound/sound.h"
-
#include "lastexpress/lastexpress.h"
-#include "lastexpress/helpers.h"
namespace LastExpress {
@@ -113,11 +110,11 @@ IMPLEMENT_FUNCTION_NOSETUP(5, Servers0, callbackActionOnDirection)
case kActionNone:
if (getData()->direction != kDirectionRight)
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionExitCompartment:
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionExcuseMeCath:
@@ -163,7 +160,7 @@ IMPLEMENT_FUNCTION(7, Servers0, function7)
case 2:
getEntities()->clearSequences(kEntityServers0);
getData()->entityPosition = kPosition_5900;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -220,7 +217,7 @@ IMPLEMENT_FUNCTION(9, Servers0, function9)
ENTITY_PARAM(2, 2) = 0;
ENTITY_PARAM(1, 6) = 0;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -315,17 +312,17 @@ IMPLEMENT_FUNCTION(20, Servers0, chapter1Handler)
case kActionNone:
if (params->param2) {
- UPDATE_PARAM_PROC(params->param3, getState()->time, 2700);
+ if (Entity::updateParameter(params->param3, getState()->time, 2700)) {
ENTITY_PARAM(0, 4) = 1;
params->param2 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (params->param1) {
- UPDATE_PARAM_PROC(params->param4, getState()->time, 4500)
+ if (Entity::updateParameter(params->param4, getState()->time, 4500)) {
ENTITY_PARAM(0, 5) = 1;
params->param1 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (!getEntities()->isInKitchen(kEntityServers0) && !getEntities()->isSomebodyInsideRestaurantOrSalon())
@@ -486,7 +483,7 @@ IMPLEMENT_FUNCTION(25, Servers0, function25)
getEntities()->clearSequences(kEntityServers0);
ENTITY_PARAM(1, 3) = 0;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -647,7 +644,7 @@ IMPLEMENT_FUNCTION(29, Servers0, augustAnnaDateOrder)
getEntities()->clearSequences(kEntityServers0);
ENTITY_PARAM(1, 5) = 0;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -693,7 +690,7 @@ IMPLEMENT_FUNCTION(30, Servers0, function30)
getEntities()->clearSequences(kEntityServers0);
ENTITY_PARAM(2, 4) = 0;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -736,10 +733,10 @@ IMPLEMENT_FUNCTION(32, Servers0, chapter4Handler)
break;
case kActionNone:
- UPDATE_PARAM_PROC(params->param2, getState()->time, 3600)
+ if (Entity::updateParameter(params->param2, getState()->time, 3600)) {
ENTITY_PARAM(1, 8) = 1;
params->param1 = 0;
- UPDATE_PARAM_PROC_END
+ }
if (!getEntities()->isInKitchen(kEntityServers1) || !getEntities()->isSomebodyInsideRestaurantOrSalon())
break;
@@ -859,7 +856,7 @@ IMPLEMENT_FUNCTION(33, Servers0, augustOrderSteak)
getEntities()->clearSequences(kEntityServers0);
ENTITY_PARAM(1, 7) = 0;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -902,7 +899,7 @@ IMPLEMENT_FUNCTION(34, Servers0, augustServeDuck)
getEntities()->clearSequences(kEntityServers0);
ENTITY_PARAM(1, 8) = 0;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -972,7 +969,7 @@ void Servers0::handleServer(const SavePoint &savepoint, const char *name, Entity
getSavePoints()->push(kEntityServers0, entity, action);
*parameter = 0;
- CALLBACK_ACTION();
+ callbackAction();
}
break;
}
@@ -1027,7 +1024,7 @@ void Servers0::serveTable(const SavePoint &savepoint, const char *seq1, EntityIn
getEntities()->clearSequences(kEntityServers0);
*parameter = 0;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
diff --git a/engines/lastexpress/entities/servers0.h b/engines/lastexpress/entities/servers0.h
index 2e9165a410..4c35637d65 100644
--- a/engines/lastexpress/entities/servers0.h
+++ b/engines/lastexpress/entities/servers0.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_SERVERS0_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/servers1.cpp b/engines/lastexpress/entities/servers1.cpp
index 995fbbc01b..a8f4c0233c 100644
--- a/engines/lastexpress/entities/servers1.cpp
+++ b/engines/lastexpress/entities/servers1.cpp
@@ -28,10 +28,7 @@
#include "lastexpress/game/savepoint.h"
#include "lastexpress/game/state.h"
-#include "lastexpress/sound/sound.h"
-
#include "lastexpress/lastexpress.h"
-#include "lastexpress/helpers.h"
namespace LastExpress {
@@ -143,7 +140,7 @@ IMPLEMENT_FUNCTION(7, Servers1, function7)
getData()->entityPosition = kPosition_5900;
ENTITY_PARAM(1, 2) = 0;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -219,7 +216,7 @@ IMPLEMENT_FUNCTION(9, Servers1, function9)
getData()->entityPosition = kPosition_5900;
ENTITY_PARAM(0, 1) = 0;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -265,7 +262,7 @@ IMPLEMENT_FUNCTION(10, Servers1, function10)
getData()->entityPosition = kPosition_5900;
ENTITY_PARAM(0, 2) = 0;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -469,7 +466,7 @@ IMPLEMENT_FUNCTION(20, Servers1, function20)
getEntities()->drawSequenceLeft(kEntityServers1, "BLANK");
ENTITY_PARAM(0, 7) = 0;
- CALLBACK_ACTION();
+ callbackAction();
}
break;
}
@@ -566,10 +563,10 @@ IMPLEMENT_FUNCTION(26, Servers1, chapter4Handler)
case kActionNone:
if (params->param2) {
- UPDATE_PARAM_PROC(params->param2, getState()->time, 900)
+ if (Entity::updateParameter(params->param2, getState()->time, 900)) {
ENTITY_PARAM(1, 5) = 1;
params->param1 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (!getEntities()->isInKitchen(kEntityServers1) || !getEntities()->isSomebodyInsideRestaurantOrSalon())
@@ -705,7 +702,7 @@ void Servers1::serveTable(const SavePoint &savepoint, const char *seq1, EntityIn
if (parameter2 != NULL)
*parameter2 = 0;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -775,7 +772,7 @@ void Servers1::serveSalon(const SavePoint &savepoint, const char *seq1, const ch
getData()->entityPosition = kPosition_5900;
*parameter = 0;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
diff --git a/engines/lastexpress/entities/servers1.h b/engines/lastexpress/entities/servers1.h
index 13b30696f0..c8f667ec5c 100644
--- a/engines/lastexpress/entities/servers1.h
+++ b/engines/lastexpress/entities/servers1.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_SERVERS1_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/sophie.cpp b/engines/lastexpress/entities/sophie.cpp
index 57bd491949..170090005f 100644
--- a/engines/lastexpress/entities/sophie.cpp
+++ b/engines/lastexpress/entities/sophie.cpp
@@ -27,38 +27,10 @@
#include "lastexpress/game/savepoint.h"
#include "lastexpress/game/state.h"
-#include "lastexpress/sound/sound.h"
-
-#include "lastexpress/helpers.h"
#include "lastexpress/lastexpress.h"
namespace LastExpress {
-#define CHAPTER_IMPLEMENTATION() \
- switch (savepoint.action) { \
- default: \
- break; \
- case kActionNone: \
- setup_chaptersHandler(); \
- break; \
- case kActionDefault: \
- getEntities()->clearSequences(kEntitySophie); \
- getData()->entityPosition = kPosition_4840; \
- getData()->location = kLocationInsideCompartment; \
- getData()->car = kCarRedSleeping; \
- getData()->clothes = kClothesDefault; \
- getData()->inventoryItem = kItemNone; \
- break; \
- }
-
-#define DEFAULT_ACTION_IMPLEMENTATION() \
- if (savepoint.action == kActionDefault) { \
- getData()->entityPosition = kPosition_4840; \
- getData()->location = kLocationInsideCompartment; \
- getData()->car = kCarRedSleeping; \
- getEntities()->clearSequences(kEntitySophie); \
- }
-
Sophie::Sophie(LastExpressEngine *engine) : Entity(engine, kEntitySophie) {
ADD_CALLBACK_FUNCTION(Sophie, reset);
ADD_CALLBACK_FUNCTION(Sophie, updateEntity);
@@ -123,7 +95,7 @@ IMPLEMENT_FUNCTION_II(2, Sophie, updateEntity, CarIndex, EntityPosition)
break;
case kAction123668192:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
IMPLEMENT_FUNCTION_END
@@ -207,7 +179,7 @@ IMPLEMENT_FUNCTION(4, Sophie, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chaptersHandler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Sophie, setup_chaptersHandler));
break;
case kActionDefault:
@@ -220,27 +192,27 @@ IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(5, Sophie, function5)
- DEFAULT_ACTION_IMPLEMENTATION()
+ handleAction(savepoint);
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(6, Sophie, chapter2)
- CHAPTER_IMPLEMENTATION()
+ handleChapter(savepoint);
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(7, Sophie, chapter3)
- CHAPTER_IMPLEMENTATION()
+ handleChapter(savepoint);
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(8, Sophie, chapter4)
- CHAPTER_IMPLEMENTATION()
+ handleChapter(savepoint);
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(9, Sophie, function9)
- DEFAULT_ACTION_IMPLEMENTATION()
+ handleAction(savepoint);
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
@@ -274,4 +246,37 @@ IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_NULL_FUNCTION(12, Sophie)
+//////////////////////////////////////////////////////////////////////////
+// Helpers functions
+//////////////////////////////////////////////////////////////////////////
+
+void Sophie::handleAction(const SavePoint &savepoint) {
+ if (savepoint.action == kActionDefault) {
+ getData()->entityPosition = kPosition_4840;
+ getData()->location = kLocationInsideCompartment;
+ getData()->car = kCarRedSleeping;
+ getEntities()->clearSequences(kEntitySophie);
+ }
+}
+
+void Sophie::handleChapter(const SavePoint &savepoint) {
+ switch (savepoint.action) {
+ default:
+ break;
+
+ case kActionNone:
+ setup_chaptersHandler();
+ break;
+
+ case kActionDefault:
+ getEntities()->clearSequences(kEntitySophie);
+ getData()->entityPosition = kPosition_4840;
+ getData()->location = kLocationInsideCompartment;
+ getData()->car = kCarRedSleeping;
+ getData()->clothes = kClothesDefault;
+ getData()->inventoryItem = kItemNone;
+ break;
+ }
+}
+
} // End of namespace LastExpress
diff --git a/engines/lastexpress/entities/sophie.h b/engines/lastexpress/entities/sophie.h
index c2ca348027..188788bb9b 100644
--- a/engines/lastexpress/entities/sophie.h
+++ b/engines/lastexpress/entities/sophie.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_SOPHIE_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
@@ -88,6 +87,10 @@ public:
DECLARE_FUNCTION(chapter5Handler)
DECLARE_NULL_FUNCTION()
+
+private:
+ void handleAction(const SavePoint &savepoint);
+ void handleChapter(const SavePoint &savepoint);
};
} // End of namespace LastExpress
diff --git a/engines/lastexpress/entities/tables.cpp b/engines/lastexpress/entities/tables.cpp
index 06ea4c597c..4f8d2b954d 100644
--- a/engines/lastexpress/entities/tables.cpp
+++ b/engines/lastexpress/entities/tables.cpp
@@ -29,10 +29,8 @@
#include "lastexpress/game/state.h"
#include "lastexpress/sound/queue.h"
-#include "lastexpress/sound/sound.h"
#include "lastexpress/lastexpress.h"
-#include "lastexpress/helpers.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/tables.h b/engines/lastexpress/entities/tables.h
index 7fcfc0499e..c213aac978 100644
--- a/engines/lastexpress/entities/tables.h
+++ b/engines/lastexpress/entities/tables.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_TABLES_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/tatiana.cpp b/engines/lastexpress/entities/tatiana.cpp
index c8901b3e30..432def6253 100644
--- a/engines/lastexpress/entities/tatiana.cpp
+++ b/engines/lastexpress/entities/tatiana.cpp
@@ -35,10 +35,8 @@
#include "lastexpress/game/state.h"
#include "lastexpress/sound/queue.h"
-#include "lastexpress/sound/sound.h"
#include "lastexpress/lastexpress.h"
-#include "lastexpress/helpers.h"
namespace LastExpress {
@@ -192,7 +190,7 @@ IMPLEMENT_FUNCTION(14, Tatiana, function14)
getData()->location = kLocationInsideCompartment;
getEntities()->clearSequences(kEntityTatiana);
- CALLBACK_ACTION();
+ callbackAction();
}
break;
@@ -228,7 +226,7 @@ IMPLEMENT_FUNCTION(15, Tatiana, function15)
getEntities()->exitCompartment(kEntityTatiana, kObjectCompartmentB, true);
getObjects()->update(kObjectCompartmentB, kEntityPlayer, kObjectLocation1, kCursorHandKnock, kCursorHand);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
IMPLEMENT_FUNCTION_END
@@ -246,12 +244,13 @@ IMPLEMENT_FUNCTION_I(16, Tatiana, function16, uint32)
getObjects()->update(kObjectCompartmentB, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);
getObjects()->update(kObject49, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
if (params->param2) {
- UPDATE_PARAM(params->param5, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param5, getState()->timeTicks, 75))
+ break;
params->param2 = 0;
params->param3 = 1;
@@ -342,7 +341,7 @@ IMPLEMENT_FUNCTION(17, Tatiana, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Tatiana, setup_chapter1Handler));
break;
case kActionDefault:
@@ -375,10 +374,10 @@ IMPLEMENT_FUNCTION(18, Tatiana, function18)
}
if (!params->param1) {
- UPDATE_PARAM_PROC(params->param3, getState()->time, 4500)
+ if (Entity::updateParameter(params->param3, getState()->time, 4500)) {
getEntities()->drawSequenceRight(kEntityTatiana, "806DS");
params->param1 = 1;
- UPDATE_PARAM_PROC_END
+ }
}
}
@@ -386,14 +385,14 @@ IMPLEMENT_FUNCTION(18, Tatiana, function18)
getSavePoints()->push(kEntityTatiana, kEntityAlexei, kAction157159392);
getEntities()->clearSequences(kEntityTatiana);
- CALLBACK_ACTION();
+ callbackAction();
}
break;
case kActionExitCompartment:
getSavePoints()->push(kEntityTatiana, kEntityAlexei, kAction188784532);
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionDefault:
@@ -425,27 +424,29 @@ IMPLEMENT_FUNCTION(19, Tatiana, chapter1Handler)
if (getSoundQueue()->isBuffered(kEntityTatiana) || !params->param4 || params->param3 == 2 || getSoundQueue()->isBuffered("TAT1066"))
goto label_tatiana_chapter1_2;
- UPDATE_PARAM_PROC(params->param5, getState()->timeTicks, 450)
+ if (Entity::updateParameter(params->param5, getState()->timeTicks, 450)) {
getSound()->playSound(kEntityTatiana, params->param3 ? "TAT1069B" : "TAT1069A");
getProgress().field_64 = 1;
params->param3++;
params->param5 = 0;
- UPDATE_PARAM_PROC_END
+ }
if (getEntities()->isPlayerPosition(kCarRestaurant, 71)) {
- UPDATE_PARAM_PROC(params->param6, getState()->timeTicks, 75)
+ if (Entity::updateParameter(params->param6, getState()->timeTicks, 75)) {
getSound()->playSound(kEntityTatiana, params->param3 ? "TAT1069B" : "TAT1069A");
getProgress().field_64 = 1;
params->param3++;
params->param6 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
label_tatiana_chapter1_2:
- TIME_CHECK_SAVEPOINT(kTime1084500, params->param7, kEntityTatiana, kEntityPascale, kAction257489762);
+ Entity::timeCheckSavepoint(kTime1084500, params->param7, kEntityTatiana, kEntityPascale, kAction257489762);
if (params->param1) {
- UPDATE_PARAM(params->param8, getState()->timeTicks, 90);
+ if (!Entity::updateParameter(params->param8, getState()->timeTicks, 90))
+ break;
+
getScenes()->loadSceneFromPosition(kCarRestaurant, 65);
} else {
params->param8 = 0;
@@ -614,7 +615,7 @@ IMPLEMENT_FUNCTION(22, Tatiana, function22)
if (params->param1 == kTimeInvalid || getState()->time <= kTime1179000)
goto label_update;
- UPDATE_PARAM_PROC_TIME(kTime1233000, ((!getEvent(kEventTatianaAskMatchSpeakRussian) && !getEvent(kEventTatianaAskMatch)) || getEntities()->isInGreenCarEntrance(kEntityPlayer)), params->param1, 0)
+ if (Entity::updateParameterTime(kTime1233000, ((!getEvent(kEventTatianaAskMatchSpeakRussian) && !getEvent(kEventTatianaAskMatch)) || getEntities()->isInGreenCarEntrance(kEntityPlayer)), params->param1, 0)) {
label_update:
if (!getEvent(kEventTatianaAskMatchSpeakRussian)
&& !getEvent(kEventTatianaAskMatch)
@@ -623,7 +624,7 @@ label_update:
getObjects()->update(kObject25, kEntityTatiana, kObjectLocation1, kCursorNormal, kCursorForward);
getObjects()->update(kObjectTrainTimeTable, kEntityTatiana, kObjectLocation1, kCursorNormal, kCursorForward);
}
- UPDATE_PARAM_PROC_END
+ }
params->param1 = kTimeInvalid;
@@ -1022,7 +1023,7 @@ IMPLEMENT_FUNCTION(32, Tatiana, chapter3Handler)
}
if (parameters->param4 && parameters->param5) {
- UPDATE_PARAM_CHECK(parameters->param4, getState()->time, 6300)
+ if (Entity::updateParameterCheck(parameters->param4, getState()->time, 6300)) {
if (getEntities()->isSomebodyInsideRestaurantOrSalon()) {
getData()->location = kLocationOutsideCompartment;
@@ -1283,18 +1284,19 @@ IMPLEMENT_FUNCTION(37, Tatiana, function37)
params->param3 = (uint)getState()->time + 900;
if (params->param4 != kTimeInvalid && params->param3 < getState()->time) {
- UPDATE_PARAM_PROC_TIME(kTime2227500, !getEntities()->isPlayerInCar(kCarRedSleeping), params->param4, 450)
+ if (Entity::updateParameterTime(kTime2227500, !getEntities()->isPlayerInCar(kCarRedSleeping), params->param4, 450)) {
getProgress().field_5C = 1;
if (getEntities()->isInsideCompartment(kEntityAnna, kCarRedSleeping, kPosition_4070)) {
setup_function38();
break;
}
- UPDATE_PARAM_PROC_END
+ }
}
}
if (params->param1) {
- UPDATE_PARAM(params->param5, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param5, getState()->timeTicks, 75))
+ break;
getObjects()->update(kObjectCompartmentB, kEntityTatiana, kObjectLocation1, kCursorNormal, kCursorNormal);
getObjects()->update(kObject49, kEntityTatiana, kObjectLocation1, kCursorNormal, kCursorNormal);
@@ -1403,7 +1405,8 @@ IMPLEMENT_FUNCTION(38, Tatiana, function38)
break;
case kActionNone:
- UPDATE_PARAM(params->param1, getState()->time, 450);
+ if (!Entity::updateParameter(params->param1, getState()->time, 450))
+ break;
getEntities()->exitCompartment(kEntityTatiana, kObjectCompartmentF, true);
@@ -1535,7 +1538,7 @@ IMPLEMENT_FUNCTION(40, Tatiana, function40)
if (getEntities()->isInsideTrainCar(kEntityPlayer, kCarKronos)
|| getData()->car != getEntityData(kEntityPlayer)->car
|| getEntities()->updateEntity(kEntityTatiana, kCarKronos, kPosition_9270))
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionExcuseMe:
@@ -1547,7 +1550,7 @@ IMPLEMENT_FUNCTION(40, Tatiana, function40)
case kActionDefault:
if (getEntities()->updateEntity(kEntityTatiana, kCarKronos, kPosition_9270))
- CALLBACK_ACTION();
+ callbackAction();
break;
}
IMPLEMENT_FUNCTION_END
@@ -1595,7 +1598,7 @@ IMPLEMENT_FUNCTION(41, Tatiana, function41)
}
getEntities()->clearSequences(kEntityTatiana);
- CALLBACK_ACTION();
+ callbackAction();
}
break;
@@ -1629,7 +1632,7 @@ IMPLEMENT_FUNCTION(41, Tatiana, function41)
case 6:
getEntities()->clearSequences(kEntityTatiana);
- CALLBACK_ACTION();
+ callbackAction();
break;
case 4:
@@ -1952,7 +1955,8 @@ IMPLEMENT_FUNCTION(48, Tatiana, function48)
if (!params->param1 || getSoundQueue()->isBuffered(kEntityTatiana))
goto label_end;
- UPDATE_PARAM_GOTO(params->param2, getState()->timeTicks, 5 * (3 * rnd(5) + 30), label_end);
+ if (!Entity::updateParameter(params->param2, getState()->timeTicks, 5 * (3 * rnd(5) + 30)))
+ goto label_end;
getSound()->playSound(kEntityTatiana, "LIB012", kFlagDefault);
params->param2 = 0;
@@ -2199,7 +2203,8 @@ IMPLEMENT_FUNCTION(54, Tatiana, function54)
}
if (params->param1 > 3) {
- UPDATE_PARAM(params->param3, getState()->timeTicks, 225);
+ if (!Entity::updateParameter(params->param3, getState()->timeTicks, 225))
+ break;
params->param1 = 0;
params->param3 = 0;
diff --git a/engines/lastexpress/entities/tatiana.h b/engines/lastexpress/entities/tatiana.h
index c457d49b1e..8ec69db5e9 100644
--- a/engines/lastexpress/entities/tatiana.h
+++ b/engines/lastexpress/entities/tatiana.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_TATIANA_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/train.cpp b/engines/lastexpress/entities/train.cpp
index bced1da62b..e3f530ef25 100644
--- a/engines/lastexpress/entities/train.cpp
+++ b/engines/lastexpress/entities/train.cpp
@@ -32,10 +32,8 @@
#include "lastexpress/game/state.h"
#include "lastexpress/sound/queue.h"
-#include "lastexpress/sound/sound.h"
#include "lastexpress/lastexpress.h"
-#include "lastexpress/helpers.h"
namespace LastExpress {
@@ -269,18 +267,20 @@ IMPLEMENT_FUNCTION(8, Train, process)
if ((getEntities()->isPlayerInCar(kCarGreenSleeping) || getEntities()->isPlayerInCar(kCarRedSleeping))
&& params->param4 && !params->param5) {
- params->param4 -= 1;
+ params->param4 -= 1;
- if (!params->param4 && getProgress().jacket == kJacketGreen) {
+ if (!params->param4 && getProgress().jacket == kJacketGreen) {
- getAction()->playAnimation(isNight() ? kEventCathSmokeNight : kEventCathSmokeDay);
- params->param5 = 1;
- getScenes()->processScene();
- }
+ getAction()->playAnimation(isNight() ? kEventCathSmokeNight : kEventCathSmokeDay);
+ params->param5 = 1;
+ getScenes()->processScene();
+ }
}
if (params->param6) {
- UPDATE_PARAM_GOTO(params1->param7, getState()->time, 900, label_process);
+ if (!Entity::updateParameter(params1->param7, getState()->time, 900))
+ goto label_process;
+
getScenes()->loadSceneFromPosition(kCarRestaurant, 58);
}
@@ -552,7 +552,7 @@ void Train::handleCompartmentAction() {
ENTITY_PARAM(0, 8) = params->param1;
- CALLBACK_ACTION();
+ callbackAction();
}
//////////////////////////////////////////////////////////////////////////
diff --git a/engines/lastexpress/entities/train.h b/engines/lastexpress/entities/train.h
index ea9e1d7a07..4b8bc10c1a 100644
--- a/engines/lastexpress/entities/train.h
+++ b/engines/lastexpress/entities/train.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_TRAIN_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/vassili.cpp b/engines/lastexpress/entities/vassili.cpp
index 22f41afa92..4695f8831f 100644
--- a/engines/lastexpress/entities/vassili.cpp
+++ b/engines/lastexpress/entities/vassili.cpp
@@ -35,10 +35,8 @@
#include "lastexpress/game/state.h"
#include "lastexpress/sound/queue.h"
-#include "lastexpress/sound/sound.h"
#include "lastexpress/lastexpress.h"
-#include "lastexpress/helpers.h"
namespace LastExpress {
@@ -85,7 +83,7 @@ IMPLEMENT_FUNCTION(4, Vassili, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Vassili, setup_chapter1Handler));
break;
case kActionDefault:
@@ -146,7 +144,8 @@ IMPLEMENT_FUNCTION(6, Vassili, function6)
case kActionNone:
if (getEntities()->isInsideCompartment(kEntityPlayer, kCarRedSleeping, kPosition_8200)) {
- UPDATE_PARAM_GOTO(params->param3, getState()->timeTicks, params->param1, label_function7);
+ if (!Entity::updateParameter(params->param3, getState()->timeTicks, params->param1))
+ goto label_function7;
setCallback(1);
setup_draw("303B");
@@ -402,7 +401,8 @@ IMPLEMENT_FUNCTION(13, Vassili, sleeping)
case kActionNone:
if (getEntities()->isInsideCompartment(kEntityPlayer, kCarRedSleeping, kPosition_8200)) {
- UPDATE_PARAM(params->param3, getState()->timeTicks, params->param1);
+ if (!Entity::updateParameter(params->param3, getState()->timeTicks, params->param1))
+ break;
setCallback(1);
setup_draw("303B");
@@ -461,7 +461,8 @@ IMPLEMENT_FUNCTION(15, Vassili, stealEgg)
case kActionNone:
if (getEntities()->isInsideCompartment(kEntityPlayer, kCarRedSleeping, kPosition_8200)) {
- UPDATE_PARAM(params->param3, getState()->timeTicks, params->param1);
+ if (!Entity::updateParameter(params->param3, getState()->timeTicks, params->param1))
+ break;
setCallback(1);
setup_draw("303B");
@@ -545,7 +546,8 @@ IMPLEMENT_FUNCTION(17, Vassili, chapter4Handler)
case kActionNone:
if (getEntities()->isInsideCompartment(kEntityPlayer, kCarRedSleeping, kPosition_8200)) {
- UPDATE_PARAM(params->param3, getState()->timeTicks, params->param1);
+ if (!Entity::updateParameter(params->param3, getState()->timeTicks, params->param1))
+ break;
setCallback(1);
setup_draw("303B");
diff --git a/engines/lastexpress/entities/vassili.h b/engines/lastexpress/entities/vassili.h
index 843a065174..d006770f7b 100644
--- a/engines/lastexpress/entities/vassili.h
+++ b/engines/lastexpress/entities/vassili.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_VASSILI_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/verges.cpp b/engines/lastexpress/entities/verges.cpp
index 8246f85145..867f122d8f 100644
--- a/engines/lastexpress/entities/verges.cpp
+++ b/engines/lastexpress/entities/verges.cpp
@@ -32,10 +32,8 @@
#include "lastexpress/game/state.h"
#include "lastexpress/sound/queue.h"
-#include "lastexpress/sound/sound.h"
#include "lastexpress/lastexpress.h"
-#include "lastexpress/helpers.h"
namespace LastExpress {
@@ -102,11 +100,11 @@ IMPLEMENT_FUNCTION(3, Verges, callbackActionOnDirection)
case kActionNone:
if (getData()->direction != kDirectionRight)
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionExitCompartment:
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionExcuseMeCath:
@@ -219,7 +217,7 @@ switch (savepoint.action) {
break;
case 6:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -241,12 +239,13 @@ IMPLEMENT_FUNCTION_IIS(10, Verges, function10, CarIndex, EntityPosition)
}
if (getEntities()->updateEntity(kEntityVerges, (CarIndex)params->param1, (EntityPosition)params->param2)) {
- CALLBACK_ACTION();
+ callbackAction();
break;
}
if (params->param6) {
- UPDATE_PARAM(params->param8, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param8, getState()->timeTicks, 75))
+ break;
getSound()->playSound(kEntityVerges, (char *)&params->seq);
@@ -266,7 +265,7 @@ IMPLEMENT_FUNCTION_IIS(10, Verges, function10, CarIndex, EntityPosition)
}
if (getEntities()->updateEntity(kEntityVerges, (CarIndex)params->param1, (EntityPosition)params->param2))
- CALLBACK_ACTION();
+ callbackAction();
break;
}
IMPLEMENT_FUNCTION_END
@@ -337,7 +336,7 @@ IMPLEMENT_FUNCTION(11, Verges, function11)
getObjects()->update(kObject104, kEntityVerges, kObjectLocationNone, kCursorNormal, kCursorHand);
getObjects()->update(kObject105, kEntityVerges, kObjectLocationNone, kCursorNormal, kCursorHand);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
}
@@ -397,7 +396,7 @@ IMPLEMENT_FUNCTION(12, Verges, function12)
getData()->entityPosition = kPosition_850;
getEntities()->clearSequences(kEntityVerges);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -438,7 +437,7 @@ IMPLEMENT_FUNCTION_I(13, Verges, function13, bool)
getEntities()->clearSequences(kEntityVerges);
getScenes()->loadSceneFromPosition(kCarBaggage, 91);
- CALLBACK_ACTION();
+ callbackAction();
}
break;
}
@@ -462,7 +461,7 @@ IMPLEMENT_FUNCTION_IS(15, Verges, function15, EntityIndex)
if (!getEntities()->isPlayerPosition(kCarGreenSleeping, 2) && !getEntities()->isPlayerPosition(kCarRedSleeping, 2))
getData()->entityPosition = kPosition_2088;
- CALLBACK_ACTION();
+ callbackAction();
}
break;
@@ -499,7 +498,7 @@ IMPLEMENT_FUNCTION_ISS(16, Verges, function16, EntityIndex)
if (!getEntities()->isPlayerPosition(kCarGreenSleeping, 2) && !getEntities()->isPlayerPosition(kCarRedSleeping, 2))
getData()->entityPosition = kPosition_2088;
- CALLBACK_ACTION();
+ callbackAction();
}
break;
@@ -559,7 +558,7 @@ IMPLEMENT_FUNCTION(17, Verges, function17)
case 4:
ENTITY_PARAM(0, 3) = 0;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -573,7 +572,7 @@ IMPLEMENT_FUNCTION(18, Verges, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Verges, setup_chapter1Handler));
break;
case kActionDefault:
@@ -651,7 +650,7 @@ IMPLEMENT_FUNCTION(22, Verges, function22)
break;
case 5:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -697,7 +696,7 @@ IMPLEMENT_FUNCTION(24, Verges, policeGettingOffTrain)
break;
case kActionEndSound:
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionDefault:
@@ -818,7 +817,7 @@ IMPLEMENT_FUNCTION(25, Verges, function25)
case 11:
ENTITY_PARAM(0, 7) = 0;
- CALLBACK_ACTION();
+ callbackAction();
break;
case 6:
@@ -908,10 +907,12 @@ label_callback3:
if (params->param6)
goto label_callback12;
- TIME_CHECK_CALLBACK_1(kTimeChapter1, params->param7, 4, setup_function9, "TRA1001");
+ if (Entity::timeCheckCallback(kTimeChapter1, params->param7, 4, "TRA1001", WRAP_SETUP_FUNCTION_S(Verges, setup_function9)))
+ break;
label_callback4:
- TIME_CHECK_CALLBACK(kTime1089000, params->param8, 5, setup_function12);
+ if (Entity::timeCheckCallback(kTime1089000, params->param8, 5, WRAP_SETUP_FUNCTION(Verges, setup_function12)))
+ break;
params->param8 = 1;
@@ -922,16 +923,20 @@ label_callback4:
}
label_callback8:
- TIME_CHECK_CALLBACK_1(kTime1107000, CURRENT_PARAM(1, 1), 9, setup_function9, "TRA1001A");
+ if (Entity::timeCheckCallback(kTime1107000, CURRENT_PARAM(1, 1), 9, "TRA1001A", WRAP_SETUP_FUNCTION_S(Verges, setup_function9)))
+ break;
label_callback9:
- TIME_CHECK_CALLBACK_1(kTime1134000, CURRENT_PARAM(1, 2), 10, setup_function9, "TRA1002");
+ if (Entity::timeCheckCallback(kTime1134000, CURRENT_PARAM(1, 2), 10, "TRA1002", WRAP_SETUP_FUNCTION_S(Verges, setup_function9)))
+ break;
label_callback10:
- TIME_CHECK_CALLBACK_1(kTime1165500, CURRENT_PARAM(1, 3), 11, setup_function9, "TRA1003");
+ if (Entity::timeCheckCallback(kTime1165500, CURRENT_PARAM(1, 3), 11, "TRA1003", WRAP_SETUP_FUNCTION_S(Verges, setup_function9)))
+ break;
label_callback11:
- TIME_CHECK_CALLBACK_1(kTime1225800, CURRENT_PARAM(1, 4), 12, setup_function9, "TRA1004");
+ if (Entity::timeCheckCallback(kTime1225800, CURRENT_PARAM(1, 4), 12, "TRA1004", WRAP_SETUP_FUNCTION_S(Verges, setup_function9)))
+ break;
label_callback12:
if (ENTITY_PARAM(0, 5) && !params->param2) {
@@ -1083,7 +1088,8 @@ IMPLEMENT_FUNCTION(28, Verges, chapter2Handler)
}
label_callback_1:
- TIME_CHECK_CALLBACK_1(kTime1818900, params->param1, 2, setup_function9, "Tra2177");
+ if (Entity::timeCheckCallback(kTime1818900, params->param1, 2, "Tra2177", WRAP_SETUP_FUNCTION_S(Verges, setup_function9)))
+ break;
label_callback_2:
if (params->param2 == kTimeInvalid || !getState()->time)
@@ -1224,7 +1230,7 @@ IMPLEMENT_FUNCTION_S(30, Verges, function30)
break;
case 4:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -1266,7 +1272,7 @@ IMPLEMENT_FUNCTION(31, Verges, function31)
getProgress().field_48 = 1;
ENTITY_PARAM(0, 4) = 0;
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -1280,7 +1286,12 @@ IMPLEMENT_FUNCTION(32, Verges, function32)
break;
case kActionNone:
- TIME_CHECK_CALLBACK_3(kTime2263500, params->param1, 5, setup_function10, kCarRedSleeping, kPosition_9460, "TRA3006");
+ if (getState()->time > kTime2263500 && !params->param1) {
+ params->param1 = 1;
+ setCallback(5);
+ setup_function10(kCarRedSleeping, kPosition_9460, "TRA3006");
+ break;
+ }
break;
case kActionDefault:
@@ -1343,7 +1354,7 @@ IMPLEMENT_FUNCTION(32, Verges, function32)
break;
case 6:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -1440,25 +1451,31 @@ label_callback_2:
}
label_callback_3:
- TIME_CHECK_CALLBACK_1(kTime1971000, params->param1, 4, setup_function9, "Tra3001");
+ if (Entity::timeCheckCallback(kTime1971000, params->param1, 4, "Tra3001", WRAP_SETUP_FUNCTION_S(Verges, setup_function9)))
+ break;
label_callback_4:
- TIME_CHECK_CALLBACK_1(kTime1998000, params->param2, 5, setup_function9, "Tra3010a");
+ if (Entity::timeCheckCallback(kTime1998000, params->param2, 5, "Tra3010a", WRAP_SETUP_FUNCTION_S(Verges, setup_function9)))
+ break;
label_callback_5:
- TIME_CHECK_CALLBACK(kTime2016000, params->param3, 6, setup_function35);
+ if (Entity::timeCheckCallback(kTime2016000, params->param3, 6, WRAP_SETUP_FUNCTION(Verges, setup_function35)))
+ break;
label_callback_6:
- TIME_CHECK_CALLBACK_1(kTime2070000, params->param4, 7, setup_function9, "Tra3002");
+ if (Entity::timeCheckCallback(kTime2070000, params->param4, 7, "Tra3002", WRAP_SETUP_FUNCTION_S(Verges, setup_function9)))
+ break;
label_callback_7:
- TIME_CHECK_CALLBACK_1(kTime2142000, params->param5, 8, setup_function9, "Tra3003");
+ if (Entity::timeCheckCallback(kTime2142000, params->param5, 8, "Tra3003", WRAP_SETUP_FUNCTION_S(Verges, setup_function9)))
+ break;
label_callback_8:
- TIME_CHECK_CALLBACK_1(kTime2173500, params->param6, 9, setup_function30, "Tra3012");
+ if (Entity::timeCheckCallback(kTime2173500, params->param6, 9, "Tra3012", WRAP_SETUP_FUNCTION_S(Verges, setup_function30)))
+ break;
label_callback_9:
- TIME_CHECK_CALLBACK(kTime2218500, params->param7, 10, setup_function32);
+ Entity::timeCheckCallback(kTime2218500, params->param7, 10, WRAP_SETUP_FUNCTION(Verges, setup_function32));
break;
case kActionOpenDoor:
@@ -1548,7 +1565,7 @@ IMPLEMENT_FUNCTION(35, Verges, function35)
break;
case 6:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -1605,27 +1622,32 @@ label_callback_1:
}
label_callback_2:
- TIME_CHECK_CALLBACK_1(kTime2349000, params->param1, 3, setup_function9, "Tra1001");
+ if (Entity::timeCheckCallback(kTime2349000, params->param1, 3, "Tra1001", WRAP_SETUP_FUNCTION_S(Verges, setup_function9)))
+ break;
label_callback_3:
- TIME_CHECK_CALLBACK_1(kTime2378700, params->param2, 4, setup_function9, "Tra4001");
+ if (Entity::timeCheckCallback(kTime2378700, params->param2, 4, "Tra4001", WRAP_SETUP_FUNCTION_S(Verges, setup_function9)))
+ break;
label_callback_4:
- TIME_CHECK_CALLBACK_1(kTime2403000, params->param3, 5, setup_function9, "Tra1001A");
+ if (Entity::timeCheckCallback(kTime2403000, params->param3, 5, "Tra1001A", WRAP_SETUP_FUNCTION_S(Verges, setup_function9)))
+ break;
label_callback_5:
- TIME_CHECK_CALLBACK_1(kTime2414700, params->param4, 6, setup_function9, "Tra4002");
+ if (Entity::timeCheckCallback(kTime2414700, params->param4, 6, "Tra4002", WRAP_SETUP_FUNCTION_S(Verges, setup_function9)))
+ break;
label_callback_6:
- TIME_CHECK_CALLBACK_1(kTime2484000, params->param5, 7, setup_function9, "Tra4003");
+ if (Entity::timeCheckCallback(kTime2484000, params->param5, 7, "Tra4003", WRAP_SETUP_FUNCTION_S(Verges, setup_function9)))
+ break;
label_callback_7:
- TIME_CHECK_CALLBACK_1(kTime2511000, params->param6, 8, setup_function9, "Tra4004");
+ if (Entity::timeCheckCallback(kTime2511000, params->param6, 8, "Tra4004", WRAP_SETUP_FUNCTION_S(Verges, setup_function9)))
+ break;
}
label_callback_8:
- TIME_CHECK_CALLBACK_1(kTime2538000, params->param7, 9, setup_function9, "Tra4005");
-
+ Entity::timeCheckCallback(kTime2538000, params->param7, 9, "Tra4005", WRAP_SETUP_FUNCTION_S(Verges, setup_function9));
break;
case kActionOpenDoor:
@@ -1887,7 +1909,7 @@ void Verges::talk(const SavePoint &savepoint, const char *sound1, const char *so
break;
case 6:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
diff --git a/engines/lastexpress/entities/verges.h b/engines/lastexpress/entities/verges.h
index 17a3c8ac40..82381043d3 100644
--- a/engines/lastexpress/entities/verges.h
+++ b/engines/lastexpress/entities/verges.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_VERGES_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/vesna.cpp b/engines/lastexpress/entities/vesna.cpp
index 7a1f1d3195..f29bce8b2b 100644
--- a/engines/lastexpress/entities/vesna.cpp
+++ b/engines/lastexpress/entities/vesna.cpp
@@ -32,10 +32,7 @@
#include "lastexpress/game/scenes.h"
#include "lastexpress/game/state.h"
-#include "lastexpress/sound/sound.h"
-
#include "lastexpress/lastexpress.h"
-#include "lastexpress/helpers.h"
namespace LastExpress {
@@ -134,7 +131,7 @@ IMPLEMENT_FUNCTION_II(7, Vesna, updateEntity2, CarIndex, EntityPosition)
break;
case kAction123668192:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
IMPLEMENT_FUNCTION_END
@@ -165,7 +162,8 @@ IMPLEMENT_FUNCTION(11, Vesna, function11)
case kActionNone:
if (parameters->param3) {
- UPDATE_PARAM(parameters->param7, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(parameters->param7, getState()->timeTicks, 75))
+ break;
parameters->param2 = 1;
parameters->param3 = 0;
@@ -245,7 +243,7 @@ IMPLEMENT_FUNCTION(11, Vesna, function11)
case kAction55996766:
case kAction101687594:
- CALLBACK_ACTION();
+ callbackAction();
break;
}
IMPLEMENT_FUNCTION_END
@@ -257,7 +255,7 @@ IMPLEMENT_FUNCTION(12, Vesna, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Vesna, setup_chapter1Handler));
break;
case kActionDefault:
@@ -458,7 +456,7 @@ IMPLEMENT_FUNCTION(18, Vesna, function18)
getData()->location = kLocationInsideCompartment;
getEntities()->clearSequences(kEntityVesna);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -514,7 +512,8 @@ IMPLEMENT_FUNCTION(20, Vesna, chapter3Handler)
}
if (parameters->param2) {
- UPDATE_PARAM(parameters->param8, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(parameters->param8, getState()->timeTicks, 75))
+ break;
parameters->param1 = 1;
parameters->param2 = 0;
@@ -711,7 +710,7 @@ IMPLEMENT_FUNCTION(21, Vesna, function21)
getData()->location = kLocationInsideCompartment;
getEntities()->clearSequences(kEntityVesna);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -1083,13 +1082,14 @@ IMPLEMENT_FUNCTION(30, Vesna, function30)
case kActionNone:
if (!params->param1) {
- UPDATE_PARAM_PROC(params->param3, getState()->timeTicks, 120)
+ if (Entity::updateParameter(params->param3, getState()->timeTicks, 120)) {
getSound()->playSound(kEntityVesna, "Ves50001", kFlagDefault);
params->param1 = 1;
- UPDATE_PARAM_PROC_END
+ }
}
- UPDATE_PARAM(params->param4, getState()->timeTicks, 180);
+ if (!Entity::updateParameter(params->param4, getState()->timeTicks, 180))
+ break;
setCallback(1);
setup_savegame(kSavegameTypeEvent, kEventCathVesnaTrainTopKilled);
diff --git a/engines/lastexpress/entities/vesna.h b/engines/lastexpress/entities/vesna.h
index a09664096d..025d45882e 100644
--- a/engines/lastexpress/entities/vesna.h
+++ b/engines/lastexpress/entities/vesna.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_VESNA_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/yasmin.cpp b/engines/lastexpress/entities/yasmin.cpp
index 45e5e11568..1d280f51e0 100644
--- a/engines/lastexpress/entities/yasmin.cpp
+++ b/engines/lastexpress/entities/yasmin.cpp
@@ -28,10 +28,8 @@
#include "lastexpress/game/savepoint.h"
#include "lastexpress/game/state.h"
-#include "lastexpress/sound/sound.h"
#include "lastexpress/lastexpress.h"
-#include "lastexpress/helpers.h"
namespace LastExpress {
@@ -132,7 +130,7 @@ IMPLEMENT_FUNCTION(6, Yasmin, function6)
getData()->location = kLocationInsideCompartment;
getEntities()->clearSequences(kEntityYasmin);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -172,7 +170,7 @@ IMPLEMENT_FUNCTION(7, Yasmin, function7)
getData()->location = kLocationInsideCompartment;
getEntities()->clearSequences(kEntityYasmin);
- CALLBACK_ACTION();
+ callbackAction();
break;
}
break;
@@ -186,7 +184,7 @@ IMPLEMENT_FUNCTION(8, Yasmin, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Yasmin, setup_chapter1Handler));
break;
case kActionDefault:
@@ -204,12 +202,22 @@ IMPLEMENT_FUNCTION(9, Yasmin, chapter1Handler)
break;
case kActionNone:
- TIME_CHECK_CALLBACK(kTime1093500, params->param1, 1, setup_function6);
- TIME_CHECK_CALLBACK(kTime1161000, params->param2, 3, setup_function7);
- TIME_CHECK_PLAYSOUND_UPDATEPOSITION(kTime1162800, params->param3, 4, "Har1102", kPosition_4070);
- TIME_CHECK_CALLBACK_1(kTime1165500, params->param4, 5, setup_playSound, "Har1104");
- TIME_CHECK_CALLBACK_1(kTime1174500, params->param5, 6, setup_playSound, "Har1106");
- TIME_CHECK_CALLBACK(kTime1183500, params->param6, 7, setup_function6);
+ if (Entity::timeCheckCallback(kTime1093500, params->param1, 1, WRAP_SETUP_FUNCTION(Yasmin, setup_function6)))
+ break;
+
+ if (Entity::timeCheckCallback(kTime1161000, params->param2, 3, WRAP_SETUP_FUNCTION(Yasmin, setup_function7)))
+ break;
+
+ if (Entity::timeCheckPlaySoundUpdatePosition(kTime1162800, params->param3, 4, "Har1102", kPosition_4070))
+ break;
+
+ if (Entity::timeCheckCallback(kTime1165500, params->param4, 5, "Har1104", WRAP_SETUP_FUNCTION_S(Yasmin, setup_playSound)))
+ break;
+
+ if (Entity::timeCheckCallback(kTime1174500, params->param5, 6, "Har1106", WRAP_SETUP_FUNCTION_S(Yasmin, setup_playSound)))
+ break;
+
+ Entity::timeCheckCallback(kTime1183500, params->param6, 7, WRAP_SETUP_FUNCTION(Yasmin, setup_function6));
break;
case kActionCallback:
@@ -224,23 +232,27 @@ IMPLEMENT_FUNCTION(9, Yasmin, chapter1Handler)
break;
case 2:
- TIME_CHECK_CALLBACK(kTime1161000, params->param2, 3, setup_function7);
+ if (Entity::timeCheckCallback(kTime1161000, params->param2, 3, WRAP_SETUP_FUNCTION(Yasmin, setup_function7)))
+ break;
// Fallback to case 3
case 3:
- TIME_CHECK_PLAYSOUND_UPDATEPOSITION(kTime1162800, params->param3, 4, "Har1102", kPosition_4070);
+ if (Entity::timeCheckPlaySoundUpdatePosition(kTime1162800, params->param3, 4, "Har1102", kPosition_4070))
+ break;
// Fallback to case 4
case 4:
- TIME_CHECK_CALLBACK_1(kTime1165500, params->param4, 5, setup_playSound, "Har1104");
+ if (Entity::timeCheckCallback(kTime1165500, params->param4, 5, "Har1104", WRAP_SETUP_FUNCTION_S(Yasmin, setup_playSound)))
+ break;
// Fallback to case 5
case 5:
- TIME_CHECK_CALLBACK_1(kTime1174500, params->param5, 6, setup_playSound, "Har1106");
+ if (Entity::timeCheckCallback(kTime1174500, params->param5, 6, "Har1106", WRAP_SETUP_FUNCTION_S(Yasmin, setup_playSound)))
+ break;
// Fallback to case 6
case 6:
- TIME_CHECK_CALLBACK(kTime1183500, params->param6, 7, setup_function6);
+ Entity::timeCheckCallback(kTime1183500, params->param6, 7, WRAP_SETUP_FUNCTION(Yasmin, setup_function6));
break;
}
break;
@@ -281,7 +293,8 @@ IMPLEMENT_FUNCTION(12, Yasmin, chapter2Handler)
break;
case kActionNone:
- TIME_CHECK_CALLBACK(kTime1759500, params->param1, 1, setup_function7);
+ if (Entity::timeCheckCallback(kTime1759500, params->param1, 1, WRAP_SETUP_FUNCTION(Yasmin, setup_function7)))
+ break;
if (getState()->time > kTime1800000 && !params->param2) {
params->param2 = 1;
@@ -334,9 +347,13 @@ IMPLEMENT_FUNCTION(14, Yasmin, chapter3Handler)
break;
case kActionNone:
- TIME_CHECK_CALLBACK(kTime2062800, params->param1, 1, setup_function6);
- TIME_CHECK_CALLBACK(kTime2106000, params->param2, 2, setup_function7);
- TIME_CHECK_CALLBACK(kTime2160000, params->param3, 3, setup_function6);
+ if (Entity::timeCheckCallback(kTime2062800, params->param1, 1, WRAP_SETUP_FUNCTION(Yasmin, setup_function6)))
+ break;
+
+ if (Entity::timeCheckCallback(kTime2106000, params->param2, 2, WRAP_SETUP_FUNCTION(Yasmin, setup_function7)))
+ break;
+
+ Entity::timeCheckCallback(kTime2160000, params->param3, 3, WRAP_SETUP_FUNCTION(Yasmin, setup_function6));
break;
case kActionCallback:
@@ -345,11 +362,12 @@ IMPLEMENT_FUNCTION(14, Yasmin, chapter3Handler)
break;
case 1:
- TIME_CHECK_CALLBACK(kTime2106000, params->param2, 2, setup_function7);
+ if (Entity::timeCheckCallback(kTime2106000, params->param2, 2, WRAP_SETUP_FUNCTION(Yasmin, setup_function7)))
+ break;
// Fallback to case 2
case 2:
- TIME_CHECK_CALLBACK(kTime2160000, params->param3, 3, setup_function6);
+ Entity::timeCheckCallback(kTime2160000, params->param3, 3, WRAP_SETUP_FUNCTION(Yasmin, setup_function6));
break;
}
break;
@@ -381,8 +399,10 @@ IMPLEMENT_FUNCTION(16, Yasmin, chapter4Handler)
break;
case kActionNone:
- TIME_CHECK_CALLBACK(kTime2457000, params->param1, 1, setup_function7);
- TIME_CHECK_CALLBACK(kTime2479500, params->param2, 3, setup_function6);
+ if (Entity::timeCheckCallback(kTime2457000, params->param1, 1, WRAP_SETUP_FUNCTION(Yasmin, setup_function7)))
+ break;
+
+ Entity::timeCheckCallback(kTime2479500, params->param2, 3, WRAP_SETUP_FUNCTION(Yasmin, setup_function6));
break;
case kActionCallback:
@@ -397,7 +417,7 @@ IMPLEMENT_FUNCTION(16, Yasmin, chapter4Handler)
break;
case 2:
- TIME_CHECK_CALLBACK(kTime2479500, params->param2, 3, setup_function6);
+ Entity::timeCheckCallback(kTime2479500, params->param2, 3, WRAP_SETUP_FUNCTION(Yasmin, setup_function6));
break;
}
break;
@@ -445,7 +465,9 @@ IMPLEMENT_FUNCTION(20, Yasmin, function20)
break;
case kActionNone:
- UPDATE_PARAM(params->param1, getState()->time, 2700);
+ if (!Entity::updateParameter(params->param1, getState()->time, 2700))
+ break;
+
setup_function21();
break;
@@ -472,7 +494,7 @@ IMPLEMENT_FUNCTION(21, Yasmin, function21)
case kActionNone:
case kActionDefault:
if (getEntities()->updateEntity(kEntityYasmin, (CarIndex)params->param1, (EntityPosition)params->param2))
- CALLBACK_ACTION();
+ callbackAction();
break;
case kActionExcuseMeCath:
diff --git a/engines/lastexpress/entities/yasmin.h b/engines/lastexpress/entities/yasmin.h
index e943a8b158..b1413f5c2f 100644
--- a/engines/lastexpress/entities/yasmin.h
+++ b/engines/lastexpress/entities/yasmin.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_YASMIN_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/fight/fight.cpp b/engines/lastexpress/fight/fight.cpp
index b832d46a60..b00c1732e7 100644
--- a/engines/lastexpress/fight/fight.cpp
+++ b/engines/lastexpress/fight/fight.cpp
@@ -31,6 +31,7 @@
#include "lastexpress/data/cursor.h"
#include "lastexpress/data/sequence.h"
+#include "lastexpress/game/entities.h"
#include "lastexpress/game/inventory.h"
#include "lastexpress/game/logic.h"
#include "lastexpress/game/object.h"
@@ -38,6 +39,7 @@
#include "lastexpress/game/state.h"
#include "lastexpress/sound/queue.h"
+#include "lastexpress/sound/sound.h"
#include "lastexpress/graphics.h"
#include "lastexpress/helpers.h"
@@ -53,6 +55,8 @@ Fight::FightData::FightData() {
index = 0;
isFightRunning = false;
+
+ memset(&sequences, 0, sizeof(sequences));
}
Fight::FightData::~FightData() {
@@ -399,6 +403,9 @@ end_load:
}
void Fight::setOpponents() {
+ if (!_data)
+ error("[Fight::setOpponents] Data not initialized");
+
_data->player->setOpponent(_data->opponent);
_data->opponent->setOpponent(_data->player);
diff --git a/engines/lastexpress/fight/fighter.cpp b/engines/lastexpress/fight/fighter.cpp
index bae7728a2b..4b1cddabd4 100644
--- a/engines/lastexpress/fight/fighter.cpp
+++ b/engines/lastexpress/fight/fighter.cpp
@@ -53,20 +53,20 @@ Fighter::Fighter(LastExpressEngine *engine) : _engine(engine) {
}
Fighter::~Fighter() {
- clearSequences();
-}
-
-//////////////////////////////////////////////////////////////////////////
-// Cleanup
-//////////////////////////////////////////////////////////////////////////
-void Fighter::clearSequences() {
// The original game resets the function pointers to default values, just before deleting the struct
getScenes()->removeAndRedraw(&_frame, false);
// Free sequences
- for (int i = 0; i < (int)_sequences.size(); i++)
+ for (uint i = 0; i < _sequences.size(); i++)
SAFE_DELETE(_sequences[i]);
+
+ // Zero-out passed pointers
+ _sequence = NULL;
+ _opponent = NULL;
+ _fight = NULL;
+
+ _engine = NULL;
}
//////////////////////////////////////////////////////////////////////////
@@ -113,6 +113,9 @@ void Fighter::draw() {
// Processing
//////////////////////////////////////////////////////////////////////////
void Fighter::process() {
+ if (!_fight)
+ error("[Fighter::handleAction] Fighter not initialized properly");
+
if (!_sequence) {
if (_frame) {
getScenes()->removeFromQueue(_frame);
@@ -188,6 +191,9 @@ void Fighter::process() {
// Default actions
//////////////////////////////////////////////////////////////////////////
void Fighter::handleAction(FightAction action) {
+ if (!_opponent || !_fight)
+ error("[Fighter::handleAction] Fighter not initialized properly");
+
switch (action) {
default:
return;
@@ -243,7 +249,10 @@ void Opponent::update() {
// Helpers
//////////////////////////////////////////////////////////////////////////
bool Fighter::checkFrame(uint32 val) {
- return (_frame->getInfo()->field_33 & val);
+ if (!_frame)
+ error("[Fighter::checkFrame] Invalid current frame");
+
+ return (bool)(_frame->getInfo()->field_33 & val);
}
} // End of namespace LastExpress
diff --git a/engines/lastexpress/fight/fighter.h b/engines/lastexpress/fight/fighter.h
index e37fe49d86..dad95af186 100644
--- a/engines/lastexpress/fight/fighter.h
+++ b/engines/lastexpress/fight/fighter.h
@@ -99,9 +99,6 @@ protected:
void draw();
void process();
- // Cleanup
- void clearSequences();
-
// Helpers
bool checkFrame(uint32 val);
};
diff --git a/engines/lastexpress/game/action.cpp b/engines/lastexpress/game/action.cpp
index 98d74dd1a7..4d1c786167 100644
--- a/engines/lastexpress/game/action.cpp
+++ b/engines/lastexpress/game/action.cpp
@@ -29,7 +29,6 @@
#include "lastexpress/entities/abbot.h"
#include "lastexpress/entities/anna.h"
-#include "lastexpress/entities/entity.h"
#include "lastexpress/game/beetle.h"
#include "lastexpress/game/entities.h"
@@ -42,9 +41,7 @@
#include "lastexpress/game/state.h"
#include "lastexpress/sound/queue.h"
-#include "lastexpress/sound/sound.h"
-#include "lastexpress/helpers.h"
#include "lastexpress/lastexpress.h"
#include "lastexpress/resource.h"
@@ -407,7 +404,7 @@ SceneIndex Action::processHotspot(const SceneHotspot &hotspot) {
//////////////////////////////////////////////////////////////////////////
// Action 0
IMPLEMENT_ACTION(dummy)
- warning("[Action::action_dummy] Dummy action function called (hotspot action: %d)", hotspot.action);
+ error("[Action::action_dummy] Dummy action function called (hotspot action: %d)", hotspot.action);
return kSceneInvalid;
}
@@ -1742,14 +1739,14 @@ CursorStyle Action::getCursor(const SceneHotspot &hotspot) const {
return kCursorBackward;
case SceneHotspot::kActionKnockOnDoor:
- warning("================================= DOOR %03d =================================", object);
+ debugC(2, kLastExpressDebugScenes, "================================= DOOR %03d =================================", object);
if (object >= kObjectMax)
return kCursorNormal;
else
return (CursorStyle)getObjects()->get(object).cursor;
case SceneHotspot::kAction12:
- warning("================================= OBJECT %03d =================================", object);
+ debugC(2, kLastExpressDebugScenes, "================================= OBJECT %03d =================================", object);
if (object >= kObjectMax)
return kCursorNormal;
@@ -1759,7 +1756,7 @@ CursorStyle Action::getCursor(const SceneHotspot &hotspot) const {
return kCursorNormal;
case SceneHotspot::kActionPickItem:
- warning("================================= ITEM %03d =================================", object);
+ debugC(2, kLastExpressDebugScenes, "================================= ITEM %03d =================================", object);
if (object >= kObjectCompartmentA)
return kCursorNormal;
@@ -1770,7 +1767,7 @@ CursorStyle Action::getCursor(const SceneHotspot &hotspot) const {
return kCursorNormal;
case SceneHotspot::kActionDropItem:
- warning("================================= ITEM %03d =================================", object);
+ debugC(2, kLastExpressDebugScenes, "================================= ITEM %03d =================================", object);
if (object >= kObjectCompartmentA)
return kCursorNormal;
@@ -1887,7 +1884,7 @@ LABEL_KEY:
// Handle compartment action
case SceneHotspot::kActionCompartment:
case SceneHotspot::kActionExitCompartment:
- warning("================================= DOOR %03d =================================", object);
+ debugC(2, kLastExpressDebugScenes, "================================= DOOR %03d =================================", object);
if (object >= kObjectMax)
return kCursorNormal;
diff --git a/engines/lastexpress/game/beetle.cpp b/engines/lastexpress/game/beetle.cpp
index ab707ddae9..2a72459697 100644
--- a/engines/lastexpress/game/beetle.cpp
+++ b/engines/lastexpress/game/beetle.cpp
@@ -27,7 +27,6 @@
#include "lastexpress/game/scenes.h"
#include "lastexpress/game/state.h"
-#include "lastexpress/helpers.h"
#include "lastexpress/lastexpress.h"
#include "lastexpress/resource.h"
@@ -337,26 +336,13 @@ void Beetle::drawUpdate() {
}
}
-#define INVERT_Y() \
- switch (_data->indexes[_data->offset]) { \
- default: \
- break; \
- case 24: \
- case 25: \
- case 26: \
- case 27: \
- case 28: \
- _data->coordY = -_data->coordY; \
- break; \
- }
-
// Invert direction
- INVERT_Y();
+ invertDirection();
SequenceFrame *frame = new SequenceFrame(_data->currentSequence, (uint16)_data->currentFrame);
updateFrame(frame);
- INVERT_Y();
+ invertDirection();
getScenes()->addToQueue(frame);
@@ -364,6 +350,21 @@ void Beetle::drawUpdate() {
_data->frame = frame;
}
+void Beetle::invertDirection() {
+ switch (_data->indexes[_data->offset]) {
+ default:
+ break;
+
+ case 24:
+ case 25:
+ case 26:
+ case 27:
+ case 28:
+ _data->coordY = -_data->coordY;
+ break;
+ }
+}
+
void Beetle::move() {
if (!_data)
error("[Beetle::move] Sequences have not been loaded");
diff --git a/engines/lastexpress/game/beetle.h b/engines/lastexpress/game/beetle.h
index d3c47f39e5..034ebbd557 100644
--- a/engines/lastexpress/game/beetle.h
+++ b/engines/lastexpress/game/beetle.h
@@ -111,6 +111,7 @@ private:
void updateFrame(SequenceFrame *frame) const;
void updateData(uint32 index);
void drawUpdate();
+ void invertDirection();
};
} // End of namespace LastExpress
diff --git a/engines/lastexpress/game/entities.cpp b/engines/lastexpress/game/entities.cpp
index f27087a609..51db635bed 100644
--- a/engines/lastexpress/game/entities.cpp
+++ b/engines/lastexpress/game/entities.cpp
@@ -27,8 +27,6 @@
#include "lastexpress/data/sequence.h"
// Entities
-#include "lastexpress/entities/entity.h"
-
#include "lastexpress/entities/abbot.h"
#include "lastexpress/entities/alexei.h"
#include "lastexpress/entities/alouan.h"
@@ -71,10 +69,8 @@
#include "lastexpress/game/state.h"
#include "lastexpress/sound/queue.h"
-#include "lastexpress/sound/sound.h"
#include "lastexpress/graphics.h"
-#include "lastexpress/helpers.h"
#include "lastexpress/lastexpress.h"
#include "lastexpress/resource.h"
@@ -673,11 +669,12 @@ void Entities::executeCallbacks() {
//////////////////////////////////////////////////////////////////////////
// Processing
//////////////////////////////////////////////////////////////////////////
-#define INCREMENT_DIRECTION_COUNTER() { \
- data->doProcessEntity = false; \
- if (data->direction == kDirectionRight || (data->direction == kDirectionSwitch && data->directionSwitch == kDirectionRight)) \
- ++data->field_4A1; \
- }
+void Entities::incrementDirectionCounter(EntityData::EntityCallData *data) {
+ data->doProcessEntity = false;
+
+ if (data->direction == kDirectionRight || (data->direction == kDirectionSwitch && data->directionSwitch == kDirectionRight))
+ ++data->field_4A1;
+}
void Entities::processEntity(EntityIndex entityIndex) {
EntityData::EntityCallData *data = getData(entityIndex);
@@ -696,7 +693,7 @@ void Entities::processEntity(EntityIndex entityIndex) {
getScenes()->removeAndRedraw(&data->frame, false);
getScenes()->removeAndRedraw(&data->frame1, false);
- INCREMENT_DIRECTION_COUNTER();
+ incrementDirectionCounter(data);
return;
}
@@ -726,7 +723,7 @@ label_nosequence:
processFrame(entityIndex, false, true);
if (!getFlags()->flag_entities_0 && !data->doProcessEntity) {
- INCREMENT_DIRECTION_COUNTER();
+ incrementDirectionCounter(data);
return;
}
} else {
@@ -744,7 +741,7 @@ label_nosequence:
data->position = 0;
}
- INCREMENT_DIRECTION_COUNTER();
+ incrementDirectionCounter(data);
}
return;
}
@@ -754,46 +751,44 @@ label_nosequence:
if (data->frame->getInfo()->field_30 > (data->field_49B + 1) || (data->direction == kDirectionLeft && data->sequence->count() == 1)) {
++data->field_49B;
- } else {
- if (data->frame->getInfo()->field_30 > data->field_49B && !data->frame->getInfo()->keepPreviousFrame) {
- ++data->field_49B;
- } else {
- if (data->frame->getInfo()->keepPreviousFrame == 1)
- keepPreviousFrame = true;
-
- // Increment current frame
- ++data->currentFrame;
+ } else if (data->frame->getInfo()->field_30 <= data->field_49B || data->frame->getInfo()->keepPreviousFrame) {
+ if (data->frame->getInfo()->keepPreviousFrame == 1)
+ keepPreviousFrame = true;
- if (data->currentFrame > (int16)(data->sequence->count() - 1) || (data->field_4A9 && checkSequenceFromPosition(entityIndex))) {
+ // Increment current frame
+ ++data->currentFrame;
- if (data->direction == kDirectionLeft) {
- data->currentFrame = 0;
- } else {
- keepPreviousFrame = true;
- drawNextSequence(entityIndex);
+ if (data->currentFrame > (int16)(data->sequence->count() - 1) || (data->field_4A9 && checkSequenceFromPosition(entityIndex))) {
- if (getFlags()->flag_entities_0 || data->doProcessEntity)
- return;
+ if (data->direction == kDirectionLeft) {
+ data->currentFrame = 0;
+ } else {
+ keepPreviousFrame = true;
+ drawNextSequence(entityIndex);
- if (!data->sequence2) {
- updateEntityPosition(entityIndex);
- data->doProcessEntity = false;
- return;
- }
+ if (getFlags()->flag_entities_0 || data->doProcessEntity)
+ return;
- copySequenceData(entityIndex);
+ if (!data->sequence2) {
+ updateEntityPosition(entityIndex);
+ data->doProcessEntity = false;
+ return;
}
+ copySequenceData(entityIndex);
}
- processFrame(entityIndex, keepPreviousFrame, false);
-
- if (getFlags()->flag_entities_0 || data->doProcessEntity)
- return;
}
+
+ processFrame(entityIndex, keepPreviousFrame, false);
+
+ if (getFlags()->flag_entities_0 || data->doProcessEntity)
+ return;
+ } else {
+ ++data->field_49B;
}
- INCREMENT_DIRECTION_COUNTER();
+ incrementDirectionCounter(data);
}
void Entities::computeCurrentFrame(EntityIndex entityIndex) const {
@@ -2283,7 +2278,7 @@ label_process_entity:
if (getScenes()->checkPosition(kSceneNone, SceneManager::kCheckPositionLookingUp)) {
getSavePoints()->push(kEntityPlayer, entity, kActionExcuseMeCath);
- } else if (getScenes()->checkPosition(kSceneNone, SceneManager::kCheckPositionLookingDown) || getScenes()->checkCurrentPosition(false)){
+ } else if (getScenes()->checkPosition(kSceneNone, SceneManager::kCheckPositionLookingDown) || getScenes()->checkCurrentPosition(false)) {
getSavePoints()->push(kEntityPlayer, entity, kActionExcuseMe);
if (getScenes()->checkCurrentPosition(false))
diff --git a/engines/lastexpress/game/entities.h b/engines/lastexpress/game/entities.h
index eb5eae461f..a9de7931f0 100644
--- a/engines/lastexpress/game/entities.h
+++ b/engines/lastexpress/game/entities.h
@@ -344,6 +344,7 @@ private:
uint _positions[_positionsCount];
void executeCallbacks();
+ void incrementDirectionCounter(EntityData::EntityCallData *data);
void processEntity(EntityIndex entity);
void drawSequence(EntityIndex entity, const char *sequence, EntityDirection direction) const;
diff --git a/engines/lastexpress/game/inventory.cpp b/engines/lastexpress/game/inventory.cpp
index e417b1ec0d..52c00ece31 100644
--- a/engines/lastexpress/game/inventory.cpp
+++ b/engines/lastexpress/game/inventory.cpp
@@ -26,7 +26,9 @@
#include "lastexpress/data/scene.h"
#include "lastexpress/data/snd.h"
+#include "lastexpress/game/entities.h"
#include "lastexpress/game/logic.h"
+#include "lastexpress/game/savegame.h"
#include "lastexpress/game/scenes.h"
#include "lastexpress/game/state.h"
@@ -44,7 +46,7 @@
namespace LastExpress {
Inventory::Inventory(LastExpressEngine *engine) : _engine(engine), _selectedItem(kItemNone), _highlightedItemIndex(0), _itemsShown(0),
- _showingHourGlass(false), _blinkingEgg(false), _blinkingTime(0), _blinkingInterval(_defaultBlinkingInterval), _blinkingBrightness(1),
+ _showingHourGlass(false), _blinkingDirection(1), _blinkingBrightness(0),
_useMagnifier(false), _portraitHighlighted(false), _isOpened(false), _eggHightlighted(false), _itemScene(NULL) {
//_inventoryRect = Common::Rect(0, 0, 32, 32);
@@ -162,13 +164,11 @@ void Inventory::handleMouseEvent(const Common::Event &ev) {
getMenu()->show(true, kSavegameTypeIndex, 0);
- } else if (ev.type == Common::EVENT_RBUTTONDOWN) {
- if (getGlobalTimer()) {
- if (getSoundQueue()->isBuffered("TIMER"))
- getSoundQueue()->removeFromQueue("TIMER");
+ } else if (ev.type == Common::EVENT_RBUTTONDOWN && getGlobalTimer()) {
+ if (getSoundQueue()->isBuffered("TIMER"))
+ getSoundQueue()->removeFromQueue("TIMER");
- setGlobalTimer(900);
- }
+ setGlobalTimer(900);
}
}
@@ -180,7 +180,7 @@ void Inventory::handleMouseEvent(const Common::Event &ev) {
if (_highlightedItemIndex)
drawHighlight(_highlightedItemIndex, true);
} else {
- // The user released the mouse button, we need to update the inventory state (clear hightlight and items)
+ // The user released the mouse button, we need to update the inventory state (clear highlight and items)
drawItem((CursorStyle)getProgress().portrait, 0, 0, 1);
_engine->getGraphicsManager()->clear(GraphicsManager::kBackgroundInventory, Common::Rect(0, 44, 32, (int16)(40 * _itemsShown + 40)));
_isOpened = false;
@@ -226,12 +226,11 @@ void Inventory::handleMouseEvent(const Common::Event &ev) {
if (getFlags()->mouseLeftPressed) {
if (getState()->sceneUseBackup) {
- if (getState()->sceneBackup2
- && getFirstExaminableItem() == _selectedItem) {
- SceneIndex sceneIndex = getState()->sceneBackup2;
- getState()->sceneBackup2 = kSceneNone;
+ if (getState()->sceneBackup2 && getFirstExaminableItem() == _selectedItem) {
+ SceneIndex sceneIndex = getState()->sceneBackup2;
+ getState()->sceneBackup2 = kSceneNone;
- getScenes()->loadScene(sceneIndex);
+ getScenes()->loadScene(sceneIndex);
}
} else {
getState()->sceneBackup = getState()->scene;
@@ -261,7 +260,7 @@ void Inventory::handleMouseEvent(const Common::Event &ev) {
// Change item highlight on list
if (getFlags()->mouseLeftPressed) {
- uint32 index = ev.mouse.y / 40;
+ uint32 index = (uint16)ev.mouse.y / 40;
if (_highlightedItemIndex && _highlightedItemIndex != index)
drawHighlight(_highlightedItemIndex, true);
@@ -418,12 +417,12 @@ void Inventory::show() {
drawEgg();
}
-void Inventory::setPortrait(InventoryItem item) {
+void Inventory::setPortrait(InventoryItem item) const {
getProgress().portrait = item;
drawItem((CursorStyle)getProgress().portrait, 0, 0);
}
-void Inventory::showHourGlass(){
+void Inventory::showHourGlass() const {
if (!getMenu()->isShown())
drawItem(kCursorHourGlass, 608, 448);
@@ -613,7 +612,7 @@ void Inventory::examine(InventoryItem item) {
}
}
-void Inventory::drawEgg() {
+void Inventory::drawEgg() const {
if (!getMenu()->isShown())
drawItem((CursorStyle)(getMenu()->getGameId() + 39), 608, 448, _eggHightlighted ? 0 : 1);
@@ -621,40 +620,51 @@ void Inventory::drawEgg() {
}
// Blinking egg: we need to blink the egg for delta time, with the blinking getting faster until it's always lit.
-void Inventory::drawBlinkingEgg() {
+void Inventory::drawBlinkingEgg(uint ticks) {
+ uint globalTimer = getGlobalTimer();
+ uint timerValue = (getProgress().jacket == kJacketGreen) ? 450 : 225;
- warning("[Inventory::drawBlinkingEgg] Blinking not implemented");
+ if (globalTimer == timerValue || globalTimer == 900) {
+ _blinkingBrightness = 0;
+ _blinkingDirection = 1;
+ }
- //// TODO show egg (with or without mouseover)
+ globalTimer = globalTimer <= ticks ? 0 : globalTimer - ticks;
+ setGlobalTimer(globalTimer);
- //// Play timer sound
- //if (getGlobalTimer() < 90) {
- // if (getGlobalTimer() + ticks >= 90)
- // getSound()->playSoundWithSubtitles("TIMER.SND", 50331664, kEntityPlayer);
+ if (getFlags()->flag_0
+ || (globalTimer % 5) == 0
+ || (globalTimer <= 500 && (globalTimer % ((globalTimer + 100) / 100)) == 0))
+ blinkEgg();
- // if (getSoundQueue()->isBuffered("TIMER"))
- // setGlobalTimer(0);
- //}
+ if (globalTimer < 90) {
+ if ((globalTimer + ticks) >= 90)
+ getSound()->playSoundWithSubtitles("TIMER", (SoundFlag)(kFlagType13|kFlagDefault), kEntityPlayer);
- //// Restore egg to standard brightness
- //if (!getGlobalTimer()) {
- //
- //}
+ if (!getSoundQueue()->isBuffered("TIMER"))
+ setGlobalTimer(0);
+ }
+ if (globalTimer == 0) {
+ drawItem((CursorStyle)(getMenu()->getGameId() + 39), 608, 448, _menuEggRect.contains(getCoords()) ? 1 : -1);
- //drawItem(608, 448, getMenu()->getGameId() + 39, _blinkingBrightness)
+ askForRedraw();
- //// TODO if delta time > _blinkingInterval, update egg & ask for redraw then adjust blinking time and remaining time
- //
+ getSaveLoad()->saveGame(kSavegameTypeAuto, kEntityChapters, 0);
+ }
+}
- //// Reset values and stop blinking
- //if (_blinkingTime == 0)
- // blinkEgg(false);
+void Inventory::blinkEgg() {
+ drawItem((CursorStyle)(getMenu()->getGameId() + 39), 608, 448, (_blinkingBrightness == 0) ? -1 : _blinkingBrightness);
askForRedraw();
+
+ _blinkingBrightness += _blinkingDirection;
+ if (_blinkingBrightness == 0 || _blinkingBrightness == 3)
+ _blinkingDirection = -_blinkingDirection;
}
-void Inventory::drawItem(CursorStyle id, uint16 x, uint16 y, int16 brightnessIndex) {
+void Inventory::drawItem(CursorStyle id, uint16 x, uint16 y, int16 brightnessIndex) const {
Icon icon(id);
icon.setPosition(x, y);
@@ -678,7 +688,7 @@ void Inventory::drawSelectedItem() {
}
}
-void Inventory::clearSelectedItem() {
+void Inventory::clearSelectedItem() const {
_engine->getGraphicsManager()->clear(GraphicsManager::kBackgroundInventory, Common::Rect(44, 0, 44 + 32, 32));
}
@@ -733,7 +743,7 @@ void Inventory::drawHighlight(uint32 currentIndex, bool reset) {
}
}
-uint32 Inventory::getItemIndex(uint32 currentIndex) {
+uint32 Inventory::getItemIndex(uint32 currentIndex) const {
uint32 count = 0;
for (uint32 i = 1; i < ARRAYSIZE(_entries); i++) {
diff --git a/engines/lastexpress/game/inventory.h b/engines/lastexpress/game/inventory.h
index b1995adce3..b1019a43c6 100644
--- a/engines/lastexpress/game/inventory.h
+++ b/engines/lastexpress/game/inventory.h
@@ -106,11 +106,10 @@ public:
// UI Control
void show();
- void blinkEgg(bool enabled);
- void showHourGlass();
- void setPortrait(InventoryItem item);
- void drawEgg();
- void drawBlinkingEgg();
+ void showHourGlass() const;
+ void setPortrait(InventoryItem item) const;
+ void drawEgg() const;
+ void drawBlinkingEgg(uint ticks = 1);
// Handle inventory UI events.
void handleMouseEvent(const Common::Event &ev);
@@ -133,8 +132,6 @@ public:
Common::String toString();
private:
- static const uint32 _defaultBlinkingInterval = 250; ///< Default blinking interval in ms
-
LastExpressEngine *_engine;
InventoryEntry _entries[32];
@@ -144,9 +141,7 @@ private:
uint32 _itemsShown;
bool _showingHourGlass;
- bool _blinkingEgg;
- uint32 _blinkingTime;
- uint32 _blinkingInterval;
+ int16 _blinkingDirection;
uint16 _blinkingBrightness;
// Flags
@@ -157,8 +152,6 @@ private:
Scene *_itemScene;
- // Important rects
- //Common::Rect _inventoryRect;
Common::Rect _menuEggRect;
Common::Rect _selectedItemRect;
@@ -168,14 +161,15 @@ private:
void close();
void examine(InventoryItem item);
void drawHighlight(uint32 currentIndex, bool reset);
- uint32 getItemIndex(uint32 currentIndex);
+ uint32 getItemIndex(uint32 currentIndex) const;
bool isItemSceneParameter(InventoryItem item) const;
- void drawItem(CursorStyle id, uint16 x, uint16 y, int16 brighnessIndex = -1);
+ void drawItem(CursorStyle id, uint16 x, uint16 y, int16 brighnessIndex = -1) const;
+ void blinkEgg();
void drawSelectedItem();
- void clearSelectedItem();
+ void clearSelectedItem() const;
};
} // End of namespace LastExpress
diff --git a/engines/lastexpress/game/logic.cpp b/engines/lastexpress/game/logic.cpp
index aeac8cff98..135b7d3480 100644
--- a/engines/lastexpress/game/logic.cpp
+++ b/engines/lastexpress/game/logic.cpp
@@ -47,10 +47,8 @@
#include "lastexpress/menu/menu.h"
#include "lastexpress/sound/queue.h"
-#include "lastexpress/sound/sound.h"
#include "lastexpress/graphics.h"
-#include "lastexpress/helpers.h"
#include "lastexpress/lastexpress.h"
#include "lastexpress/resource.h"
@@ -315,7 +313,7 @@ void Logic::eventTick(const Common::Event &) {
//////////////////////////////////////////////////////////////////////////
// Draw the blinking egg if needed
if (getGlobalTimer() && !getFlags()->shouldDrawEggOrHourGlass)
- getInventory()->drawBlinkingEgg();
+ getInventory()->drawBlinkingEgg(ticks);
//////////////////////////////////////////////////////////////////////////
// Adjust time and save game if needed
@@ -411,9 +409,12 @@ void Logic::eventTick(const Common::Event &) {
* Resets the game state.
*/
void Logic::resetState() {
- getState()->scene = kSceneDefault;
+ getScenes()->setCoordinates(Common::Rect(80, 0, 559, 479));
- warning("[Logic::resetState] Not implemented! You need to restart the engine until this is implemented.");
+ SAFE_DELETE(_entities);
+ SAFE_DELETE(_state);
+ _entities = new Entities(_engine);
+ _state = new State(_engine);
}
/**
diff --git a/engines/lastexpress/game/logic.h b/engines/lastexpress/game/logic.h
index 8b7dcef942..84b64a998b 100644
--- a/engines/lastexpress/game/logic.h
+++ b/engines/lastexpress/game/logic.h
@@ -25,8 +25,6 @@
#include "lastexpress/shared.h"
-#include "lastexpress/game/entities.h"
-
#include "lastexpress/eventhandler.h"
#include "common/events.h"
diff --git a/engines/lastexpress/game/object.cpp b/engines/lastexpress/game/object.cpp
index d9e9e4279a..48df91ea6d 100644
--- a/engines/lastexpress/game/object.cpp
+++ b/engines/lastexpress/game/object.cpp
@@ -22,11 +22,11 @@
#include "lastexpress/game/object.h"
+#include "lastexpress/game/entities.h"
#include "lastexpress/game/logic.h"
#include "lastexpress/game/scenes.h"
#include "lastexpress/game/state.h"
-#include "lastexpress/helpers.h"
#include "lastexpress/lastexpress.h"
namespace LastExpress {
diff --git a/engines/lastexpress/game/savegame.cpp b/engines/lastexpress/game/savegame.cpp
index 9c464feb6e..a8fb5c55f7 100644
--- a/engines/lastexpress/game/savegame.cpp
+++ b/engines/lastexpress/game/savegame.cpp
@@ -22,6 +22,7 @@
#include "lastexpress/game/savegame.h"
+#include "lastexpress/game/entities.h"
#include "lastexpress/game/inventory.h"
#include "lastexpress/game/logic.h"
#include "lastexpress/game/object.h"
@@ -34,10 +35,8 @@
#include "lastexpress/debug.h"
#include "lastexpress/lastexpress.h"
-#include "lastexpress/helpers.h"
#include "common/file.h"
-#include "common/system.h"
namespace LastExpress {
@@ -258,7 +257,7 @@ void SaveLoad::saveGame(SavegameType type, EntityIndex entity, uint32 value) {
entry.saveLoadWithSerializer(ser);
if (!entry.isValid()) {
- warning("[SaveLoad::saveGame] Invalid entry. This savegame might be corrupted");
+ error("[SaveLoad::saveGame] Invalid entry. This savegame might be corrupted");
_savegame->seek(header.offset);
} else if (getState()->time < entry.time || (type == kSavegameTypeTickInterval && getState()->time == entry.time)) {
// Not ready to save a game, skipping!
diff --git a/engines/lastexpress/game/savepoint.cpp b/engines/lastexpress/game/savepoint.cpp
index 64ae26c2be..557468e222 100644
--- a/engines/lastexpress/game/savepoint.cpp
+++ b/engines/lastexpress/game/savepoint.cpp
@@ -26,7 +26,6 @@
#include "lastexpress/game/logic.h"
#include "lastexpress/game/state.h"
-#include "lastexpress/helpers.h"
#include "lastexpress/lastexpress.h"
@@ -95,7 +94,7 @@ void SavePoints::process() {
if (!updateEntityFromData(savepoint)) {
// Call requested callback
- Entity::Callback *callback = getCallback(savepoint.entity1);
+ Callback *callback = getCallback(savepoint.entity1);
if (callback && callback->isValid()) {
debugC(8, kLastExpressDebugLogic, "Savepoint: entity1=%s, action=%s, entity2=%s", ENTITY_NAME(savepoint.entity1), ACTION_NAME(savepoint.action), ENTITY_NAME(savepoint.entity2));
(*callback)(savepoint);
@@ -126,7 +125,7 @@ void SavePoints::addData(EntityIndex entity, ActionIndex action, uint32 param) {
//////////////////////////////////////////////////////////////////////////
// Callbacks
//////////////////////////////////////////////////////////////////////////
-void SavePoints::setCallback(EntityIndex index, Entity::Callback *callback) {
+void SavePoints::setCallback(EntityIndex index, Callback *callback) {
if (index >= 40)
error("[SavePoints::setCallback] Attempting to use an invalid entity index. Valid values 0-39, was %d", index);
@@ -136,7 +135,7 @@ void SavePoints::setCallback(EntityIndex index, Entity::Callback *callback) {
_callbacks[index] = callback;
}
-Entity::Callback *SavePoints::getCallback(EntityIndex index) const {
+Callback *SavePoints::getCallback(EntityIndex index) const {
if (index >= 40)
error("[SavePoints::getCallback] Attempting to use an invalid entity index. Valid values 0-39, was %d", index);
@@ -150,7 +149,7 @@ void SavePoints::call(EntityIndex entity2, EntityIndex entity1, ActionIndex acti
point.entity2 = entity2;
point.param.intValue = param;
- Entity::Callback *callback = getCallback(entity1);
+ Callback *callback = getCallback(entity1);
if (callback != NULL && callback->isValid()) {
debugC(8, kLastExpressDebugLogic, "Savepoint: entity1=%s, action=%s, entity2=%s, param=%d", ENTITY_NAME(entity1), ACTION_NAME(action), ENTITY_NAME(entity2), param);
(*callback)(point);
@@ -164,7 +163,7 @@ void SavePoints::call(EntityIndex entity2, EntityIndex entity1, ActionIndex acti
point.entity2 = entity2;
strcpy((char *)&point.param.charValue, param);
- Entity::Callback *callback = getCallback(entity1);
+ Callback *callback = getCallback(entity1);
if (callback != NULL && callback->isValid()) {
debugC(8, kLastExpressDebugLogic, "Savepoint: entity1=%s, action=%s, entity2=%s, param=%s", ENTITY_NAME(entity1), ACTION_NAME(action), ENTITY_NAME(entity2), param);
(*callback)(point);
@@ -181,7 +180,7 @@ void SavePoints::callAndProcess() {
bool isRunning = getFlags()->isGameRunning;
while (isRunning) {
- Entity::Callback *callback = getCallback(index);
+ Callback *callback = getCallback(index);
if (callback != NULL && callback->isValid()) {
(*callback)(savepoint);
isRunning = getFlags()->isGameRunning;
diff --git a/engines/lastexpress/game/savepoint.h b/engines/lastexpress/game/savepoint.h
index a3303b4b8a..005133891a 100644
--- a/engines/lastexpress/game/savepoint.h
+++ b/engines/lastexpress/game/savepoint.h
@@ -23,9 +23,8 @@
#ifndef LASTEXPRESS_SAVEPOINT_H
#define LASTEXPRESS_SAVEPOINT_H
-#include "lastexpress/entities/entity.h"
-
#include "lastexpress/helpers.h"
+#include "lastexpress/shared.h"
#include "common/array.h"
#include "common/list.h"
@@ -74,10 +73,9 @@ struct SavePoint {
}
};
-class SavePoints : Common::Serializable {
-private:
- typedef Common::Functor1<const SavePoint&, void> Callback;
+typedef Common::Functor1<const SavePoint&, void> Callback;
+class SavePoints : Common::Serializable {
public:
struct SavePointData {
@@ -112,7 +110,7 @@ public:
void addData(EntityIndex entity, ActionIndex action, uint32 param);
// Callbacks
- void setCallback(EntityIndex index, Entity::Callback *callback);
+ void setCallback(EntityIndex index, Callback *callback);
Callback *getCallback(EntityIndex entity) const;
void call(EntityIndex entity2, EntityIndex entity1, ActionIndex action, uint32 param = 0) const;
void call(EntityIndex entity2, EntityIndex entity1, ActionIndex action, const char *param) const;
diff --git a/engines/lastexpress/game/scenes.cpp b/engines/lastexpress/game/scenes.cpp
index b886951e0b..3cda900757 100644
--- a/engines/lastexpress/game/scenes.cpp
+++ b/engines/lastexpress/game/scenes.cpp
@@ -22,8 +22,6 @@
#include "lastexpress/game/scenes.h"
-#include "lastexpress/data/scene.h"
-
#include "lastexpress/game/action.h"
#include "lastexpress/game/beetle.h"
#include "lastexpress/game/entities.h"
@@ -34,10 +32,8 @@
#include "lastexpress/game/state.h"
#include "lastexpress/sound/queue.h"
-#include "lastexpress/sound/sound.h"
#include "lastexpress/graphics.h"
-#include "lastexpress/helpers.h"
#include "lastexpress/lastexpress.h"
#include "lastexpress/resource.h"
@@ -493,7 +489,7 @@ bool SceneManager::checkCurrentPosition(bool doCheckOtherCars) const {
if (position == 99)
return true;
- switch (car){
+ switch (car) {
default:
break;
@@ -743,24 +739,31 @@ void SceneManager::resetQueue() {
_queue.clear();
}
-void SceneManager::setCoordinates(SequenceFrame *frame) {
+void SceneManager::setCoordinates(Common::Rect rect) {
+ _flagCoordinates = true;
- if (!frame || frame->getInfo()->subType == 3)
- return;
+ if (_coords.right > rect.right)
+ _coords.right = rect.right;
- _flagCoordinates = true;
+ if (_coords.bottom > rect.bottom)
+ _coords.bottom = rect.bottom;
+
+ if (_coords.left < rect.left)
+ _coords.left = rect.left;
- if (_coords.right > (int)frame->getInfo()->xPos1)
- _coords.right = (int16)frame->getInfo()->xPos1;
+ if (_coords.top < rect.top)
+ _coords.top = rect.top;
+}
- if (_coords.bottom > (int)frame->getInfo()->yPos1)
- _coords.bottom = (int16)frame->getInfo()->yPos1;
+void SceneManager::setCoordinates(SequenceFrame *frame) {
- if (_coords.left < (int)frame->getInfo()->xPos2)
- _coords.left = (int16)frame->getInfo()->xPos2;
+ if (!frame || frame->getInfo()->subType == 3)
+ return;
- if (_coords.top < (int)frame->getInfo()->yPos2)
- _coords.top = (int16)frame->getInfo()->yPos2;
+ setCoordinates(Common::Rect((int16)frame->getInfo()->xPos1,
+ (int16)frame->getInfo()->yPos1,
+ (int16)frame->getInfo()->xPos2,
+ (int16)frame->getInfo()->yPos2));
}
void SceneManager::resetCoordinates() {
diff --git a/engines/lastexpress/game/scenes.h b/engines/lastexpress/game/scenes.h
index 172dde2683..a866c65111 100644
--- a/engines/lastexpress/game/scenes.h
+++ b/engines/lastexpress/game/scenes.h
@@ -79,6 +79,7 @@ public:
void removeAndRedraw(SequenceFrame **frame, bool doRedraw);
void resetQueue();
void setCoordinates(SequenceFrame *frame);
+ void setCoordinates(Common::Rect rect);
// Helpers
SceneIndex getSceneIndexFromPosition(CarIndex car, Position position, int param3 = -1);
diff --git a/engines/lastexpress/helpers.h b/engines/lastexpress/helpers.h
index 7f3f1e246c..02454be13d 100644
--- a/engines/lastexpress/helpers.h
+++ b/engines/lastexpress/helpers.h
@@ -27,6 +27,8 @@
// Misc helpers
//////////////////////////////////////////////////////////////////////////
+#define LOW_BYTE(w) ((unsigned char)(((unsigned long)(w)) & 0xff))
+
// Misc
#define getArchive(name) _engine->getResourceManager()->getFileStream(name)
#define rnd(value) _engine->getRandom().getRandomNumber(value - 1)
diff --git a/engines/lastexpress/lastexpress.cpp b/engines/lastexpress/lastexpress.cpp
index 250fa0f2d0..01d2634dec 100644
--- a/engines/lastexpress/lastexpress.cpp
+++ b/engines/lastexpress/lastexpress.cpp
@@ -54,18 +54,17 @@ const char *g_entityNames[] = { "Player", "Anna", "August", "Mertens", "Coudert"
namespace LastExpress {
LastExpressEngine::LastExpressEngine(OSystem *syst, const ADGameDescription *gd) :
- Engine(syst), _gameDescription(gd),
- _debugger(NULL), _cursor(NULL),
- _font(NULL), _logic(NULL), _menu(NULL),
- _frameCounter(0), _lastFrameCount(0),
+ Engine(syst), _gameDescription(gd),
+ _debugger(NULL), _random("lastexpress"), _cursor(NULL),
+ _font(NULL), _logic(NULL), _menu(NULL),
+ _frameCounter(0), _lastFrameCount(0),
_graphicsMan(NULL), _resMan(NULL),
_sceneMan(NULL), _soundMan(NULL),
_eventMouse(NULL), _eventTick(NULL),
- _eventMouseBackup(NULL), _eventTickBackup(NULL),
- _random("lastexpress")
+ _eventMouseBackup(NULL), _eventTickBackup(NULL)
{
// Setup mixer
- syncSoundSettings();
+ Engine::syncSoundSettings();
// Adding the default directories
const Common::FSNode gameDataDir(ConfMan.get("path"));
diff --git a/engines/lastexpress/menu/menu.cpp b/engines/lastexpress/menu/menu.cpp
index f1a8bebe94..6a453aee99 100644
--- a/engines/lastexpress/menu/menu.cpp
+++ b/engines/lastexpress/menu/menu.cpp
@@ -30,6 +30,7 @@
#include "lastexpress/fight/fight.h"
+#include "lastexpress/game/entities.h"
#include "lastexpress/game/inventory.h"
#include "lastexpress/game/logic.h"
#include "lastexpress/game/savegame.h"
@@ -41,10 +42,8 @@
#include "lastexpress/menu/trainline.h"
#include "lastexpress/sound/queue.h"
-#include "lastexpress/sound/sound.h"
#include "lastexpress/graphics.h"
-#include "lastexpress/helpers.h"
#include "lastexpress/lastexpress.h"
#include "lastexpress/resource.h"
@@ -865,7 +864,7 @@ void Menu::init(bool doSavegame, SavegameType type, uint32 value) {
doSavegame = false;
} else {
- // TODO rename saves?
+ warning("[Menu::initGame] Renaming saves not implemented");
}
// Create a new savegame if needed
@@ -876,7 +875,7 @@ void Menu::init(bool doSavegame, SavegameType type, uint32 value) {
getSaveLoad()->saveGame(kSavegameTypeEvent2, kEntityPlayer, kEventNone);
if (!getGlobalTimer()) {
- // TODO: remove existing savegame temp file
+ warning("[Menu::initGame] Removing temporary saves not implemented");
}
// Init savegame & menu values
diff --git a/engines/lastexpress/resource.cpp b/engines/lastexpress/resource.cpp
index ee4885e34e..1d010355ac 100644
--- a/engines/lastexpress/resource.cpp
+++ b/engines/lastexpress/resource.cpp
@@ -31,7 +31,6 @@
#include "common/debug.h"
#include "common/file.h"
-#include "common/textconsole.h"
namespace LastExpress {
@@ -129,13 +128,10 @@ bool ResourceManager::loadArchive(const Common::String &name) {
// Get a stream to file in the archive
// - same as createReadStreamForMember except it checks if the file exists and will assert / output a debug message if not
-Common::SeekableReadStream *ResourceManager::getFileStream(const Common::String &name) {
+Common::SeekableReadStream *ResourceManager::getFileStream(const Common::String &name) const {
// Check if the file exits in the archive
if (!hasFile(name)) {
-//#ifdef _DEBUG
-// error("[ResourceManager::getFileStream] Cannot open file: %s", name.c_str());
-//#endif
debugC(2, kLastExpressDebugResource, "Error opening file: %s", name.c_str());
return NULL;
}
diff --git a/engines/lastexpress/resource.h b/engines/lastexpress/resource.h
index f2f5d63bce..90ac9b87ad 100644
--- a/engines/lastexpress/resource.h
+++ b/engines/lastexpress/resource.h
@@ -42,7 +42,7 @@ public:
// Loading
bool loadArchive(ArchiveIndex type);
static bool isArchivePresent(ArchiveIndex type);
- Common::SeekableReadStream *getFileStream(const Common::String &name);
+ Common::SeekableReadStream *getFileStream(const Common::String &name) const;
// Archive functions
bool hasFile(const Common::String &name) const;
diff --git a/engines/lastexpress/shared.h b/engines/lastexpress/shared.h
index d60a498447..bebd149b9b 100644
--- a/engines/lastexpress/shared.h
+++ b/engines/lastexpress/shared.h
@@ -80,7 +80,8 @@ enum SoundFlag {
kFlagMusic = 0x5000010,
kFlagType3 = 0x6000000,
kFlagLoop = 0x6001008,
- kFlagType9 = 0x7000000
+ kFlagType9 = 0x7000000,
+ kFlagNIS = 0x7002010
};
enum SoundState {
diff --git a/engines/lastexpress/sound/entry.cpp b/engines/lastexpress/sound/entry.cpp
index 44cc68a57b..f2a063e45f 100644
--- a/engines/lastexpress/sound/entry.cpp
+++ b/engines/lastexpress/sound/entry.cpp
@@ -30,11 +30,9 @@
#include "lastexpress/sound/sound.h"
#include "lastexpress/graphics.h"
-#include "lastexpress/helpers.h"
#include "lastexpress/lastexpress.h"
#include "lastexpress/resource.h"
-#include "common/stream.h"
namespace LastExpress {
@@ -47,6 +45,8 @@ namespace LastExpress {
SoundEntry::SoundEntry(LastExpressEngine *engine) : _engine(engine) {
_type = kSoundTypeNone;
+ _currentDataPtr = NULL;
+
_blockCount = 0;
_time = 0;
@@ -71,7 +71,13 @@ SoundEntry::~SoundEntry() {
// Entries that have been queued will have their streamed disposed automatically
if (!_soundStream)
SAFE_DELETE(_stream);
- delete _soundStream;
+
+ SAFE_DELETE(_soundStream);
+
+ free(_currentDataPtr);
+
+ _subtitle = NULL;
+ _stream = NULL;
// Zero passed pointers
_engine = NULL;
@@ -111,7 +117,7 @@ void SoundEntry::close() {
void SoundEntry::play() {
if (!_stream) {
- warning("[SoundEntry::play] stream has been disposed");
+ error("[SoundEntry::play] stream has been disposed");
return;
}
@@ -277,7 +283,7 @@ bool SoundEntry::updateSound() {
int l = strlen(sub) + 1;
if (l - 1 > 4)
- sub[l - 1 - 4] = 0;
+ sub[l - (1 + 4)] = 0;
showSubtitle(sub);
}
} else {
@@ -393,6 +399,10 @@ SubtitleEntry::SubtitleEntry(LastExpressEngine *engine) : _engine(engine) {
SubtitleEntry::~SubtitleEntry() {
SAFE_DELETE(_data);
+
+ // Zero-out passed pointers
+ _sound = NULL;
+ _engine = NULL;
}
void SubtitleEntry::load(Common::String filename, SoundEntry *soundEntry) {
@@ -423,6 +433,9 @@ void SubtitleEntry::loadData() {
}
void SubtitleEntry::setupAndDraw() {
+ if (!_sound)
+ error("[SubtitleEntry::setupAndDraw] Sound entry not initialized");
+
if (!_data) {
_data = new SubtitleManager(_engine->getFont());
_data->load(getArchive(_filename));
diff --git a/engines/lastexpress/sound/queue.cpp b/engines/lastexpress/sound/queue.cpp
index 33b4c06793..7b3dbcf2d9 100644
--- a/engines/lastexpress/sound/queue.cpp
+++ b/engines/lastexpress/sound/queue.cpp
@@ -26,6 +26,7 @@
#include "lastexpress/game/state.h"
#include "lastexpress/sound/entry.h"
+#include "lastexpress/sound/sound.h"
#include "lastexpress/helpers.h"
#include "lastexpress/lastexpress.h"
@@ -39,6 +40,7 @@ SoundQueue::SoundQueue(LastExpressEngine *engine) : _engine(engine) {
_subtitlesFlag = 0;
_currentSubtitle = NULL;
+ //_soundCacheData = NULL;
}
SoundQueue::~SoundQueue() {
@@ -51,6 +53,7 @@ SoundQueue::~SoundQueue() {
_subtitles.clear();
_currentSubtitle = NULL;
+ //SAFE_DELETE(_soundCacheData);
// Zero passed pointers
_engine = NULL;
@@ -134,7 +137,7 @@ void SoundQueue::updateQueue() {
// Original update the current entry, loading another set of samples to be decoded
- getFlags()->flag_3 = 0;
+ getFlags()->flag_3 = false;
--_flag;
}
@@ -340,13 +343,14 @@ void SoundQueue::updateSubtitles() {
return;
}
+ if (!subtitle)
+ return;
+
if (_subtitlesFlag & 1)
subtitle->drawOnScreen();
- if (subtitle) {
- subtitle->loadData();
- subtitle->setupAndDraw();
- }
+ subtitle->loadData();
+ subtitle->setupAndDraw();
}
//////////////////////////////////////////////////////////////////////////
diff --git a/engines/lastexpress/sound/queue.h b/engines/lastexpress/sound/queue.h
index 75fe06883a..e1f9be1cf7 100644
--- a/engines/lastexpress/sound/queue.h
+++ b/engines/lastexpress/sound/queue.h
@@ -106,7 +106,7 @@ private:
// Entries
Common::List<SoundEntry *> _soundList; ///< List of all sound entries
- void *_soundCacheData;
+ //void *_soundCacheData;
// Subtitles
int _subtitlesFlag;
diff --git a/engines/lastexpress/sound/sound.cpp b/engines/lastexpress/sound/sound.cpp
index 2f7bb4a601..319f7cd4f4 100644
--- a/engines/lastexpress/sound/sound.cpp
+++ b/engines/lastexpress/sound/sound.cpp
@@ -33,7 +33,6 @@
#include "lastexpress/sound/entry.h"
#include "lastexpress/sound/queue.h"
-#include "lastexpress/helpers.h"
#include "lastexpress/graphics.h"
#include "lastexpress/lastexpress.h"
#include "lastexpress/resource.h"
@@ -675,7 +674,7 @@ const char *SoundManager::getDialogName(EntityIndex entity) const {
//////////////////////////////////////////////////////////////////////////
// Letters & Messages
//////////////////////////////////////////////////////////////////////////
-void SoundManager::readText(int id){
+void SoundManager::readText(int id) {
if (!_queue->isBuffered(kEntityTables4))
return;
@@ -1330,23 +1329,23 @@ void SoundManager::playLoopingSound(int param) {
}
} else {
switch (getEntityData(kEntityPlayer)->car) {
- case 1:
- case 6:
+ case kCarBaggageRear:
+ case kCarBaggage:
partNumber = 4;
break;
- case 2:
- case 3:
- case 4:
- case 5:
+ case kCarKronos:
+ case kCarGreenSleeping:
+ case kCarRedSleeping:
+ case kCarRestaurant:
partNumber = 1;
break;
- case 7:
+ case kCarCoalTender:
partNumber = 5;
break;
- case 8:
+ case kCarLocomotive:
partNumber = 99;
break;
- case 9:
+ case kCar9:
partNumber = 3;
break;
default:
@@ -1357,13 +1356,13 @@ void SoundManager::playLoopingSound(int param) {
}
if (partNumber != 99)
- sprintf(tmp, "LOOP%d%c.SND", partNumber, _engine->getRandom().getRandomNumber(numLoops[partNumber] - 1) + 'A');
+ sprintf(tmp, "LOOP%d%c.SND", partNumber, (char)(_engine->getRandom().getRandomNumber(numLoops[partNumber] - 1) + 'A'));
}
if (getFlags()->flag_3)
fnameLen = 5;
- if (!entry || scumm_strnicmp(entry->getName2().c_str(), tmp, fnameLen)) {
+ if (!entry || scumm_strnicmp(entry->getName2().c_str(), tmp, (uint)fnameLen)) {
_loopingSoundDuration = _engine->getRandom().getRandomNumber(319) + 260;
if (partNumber != 99) {
diff --git a/engines/lure/surface.cpp b/engines/lure/surface.cpp
index 4d63647af5..0f13d87fbc 100644
--- a/engines/lure/surface.cpp
+++ b/engines/lure/surface.cpp
@@ -1360,8 +1360,8 @@ bool CopyProtectionDialog::show() {
(*tmpHotspot)->copyTo(&screen.screen());
screen.update();
- } else if ((events.event().kbd.keycode >= Common::KEYCODE_0) &&
- (events.event().kbd.keycode <= Common::KEYCODE_9)) {
+ } else if ((events.event().kbd.ascii >= '0') &&
+ (events.event().kbd.ascii <= '9')) {
HotspotsList::iterator tmpHotspot = _hotspots.begin();
for (int i = 0; i < _charIndex + 3; i++)
++tmpHotspot;
diff --git a/engines/mohawk/detection_tables.h b/engines/mohawk/detection_tables.h
index 5acc1bb179..55814af1c3 100644
--- a/engines/mohawk/detection_tables.h
+++ b/engines/mohawk/detection_tables.h
@@ -204,24 +204,6 @@ static const MohawkGameDescription gameDescriptions[] = {
},
// Myst Masterpiece Edition
- // English Windows
- // From clone2727
- {
- {
- "myst",
- "Masterpiece Edition",
- AD_ENTRY1("MYST.DAT", "c4cae9f143b5947262e6cb2397e1617e"),
- Common::EN_ANY,
- Common::kPlatformMacintosh,
- ADGF_UNSTABLE,
- GUIO1(GUIO_NOASPECT)
- },
- GType_MYST,
- GF_ME,
- 0,
- },
-
- // Myst Masterpiece Edition
// German Windows
// From DrMcCoy (Included in "Myst: Die Trilogie")
{
diff --git a/engines/mohawk/livingbooks.cpp b/engines/mohawk/livingbooks.cpp
index 708478a6d8..a0671d18d5 100644
--- a/engines/mohawk/livingbooks.cpp
+++ b/engines/mohawk/livingbooks.cpp
@@ -3378,11 +3378,10 @@ void LBLiveTextItem::readData(uint16 type, uint16 size, Common::MemoryReadStream
LiveTextWord word;
word.bounds = _vm->readRect(stream);
word.soundId = stream->readUint16();
- // TODO: unknowns
- uint16 unknown1 = stream->readUint16();
- uint16 unknown2 = stream->readUint16();
- debug(4, "Word: (%d, %d) to (%d, %d), sound %d, unknowns %04x, %04x",
- word.bounds.left, word.bounds.top, word.bounds.right, word.bounds.bottom, word.soundId, unknown1, unknown2);
+ word.itemType = stream->readUint16();
+ word.itemId = stream->readUint16();
+ debug(4, "Word: (%d, %d) to (%d, %d), sound %d, item %d (type %d)",
+ word.bounds.left, word.bounds.top, word.bounds.right, word.bounds.bottom, word.soundId, word.itemId, word.itemType);
_words.push_back(word);
}
@@ -3461,6 +3460,12 @@ void LBLiveTextItem::update() {
uint16 soundId = _words[_currentWord].soundId;
if (soundId && !_vm->_sound->isPlaying(soundId)) {
paletteUpdate(_currentWord, false);
+
+ // TODO: check this in RE
+ LBItem *item = _vm->getItemById(_words[_currentWord].itemId);
+ if (item)
+ item->togglePlaying(false, true);
+
_currentWord = 0xFFFF;
}
}
diff --git a/engines/mohawk/livingbooks.h b/engines/mohawk/livingbooks.h
index 91d6a8cd30..76da7d8219 100644
--- a/engines/mohawk/livingbooks.h
+++ b/engines/mohawk/livingbooks.h
@@ -537,6 +537,9 @@ protected:
struct LiveTextWord {
Common::Rect bounds;
uint16 soundId;
+
+ uint16 itemType;
+ uint16 itemId;
};
struct LiveTextPhrase {
diff --git a/engines/mohawk/myst.cpp b/engines/mohawk/myst.cpp
index 0efd412bd0..9c0e642203 100644
--- a/engines/mohawk/myst.cpp
+++ b/engines/mohawk/myst.cpp
@@ -98,11 +98,6 @@ MohawkEngine_Myst::MohawkEngine_Myst(OSystem *syst, const MohawkGameDescription
_view.soundListVolume = NULL;
_view.scriptResCount = 0;
_view.scriptResources = NULL;
-
- if ((getFeatures() & GF_ME) && getPlatform() == Common::kPlatformMacintosh) {
- const Common::FSNode gameDataDir(ConfMan.get("path"));
- SearchMan.addSubDirectoryMatching(gameDataDir, "CD Data");
- }
}
MohawkEngine_Myst::~MohawkEngine_Myst() {
@@ -205,11 +200,6 @@ static const char *mystFiles[] = {
// qtw/myst/libelev.mov: libup.mov is basically the same with sound
Common::String MohawkEngine_Myst::wrapMovieFilename(const Common::String &movieName, uint16 stack) {
- // The Macintosh release of Myst ME stores its videos in a different folder
- // WORKAROUND: The gear rotation videos are not in the CD Data folder. See above comments.
- if ((getFeatures() & GF_ME) && getPlatform() == Common::kPlatformMacintosh && !movieName.matchString("cl1wg?"))
- return Common::String("CD Data/m/") + movieName + ".mov";
-
Common::String prefix;
switch (stack) {
@@ -498,52 +488,32 @@ void MohawkEngine_Myst::changeToStack(uint16 stack, uint16 card, uint16 linkSrcS
if (!_mhk[0]->openFile(mystFiles[_curStack]))
error("Could not open %s", mystFiles[_curStack]);
- if (getPlatform() == Common::kPlatformMacintosh)
- _gfx->loadExternalPictureFile(_curStack);
-
_runExitScript = false;
// Clear the resource cache and the image cache
_cache.clear();
_gfx->clearCache();
- // Play Flyby Entry Movie on Masterpiece Edition. The Macintosh version is currently hooked
- // up to the Cinepak versions of the video (the 'c' suffix) until the SVQ1 decoder is completed.
+ // Play Flyby Entry Movie on Masterpiece Edition.
const char *flyby = 0;
if (getFeatures() & GF_ME) {
switch (_curStack) {
case kSeleniticStack:
- if (getPlatform() == Common::kPlatformMacintosh)
- flyby = "FLY_SEc";
- else
- flyby = "selenitic flyby";
+ flyby = "selenitic flyby";
break;
case kStoneshipStack:
- if (getPlatform() == Common::kPlatformMacintosh)
- flyby = "FLY_STc";
- else
- flyby = "stoneship flyby";
+ flyby = "stoneship flyby";
break;
// Myst Flyby Movie not used in Original Masterpiece Edition Engine
case kMystStack:
- if (_tweaksEnabled) {
- if (getPlatform() == Common::kPlatformMacintosh)
- flyby = "FLY_MYc";
- else
- flyby = "myst flyby";
- }
+ if (_tweaksEnabled)
+ flyby = "myst flyby";
break;
case kMechanicalStack:
- if (getPlatform() == Common::kPlatformMacintosh)
- flyby = "FLY_MEc";
- else
- flyby = "mech age flyby";
+ flyby = "mech age flyby";
break;
case kChannelwoodStack:
- if (getPlatform() == Common::kPlatformMacintosh)
- flyby = "FLY_CHc";
- else
- flyby = "channelwood flyby";
+ flyby = "channelwood flyby";
break;
default:
break;
diff --git a/engines/mohawk/myst_graphics.cpp b/engines/mohawk/myst_graphics.cpp
index ae80dd5538..2df0f7e6ba 100644
--- a/engines/mohawk/myst_graphics.cpp
+++ b/engines/mohawk/myst_graphics.cpp
@@ -49,8 +49,6 @@ MystGraphics::MystGraphics(MohawkEngine_Myst* vm) : GraphicsManager(), _vm(vm) {
if (_pixelFormat.bytesPerPixel == 1)
error("Myst requires greater than 256 colors to run");
- _pictureFile.entries = NULL;
-
// Initialize our buffer
_backBuffer = new Graphics::Surface();
_backBuffer->create(_vm->_system->getWidth(), _vm->_system->getHeight(), _pixelFormat);
@@ -61,122 +59,50 @@ MystGraphics::MystGraphics(MohawkEngine_Myst* vm) : GraphicsManager(), _vm(vm) {
MystGraphics::~MystGraphics() {
delete _bmpDecoder;
- delete[] _pictureFile.entries;
_backBuffer->free();
delete _backBuffer;
}
-static const char *s_picFileNames[] = {
- "CHpics",
- "",
- "",
- "DUpics",
- "INpics",
- "",
- "MEpics",
- "MYpics",
- "SEpics",
- "",
- "",
- "STpics"
-};
-
-void MystGraphics::loadExternalPictureFile(uint16 stack) {
- if (_vm->getPlatform() != Common::kPlatformMacintosh)
- return;
-
- if (_pictureFile.picFile.isOpen())
- _pictureFile.picFile.close();
- delete[] _pictureFile.entries;
-
- if (!scumm_stricmp(s_picFileNames[stack], ""))
- return;
-
- if (!_pictureFile.picFile.open(s_picFileNames[stack]))
- error ("Could not open external picture file \'%s\'", s_picFileNames[stack]);
-
- _pictureFile.pictureCount = _pictureFile.picFile.readUint32BE();
- _pictureFile.entries = new PictureFile::PictureEntry[_pictureFile.pictureCount];
-
- for (uint32 i = 0; i < _pictureFile.pictureCount; i++) {
- _pictureFile.entries[i].offset = _pictureFile.picFile.readUint32BE();
- _pictureFile.entries[i].size = _pictureFile.picFile.readUint32BE();
- _pictureFile.entries[i].id = _pictureFile.picFile.readUint16BE();
- _pictureFile.entries[i].type = _pictureFile.picFile.readUint16BE();
- _pictureFile.entries[i].width = _pictureFile.picFile.readUint16BE();
- _pictureFile.entries[i].height = _pictureFile.picFile.readUint16BE();
+MohawkSurface *MystGraphics::decodeImage(uint16 id) {
+ // We need to grab the image from the current stack archive, however, we don't know
+ // if it's a PICT or WDIB resource. If it's Myst ME it's most likely a PICT, and if it's
+ // original it's definitely a WDIB. However, Myst ME throws us another curve ball in
+ // that PICT resources can contain WDIB's instead of PICT's.
+ Common::SeekableReadStream *dataStream = NULL;
+
+ if (_vm->getFeatures() & GF_ME && _vm->hasResource(ID_PICT, id)) {
+ // The PICT resource exists. However, it could still contain a MystBitmap
+ // instead of a PICT image...
+ dataStream = _vm->getResource(ID_PICT, id);
+ } else {
+ // No PICT, so the WDIB must exist. Let's go grab it.
+ dataStream = _vm->getResource(ID_WDIB, id);
}
-}
-MohawkSurface *MystGraphics::decodeImage(uint16 id) {
- MohawkSurface *mhkSurface = 0;
+ bool isPict = false;
- // Myst ME uses JPEG/PICT images instead of compressed Windows Bitmaps for room images,
- // though there are a few weird ones that use that format. For further nonsense with images,
- // the Macintosh version stores images in external "picture files." We check them before
- // going to check for a PICT resource.
- if (_vm->getFeatures() & GF_ME && _vm->getPlatform() == Common::kPlatformMacintosh && _pictureFile.picFile.isOpen()) {
- for (uint32 i = 0; i < _pictureFile.pictureCount; i++)
- if (_pictureFile.entries[i].id == id) {
- if (_pictureFile.entries[i].type == 0) {
- Graphics::JPEGDecoder jpeg;
- Common::SeekableSubReadStream subStream(&_pictureFile.picFile, _pictureFile.entries[i].offset, _pictureFile.entries[i].offset + _pictureFile.entries[i].size);
-
- if (!jpeg.loadStream(subStream))
- error("Could not decode Myst ME Mac JPEG");
-
- mhkSurface = new MohawkSurface(jpeg.getSurface()->convertTo(_pixelFormat));
- } else if (_pictureFile.entries[i].type == 1) {
- Graphics::PICTDecoder pict;
- Common::SeekableSubReadStream subStream(&_pictureFile.picFile, _pictureFile.entries[i].offset, _pictureFile.entries[i].offset + _pictureFile.entries[i].size);
-
- if (!pict.loadStream(subStream))
- error("Could not decode Myst ME Mac PICT");
-
- mhkSurface = new MohawkSurface(pict.getSurface()->convertTo(_pixelFormat));
- } else
- error ("Unknown Picture File type %d", _pictureFile.entries[i].type);
- break;
- }
+ if (_vm->getFeatures() & GF_ME) {
+ // Here we detect whether it's really a PICT or a WDIB. Since a MystBitmap
+ // would be compressed, there's no way to detect for the BM without a hack.
+ // So, we search for the PICT version opcode for detection.
+ dataStream->seek(512 + 10); // 512 byte pict header
+ isPict = (dataStream->readUint32BE() == 0x001102FF);
+ dataStream->seek(0);
}
- // We're not using the external Mac files, so it's time to delve into the main Mohawk
- // archives. However, we still don't know if it's a PICT or WDIB resource. If it's Myst
- // ME it's most likely a PICT, and if it's original it's definitely a WDIB. However,
- // Myst ME throws us another curve ball in that PICT resources can contain WDIB's instead
- // of PICT's.
- if (!mhkSurface) {
- bool isPict = false;
- Common::SeekableReadStream *dataStream = NULL;
-
- if (_vm->getFeatures() & GF_ME && _vm->hasResource(ID_PICT, id)) {
- // The PICT resource exists. However, it could still contain a MystBitmap
- // instead of a PICT image...
- dataStream = _vm->getResource(ID_PICT, id);
- } else // No PICT, so the WDIB must exist. Let's go grab it.
- dataStream = _vm->getResource(ID_WDIB, id);
-
- if (_vm->getFeatures() & GF_ME) {
- // Here we detect whether it's really a PICT or a WDIB. Since a MystBitmap
- // would be compressed, there's no way to detect for the BM without a hack.
- // So, we search for the PICT version opcode for detection.
- dataStream->seek(512 + 10); // 512 byte pict header
- isPict = (dataStream->readUint32BE() == 0x001102FF);
- dataStream->seek(0);
- }
+ MohawkSurface *mhkSurface = 0;
- if (isPict) {
- Graphics::PICTDecoder pict;
+ if (isPict) {
+ Graphics::PICTDecoder pict;
- if (!pict.loadStream(*dataStream))
- error("Could not decode Myst ME PICT");
+ if (!pict.loadStream(*dataStream))
+ error("Could not decode Myst ME PICT");
- mhkSurface = new MohawkSurface(pict.getSurface()->convertTo(_pixelFormat));
- } else {
- mhkSurface = _bmpDecoder->decodeImage(dataStream);
- mhkSurface->convertToTrueColor();
- }
+ mhkSurface = new MohawkSurface(pict.getSurface()->convertTo(_pixelFormat));
+ } else {
+ mhkSurface = _bmpDecoder->decodeImage(dataStream);
+ mhkSurface->convertToTrueColor();
}
assert(mhkSurface);
diff --git a/engines/mohawk/myst_graphics.h b/engines/mohawk/myst_graphics.h
index 20fd46c5b9..de8fe521e6 100644
--- a/engines/mohawk/myst_graphics.h
+++ b/engines/mohawk/myst_graphics.h
@@ -43,7 +43,6 @@ public:
MystGraphics(MohawkEngine_Myst*);
~MystGraphics();
- void loadExternalPictureFile(uint16 stack);
void copyImageSectionToScreen(uint16 image, Common::Rect src, Common::Rect dest);
void copyImageSectionToBackBuffer(uint16 image, Common::Rect src, Common::Rect dest);
void copyImageToScreen(uint16 image, Common::Rect dest);
@@ -66,20 +65,6 @@ private:
MohawkEngine_Myst *_vm;
MystBitmap *_bmpDecoder;
- struct PictureFile {
- uint32 pictureCount;
- struct PictureEntry {
- uint32 offset;
- uint32 size;
- uint16 id;
- uint16 type;
- uint16 width;
- uint16 height;
- } *entries;
-
- Common::File picFile;
- } _pictureFile;
-
Graphics::Surface *_backBuffer;
Graphics::PixelFormat _pixelFormat;
Common::Rect _viewport;
diff --git a/engines/mohawk/myst_stacks/intro.cpp b/engines/mohawk/myst_stacks/intro.cpp
index a5f608dbbf..545b97d956 100644
--- a/engines/mohawk/myst_stacks/intro.cpp
+++ b/engines/mohawk/myst_stacks/intro.cpp
@@ -100,12 +100,8 @@ void Intro::introMovies_run() {
switch (_introStep) {
case 0:
- // Play the Mattel (or UbiSoft) logo in the Myst ME Mac version
- if ((_vm->getFeatures() & GF_ME) && _vm->getPlatform() == Common::kPlatformMacintosh) {
- _vm->_video->playMovie(_vm->wrapMovieFilename("mattel", kIntroStack));
- _introStep = 1;
- } else
- _introStep = 2;
+ _introStep = 1;
+ _vm->_video->playMovie(_vm->wrapMovieFilename("broder", kIntroStack));
break;
case 1:
if (!_vm->_video->isVideoPlaying())
@@ -113,10 +109,7 @@ void Intro::introMovies_run() {
break;
case 2:
_introStep = 3;
- if ((_vm->getFeatures() & GF_ME) && _vm->getPlatform() == Common::kPlatformMacintosh)
- _vm->_video->playMovie(_vm->wrapMovieFilename("presto", kIntroStack));
- else
- _vm->_video->playMovie(_vm->wrapMovieFilename("broder", kIntroStack));
+ _vm->_video->playMovie(_vm->wrapMovieFilename("cyanlogo", kIntroStack));
break;
case 3:
if (!_vm->_video->isVideoPlaying())
@@ -124,21 +117,13 @@ void Intro::introMovies_run() {
break;
case 4:
_introStep = 5;
- _vm->_video->playMovie(_vm->wrapMovieFilename("cyanlogo", kIntroStack));
- break;
- case 5:
- if (!_vm->_video->isVideoPlaying())
- _introStep = 6;
- break;
- case 6:
- _introStep = 7;
if (!(_vm->getFeatures() & GF_DEMO)) // The demo doesn't have the intro video
_vm->_video->playMovie(_vm->wrapMovieFilename("intro", kIntroStack));
break;
- case 7:
+ case 5:
if (!_vm->_video->isVideoPlaying())
- _introStep = 8;
+ _introStep = 6;
break;
default:
if (_vm->getFeatures() & GF_DEMO)
diff --git a/engines/mohawk/riven.cpp b/engines/mohawk/riven.cpp
index e54d6fefa2..32613c6185 100644
--- a/engines/mohawk/riven.cpp
+++ b/engines/mohawk/riven.cpp
@@ -646,7 +646,7 @@ Common::String MohawkEngine_Riven::getName(uint16 nameResource, uint16 nameID) {
}
delete nameStream;
- delete [] stringOffsets;
+ delete[] stringOffsets;
return name;
}
diff --git a/engines/parallaction/disk_br.cpp b/engines/parallaction/disk_br.cpp
index 5e39c893db..ee981a2c7d 100644
--- a/engines/parallaction/disk_br.cpp
+++ b/engines/parallaction/disk_br.cpp
@@ -617,7 +617,7 @@ GfxObj* AmigaDisk_br::loadStatic(const char* name) {
}
}
- delete []shadow;
+ delete[] shadow;
delete stream;
}
diff --git a/engines/parallaction/disk_ns.cpp b/engines/parallaction/disk_ns.cpp
index 839b2c6834..8d4afd6847 100644
--- a/engines/parallaction/disk_ns.cpp
+++ b/engines/parallaction/disk_ns.cpp
@@ -832,7 +832,7 @@ void AmigaDisk_ns::decodeCnv(byte *data, uint16 numFrames, uint16 width, uint16
assert(buf);
stream->read(buf, rawsize);
unpackBitmap(data, buf, numFrames, bytesPerPlane, height);
- delete []buf;
+ delete[] buf;
}
#undef NUM_PLANES
diff --git a/engines/parallaction/graphics.cpp b/engines/parallaction/graphics.cpp
index 6868505c52..9855830478 100644
--- a/engines/parallaction/graphics.cpp
+++ b/engines/parallaction/graphics.cpp
@@ -766,7 +766,7 @@ Gfx::~Gfx() {
freeLabels();
- delete []_unpackedBitmap;
+ delete[] _unpackedBitmap;
return;
}
diff --git a/engines/parallaction/graphics.h b/engines/parallaction/graphics.h
index b43dd193b5..f8cb4b3647 100644
--- a/engines/parallaction/graphics.h
+++ b/engines/parallaction/graphics.h
@@ -144,7 +144,7 @@ public:
~Cnv() {
if (_freeData)
- delete []_data;
+ delete[] _data;
}
byte* getFramePtr(uint16 index) {
diff --git a/engines/parallaction/sound_ns.cpp b/engines/parallaction/sound_ns.cpp
index 3cc25b36b0..dcc71e4f2f 100644
--- a/engines/parallaction/sound_ns.cpp
+++ b/engines/parallaction/sound_ns.cpp
@@ -237,7 +237,7 @@ AmigaSoundMan_ns::~AmigaSoundMan_ns() {
stopSfx(2);
stopSfx(3);
- delete []beepSoundBuffer;
+ delete[] beepSoundBuffer;
}
Audio::AudioStream *AmigaSoundMan_ns::loadChannelData(const char *filename, Channel *ch, bool looping) {
diff --git a/engines/queen/queen.cpp b/engines/queen/queen.cpp
index 3acc87b856..f3b183c84f 100644
--- a/engines/queen/queen.cpp
+++ b/engines/queen/queen.cpp
@@ -56,8 +56,8 @@ static const PlainGameDescriptor queenGameDescriptor = {
};
static const ExtraGuiOption queenExtraGuiOption = {
- _s("Floppy intro"),
- _s("Use the floppy version's intro (CD version only)"),
+ _s("Alternative intro"),
+ _s("Use an alternative game intro (CD version only)"),
"alt_intro",
false
};
diff --git a/engines/saga/detection.cpp b/engines/saga/detection.cpp
index d39ec34cc8..9c178559f2 100644
--- a/engines/saga/detection.cpp
+++ b/engines/saga/detection.cpp
@@ -252,9 +252,6 @@ SaveStateDescriptor SagaMetaEngine::querySaveMetaInfos(const char *target, int s
debug(0, "Save is for: %s", title);
}
- desc.setDeletableFlag(true);
- desc.setWriteProtectedFlag(false);
-
if (version >= 6) {
Graphics::Surface *const thumbnail = Graphics::loadThumbnail(*in);
desc.setThumbnail(thumbnail);
diff --git a/engines/savestate.h b/engines/savestate.h
index 6cbdb22edf..c233554657 100644
--- a/engines/savestate.h
+++ b/engines/savestate.h
@@ -40,6 +40,8 @@ struct Surface;
*
* Further possibilites are a thumbnail, play time, creation date,
* creation time, delete protected, write protection.
+ *
+ * Saves are writable and deletable by default.
*/
class SaveStateDescriptor {
public:
diff --git a/engines/sci/console.cpp b/engines/sci/console.cpp
index 40a6fd1415..564bbbbd79 100644
--- a/engines/sci/console.cpp
+++ b/engines/sci/console.cpp
@@ -2987,8 +2987,9 @@ void Console::printKernelCallsFound(int kernelFuncNum, bool showFoundScripts) {
// Ignore specific leftover scripts, which require other non-existing scripts
if ((_engine->getGameId() == GID_HOYLE3 && itr->getNumber() == 995) ||
(_engine->getGameId() == GID_KQ5 && itr->getNumber() == 980) ||
- (_engine->getGameId() == GID_SLATER && itr->getNumber() == 947) ||
- (_engine->getGameId() == GID_MOTHERGOOSE256 && itr->getNumber() == 980)) {
+ (_engine->getGameId() == GID_KQ7 && itr->getNumber() == 111) ||
+ (_engine->getGameId() == GID_MOTHERGOOSE256 && itr->getNumber() == 980) ||
+ (_engine->getGameId() == GID_SLATER && itr->getNumber() == 947)) {
continue;
}
diff --git a/engines/sci/detection.cpp b/engines/sci/detection.cpp
index 78df3065b2..58ac5f1fa6 100644
--- a/engines/sci/detection.cpp
+++ b/engines/sci/detection.cpp
@@ -397,8 +397,8 @@ static const ADExtraGuiOptionsMap optionsList[] = {
{
GAMEOPTION_FB01_MIDI,
{
- _s("Use IMF/Yahama FB-01 for MIDI output"),
- _s("Use an IBM Music Feature card or a Yahama FB-01 FM synth module for MIDI output"),
+ _s("Use IMF/Yamaha FB-01 for MIDI output"),
+ _s("Use an IBM Music Feature card or a Yamaha FB-01 FM synth module for MIDI output"),
"native_fb01",
false
}
@@ -762,9 +762,6 @@ SaveStateDescriptor SciMetaEngine::querySaveMetaInfos(const char *target, int sl
Graphics::Surface *const thumbnail = Graphics::loadThumbnail(*in);
desc.setThumbnail(thumbnail);
- desc.setDeletableFlag(true);
- desc.setWriteProtectedFlag(false);
-
int day = (meta.saveDate >> 24) & 0xFF;
int month = (meta.saveDate >> 16) & 0xFF;
int year = meta.saveDate & 0xFFFF;
diff --git a/engines/sci/detection_tables.h b/engines/sci/detection_tables.h
index 9872973e09..268914edba 100644
--- a/engines/sci/detection_tables.h
+++ b/engines/sci/detection_tables.h
@@ -1238,6 +1238,24 @@ static const struct ADGameDescription SciGameDescriptions[] = {
AD_LISTEND},
Common::EN_ANY, Common::kPlatformPC, 0, GUIO4(GUIO_NOSPEECH, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
+ // King's Quest 5 - English DOS Floppy
+ // VERSION file reports "0.000.051"
+ // Supplied by misterhands in bug report #3536863.
+ // This is the original English version, which has been externally patched to
+ // Polish in the Polish release below.
+ {"kq5", "", {
+ {"resource.map", 0, "70010c20138541f89013bb5e1b30f16a", 7998},
+ {"resource.000", 0, "a591bd4b879fc832b8095c0b3befe9e2", 276398},
+ {"resource.001", 0, "c0f48d4a7ebeaa6aa074fc98d77423e9", 1018560},
+ {"resource.002", 0, "7f188a95acdb60bbe32a8379ba299393", 1307048},
+ {"resource.003", 0, "0860785af59518b94d54718dddcd6907", 1348500},
+ {"resource.004", 0, "c4745dd1e261c22daa6477961d08bf6c", 1239887},
+ {"resource.005", 0, "6556ff8e7c4d1acf6a78aea154daa76c", 1287869},
+ {"resource.006", 0, "da82e4beb744731d0a151f1d4922fafa", 1170456},
+ {"resource.007", 0, "431def14ca29cdb5e6a5e84d3f38f679", 1240176},
+ AD_LISTEND},
+ Common::EN_ANY, Common::kPlatformPC, 0, GUIO4(GUIO_NOSPEECH, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
+
// King's Quest 5 - English DOS Floppy (supplied by omer_mor in bug report #3036996)
// VERSION file reports "0.000.051"
{"kq5", "", {
@@ -1354,8 +1372,10 @@ static const struct ADGameDescription SciGameDescriptions[] = {
AD_LISTEND},
Common::IT_ITA, Common::kPlatformPC, ADGF_ADDENGLISH, GUIO4(GUIO_NOSPEECH, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
- // King's Quest 5 - Polish DOS Floppy (supplied by jacek909 in bug report #2725722, includes english language?!)
+ // King's Quest 5 - Polish DOS Floppy (supplied by jacek909 in bug report #2725722)
// SCI interpreter version 1.000.060
+ // VERSION file reports "0.000.051".
+ // This is actually an English version with external text resource patches (bug #3536863).
{"kq5", "", {
{"resource.map", 0, "70010c20138541f89013bb5e1b30f16a", 7998},
{"resource.000", 0, "a591bd4b879fc832b8095c0b3befe9e2", 276398},
@@ -1366,6 +1386,7 @@ static const struct ADGameDescription SciGameDescriptions[] = {
{"resource.005", 0, "6556ff8e7c4d1acf6a78aea154daa76c", 1287869},
{"resource.006", 0, "da82e4beb744731d0a151f1d4922fafa", 1170456},
{"resource.007", 0, "431def14ca29cdb5e6a5e84d3f38f679", 1240176},
+ {"text.000", 0, "601aa35a3ddeb558e1280e0963e955a2", 1517},
AD_LISTEND},
Common::PL_POL, Common::kPlatformPC, ADGF_ADDENGLISH, GUIO4(GUIO_NOSPEECH, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
@@ -1447,6 +1468,16 @@ static const struct ADGameDescription SciGameDescriptions[] = {
AD_LISTEND},
Common::DE_DEU, Common::kPlatformPC, 0, GUIO4(GUIO_NOSPEECH, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
+ // King's Quest 6 - Spanish DOS Floppy (from jvprat)
+ // Executable scanning reports "1.cfs.158", VERSION file reports "1.000.000, July 5, 1994"
+ // SCI interpreter version 1.001.055
+ {"kq6", "", {
+ {"resource.map", 0, "a73a5ab04b8f60c4b75b946a4dccea5a", 8953},
+ {"resource.000", 0, "4da3ad5868a775549a7cc4f72770a58e", 8537260},
+ {"resource.msg", 0, "41eed2d3893e1ca6c3695deba4e9d2e8", 267102},
+ AD_LISTEND},
+ Common::ES_ESP, Common::kPlatformPC, 0, GUIO4(GUIO_NOSPEECH, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
+
// King's Quest 6 - English DOS CD (from the King's Quest Collection)
// Executable scanning reports "1.cfs.158", VERSION file reports "1.034 9/11/94 - KQ6 version 1.000.00G"
// SCI interpreter version 1.001.054
@@ -1465,16 +1496,6 @@ static const struct ADGameDescription SciGameDescriptions[] = {
AD_LISTEND},
Common::EN_ANY, Common::kPlatformWindows, ADGF_CD, GUIO5(GUIO_NOASPECT, GAMEOPTION_KQ6_WINDOWS_CURSORS, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
- // King's Quest 6 - Spanish DOS CD (from jvprat)
- // Executable scanning reports "1.cfs.158", VERSION file reports "1.000.000, July 5, 1994"
- // SCI interpreter version 1.001.055
- {"kq6", "CD", {
- {"resource.map", 0, "a73a5ab04b8f60c4b75b946a4dccea5a", 8953},
- {"resource.000", 0, "4da3ad5868a775549a7cc4f72770a58e", 8537260},
- {"resource.msg", 0, "41eed2d3893e1ca6c3695deba4e9d2e8", 267102},
- AD_LISTEND},
- Common::ES_ESP, Common::kPlatformPC, ADGF_CD, GUIO3(GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
-
// King's Quest 6 - English Macintosh Floppy
// VERSION file reports "1.0"
{"kq6", "", {
@@ -3536,7 +3557,7 @@ static const struct ADGameDescription SciGameDescriptions[] = {
{"resource.map", 0, "ed90a8e3ccc53af6633ff6ab58392bae", 7054},
{"resource.000", 0, "63247e3901ab8963d4eece73747832e0", 5157378},
AD_LISTEND},
- Common::EN_ANY, Common::kPlatformPC, ADGF_CD, GUIO1(GAMEOPTION_SQ4_SILVER_CURSORS) },
+ Common::EN_ANY, Common::kPlatformPC, ADGF_CD, GUIO5(GUIO_MIDIGM, GAMEOPTION_SQ4_SILVER_CURSORS, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
// Space Quest 4 - English Windows CD (from the Space Quest Collection)
// Executable scanning reports "1.001.064", VERSION file reports "1.0"
diff --git a/engines/sci/engine/file.cpp b/engines/sci/engine/file.cpp
index 0d575f97dd..a0f7ebf4a2 100644
--- a/engines/sci/engine/file.cpp
+++ b/engines/sci/engine/file.cpp
@@ -57,11 +57,24 @@ namespace Sci {
reg_t file_open(EngineState *s, const Common::String &filename, int mode, bool unwrapFilename) {
Common::String englishName = g_sci->getSciLanguageString(filename, K_LANG_ENGLISH);
+ englishName.toLowercase();
+
Common::String wrappedName = unwrapFilename ? g_sci->wrapFilename(englishName) : englishName;
Common::SeekableReadStream *inFile = 0;
Common::WriteStream *outFile = 0;
Common::SaveFileManager *saveFileMan = g_sci->getSaveFileManager();
+ bool isCompressed = true;
+ const SciGameId gameId = g_sci->getGameId();
+ if ((gameId == GID_QFG1 || gameId == GID_QFG1VGA || gameId == GID_QFG2 || gameId == GID_QFG3)
+ && englishName.hasSuffix(".sav")) {
+ // QFG Characters are saved via the CharSave object.
+ // We leave them uncompressed so that they can be imported in later QFG
+ // games.
+ // Rooms/Scripts: QFG1: 601, QFG2: 840, QFG3/4: 52
+ isCompressed = false;
+ }
+
if (mode == _K_FILE_MODE_OPEN_OR_FAIL) {
// Try to open file, abort if not possible
inFile = saveFileMan->openForLoading(wrappedName);
@@ -74,12 +87,12 @@ reg_t file_open(EngineState *s, const Common::String &filename, int mode, bool u
debugC(kDebugLevelFile, " -> file_open(_K_FILE_MODE_OPEN_OR_FAIL): failed to open file '%s'", englishName.c_str());
} else if (mode == _K_FILE_MODE_CREATE) {
// Create the file, destroying any content it might have had
- outFile = saveFileMan->openForSaving(wrappedName);
+ outFile = saveFileMan->openForSaving(wrappedName, isCompressed);
if (!outFile)
debugC(kDebugLevelFile, " -> file_open(_K_FILE_MODE_CREATE): failed to create file '%s'", englishName.c_str());
} else if (mode == _K_FILE_MODE_OPEN_OR_CREATE) {
// Try to open file, create it if it doesn't exist
- outFile = saveFileMan->openForSaving(wrappedName);
+ outFile = saveFileMan->openForSaving(wrappedName, isCompressed);
if (!outFile)
debugC(kDebugLevelFile, " -> file_open(_K_FILE_MODE_CREATE): failed to create file '%s'", englishName.c_str());
diff --git a/engines/sci/engine/kernel.cpp b/engines/sci/engine/kernel.cpp
index c8fe47d9fc..46051ef145 100644
--- a/engines/sci/engine/kernel.cpp
+++ b/engines/sci/engine/kernel.cpp
@@ -757,13 +757,26 @@ bool Kernel::debugSetFunction(const char *kernelName, int logging, int breakpoin
return true;
}
-void Kernel::setDefaultKernelNames(GameFeatures *features) {
- _kernelNames = Common::StringArray(s_defaultKernelNames, ARRAYSIZE(s_defaultKernelNames));
+#ifdef ENABLE_SCI32
+enum {
+ kKernelEntriesSci2 = 0x8b,
+ kKernelEntriesGk2Demo = 0xa0,
+ kKernelEntriesSci21 = 0x9d,
+ kKernelEntriesSci3 = 0xa1
+};
+#endif
+
+void Kernel::loadKernelNames(GameFeatures *features) {
+ _kernelNames.clear();
- // Some (later) SCI versions replaced CanBeHere by CantBeHere
- // If vocab.999 exists, the kernel function is still named CanBeHere
- if (_selectorCache.cantBeHere != -1)
- _kernelNames[0x4d] = "CantBeHere";
+ if (getSciVersion() <= SCI_VERSION_1_1) {
+ _kernelNames = Common::StringArray(s_defaultKernelNames, ARRAYSIZE(s_defaultKernelNames));
+
+ // Some (later) SCI versions replaced CanBeHere by CantBeHere
+ // If vocab.999 exists, the kernel function is still named CanBeHere
+ if (_selectorCache.cantBeHere != -1)
+ _kernelNames[0x4d] = "CantBeHere";
+ }
switch (getSciVersion()) {
case SCI_VERSION_0_EARLY:
@@ -817,66 +830,60 @@ void Kernel::setDefaultKernelNames(GameFeatures *features) {
_kernelNames[0x7c] = "Message";
break;
- default:
- // Use default table for the other versions
- break;
- }
-}
-
#ifdef ENABLE_SCI32
+ case SCI_VERSION_2:
+ _kernelNames = Common::StringArray(sci2_default_knames, kKernelEntriesSci2);
+ break;
-enum {
- kKernelEntriesSci2 = 0x8b,
- kKernelEntriesGk2Demo = 0xa0,
- kKernelEntriesSci21 = 0x9d,
- kKernelEntriesSci3 = 0xa1
-};
-
-void Kernel::setKernelNamesSci2() {
- _kernelNames = Common::StringArray(sci2_default_knames, kKernelEntriesSci2);
-}
+ case SCI_VERSION_2_1:
+ if (features->detectSci21KernelType() == SCI_VERSION_2) {
+ // Some early SCI2.1 games use a modified SCI2 kernel table instead of
+ // the SCI2.1 kernel table. We detect which version to use based on
+ // how kDoSound is called from Sound::play().
+ // Known games that use this:
+ // GK2 demo
+ // KQ7 1.4
+ // PQ4 SWAT demo
+ // LSL6
+ // PQ4CD
+ // QFG4CD
+
+ // This is interesting because they all have the same interpreter
+ // version (2.100.002), yet they would not be compatible with other
+ // games of the same interpreter.
+
+ _kernelNames = Common::StringArray(sci2_default_knames, kKernelEntriesGk2Demo);
+ // OnMe is IsOnMe here, but they should be compatible
+ _kernelNames[0x23] = "Robot"; // Graph in SCI2
+ _kernelNames[0x2e] = "Priority"; // DisposeTextBitmap in SCI2
+ } else {
+ // Normal SCI2.1 kernel table
+ _kernelNames = Common::StringArray(sci21_default_knames, kKernelEntriesSci21);
+ }
+ break;
-void Kernel::setKernelNamesSci21(GameFeatures *features) {
- // Some SCI games use a modified SCI2 kernel table instead of the
- // SCI2.1 kernel table. We detect which version to use based on
- // how kDoSound is called from Sound::play().
- // Known games that use this:
- // GK2 demo
- // KQ7 1.4
- // PQ4 SWAT demo
- // LSL6
- // PQ4CD
- // QFG4CD
-
- // This is interesting because they all have the same interpreter
- // version (2.100.002), yet they would not be compatible with other
- // games of the same interpreter.
-
- if (getSciVersion() != SCI_VERSION_3 && features->detectSci21KernelType() == SCI_VERSION_2) {
- _kernelNames = Common::StringArray(sci2_default_knames, kKernelEntriesGk2Demo);
- // OnMe is IsOnMe here, but they should be compatible
- _kernelNames[0x23] = "Robot"; // Graph in SCI2
- _kernelNames[0x2e] = "Priority"; // DisposeTextBitmap in SCI2
- } else if (getSciVersion() != SCI_VERSION_3) {
- _kernelNames = Common::StringArray(sci21_default_knames, kKernelEntriesSci21);
- } else if (getSciVersion() == SCI_VERSION_3) {
+ case SCI_VERSION_3:
_kernelNames = Common::StringArray(sci21_default_knames, kKernelEntriesSci3);
- }
-}
-#endif
-
-void Kernel::loadKernelNames(GameFeatures *features) {
- _kernelNames.clear();
+ // In SCI3, some kernel functions have been removed, and others have been added
+ _kernelNames[0x18] = "Dummy"; // AddMagnify in SCI2.1
+ _kernelNames[0x19] = "Dummy"; // DeleteMagnify in SCI2.1
+ _kernelNames[0x30] = "Dummy"; // SetScroll in SCI2.1
+ _kernelNames[0x39] = "Dummy"; // ShowMovie in SCI2.1
+ _kernelNames[0x4c] = "Dummy"; // ScrollWindow in SCI2.1
+ _kernelNames[0x56] = "Dummy"; // VibrateMouse in SCI2.1 (only used in QFG4 floppy)
+ _kernelNames[0x64] = "Dummy"; // AvoidPath in SCI2.1
+ _kernelNames[0x66] = "Dummy"; // MergePoly in SCI2.1
+ _kernelNames[0x8d] = "MessageBox"; // Dummy in SCI2.1
+ _kernelNames[0x9b] = "Minimize"; // Dummy in SCI2.1
-#ifdef ENABLE_SCI32
- if (getSciVersion() >= SCI_VERSION_2_1)
- setKernelNamesSci21(features);
- else if (getSciVersion() == SCI_VERSION_2)
- setKernelNamesSci2();
- else
+ break;
#endif
- setDefaultKernelNames(features);
+
+ default:
+ // Use default table for the other versions
+ break;
+ }
mapFunctions();
}
diff --git a/engines/sci/engine/kernel.h b/engines/sci/engine/kernel.h
index 677b790f93..f985a69ebc 100644
--- a/engines/sci/engine/kernel.h
+++ b/engines/sci/engine/kernel.h
@@ -224,23 +224,6 @@ public:
private:
/**
- * Sets the default kernel function names, based on the SCI version used.
- */
- void setDefaultKernelNames(GameFeatures *features);
-
-#ifdef ENABLE_SCI32
- /**
- * Sets the default kernel function names to the SCI2 kernel functions.
- */
- void setKernelNamesSci2();
-
- /**
- * Sets the default kernel function names to the SCI2.1 kernel functions.
- */
- void setKernelNamesSci21(GameFeatures *features);
-#endif
-
- /**
* Loads the kernel selector names.
*/
void loadSelectorNames();
@@ -429,6 +412,7 @@ reg_t kListAt(EngineState *s, int argc, reg_t *argv);
reg_t kString(EngineState *s, int argc, reg_t *argv);
reg_t kMulDiv(EngineState *s, int argc, reg_t *argv);
reg_t kCantBeHere32(EngineState *s, int argc, reg_t *argv);
+reg_t kRemapColors32(EngineState *s, int argc, reg_t *argv);
// "Screen items" in SCI32 are views
reg_t kAddScreenItem(EngineState *s, int argc, reg_t *argv);
reg_t kUpdateScreenItem(EngineState *s, int argc, reg_t *argv);
@@ -453,6 +437,8 @@ reg_t kObjectIntersect(EngineState *s, int argc, reg_t *argv);
reg_t kEditText(EngineState *s, int argc, reg_t *argv);
reg_t kMakeSaveCatName(EngineState *s, int argc, reg_t *argv);
reg_t kMakeSaveFileName(EngineState *s, int argc, reg_t *argv);
+reg_t kSetScroll(EngineState *s, int argc, reg_t *argv);
+reg_t kPalCycle(EngineState *s, int argc, reg_t *argv);
// SCI2.1 Kernel Functions
reg_t kText(EngineState *s, int argc, reg_t *argv);
@@ -556,6 +542,7 @@ reg_t kFileIOWriteByte(EngineState *s, int argc, reg_t *argv);
reg_t kFileIOReadWord(EngineState *s, int argc, reg_t *argv);
reg_t kFileIOWriteWord(EngineState *s, int argc, reg_t *argv);
reg_t kFileIOCreateSaveSlot(EngineState *s, int argc, reg_t *argv);
+reg_t kFileIOIsValidDirectory(EngineState *s, int argc, reg_t *argv);
#endif
//@}
diff --git a/engines/sci/engine/kernel_tables.h b/engines/sci/engine/kernel_tables.h
index 6965a5da45..f5f46285be 100644
--- a/engines/sci/engine/kernel_tables.h
+++ b/engines/sci/engine/kernel_tables.h
@@ -240,7 +240,7 @@ static const SciKernelMapSubEntry kFileIO_subops[] = {
{ SIG_SCI32, 16, MAP_CALL(FileIOWriteWord), "ii", NULL },
{ SIG_SCI32, 17, MAP_CALL(FileIOCreateSaveSlot), "ir", NULL },
{ SIG_SCI32, 18, MAP_EMPTY(FileIOChangeDirectory), "r", NULL }, // for SQ6, when changing the savegame directory in the save/load dialog
- { SIG_SCI32, 19, MAP_CALL(Stub), "r", NULL }, // for Torin / Torin demo
+ { SIG_SCI32, 19, MAP_CALL(FileIOIsValidDirectory), "r", NULL }, // for Torin / Torin demo
#endif
SCI_SUBOPENTRY_TERMINATOR
};
@@ -248,7 +248,7 @@ static const SciKernelMapSubEntry kFileIO_subops[] = {
#ifdef ENABLE_SCI32
static const SciKernelMapSubEntry kSave_subops[] = {
- { SIG_SCI32, 0, MAP_CALL(SaveGame), "[r0]i[r0](r)", NULL },
+ { SIG_SCI32, 0, MAP_CALL(SaveGame), "[r0]i[r0](r0)", NULL },
{ SIG_SCI32, 1, MAP_CALL(RestoreGame), "[r0]i[r0]", NULL },
{ SIG_SCI32, 2, MAP_CALL(GetSaveDir), "(r*)", NULL },
{ SIG_SCI32, 3, MAP_CALL(CheckSaveGame), ".*", NULL },
@@ -419,7 +419,10 @@ static SciKernelMapEntry s_kernelMap[] = {
{ MAP_CALL(PriCoord), SIG_EVERYWHERE, "i", NULL, NULL },
{ MAP_CALL(Random), SIG_EVERYWHERE, "i(i)(i)", NULL, NULL },
{ MAP_CALL(ReadNumber), SIG_EVERYWHERE, "r", NULL, NULL },
- { MAP_CALL(RemapColors), SIG_EVERYWHERE, "i(i)(i)(i)(i)(i)", NULL, NULL },
+ { MAP_CALL(RemapColors), SIG_SCI11, SIGFOR_ALL, "i(i)(i)(i)(i)", NULL, NULL },
+#ifdef ENABLE_SCI32
+ { "RemapColors", kRemapColors32, SIG_SCI32, SIGFOR_ALL, "i(i)(i)(i)(i)(i)", NULL, NULL },
+#endif
{ MAP_CALL(ResCheck), SIG_EVERYWHERE, "ii(iiii)", NULL, NULL },
{ MAP_CALL(RespondsTo), SIG_EVERYWHERE, ".i", NULL, NULL },
{ MAP_CALL(RestartGame), SIG_EVERYWHERE, "", NULL, NULL },
@@ -517,11 +520,8 @@ static SciKernelMapEntry s_kernelMap[] = {
{ MAP_CALL(EditText), SIG_EVERYWHERE, "o", NULL, NULL },
{ MAP_CALL(MakeSaveCatName), SIG_EVERYWHERE, "rr", NULL, NULL },
{ MAP_CALL(MakeSaveFileName), SIG_EVERYWHERE, "rri", NULL, NULL },
-
- // SCI2 unmapped functions - TODO!
-
- // SetScroll - called by script 64909, Styler::doit()
- // PalCycle - called by Game::newRoom. Related to RemapColors.
+ { MAP_CALL(SetScroll), SIG_EVERYWHERE, "oiiiii(i)", NULL, NULL },
+ { MAP_CALL(PalCycle), SIG_EVERYWHERE, "i(.*)", NULL, NULL },
// SCI2 Empty functions
@@ -561,6 +561,11 @@ static SciKernelMapEntry s_kernelMap[] = {
{ MAP_DUMMY(InputText), SIG_EVERYWHERE, "(.*)", NULL, NULL },
{ MAP_DUMMY(TextWidth), SIG_EVERYWHERE, "(.*)", NULL, NULL },
{ MAP_DUMMY(PointSize), SIG_EVERYWHERE, "(.*)", NULL, NULL },
+ // SetScroll is called by script 64909, Styler::doit(), but it doesn't seem to
+ // be used at all (plus, it was then changed to a dummy function in SCI3).
+ // Since this is most likely unused, and we got no test case, error out when
+ // it is called in order to find an actual call to it.
+ { MAP_DUMMY(SetScroll), SIG_EVERYWHERE, "(.*)", NULL, NULL },
// SCI2.1 Kernel Functions
{ MAP_CALL(CD), SIG_EVERYWHERE, "(.*)", NULL, NULL },
@@ -583,8 +588,8 @@ static SciKernelMapEntry s_kernelMap[] = {
{ MAP_CALL(Font), SIG_EVERYWHERE, "i(.*)", NULL, NULL },
{ MAP_CALL(Bitmap), SIG_EVERYWHERE, "(.*)", NULL, NULL },
{ MAP_CALL(AddLine), SIG_EVERYWHERE, "oiiiiiiiii", NULL, NULL },
- { MAP_CALL(UpdateLine), SIG_EVERYWHERE, "roiiiiiiiii", NULL, NULL },
- { MAP_CALL(DeleteLine), SIG_EVERYWHERE, "ro", NULL, NULL },
+ { MAP_CALL(UpdateLine), SIG_EVERYWHERE, "[r0]oiiiiiiiii", NULL, NULL },
+ { MAP_CALL(DeleteLine), SIG_EVERYWHERE, "[r0]o", NULL, NULL },
// SCI2.1 Empty Functions
@@ -629,11 +634,14 @@ static SciKernelMapEntry s_kernelMap[] = {
// SCI2.1 unmapped functions - TODO!
+ // SetHotRectangles - used by Phantasmagoria 1, script 64981 (used in the chase scene)
+ // <lskovlun> The idea, if I understand correctly, is that the engine generates events
+ // of a special HotRect type continuously when the mouse is on that rectangle
+
// MovePlaneItems - used by SQ6 to scroll through the inventory via the up/down buttons
// SetPalStyleRange - 2 integer parameters, start and end. All styles from start-end
// (inclusive) are set to 0
// MorphOn - used by SQ6, script 900, the datacorder reprogramming puzzle (from room 270)
- // SetHotRectangles - used by Phantasmagoria 1
// SCI3 Kernel Functions
{ MAP_CALL(PlayDuck), SIG_EVERYWHERE, "(.*)", NULL, NULL },
@@ -828,7 +836,7 @@ static const char *const sci2_default_knames[] = {
/*0x20*/ "AddMagnify",
/*0x21*/ "DeleteMagnify",
/*0x22*/ "IsHiRes",
- /*0x23*/ "Graph",
+ /*0x23*/ "Graph", // Robot in early SCI2.1 games with a SCI2 kernel table
/*0x24*/ "InvertRect", // only in SCI2, not used in any SCI2 game
/*0x25*/ "TextSize",
/*0x26*/ "Message",
@@ -839,7 +847,7 @@ static const char *const sci2_default_knames[] = {
/*0x2b*/ "EditText",
/*0x2c*/ "InputText", // unused function
/*0x2d*/ "CreateTextBitmap",
- /*0x2e*/ "DisposeTextBitmap",
+ /*0x2e*/ "DisposeTextBitmap", // Priority in early SCI2.1 games with a SCI2 kernel table
/*0x2f*/ "GetEvent",
/*0x30*/ "GlobalToLocal",
/*0x31*/ "LocalToGlobal",
@@ -1099,7 +1107,7 @@ static const char *const sci21_default_knames[] = {
/*0x8a*/ "LoadChunk",
/*0x8b*/ "SetPalStyleRange",
/*0x8c*/ "AddPicAt",
- /*0x8d*/ "MessageBox", // SCI3, was Dummy in SCI2.1
+ /*0x8d*/ "Dummy", // MessageBox in SCI3
/*0x8e*/ "NewRoom", // debug function
/*0x8f*/ "Dummy",
/*0x90*/ "Priority",
@@ -1113,7 +1121,7 @@ static const char *const sci21_default_knames[] = {
/*0x98*/ "GetWindowsOption", // Windows only
/*0x99*/ "WinDLL", // Windows only
/*0x9a*/ "Dummy",
- /*0x9b*/ "Minimize", // SCI3, was Dummy in SCI2.1
+ /*0x9b*/ "Dummy", // Minimize in SCI3
/*0x9c*/ "DeletePic",
// == SCI3 only ===============
/*0x9d*/ "Dummy",
@@ -1127,57 +1135,73 @@ static const char *const sci21_default_knames[] = {
// Base set of opcode formats. They're copied and adjusted slightly in
// script_adjust_opcode_format depending on SCI version.
static const opcode_format g_base_opcode_formats[128][4] = {
- /*00*/
+ // 00 - 03 / bnot, add, sub, mul
{Script_None}, {Script_None}, {Script_None}, {Script_None},
- /*04*/
+ // 04 - 07 / div, mod, shr, shl
{Script_None}, {Script_None}, {Script_None}, {Script_None},
- /*08*/
+ // 08 - 0B / xor, and, or, neg
{Script_None}, {Script_None}, {Script_None}, {Script_None},
- /*0C*/
+ // 0C - 0F / not, eq, ne, gt
{Script_None}, {Script_None}, {Script_None}, {Script_None},
- /*10*/
+ // 10 - 13 / ge, lt, le, ugt
{Script_None}, {Script_None}, {Script_None}, {Script_None},
- /*14*/
+ // 14 - 17 / uge, ult, ule, bt
{Script_None}, {Script_None}, {Script_None}, {Script_SRelative},
- /*18*/
+ // 18 - 1B / bnt, jmp, ldi, push
{Script_SRelative}, {Script_SRelative}, {Script_SVariable}, {Script_None},
- /*1C*/
+ // 1C - 1F / pushi, toss, dup, link
{Script_SVariable}, {Script_None}, {Script_None}, {Script_Variable},
- /*20*/
+ // 20 - 23 / call, callk, callb, calle
{Script_SRelative, Script_Byte}, {Script_Variable, Script_Byte}, {Script_Variable, Script_Byte}, {Script_Variable, Script_SVariable, Script_Byte},
- /*24 (24=ret)*/
+ // 24 - 27 / ret, send, dummy, dummy
{Script_End}, {Script_Byte}, {Script_Invalid}, {Script_Invalid},
- /*28*/
+ // 28 - 2B / class, dummy, self, super
{Script_Variable}, {Script_Invalid}, {Script_Byte}, {Script_Variable, Script_Byte},
- /*2C*/
+ // 2C - 2F / rest, lea, selfID, dummy
{Script_SVariable}, {Script_SVariable, Script_Variable}, {Script_None}, {Script_Invalid},
- /*30*/
+ // 30 - 33 / pprev, pToa, aTop, pTos
{Script_None}, {Script_Property}, {Script_Property}, {Script_Property},
- /*34*/
+ // 34 - 37 / sTop, ipToa, dpToa, ipTos
{Script_Property}, {Script_Property}, {Script_Property}, {Script_Property},
- /*38*/
+ // 38 - 3B / dpTos, lofsa, lofss, push0
{Script_Property}, {Script_SRelative}, {Script_SRelative}, {Script_None},
- /*3C*/
+ // 3C - 3F / push1, push2, pushSelf, line
{Script_None}, {Script_None}, {Script_None}, {Script_Word},
- /*40-4F*/
+ // ------------------------------------------------------------------------
+ // 40 - 43 / lag, lal, lat, lap
{Script_Global}, {Script_Local}, {Script_Temp}, {Script_Param},
+ // 44 - 47 / lsg, lsl, lst, lsp
{Script_Global}, {Script_Local}, {Script_Temp}, {Script_Param},
+ // 48 - 4B / lagi, lali, lati, lapi
{Script_Global}, {Script_Local}, {Script_Temp}, {Script_Param},
+ // 4C - 4F / lsgi, lsli, lsti, lspi
{Script_Global}, {Script_Local}, {Script_Temp}, {Script_Param},
- /*50-5F*/
+ // ------------------------------------------------------------------------
+ // 50 - 53 / sag, sal, sat, sap
{Script_Global}, {Script_Local}, {Script_Temp}, {Script_Param},
+ // 54 - 57 / ssg, ssl, sst, ssp
{Script_Global}, {Script_Local}, {Script_Temp}, {Script_Param},
+ // 58 - 5B / sagi, sali, sati, sapi
{Script_Global}, {Script_Local}, {Script_Temp}, {Script_Param},
+ // 5C - 5F / ssgi, ssli, ssti, sspi
{Script_Global}, {Script_Local}, {Script_Temp}, {Script_Param},
- /*60-6F*/
+ // ------------------------------------------------------------------------
+ // 60 - 63 / plusag, plusal, plusat, plusap
{Script_Global}, {Script_Local}, {Script_Temp}, {Script_Param},
+ // 64 - 67 / plussg, plussl, plusst, plussp
{Script_Global}, {Script_Local}, {Script_Temp}, {Script_Param},
+ // 68 - 6B / plusagi, plusali, plusati, plusapi
{Script_Global}, {Script_Local}, {Script_Temp}, {Script_Param},
+ // 6C - 6F / plussgi, plussli, plussti, plusspi
{Script_Global}, {Script_Local}, {Script_Temp}, {Script_Param},
- /*70-7F*/
+ // ------------------------------------------------------------------------
+ // 70 - 73 / minusag, minusal, minusat, minusap
{Script_Global}, {Script_Local}, {Script_Temp}, {Script_Param},
+ // 74 - 77 / minussg, minussl, minusst, minussp
{Script_Global}, {Script_Local}, {Script_Temp}, {Script_Param},
+ // 78 - 7B / minusagi, minusali, minusati, minusapi
{Script_Global}, {Script_Local}, {Script_Temp}, {Script_Param},
+ // 7C - 7F / minussgi, minussli, minussti, minusspi
{Script_Global}, {Script_Local}, {Script_Temp}, {Script_Param}
};
#undef END
diff --git a/engines/sci/engine/kfile.cpp b/engines/sci/engine/kfile.cpp
index a21e19802d..f7cc4f44b5 100644
--- a/engines/sci/engine/kfile.cpp
+++ b/engines/sci/engine/kfile.cpp
@@ -197,8 +197,15 @@ reg_t kCD(EngineState *s, int argc, reg_t *argv) {
// TODO: Stub
switch (argv[0].toUint16()) {
case 0:
- // Return whether the contents of disc argv[1] is available.
- return TRUE_REG;
+ if (argc == 1) {
+ // Check if a disc is in the drive
+ return TRUE_REG;
+ } else {
+ // Check if the specified disc is in the drive
+ // and return the current disc number. We just
+ // return the requested disc number.
+ return argv[1];
+ }
case 1:
// Return the current CD number
return make_reg(0, 1);
@@ -688,6 +695,13 @@ reg_t kFileIOCreateSaveSlot(EngineState *s, int argc, reg_t *argv) {
return TRUE_REG; // slot creation was successful
}
+reg_t kFileIOIsValidDirectory(EngineState *s, int argc, reg_t *argv) {
+ // Used in Torin's Passage and LSL7 to determine if the directory passed as
+ // a parameter (usually the save directory) is valid. We always return true
+ // here.
+ return TRUE_REG;
+}
+
#endif
// ---- Save operations -------------------------------------------------------
@@ -1002,7 +1016,7 @@ reg_t kAutoSave(EngineState *s, int argc, reg_t *argv) {
// the elapsed time from the timer object)
// This function has to return something other than 0 to proceed
- return s->r_acc;
+ return TRUE_REG;
}
#endif
diff --git a/engines/sci/engine/kgraphics.cpp b/engines/sci/engine/kgraphics.cpp
index ec8e0dbf1b..da377319c0 100644
--- a/engines/sci/engine/kgraphics.cpp
+++ b/engines/sci/engine/kgraphics.cpp
@@ -950,8 +950,9 @@ reg_t kDrawControl(EngineState *s, int argc, reg_t *argv) {
}
}
if (objName == "savedHeros") {
- // Import of QfG character files dialog is shown
- // display additional popup information before letting user use it
+ // Import of QfG character files dialog is shown.
+ // Display additional popup information before letting user use it.
+ // For the SCI32 version of this, check kernelAddPlane().
reg_t changeDirButton = s->_segMan->findObjectByName("changeDirItem");
if (!changeDirButton.isNull()) {
// check if checkDirButton is still enabled, in that case we are called the first time during that room
@@ -964,6 +965,8 @@ reg_t kDrawControl(EngineState *s, int argc, reg_t *argv) {
"for Quest for Glory 2. Example: 'qfg2-thief.sav'.");
}
}
+
+ // For the SCI32 version of this, check kListAt().
s->_chosenQfGImportItem = readSelectorValue(s->_segMan, controlObject, SELECTOR(mark));
}
@@ -1218,73 +1221,27 @@ reg_t kShow(EngineState *s, int argc, reg_t *argv) {
return s->r_acc;
}
+// Early variant of the SCI32 kRemapColors kernel function, used in the demo of QFG4
reg_t kRemapColors(EngineState *s, int argc, reg_t *argv) {
uint16 operation = argv[0].toUint16();
switch (operation) {
- case 0: { // Set remapping to base. 0 turns remapping off.
- int16 base = (argc >= 2) ? argv[1].toSint16() : 0;
- if (base != 0) // 0 is the default behavior when changing rooms in GK1, thus silencing the warning
- warning("kRemapColors: Set remapping to base %d", base);
- }
- break;
- case 1: { // unknown
- // The demo of QFG4 calls this with 1+3 parameters, thus there are differences here
- //int16 unk1 = argv[1].toSint16();
- //int16 unk2 = argv[2].toSint16();
- //int16 unk3 = argv[3].toSint16();
- //uint16 unk4 = argv[4].toUint16();
- //uint16 unk5 = (argc >= 6) ? argv[5].toUint16() : 0;
- kStub(s, argc, argv);
- }
- break;
- case 2: { // remap by percent
- // This adjusts the alpha value of a specific color, and it operates on
- // an RGBA palette. Since we're operating on an RGB palette, we just
- // modify the color intensity instead
- // TODO: From what I understand, palette remapping should be placed
- // separately, so that it can be reset by case 0 above. Thus, we
- // should adjust the functionality of the Palette class accordingly.
- int16 color = argv[1].toSint16();
- if (color >= 10)
- color -= 10;
- uint16 percent = argv[2].toUint16(); // 0 - 100
- if (argc >= 4)
- warning("RemapByPercent called with 4 parameters, unknown parameter is %d", argv[3].toUint16());
- warning("kRemapColors: RemapByPercent color %d by %d percent", color, percent);
- // TODO: It's not correct to set intensity here
- //g_sci->_gfxPalette->kernelSetIntensity(color, 255, percent, false);
- }
- break;
- case 3: { // remap to gray
- // NOTE: This adjusts the alpha value of a specific color, and it operates on
- // an RGBA palette
- int16 color = argv[1].toSint16(); // this is subtracted from a maximum color value, and can be offset by 10
- int16 percent = argv[2].toSint16(); // 0 - 100
- uint16 unk3 = (argc >= 4) ? argv[3].toUint16() : 0;
- warning("kRemapColors: RemapToGray color %d by %d percent (unk3 = %d)", color, percent, unk3);
+ case 0: { // remap by percent
+ uint16 percent = argv[1].toUint16();
+ g_sci->_gfxPalette->resetRemapping();
+ g_sci->_gfxPalette->setRemappingPercent(254, percent);
}
break;
- case 4: { // unknown
- //int16 unk1 = argv[1].toSint16();
- //uint16 unk2 = argv[2].toUint16();
- //uint16 unk3 = argv[3].toUint16();
- //uint16 unk4 = (argc >= 5) ? argv[4].toUint16() : 0;
- kStub(s, argc, argv);
+ case 1: { // remap by range
+ uint16 from = argv[1].toUint16();
+ uint16 to = argv[2].toUint16();
+ uint16 base = argv[3].toUint16();
+ g_sci->_gfxPalette->resetRemapping();
+ g_sci->_gfxPalette->setRemappingRange(254, from, to, base);
}
break;
- case 5: { // set color intensity
- // TODO: This isn't right, it should be setting a mapping table instead.
- // For PQ4, we can emulate this with kernelSetIntensity(). In QFG4, this
- // won't do.
- //int16 mapping = argv[1].toSint16();
- uint16 intensity = argv[2].toUint16();
- // HACK for PQ4
- if (g_sci->getGameId() == GID_PQ4)
- g_sci->_gfxPalette->kernelSetIntensity(0, 255, intensity, true);
-
- kStub(s, argc, argv);
- }
+ case 2: // turn remapping off (unused)
+ error("Unused subop kRemapColors(2) has been called");
break;
default:
break;
diff --git a/engines/sci/engine/kgraphics32.cpp b/engines/sci/engine/kgraphics32.cpp
index 413ad1ecb1..685b3c0bd3 100644
--- a/engines/sci/engine/kgraphics32.cpp
+++ b/engines/sci/engine/kgraphics32.cpp
@@ -39,6 +39,7 @@
#include "sci/graphics/cache.h"
#include "sci/graphics/compare.h"
#include "sci/graphics/controls16.h"
+#include "sci/graphics/coordadjuster.h"
#include "sci/graphics/cursor.h"
#include "sci/graphics/palette.h"
#include "sci/graphics/paint16.h"
@@ -171,8 +172,13 @@ reg_t kCreateTextBitmap(EngineState *s, int argc, reg_t *argv) {
debugC(kDebugLevelStrings, "kCreateTextBitmap case 0 (%04x:%04x, %04x:%04x, %04x:%04x)",
PRINT_REG(argv[1]), PRINT_REG(argv[2]), PRINT_REG(argv[3]));
debugC(kDebugLevelStrings, "%s", text.c_str());
- uint16 maxWidth = argv[1].toUint16(); // nsRight - nsLeft + 1
- uint16 maxHeight = argv[2].toUint16(); // nsBottom - nsTop + 1
+ int16 maxWidth = argv[1].toUint16();
+ int16 maxHeight = argv[2].toUint16();
+ g_sci->_gfxCoordAdjuster->fromScriptToDisplay(maxHeight, maxWidth);
+ // These values can be larger than the screen in the SQ6 demo, room 100
+ // TODO: Find out why. For now, don't show any text in that room.
+ if (g_sci->getGameId() == GID_SQ6 && g_sci->isDemo() && s->currentRoomNumber() == 100)
+ return NULL_REG;
return g_sci->_gfxText32->createTextBitmap(object, maxWidth, maxHeight);
}
case 1: {
@@ -197,18 +203,6 @@ reg_t kDisposeTextBitmap(EngineState *s, int argc, reg_t *argv) {
return s->r_acc;
}
-reg_t kGetWindowsOption(EngineState *s, int argc, reg_t *argv) {
- uint16 windowsOption = argv[0].toUint16();
- switch (windowsOption) {
- case 0:
- // Title bar on/off in Phantasmagoria, we return 0 (off)
- return NULL_REG;
- default:
- warning("GetWindowsOption: Unknown option %d", windowsOption);
- return NULL_REG;
- }
-}
-
reg_t kWinHelp(EngineState *s, int argc, reg_t *argv) {
switch (argv[0].toUint16()) {
case 1:
@@ -236,12 +230,12 @@ reg_t kSetShowStyle(EngineState *s, int argc, reg_t *argv) {
// tables inside graphics/transitions.cpp
uint16 showStyle = argv[0].toUint16(); // 0 - 15
reg_t planeObj = argv[1]; // the affected plane
- //uint16 seconds = argv[2].toUint16(); // seconds that the transition lasts
- //uint16 backColor = argv[3].toUint16(); // target back color(?). When fading out, it's 0x0000. When fading in, it's 0xffff
- //int16 priority = argv[4].toSint16(); // always 0xc8 (200) when fading in/out
- //uint16 animate = argv[5].toUint16(); // boolean, animate or not while the transition lasts
- //uint16 refFrame = argv[6].toUint16(); // refFrame, always 0 when fading in/out
-#if 0
+ Common::String planeObjName = s->_segMan->getObjectName(planeObj);
+ uint16 seconds = argv[2].toUint16(); // seconds that the transition lasts
+ uint16 backColor = argv[3].toUint16(); // target back color(?). When fading out, it's 0x0000. When fading in, it's 0xffff
+ int16 priority = argv[4].toSint16(); // always 0xc8 (200) when fading in/out
+ uint16 animate = argv[5].toUint16(); // boolean, animate or not while the transition lasts
+ uint16 refFrame = argv[6].toUint16(); // refFrame, always 0 when fading in/out
int16 divisions;
// If the game has the pFadeArray selector, another parameter is used here,
@@ -253,7 +247,7 @@ reg_t kSetShowStyle(EngineState *s, int argc, reg_t *argv) {
} else {
divisions = (argc >= 8) ? argv[7].toSint16() : -1; // divisions (transition steps?)
}
-#endif
+
if (showStyle > 15) {
warning("kSetShowStyle: Illegal style %d for plane %04x:%04x", showStyle, PRINT_REG(planeObj));
return s->r_acc;
@@ -269,18 +263,29 @@ reg_t kSetShowStyle(EngineState *s, int argc, reg_t *argv) {
// TODO: Check if the plane is in the list of planes to draw
+ Common::String effectName = "unknown";
+
switch (showStyle) {
- //case 0: // no transition, perhaps? (like in the previous SCI versions)
+ case 0: // no transition / show
+ effectName = "show";
+ break;
case 13: // fade out
+ effectName = "fade out";
// TODO
+ break;
case 14: // fade in
+ effectName = "fade in";
// TODO
+ break;
default:
- // TODO: This is all a stub/skeleton, thus we're invoking kStub() for now
- kStub(s, argc, argv);
+ // TODO
break;
}
+ warning("kSetShowStyle: effect %d (%s) - plane: %04x:%04x (%s), sec: %d, "
+ "back: %d, prio: %d, animate: %d, ref frame: %d, divisions: %d",
+ showStyle, effectName.c_str(), PRINT_REG(planeObj), planeObjName.c_str(),
+ seconds, backColor, priority, animate, refFrame, divisions);
return s->r_acc;
}
@@ -364,7 +369,8 @@ reg_t kScrollWindow(EngineState *s, int argc, reg_t *argv) {
case 10: // Where, called by ScrollableWindow::where
// TODO
// argv[2] is an unknown integer
- kStub(s, argc, argv);
+ // Silenced the warnings because of the high amount of console spam
+ //kStub(s, argc, argv);
break;
case 11: // Go, called by ScrollableWindow::scrollTo
// 2 extra parameters here
@@ -638,6 +644,166 @@ reg_t kDeleteLine(EngineState *s, int argc, reg_t *argv) {
return s->r_acc;
}
+reg_t kSetScroll(EngineState *s, int argc, reg_t *argv) {
+ // Called in the intro of LSL6 hires (room 110)
+ // The end effect of this is the same as the old screen scroll transition
+
+ // 7 parameters
+ reg_t planeObject = argv[0];
+ //int16 x = argv[1].toSint16();
+ //int16 y = argv[2].toSint16();
+ uint16 pictureId = argv[3].toUint16();
+ // param 4: int (0 in LSL6, probably scroll direction? The picture in LSL6 scrolls down)
+ // param 5: int (first call is 1, then the subsequent one is 0 in LSL6)
+ // param 6: optional int (0 in LSL6)
+
+ // Set the new picture directly for now
+ //writeSelectorValue(s->_segMan, planeObject, SELECTOR(left), x);
+ //writeSelectorValue(s->_segMan, planeObject, SELECTOR(top), y);
+ writeSelectorValue(s->_segMan, planeObject, SELECTOR(picture), pictureId);
+ // and update our draw list
+ g_sci->_gfxFrameout->kernelUpdatePlane(planeObject);
+
+ // TODO
+ return kStub(s, argc, argv);
+}
+
+reg_t kPalCycle(EngineState *s, int argc, reg_t *argv) {
+ // Examples: GK1 room 480 (Bayou ritual), LSL6 room 100 (title screen)
+
+ switch (argv[0].toUint16()) {
+ case 0: { // Palette animation initialization
+ // 3 or 4 extra params
+ // Case 1 sends fromColor and speed again, so we don't need them here.
+ // Only toColor is stored
+ //uint16 fromColor = argv[1].toUint16();
+ s->_palCycleToColor = argv[2].toUint16();
+ //uint16 speed = argv[3].toUint16();
+
+ // Invalidate the picture, so that the palette steps calls (case 1
+ // below) can update its palette without it being overwritten by the
+ // view/picture palettes.
+ g_sci->_gfxScreen->_picNotValid = 1;
+
+ // TODO: The fourth optional parameter is an unknown integer, and is 0 by default
+ if (argc == 5) {
+ // When this variant is used, picNotValid doesn't seem to be set
+ // (e.g. GK1 room 480). In this case, the animation step calls are
+ // not made, so perhaps this signifies the palette cycling steps
+ // to make.
+ // GK1 sets this to 6 (6 palette steps?)
+ g_sci->_gfxScreen->_picNotValid = 0;
+ }
+ kStub(s, argc, argv);
+ }
+ break;
+ case 1: { // Palette animation step
+ // This is the same as the old kPaletteAnimate call, with 1 set of colors.
+ // The end color is set up during initialization in case 0 above.
+
+ // 1 or 2 extra params
+ uint16 fromColor = argv[1].toUint16();
+ uint16 speed = (argc == 2) ? 1 : argv[2].toUint16();
+ // TODO: For some reason, this doesn't set the color correctly
+ // (e.g. LSL6 intro, room 100, Sierra logo)
+ if (g_sci->_gfxPalette->kernelAnimate(fromColor, s->_palCycleToColor, speed))
+ g_sci->_gfxPalette->kernelAnimateSet();
+ }
+ // No kStub() call here, as this gets called loads of times, like kPaletteAnimate
+ break;
+ // case 2 hasn't been encountered
+ // case 3 hasn't been encountered
+ case 4: // reset any palette cycling and make the picture valid again
+ // Gets called when changing rooms and after palette cycling animations finish
+ // 0 or 1 extra params
+ if (argc == 1) {
+ g_sci->_gfxScreen->_picNotValid = 0;
+ // TODO: This also seems to perform more steps
+ } else {
+ // The variant with the 1 extra param resets remapping to base
+ // TODO
+ }
+ kStub(s, argc, argv);
+ break;
+ default:
+ // TODO
+ kStub(s, argc, argv);
+ break;
+ }
+
+ return s->r_acc;
+}
+
+reg_t kRemapColors32(EngineState *s, int argc, reg_t *argv) {
+ uint16 operation = argv[0].toUint16();
+
+ switch (operation) {
+ case 0: { // turn remapping off
+ // WORKAROUND: Game scripts in QFG4 erroneously turn remapping off in room
+ // 140 (the character point allocation screen) and never turn it back on,
+ // even if it's clearly used in that screen.
+ if (g_sci->getGameId() == GID_QFG4 && s->currentRoomNumber() == 140)
+ return s->r_acc;
+
+ int16 base = (argc >= 2) ? argv[1].toSint16() : 0;
+ if (base > 0)
+ warning("kRemapColors(0) called with base %d", base);
+ g_sci->_gfxPalette->resetRemapping();
+ }
+ break;
+ case 1: { // remap by range
+ uint16 color = argv[1].toUint16();
+ uint16 from = argv[2].toUint16();
+ uint16 to = argv[3].toUint16();
+ uint16 base = argv[4].toUint16();
+ uint16 unk5 = (argc >= 6) ? argv[5].toUint16() : 0;
+ if (unk5 > 0)
+ warning("kRemapColors(1) called with 6 parameters, unknown parameter is %d", unk5);
+ g_sci->_gfxPalette->setRemappingRange(color, from, to, base);
+ }
+ break;
+ case 2: { // remap by percent
+ uint16 color = argv[1].toUint16();
+ uint16 percent = argv[2].toUint16(); // 0 - 100
+ if (argc >= 4)
+ warning("RemapByPercent called with 4 parameters, unknown parameter is %d", argv[3].toUint16());
+ g_sci->_gfxPalette->setRemappingPercent(color, percent);
+ }
+ break;
+ case 3: { // remap to gray
+ // Example call: QFG4 room 490 (Baba Yaga's hut) - params are color 253, 75% and 0
+ int16 color = argv[1].toSint16();
+ int16 percent = argv[2].toSint16(); // 0 - 100
+ uint16 unk3 = (argc >= 4) ? argv[3].toUint16() : 0;
+ warning("kRemapColors: RemapToGray color %d by %d percent (unk3 = %d)", color, percent, unk3);
+ // TODO
+ }
+ break;
+ case 4: { // remap to percent gray
+ //int16 unk1 = argv[1].toSint16();
+ //uint16 unk2 = argv[2].toUint16();
+ //uint16 unk3 = argv[3].toUint16();
+ //uint16 unk4 = (argc >= 5) ? argv[4].toUint16() : 0;
+ kStub(s, argc, argv);
+ }
+ break;
+ case 5: { // don't map to range
+ //int16 mapping = argv[1].toSint16();
+ uint16 intensity = argv[2].toUint16();
+ // HACK for PQ4
+ if (g_sci->getGameId() == GID_PQ4)
+ g_sci->_gfxPalette->kernelSetIntensity(0, 255, intensity, true);
+
+ kStub(s, argc, argv);
+ }
+ break;
+ default:
+ break;
+ }
+
+ return s->r_acc;
+}
+
#endif
} // End of namespace Sci
diff --git a/engines/sci/engine/klists.cpp b/engines/sci/engine/klists.cpp
index 15d18eb4bb..342fa95eda 100644
--- a/engines/sci/engine/klists.cpp
+++ b/engines/sci/engine/klists.cpp
@@ -506,6 +506,11 @@ reg_t kListAt(EngineState *s, int argc, reg_t *argv) {
curIndex++;
}
+ // Update the virtual file selected in the character import screen of QFG4.
+ // For the SCI0-SCI1.1 version of this, check kDrawControl().
+ if (g_sci->inQfGImportRoom() && !strcmp(s->_segMan->getObjectName(curObject), "SelectorDText"))
+ s->_chosenQfGImportItem = listIndex;
+
return curObject;
}
diff --git a/engines/sci/engine/kmath.cpp b/engines/sci/engine/kmath.cpp
index 7570856dff..a643fbe37a 100644
--- a/engines/sci/engine/kmath.cpp
+++ b/engines/sci/engine/kmath.cpp
@@ -77,7 +77,35 @@ reg_t kSqrt(EngineState *s, int argc, reg_t *argv) {
return make_reg(0, (int16) sqrt((float) ABS(argv[0].toSint16())));
}
+/**
+ * Returns the angle (in degrees) between the two points determined by (x1, y1)
+ * and (x2, y2). The angle ranges from 0 to 359 degrees.
+ * What this function does is pretty simple but apparently the original is not
+ * accurate.
+ */
uint16 kGetAngleWorker(int16 x1, int16 y1, int16 x2, int16 y2) {
+ // TODO: This has been implemented based on behavior observed with a test
+ // program created with SCI Studio. However, the return values have subtle
+ // differences from the original, which uses custom implementation of atan().
+ // The differences in the return values are the cause of bug #3540976
+ // and perhaps bug #3037267 as well.
+ // The results of this function match the expected results of SCI0, but not
+ // SCI1 (hence the bug in Longbow). We need to find the point in history
+ // when this function was changed.
+
+ // HACK: Return the expected value for Longbow, scene 150 (bug #3540976).
+ // This is a temporary solution, till the function returns the expected
+ // results.
+ if (g_sci->getGameId() == GID_LONGBOW && g_sci->getEngineState()->currentRoomNumber() == 150) {
+ if (x1 == 207 && y1 == 88 && x2 == 107 && y2 == 184)
+ return 226;
+ }
+
+#if 0
+ // A simpler atan2-based implementation
+ return (int16)(360 - atan2((double)(x1 - x2), (double)(y1 - y2)) * 57.2958) % 360;
+#endif
+
int16 xRel = x2 - x1;
int16 yRel = y1 - y2; // y-axis is mirrored.
int16 angle;
diff --git a/engines/sci/engine/kmisc.cpp b/engines/sci/engine/kmisc.cpp
index 12c830f622..8b7fc4ffec 100644
--- a/engines/sci/engine/kmisc.cpp
+++ b/engines/sci/engine/kmisc.cpp
@@ -419,6 +419,18 @@ reg_t kGetSierraProfileInt(EngineState *s, int argc, reg_t *argv) {
return argv[2];
}
+reg_t kGetWindowsOption(EngineState *s, int argc, reg_t *argv) {
+ uint16 windowsOption = argv[0].toUint16();
+ switch (windowsOption) {
+ case 0:
+ // Title bar on/off in Phantasmagoria, we return 0 (off)
+ return NULL_REG;
+ default:
+ warning("GetWindowsOption: Unknown option %d", windowsOption);
+ return NULL_REG;
+ }
+}
+
#endif
// kIconBar is really a subop of kMacPlatform for SCI1.1 Mac
diff --git a/engines/sci/engine/ksound.cpp b/engines/sci/engine/ksound.cpp
index b378b4d58b..0633267db4 100644
--- a/engines/sci/engine/ksound.cpp
+++ b/engines/sci/engine/ksound.cpp
@@ -140,12 +140,14 @@ reg_t kDoAudio(EngineState *s, int argc, reg_t *argv) {
((argv[3].toUint16() & 0xff) << 16) |
((argv[4].toUint16() & 0xff) << 8) |
(argv[5].toUint16() & 0xff);
- if (argc == 8) {
+ // Removed warning because of the high amount of console spam
+ /*if (argc == 8) {
+ // TODO: Handle the extra 2 SCI21 params
// argv[6] is always 1
// argv[7] is the contents of global 229 (0xE5)
warning("kDoAudio: Play called with SCI2.1 extra parameters: %04x:%04x and %04x:%04x",
PRINT_REG(argv[6]), PRINT_REG(argv[7]));
- }
+ }*/
} else {
warning("kDoAudio: Play called with an unknown number of parameters (%d)", argc);
return NULL_REG;
@@ -244,6 +246,11 @@ reg_t kDoAudio(EngineState *s, int argc, reg_t *argv) {
// Used in Pharkas whenever a speech sample starts (takes no params)
//warning("kDoAudio: Unhandled case 13, %d extra arguments passed", argc - 1);
break;
+ case 17:
+ // Seems to be some sort of audio sync, used in SQ6. Silenced the
+ // warning due to the high level of spam it produces. (takes no params)
+ //warning("kDoAudio: Unhandled case 17, %d extra arguments passed", argc - 1);
+ break;
default:
warning("kDoAudio: Unhandled case %d, %d extra arguments passed", argv[0].toUint16(), argc - 1);
}
diff --git a/engines/sci/engine/kvideo.cpp b/engines/sci/engine/kvideo.cpp
index 2456ba1100..cb2a763da9 100644
--- a/engines/sci/engine/kvideo.cpp
+++ b/engines/sci/engine/kvideo.cpp
@@ -90,7 +90,7 @@ void playVideo(Video::VideoDecoder *videoDecoder, VideoState videoState) {
EngineState *s = g_sci->getEngineState();
if (videoDecoder->hasDirtyPalette()) {
- byte *palette = (byte *)videoDecoder->getPalette() + s->_vmdPalStart * 3;
+ const byte *palette = videoDecoder->getPalette() + s->_vmdPalStart * 3;
g_system->getPaletteManager()->setPalette(palette, s->_vmdPalStart, s->_vmdPalEnd - s->_vmdPalStart);
}
@@ -108,7 +108,7 @@ void playVideo(Video::VideoDecoder *videoDecoder, VideoState videoState) {
}
if (videoDecoder->hasDirtyPalette()) {
- byte *palette = (byte *)videoDecoder->getPalette() + s->_vmdPalStart * 3;
+ const byte *palette = videoDecoder->getPalette() + s->_vmdPalStart * 3;
g_system->getPaletteManager()->setPalette(palette, s->_vmdPalStart, s->_vmdPalEnd - s->_vmdPalStart);
}
@@ -209,6 +209,8 @@ reg_t kShowMovie(EngineState *s, int argc, reg_t *argv) {
warning("Failed to open movie file %s", filename.c_str());
delete videoDecoder;
videoDecoder = 0;
+ } else {
+ s->_videoState.fileName = filename;
}
break;
}
diff --git a/engines/sci/engine/message.cpp b/engines/sci/engine/message.cpp
index cddd01e10c..a92d572d35 100644
--- a/engines/sci/engine/message.cpp
+++ b/engines/sci/engine/message.cpp
@@ -400,11 +400,21 @@ Common::String MessageState::processString(const char *s) {
void MessageState::outputString(reg_t buf, const Common::String &str) {
#ifdef ENABLE_SCI32
if (getSciVersion() >= SCI_VERSION_2) {
- SciString *sciString = _segMan->lookupString(buf);
- sciString->setSize(str.size() + 1);
- for (uint32 i = 0; i < str.size(); i++)
- sciString->setValue(i, str.c_str()[i]);
- sciString->setValue(str.size(), 0);
+ if (_segMan->getSegmentType(buf.getSegment()) == SEG_TYPE_STRING) {
+ SciString *sciString = _segMan->lookupString(buf);
+ sciString->setSize(str.size() + 1);
+ for (uint32 i = 0; i < str.size(); i++)
+ sciString->setValue(i, str.c_str()[i]);
+ sciString->setValue(str.size(), 0);
+ } else if (_segMan->getSegmentType(buf.getSegment()) == SEG_TYPE_ARRAY) {
+ // Happens in the intro of LSL6, we are asked to write the string
+ // into an array
+ SciArray<reg_t> *sciString = _segMan->lookupArray(buf);
+ sciString->setSize(str.size() + 1);
+ for (uint32 i = 0; i < str.size(); i++)
+ sciString->setValue(i, make_reg(0, str.c_str()[i]));
+ sciString->setValue(str.size(), NULL_REG);
+ }
} else {
#endif
SegmentRef buffer_r = _segMan->dereference(buf);
diff --git a/engines/sci/engine/script.cpp b/engines/sci/engine/script.cpp
index d4143dcceb..037f4ab700 100644
--- a/engines/sci/engine/script.cpp
+++ b/engines/sci/engine/script.cpp
@@ -422,16 +422,9 @@ uint32 Script::validateExportFunc(int pubfunct, bool relocSci3) {
}
}
- if (!offset) {
-#ifdef ENABLE_SCI32
- // WORKAROUNDS for invalid (empty) exports
- if (g_sci->getGameId() == GID_TORIN && _nr == 64036) {
- } else if (g_sci->getGameId() == GID_RAMA && _nr == 64908) {
- } else
-#endif
- error("Request for invalid exported function 0x%x of script %d", pubfunct, _nr);
- return NULL;
- }
+ // Note that it's perfectly normal to return a zero offset, especially in
+ // SCI1.1 and newer games. Examples include script 64036 in Torin's Passage,
+ // script 64908 in the demo of RAMA and script 1013 in KQ6 floppy.
if (offset >= _bufSize)
error("Invalid export function pointer");
diff --git a/engines/sci/engine/script_patches.cpp b/engines/sci/engine/script_patches.cpp
index 69eb377684..659c13b13e 100644
--- a/engines/sci/engine/script_patches.cpp
+++ b/engines/sci/engine/script_patches.cpp
@@ -978,7 +978,27 @@ const uint16 sq4CdPatchTextOptionsButton[] = {
PATCH_END
};
-// Patch 2: Add the ability to toggle among the three available options,
+// Patch 2: Adjust a check in babbleIcon::init, which handles the babble icon
+// (e.g. the two guys from Andromeda) shown when dying/quitting.
+// Fixes bug #3538418.
+const byte sq4CdSignatureBabbleIcon[] = {
+ 7,
+ 0x89, 0x5a, // lsg 5a
+ 0x35, 0x02, // ldi 02
+ 0x1a, // eq?
+ 0x31, 0x26, // bnt 26 [02a7]
+ 0
+};
+
+const uint16 sq4CdPatchBabbleIcon[] = {
+ 0x89, 0x5a, // lsg 5a
+ 0x35, 0x01, // ldi 01
+ 0x1a, // eq?
+ 0x2f, 0x26, // bt 26 [02a7]
+ PATCH_END
+};
+
+// Patch 3: Add the ability to toggle among the three available options,
// when the text options button is clicked: "Speech", "Text" and "Both".
// Refer to the patch above for additional details.
// iconTextSwitch::doit (called when the text options button is clicked)
@@ -1030,6 +1050,7 @@ const SciScriptSignature sq4Signatures[] = {
{ 298, "Floppy: endless flight", 1, PATCH_MAGICDWORD(0x67, 0x08, 0x63, 0x44), -3, sq4FloppySignatureEndlessFlight, sq4FloppyPatchEndlessFlight },
{ 298, "Floppy (German): endless flight", 1, PATCH_MAGICDWORD(0x67, 0x08, 0x63, 0x4c), -3, sq4FloppySignatureEndlessFlightGerman, sq4FloppyPatchEndlessFlight },
{ 818, "CD: Speech and subtitles option", 1, PATCH_MAGICDWORD(0x89, 0x5a, 0x3c, 0x35), 0, sq4CdSignatureTextOptions, sq4CdPatchTextOptions },
+ { 0, "CD: Babble icon speech and subtitles fix", 1, PATCH_MAGICDWORD(0x89, 0x5a, 0x35, 0x02), 0, sq4CdSignatureBabbleIcon, sq4CdPatchBabbleIcon },
{ 818, "CD: Speech and subtitles option button", 1, PATCH_MAGICDWORD(0x35, 0x01, 0xa1, 0x53), 0, sq4CdSignatureTextOptionsButton, sq4CdPatchTextOptionsButton },
SCI_SIGNATUREENTRY_TERMINATOR
};
diff --git a/engines/sci/engine/seg_manager.cpp b/engines/sci/engine/seg_manager.cpp
index a6c145979f..951fc7c363 100644
--- a/engines/sci/engine/seg_manager.cpp
+++ b/engines/sci/engine/seg_manager.cpp
@@ -143,16 +143,27 @@ Script *SegManager::allocateScript(int script_nr, SegmentId *segid) {
}
void SegManager::deallocate(SegmentId seg) {
- if (!check(seg))
- error("SegManager::deallocate(): invalid segment ID");
+ if (seg < 1 || (uint)seg >= _heap.size())
+ error("Attempt to deallocate an invalid segment ID");
SegmentObj *mobj = _heap[seg];
+ if (!mobj)
+ error("Attempt to deallocate an already freed segment");
if (mobj->getType() == SEG_TYPE_SCRIPT) {
Script *scr = (Script *)mobj;
_scriptSegMap.erase(scr->getScriptNumber());
- if (scr->getLocalsSegment())
- deallocate(scr->getLocalsSegment());
+ if (scr->getLocalsSegment()) {
+ // Check if the locals segment has already been deallocated.
+ // If the locals block has been stored in a segment with an ID
+ // smaller than the segment ID of the script itself, it will be
+ // already freed at this point. This can happen when scripts are
+ // uninstantiated and instantiated again: they retain their own
+ // segment ID, but are allocated a new locals segment, which can
+ // have an ID smaller than the segment of the script itself.
+ if (_heap[scr->getLocalsSegment()])
+ deallocate(scr->getLocalsSegment());
+ }
}
delete mobj;
@@ -307,21 +318,6 @@ reg_t SegManager::findObjectByName(const Common::String &name, int index) {
return result[index];
}
-// validate the seg
-// return:
-// false - invalid seg
-// true - valid seg
-bool SegManager::check(SegmentId seg) {
- if (seg < 1 || (uint)seg >= _heap.size()) {
- return false;
- }
- if (!_heap[seg]) {
- warning("SegManager: seg %x is removed from memory, but not removed from hash_map", seg);
- return false;
- }
- return true;
-}
-
// return the seg if script_id is valid and in the map, else 0
SegmentId SegManager::getScriptSegment(int script_id) const {
return _scriptSegMap.getVal(script_id, 0);
diff --git a/engines/sci/engine/seg_manager.h b/engines/sci/engine/seg_manager.h
index 356a1b04a7..074d3f6b0a 100644
--- a/engines/sci/engine/seg_manager.h
+++ b/engines/sci/engine/seg_manager.h
@@ -471,14 +471,6 @@ private:
void createClassTable();
SegmentId findFreeSegment() const;
-
- /**
- * Check segment validity
- * @param[in] seg The segment to validate
- * @return false if 'seg' is an invalid segment, true if
- * 'seg' is a valid segment
- */
- bool check(SegmentId seg);
};
} // End of namespace Sci
diff --git a/engines/sci/engine/state.cpp b/engines/sci/engine/state.cpp
index 94a3fe3ae5..0f0c8dcd66 100644
--- a/engines/sci/engine/state.cpp
+++ b/engines/sci/engine/state.cpp
@@ -122,8 +122,11 @@ void EngineState::reset(bool isRestoring) {
_videoState.reset();
_syncedAudioOptions = false;
+
_vmdPalStart = 0;
_vmdPalEnd = 256;
+
+ _palCycleToColor = 255;
}
void EngineState::speedThrottler(uint32 neededSleep) {
diff --git a/engines/sci/engine/state.h b/engines/sci/engine/state.h
index 9ae6299d83..81090876c7 100644
--- a/engines/sci/engine/state.h
+++ b/engines/sci/engine/state.h
@@ -199,6 +199,8 @@ public:
uint16 _vmdPalStart, _vmdPalEnd;
bool _syncedAudioOptions;
+ uint16 _palCycleToColor;
+
/**
* Resets the engine state.
*/
diff --git a/engines/sci/engine/vm.cpp b/engines/sci/engine/vm.cpp
index 5a2a39def2..3f43966976 100644
--- a/engines/sci/engine/vm.cpp
+++ b/engines/sci/engine/vm.cpp
@@ -1173,6 +1173,7 @@ void run_vm(EngineState *s) {
case op_line: // 0x3f (63)
// Debug opcode (line number)
+ //debug("Script %d, line %d", scr->getScriptNumber(), opparams[0]);
break;
case op_lag: // 0x40 (64)
diff --git a/engines/sci/engine/vm.h b/engines/sci/engine/vm.h
index a0fd6689df..8b38faa013 100644
--- a/engines/sci/engine/vm.h
+++ b/engines/sci/engine/vm.h
@@ -202,6 +202,7 @@ enum SciOpcodes {
op_push2 = 0x3d, // 061
op_pushSelf = 0x3e, // 062
op_line = 0x3f, // 063
+ //
op_lag = 0x40, // 064
op_lal = 0x41, // 065
op_lat = 0x42, // 066
@@ -218,6 +219,7 @@ enum SciOpcodes {
op_lsli = 0x4d, // 077
op_lsti = 0x4e, // 078
op_lspi = 0x4f, // 079
+ //
op_sag = 0x50, // 080
op_sal = 0x51, // 081
op_sat = 0x52, // 082
@@ -234,6 +236,7 @@ enum SciOpcodes {
op_ssli = 0x5d, // 093
op_ssti = 0x5e, // 094
op_sspi = 0x5f, // 095
+ //
op_plusag = 0x60, // 096
op_plusal = 0x61, // 097
op_plusat = 0x62, // 098
@@ -250,6 +253,7 @@ enum SciOpcodes {
op_plussli = 0x6d, // 109
op_plussti = 0x6e, // 110
op_plusspi = 0x6f, // 111
+ //
op_minusag = 0x70, // 112
op_minusal = 0x71, // 113
op_minusat = 0x72, // 114
diff --git a/engines/sci/engine/workarounds.cpp b/engines/sci/engine/workarounds.cpp
index ecb1e4c2d5..fea3aed9ae 100644
--- a/engines/sci/engine/workarounds.cpp
+++ b/engines/sci/engine/workarounds.cpp
@@ -40,6 +40,7 @@ const SciWorkaroundEntry arithmeticWorkarounds[] = {
{ GID_MOTHERGOOSE256, -1, 999, 0, "Event", "new", -1, 0, { WORKAROUND_FAKE, 0 } }, // op_and: constantly during the game (SCI1 version)
{ GID_MOTHERGOOSE256, -1, 4, 0, "rm004", "doit", -1, 0, { WORKAROUND_FAKE, 0 } }, // op_or: when going north and reaching the castle (rooms 4 and 37) - bug #3038228
{ GID_MOTHERGOOSEHIRES,90, 90, 0, "newGameButton", "select", -1, 0, { WORKAROUND_FAKE, 0 } }, // op_ge: MUMG Deluxe, when selecting "New Game" in the main menu. It tries to compare an integer with a list. Needs to return false for the game to continue.
+ { GID_PHANTASMAGORIA, 902, 0, 0, "", "export 7", -1, 0, { WORKAROUND_FAKE, 0 } }, // op_shr: when starting a chapter in Phantasmagoria
{ GID_QFG1VGA, 301, 928, 0, "Blink", "init", -1, 0, { WORKAROUND_FAKE, 0 } }, // op_div: when entering the inn, gets called with 1 parameter, but 2nd parameter is used for div which happens to be an object
{ GID_QFG2, 200, 200, 0, "astro", "messages", -1, 0, { WORKAROUND_FAKE, 0 } }, // op_lsi: when getting asked for your name by the astrologer bug #3039879
{ GID_GK1, 800,64992, 0, "Fwd", "doit", -1, 0, { WORKAROUND_FAKE, 1 } }, // op_gt: when Mosely finds Gabriel and Grace near the end of the game, compares the Grooper object with 7
@@ -162,10 +163,10 @@ const SciWorkaroundEntry uninitializedReadWorkarounds[] = {
{ GID_SQ1, -1, 703, 0, "", "export 1", -1, 0, { WORKAROUND_FAKE, 0 } }, // sub that's called from several objects while on sarien battle cruiser
{ GID_SQ1, -1, 703, 0, "firePulsar", "changeState", 0x18a, 0, { WORKAROUND_FAKE, 0 } }, // export 1, but called locally (when shooting at aliens)
{ GID_SQ4, -1, 398, 0, "showBox", "changeState", -1, 0, { WORKAROUND_FAKE, 0 } }, // CD: called when rummaging in Software Excess bargain bin
- { GID_SQ4, -1, 928, 0, "Narrator", "startText", -1, 1000, { WORKAROUND_FAKE, 1 } }, // CD: method returns this to the caller
+ { GID_SQ4, -1, 928, -1, "Narrator", "startText", -1, 1000, { WORKAROUND_FAKE, 1 } }, // CD: happens in the options dialog and in-game when speech and subtitles are used simultaneously
{ GID_SQ5, 201, 201, 0, "buttonPanel", "doVerb", -1, 0, { WORKAROUND_FAKE, 1 } }, // when looking at the orange or red button - bug #3038563
{ GID_SQ6, -1, 0, 0, "SQ6", "init", -1, 2, { WORKAROUND_FAKE, 0 } }, // Demo and full version: called when the game starts (demo: room 0, full: room 100)
- { GID_SQ6, 100, 64950, 0, "View", "handleEvent", -1, 0, { WORKAROUND_FAKE, 0 } }, // called when pressing "Start game" in the main menu
+ { GID_SQ6, -1, 64950, -1, "Feature", "handleEvent", -1, 0, { WORKAROUND_FAKE, 0 } }, // called when pressing "Start game" in the main menu, when entering the Orion's Belt bar (room 300), and perhaps other places
{ GID_SQ6, -1, 64964, 0, "DPath", "init", -1, 1, { WORKAROUND_FAKE, 0 } }, // during the game
{ GID_TORIN, -1, 64017, 0, "oFlags", "clear", -1, 0, { WORKAROUND_FAKE, 0 } }, // entering Torin's home in the French version
SCI_WORKAROUNDENTRY_TERMINATOR
@@ -397,6 +398,7 @@ const SciWorkaroundEntry kUnLoad_workarounds[] = {
{ GID_LSL6, 740, 740, 0, "showCartoon", "changeState", -1, 0, { WORKAROUND_IGNORE, 0 } }, // during ending, 4 additional parameters are passed by accident
{ GID_LSL6HIRES, 130, 130, 0, "recruitLarryScr", "changeState", -1, 0, { WORKAROUND_IGNORE, 0 } }, // during intro, a 3rd parameter is passed by accident
{ GID_SQ1, 43, 303, 0, "slotGuy", "dispose", -1, 0, { WORKAROUND_IGNORE, 0 } }, // when leaving ulence flats bar, parameter 1 is not passed - script error
+ { GID_QFG4, 770, 110, 0, "dreamer", "dispose", -1, 0, { WORKAROUND_IGNORE, 0 } }, // during the dream sequence, a 3rd parameter is passed by accident
SCI_WORKAROUNDENTRY_TERMINATOR
};
diff --git a/engines/sci/graphics/font.cpp b/engines/sci/graphics/font.cpp
index fcdd057509..30184cc091 100644
--- a/engines/sci/graphics/font.cpp
+++ b/engines/sci/graphics/font.cpp
@@ -54,7 +54,7 @@ GfxFontFromResource::GfxFontFromResource(ResourceManager *resMan, GfxScreen *scr
}
GfxFontFromResource::~GfxFontFromResource() {
- delete []_chars;
+ delete[] _chars;
_resMan->unlockResource(_resource);
}
diff --git a/engines/sci/graphics/frameout.cpp b/engines/sci/graphics/frameout.cpp
index 265a175e66..0098728e5d 100644
--- a/engines/sci/graphics/frameout.cpp
+++ b/engines/sci/graphics/frameout.cpp
@@ -117,27 +117,43 @@ void GfxFrameout::showCurrentScrollText() {
}
}
+extern void showScummVMDialog(const Common::String &message);
+
void GfxFrameout::kernelAddPlane(reg_t object) {
PlaneEntry newPlane;
if (_planes.empty()) {
// There has to be another way for sierra sci to do this or maybe script resolution is compiled into
// interpreter (TODO)
- uint16 tmpRunningWidth = readSelectorValue(_segMan, object, SELECTOR(resX));
- uint16 tmpRunningHeight = readSelectorValue(_segMan, object, SELECTOR(resY));
+ uint16 scriptWidth = readSelectorValue(_segMan, object, SELECTOR(resX));
+ uint16 scriptHeight = readSelectorValue(_segMan, object, SELECTOR(resY));
- // The above can be 0 in SCI3 (e.g. Phantasmagoria 2)
- if (tmpRunningWidth == 0 && tmpRunningHeight == 0) {
- tmpRunningWidth = 320;
- tmpRunningHeight = 200;
+ // Phantasmagoria 2 doesn't specify a script width/height
+ if (g_sci->getGameId() == GID_PHANTASMAGORIA2) {
+ scriptWidth = 640;
+ scriptHeight = 480;
}
- _coordAdjuster->setScriptsResolution(tmpRunningWidth, tmpRunningHeight);
+ assert(scriptWidth > 0 && scriptHeight > 0);
+ _coordAdjuster->setScriptsResolution(scriptWidth, scriptHeight);
+ }
+
+ // Import of QfG character files dialog is shown in QFG4.
+ // Display additional popup information before letting user use it.
+ // For the SCI0-SCI1.1 version of this, check kDrawControl().
+ if (g_sci->inQfGImportRoom() && !strcmp(_segMan->getObjectName(object), "DSPlane")) {
+ showScummVMDialog("Characters saved inside ScummVM are shown "
+ "automatically. Character files saved in the original "
+ "interpreter need to be put inside ScummVM's saved games "
+ "directory and a prefix needs to be added depending on which "
+ "game it was saved in: 'qfg1-' for Quest for Glory 1, 'qfg2-' "
+ "for Quest for Glory 2, 'qfg3-' for Quest for Glory 3. "
+ "Example: 'qfg2-thief.sav'.");
}
newPlane.object = object;
newPlane.priority = readSelectorValue(_segMan, object, SELECTOR(priority));
- newPlane.lastPriority = 0xFFFF; // hidden
+ newPlane.lastPriority = -1; // hidden
newPlane.planeOffsetX = 0;
newPlane.planeOffsetY = 0;
newPlane.pictureId = kPlanePlainColored;
@@ -294,6 +310,10 @@ reg_t GfxFrameout::addPlaneLine(reg_t object, Common::Point startPoint, Common::
}
void GfxFrameout::updatePlaneLine(reg_t object, reg_t hunkId, Common::Point startPoint, Common::Point endPoint, byte color, byte priority, byte control) {
+ // Check if we're asked to update a line that was never added
+ if (hunkId.isNull())
+ return;
+
for (PlaneList::iterator it = _planes.begin(); it != _planes.end(); ++it) {
if (it->object == object) {
for (PlaneLineList::iterator it2 = it->lines.begin(); it2 != it->lines.end(); ++it2) {
@@ -311,6 +331,10 @@ void GfxFrameout::updatePlaneLine(reg_t object, reg_t hunkId, Common::Point star
}
void GfxFrameout::deletePlaneLine(reg_t object, reg_t hunkId) {
+ // Check if we're asked to delete a line that was never added (happens during the intro of LSL6)
+ if (hunkId.isNull())
+ return;
+
for (PlaneList::iterator it = _planes.begin(); it != _planes.end(); ++it) {
if (it->object == object) {
for (PlaneLineList::iterator it2 = it->lines.begin(); it2 != it->lines.end(); ++it2) {
@@ -326,8 +350,10 @@ void GfxFrameout::deletePlaneLine(reg_t object, reg_t hunkId) {
void GfxFrameout::kernelAddScreenItem(reg_t object) {
// Ignore invalid items
- if (!_segMan->isObject(object))
+ if (!_segMan->isObject(object)) {
+ warning("kernelAddScreenItem: Attempt to add an invalid object (%04x:%04x)", PRINT_REG(object));
return;
+ }
FrameoutEntry *itemEntry = new FrameoutEntry();
memset(itemEntry, 0, sizeof(FrameoutEntry));
@@ -341,8 +367,10 @@ void GfxFrameout::kernelAddScreenItem(reg_t object) {
void GfxFrameout::kernelUpdateScreenItem(reg_t object) {
// Ignore invalid items
- if (!_segMan->isObject(object))
+ if (!_segMan->isObject(object)) {
+ warning("kernelUpdateScreenItem: Attempt to update an invalid object (%04x:%04x)", PRINT_REG(object));
return;
+ }
FrameoutEntry *itemEntry = findScreenItem(object);
if (!itemEntry) {
@@ -372,10 +400,9 @@ void GfxFrameout::kernelUpdateScreenItem(reg_t object) {
void GfxFrameout::kernelDeleteScreenItem(reg_t object) {
FrameoutEntry *itemEntry = findScreenItem(object);
- if (!itemEntry) {
- warning("kernelDeleteScreenItem: invalid object %04x:%04x", PRINT_REG(object));
+ // If the item could not be found, it may already have been deleted
+ if (!itemEntry)
return;
- }
_screenItems.remove(itemEntry);
delete itemEntry;
@@ -432,15 +459,10 @@ bool sortHelper(const FrameoutEntry* entry1, const FrameoutEntry* entry2) {
}
bool planeSortHelper(const PlaneEntry &entry1, const PlaneEntry &entry2) {
-// SegManager *segMan = g_sci->getEngineState()->_segMan;
-
-// uint16 plane1Priority = readSelectorValue(segMan, entry1, SELECTOR(priority));
-// uint16 plane2Priority = readSelectorValue(segMan, entry2, SELECTOR(priority));
-
- if (entry1.priority == 0xffff)
+ if (entry1.priority < 0)
return true;
- if (entry2.priority == 0xffff)
+ if (entry2.priority < 0)
return false;
return entry1.priority < entry2.priority;
@@ -606,13 +628,13 @@ void GfxFrameout::kernelFrameout() {
_screen->drawLine(startPoint, endPoint, it2->color, it2->priority, it2->control);
}
- uint16 planeLastPriority = it->lastPriority;
+ int16 planeLastPriority = it->lastPriority;
// Update priority here, sq6 sets it w/o UpdatePlane
- uint16 planePriority = it->priority = readSelectorValue(_segMan, planeObject, SELECTOR(priority));
+ int16 planePriority = it->priority = readSelectorValue(_segMan, planeObject, SELECTOR(priority));
it->lastPriority = planePriority;
- if (planePriority == 0xffff) { // Plane currently not meant to be shown
+ if (planePriority < 0) { // Plane currently not meant to be shown
// If plane was shown before, delete plane rect
if (planePriority != planeLastPriority)
_paint32->fillRect(it->planeRect, 0);
@@ -653,7 +675,7 @@ void GfxFrameout::kernelFrameout() {
if (view && view->isSci2Hires()) {
view->adjustToUpscaledCoordinates(itemEntry->y, itemEntry->x);
view->adjustToUpscaledCoordinates(itemEntry->z, dummyX);
- } else if (getSciVersion() == SCI_VERSION_2_1) {
+ } else if (getSciVersion() >= SCI_VERSION_2_1) {
_coordAdjuster->fromScriptToDisplay(itemEntry->y, itemEntry->x);
_coordAdjuster->fromScriptToDisplay(itemEntry->z, dummyX);
}
@@ -676,13 +698,13 @@ void GfxFrameout::kernelFrameout() {
// TODO: maybe we should clip the cels rect with this, i'm not sure
// the only currently known usage is game menu of gk1
} else if (view) {
- if ((itemEntry->scaleX == 128) && (itemEntry->scaleY == 128))
- view->getCelRect(itemEntry->loopNo, itemEntry->celNo,
- itemEntry->x, itemEntry->y, itemEntry->z, itemEntry->celRect);
- else
- view->getCelScaledRect(itemEntry->loopNo, itemEntry->celNo,
- itemEntry->x, itemEntry->y, itemEntry->z, itemEntry->scaleX,
- itemEntry->scaleY, itemEntry->celRect);
+ if ((itemEntry->scaleX == 128) && (itemEntry->scaleY == 128))
+ view->getCelRect(itemEntry->loopNo, itemEntry->celNo,
+ itemEntry->x, itemEntry->y, itemEntry->z, itemEntry->celRect);
+ else
+ view->getCelScaledRect(itemEntry->loopNo, itemEntry->celNo,
+ itemEntry->x, itemEntry->y, itemEntry->z, itemEntry->scaleX,
+ itemEntry->scaleY, itemEntry->celRect);
Common::Rect nsRect = itemEntry->celRect;
// Translate back to actual coordinate within scrollable plane
@@ -691,7 +713,7 @@ void GfxFrameout::kernelFrameout() {
if (view && view->isSci2Hires()) {
view->adjustBackUpscaledCoordinates(nsRect.top, nsRect.left);
view->adjustBackUpscaledCoordinates(nsRect.bottom, nsRect.right);
- } else if (getSciVersion() == SCI_VERSION_2_1) {
+ } else if (getSciVersion() >= SCI_VERSION_2_1) {
_coordAdjuster->fromDisplayToScript(nsRect.top, nsRect.left);
_coordAdjuster->fromDisplayToScript(nsRect.bottom, nsRect.right);
}
@@ -719,6 +741,9 @@ void GfxFrameout::kernelFrameout() {
translatedClipRect = clipRect;
translatedClipRect.translate(it->upscaledPlaneRect.left, it->upscaledPlaneRect.top);
} else {
+ // QFG4 passes invalid rectangles when a battle is starting
+ if (!clipRect.isValidRect())
+ continue;
clipRect.clip(it->planeClipRect);
translatedClipRect = clipRect;
translatedClipRect.translate(it->planeRect.left, it->planeRect.top);
diff --git a/engines/sci/graphics/frameout.h b/engines/sci/graphics/frameout.h
index ecaf450d89..5fd2824224 100644
--- a/engines/sci/graphics/frameout.h
+++ b/engines/sci/graphics/frameout.h
@@ -40,8 +40,8 @@ typedef Common::List<PlaneLineEntry> PlaneLineList;
struct PlaneEntry {
reg_t object;
- uint16 priority;
- uint16 lastPriority;
+ int16 priority;
+ int16 lastPriority;
int16 planeOffsetX;
int16 planeOffsetY;
GuiResourceId pictureId;
diff --git a/engines/sci/graphics/palette.cpp b/engines/sci/graphics/palette.cpp
index ea154c5037..68104b0ac8 100644
--- a/engines/sci/graphics/palette.cpp
+++ b/engines/sci/graphics/palette.cpp
@@ -100,6 +100,9 @@ GfxPalette::GfxPalette(ResourceManager *resMan, GfxScreen *screen)
default:
error("GfxPalette: Unknown view type");
}
+
+ _remapOn = false;
+ resetRemapping();
}
GfxPalette::~GfxPalette() {
@@ -140,8 +143,9 @@ void GfxPalette::createFromData(byte *data, int bytesLeft, Palette *paletteOut)
memset(paletteOut, 0, sizeof(Palette));
// Setup 1:1 mapping
- for (colorNo = 0; colorNo < 256; colorNo++)
+ for (colorNo = 0; colorNo < 256; colorNo++) {
paletteOut->mapping[colorNo] = colorNo;
+ }
if (bytesLeft < 37) {
// This happens when loading palette of picture 0 in sq5 - the resource is broken and doesn't contain a full
@@ -329,6 +333,58 @@ void GfxPalette::set(Palette *newPalette, bool force, bool forceRealMerge) {
}
}
+byte GfxPalette::remapColor(byte remappedColor, byte screenColor) {
+ assert(_remapOn);
+ if (_remappingType[remappedColor] == kRemappingByRange)
+ return _remappingByRange[screenColor];
+ else if (_remappingType[remappedColor] == kRemappingByPercent)
+ return _remappingByPercent[screenColor];
+ else
+ error("remapColor(): Color %d isn't remapped", remappedColor);
+
+ return 0; // should never reach here
+}
+
+void GfxPalette::resetRemapping() {
+ _remapOn = false;
+ _remappingPercentToSet = 0;
+
+ for (int i = 0; i < 256; i++) {
+ _remappingType[i] = kRemappingNone;
+ _remappingByPercent[i] = i;
+ _remappingByRange[i] = i;
+ }
+}
+
+void GfxPalette::setRemappingPercent(byte color, byte percent) {
+ _remapOn = true;
+
+ // We need to defer the setup of the remapping table every time the screen
+ // palette is changed, so that kernelFindColor() can find the correct
+ // colors. Set it once here, in case the palette stays the same and update
+ // it on each palette change by copySysPaletteToScreen().
+ _remappingPercentToSet = percent;
+
+ for (int i = 0; i < 256; i++) {
+ byte r = _sysPalette.colors[i].r * _remappingPercentToSet / 100;
+ byte g = _sysPalette.colors[i].g * _remappingPercentToSet / 100;
+ byte b = _sysPalette.colors[i].b * _remappingPercentToSet / 100;
+ _remappingByPercent[i] = kernelFindColor(r, g, b);
+ }
+
+ _remappingType[color] = kRemappingByPercent;
+}
+
+void GfxPalette::setRemappingRange(byte color, byte from, byte to, byte base) {
+ _remapOn = true;
+
+ for (int i = from; i <= to; i++) {
+ _remappingByRange[i] = i + base;
+ }
+
+ _remappingType[color] = kRemappingByRange;
+}
+
bool GfxPalette::insert(Palette *newPalette, Palette *destPalette) {
bool paletteChanged = false;
@@ -491,6 +547,16 @@ void GfxPalette::copySysPaletteToScreen() {
}
}
+ // Check if we need to reset remapping by percent with the new colors.
+ if (_remappingPercentToSet) {
+ for (int i = 0; i < 256; i++) {
+ byte r = _sysPalette.colors[i].r * _remappingPercentToSet / 100;
+ byte g = _sysPalette.colors[i].g * _remappingPercentToSet / 100;
+ byte b = _sysPalette.colors[i].b * _remappingPercentToSet / 100;
+ _remappingByPercent[i] = kernelFindColor(r, g, b);
+ }
+ }
+
g_system->getPaletteManager()->setPalette(bpal, 0, 256);
}
@@ -999,8 +1065,9 @@ bool GfxPalette::loadClut(uint16 clutId) {
memset(&pal, 0, sizeof(Palette));
// Setup 1:1 mapping
- for (int i = 0; i < 256; i++)
+ for (int i = 0; i < 256; i++) {
pal.mapping[i] = i;
+ }
// Now load in the palette
for (int i = 1; i <= 236; i++) {
diff --git a/engines/sci/graphics/palette.h b/engines/sci/graphics/palette.h
index a9ea1c32de..9898315897 100644
--- a/engines/sci/graphics/palette.h
+++ b/engines/sci/graphics/palette.h
@@ -31,6 +31,12 @@ namespace Sci {
class ResourceManager;
class GfxScreen;
+enum ColorRemappingType {
+ kRemappingNone = 0,
+ kRemappingByRange = 1,
+ kRemappingByPercent = 2
+};
+
/**
* Palette class, handles palette operations like changing intensity, setting up the palette, merging different palettes
*/
@@ -53,6 +59,14 @@ public:
void getSys(Palette *pal);
uint16 getTotalColorCount() const { return _totalScreenColors; }
+ void resetRemapping();
+ void setRemappingPercent(byte color, byte percent);
+ void setRemappingRange(byte color, byte from, byte to, byte base);
+ bool isRemapped(byte color) const {
+ return _remapOn && (_remappingType[color] != kRemappingNone);
+ }
+ byte remapColor(byte remappedColor, byte screenColor);
+
void setOnScreen();
void copySysPaletteToScreen();
@@ -123,6 +137,12 @@ private:
int _palVarySignal;
uint16 _totalScreenColors;
+ bool _remapOn;
+ ColorRemappingType _remappingType[256];
+ byte _remappingByPercent[256];
+ byte _remappingByRange[256];
+ uint16 _remappingPercentToSet;
+
void loadMacIconBarPalette();
byte *_macClut;
diff --git a/engines/sci/graphics/screen.cpp b/engines/sci/graphics/screen.cpp
index 4020518b72..246b6bfff9 100644
--- a/engines/sci/graphics/screen.cpp
+++ b/engines/sci/graphics/screen.cpp
@@ -53,23 +53,35 @@ GfxScreen::GfxScreen(ResourceManager *resMan) : _resMan(resMan) {
#ifdef ENABLE_SCI32
// GK1 Mac uses a 640x480 resolution too
- if (g_sci->getGameId() == GID_GK1 && g_sci->getPlatform() == Common::kPlatformMacintosh)
- _upscaledHires = GFX_SCREEN_UPSCALED_640x480;
+ if (g_sci->getPlatform() == Common::kPlatformMacintosh) {
+ if (g_sci->getGameId() == GID_GK1)
+ _upscaledHires = GFX_SCREEN_UPSCALED_640x480;
+ }
#endif
if (_resMan->detectHires()) {
_width = 640;
+ _pitch = 640;
_height = 480;
} else {
_width = 320;
+ _pitch = 320;
_height = getLowResScreenHeight();
}
+#ifdef ENABLE_SCI32
+ // Phantasmagoria 1 sets a window area of 630x450
+ if (g_sci->getGameId() == GID_PHANTASMAGORIA) {
+ _width = 630;
+ _height = 450;
+ }
+#endif
+
// Japanese versions of games use hi-res font on upscaled version of the game.
if ((g_sci->getLanguage() == Common::JA_JPN) && (getSciVersion() <= SCI_VERSION_1_1))
_upscaledHires = GFX_SCREEN_UPSCALED_640x400;
- _pixels = _width * _height;
+ _pixels = _pitch * _height;
switch (_upscaledHires) {
case GFX_SCREEN_UPSCALED_640x400:
@@ -91,7 +103,7 @@ GfxScreen::GfxScreen(ResourceManager *resMan) : _resMan(resMan) {
_upscaledMapping[i] = (i * 12) / 5;
break;
default:
- _displayWidth = _width;
+ _displayWidth = _pitch;
_displayHeight = _height;
memset(&_upscaledMapping, 0, sizeof(_upscaledMapping) );
break;
@@ -207,7 +219,7 @@ byte GfxScreen::getDrawingMask(byte color, byte prio, byte control) {
}
void GfxScreen::putPixel(int x, int y, byte drawMask, byte color, byte priority, byte control) {
- int offset = y * _width + x;
+ int offset = y * _pitch + x;
if (drawMask & GFX_SCREEN_MASK_VISUAL) {
_visualScreen[offset] = color;
@@ -240,7 +252,7 @@ void GfxScreen::putFontPixel(int startingY, int x, int y, byte color) {
// Do not scale ourselves, but put it on the display directly
putPixelOnDisplay(x, y + startingY, color);
} else {
- int offset = (startingY + y) * _width + x;
+ int offset = (startingY + y) * _pitch + x;
_visualScreen[offset] = color;
if (!_upscaledHires) {
@@ -342,19 +354,19 @@ void GfxScreen::putKanjiChar(Graphics::FontSJIS *commonFont, int16 x, int16 y, u
}
byte GfxScreen::getVisual(int x, int y) {
- return _visualScreen[y * _width + x];
+ return _visualScreen[y * _pitch + x];
}
byte GfxScreen::getPriority(int x, int y) {
- return _priorityScreen[y * _width + x];
+ return _priorityScreen[y * _pitch + x];
}
byte GfxScreen::getControl(int x, int y) {
- return _controlScreen[y * _width + x];
+ return _controlScreen[y * _pitch + x];
}
byte GfxScreen::isFillMatch(int16 x, int16 y, byte screenMask, byte t_color, byte t_pri, byte t_con, bool isEGA) {
- int offset = y * _width + x;
+ int offset = y * _pitch + x;
byte match = 0;
if (screenMask & GFX_SCREEN_MASK_VISUAL) {
@@ -415,14 +427,14 @@ void GfxScreen::bitsSave(Common::Rect rect, byte mask, byte *memoryPtr) {
memcpy(memoryPtr, (void *)&mask, sizeof(mask)); memoryPtr += sizeof(mask);
if (mask & GFX_SCREEN_MASK_VISUAL) {
- bitsSaveScreen(rect, _visualScreen, _width, memoryPtr);
+ bitsSaveScreen(rect, _visualScreen, _pitch, memoryPtr);
bitsSaveDisplayScreen(rect, memoryPtr);
}
if (mask & GFX_SCREEN_MASK_PRIORITY) {
- bitsSaveScreen(rect, _priorityScreen, _width, memoryPtr);
+ bitsSaveScreen(rect, _priorityScreen, _pitch, memoryPtr);
}
if (mask & GFX_SCREEN_MASK_CONTROL) {
- bitsSaveScreen(rect, _controlScreen, _width, memoryPtr);
+ bitsSaveScreen(rect, _controlScreen, _pitch, memoryPtr);
}
if (mask & GFX_SCREEN_MASK_DISPLAY) {
if (!_upscaledHires)
@@ -475,14 +487,14 @@ void GfxScreen::bitsRestore(byte *memoryPtr) {
memcpy((void *)&mask, memoryPtr, sizeof(mask)); memoryPtr += sizeof(mask);
if (mask & GFX_SCREEN_MASK_VISUAL) {
- bitsRestoreScreen(rect, memoryPtr, _visualScreen, _width);
+ bitsRestoreScreen(rect, memoryPtr, _visualScreen, _pitch);
bitsRestoreDisplayScreen(rect, memoryPtr);
}
if (mask & GFX_SCREEN_MASK_PRIORITY) {
- bitsRestoreScreen(rect, memoryPtr, _priorityScreen, _width);
+ bitsRestoreScreen(rect, memoryPtr, _priorityScreen, _pitch);
}
if (mask & GFX_SCREEN_MASK_CONTROL) {
- bitsRestoreScreen(rect, memoryPtr, _controlScreen, _width);
+ bitsRestoreScreen(rect, memoryPtr, _controlScreen, _pitch);
}
if (mask & GFX_SCREEN_MASK_DISPLAY) {
if (!_upscaledHires)
@@ -560,7 +572,7 @@ void GfxScreen::dither(bool addToFlag) {
if (!_unditheringEnabled) {
// Do dithering on visual and display-screen
for (y = 0; y < _height; y++) {
- for (x = 0; x < _width; x++) {
+ for (x = 0; x < _pitch; x++) {
color = *visualPtr;
if (color & 0xF0) {
color ^= color << 4;
@@ -585,7 +597,7 @@ void GfxScreen::dither(bool addToFlag) {
memset(&_ditheredPicColors, 0, sizeof(_ditheredPicColors));
// Do dithering on visual screen and put decoded but undithered byte onto display-screen
for (y = 0; y < _height; y++) {
- for (x = 0; x < _width; x++) {
+ for (x = 0; x < _pitch; x++) {
color = *visualPtr;
if (color & 0xF0) {
color ^= color << 4;
diff --git a/engines/sci/graphics/screen.h b/engines/sci/graphics/screen.h
index 73ea596ba1..01fb899edb 100644
--- a/engines/sci/graphics/screen.h
+++ b/engines/sci/graphics/screen.h
@@ -132,6 +132,7 @@ public:
private:
uint16 _width;
+ uint16 _pitch;
uint16 _height;
uint _pixels;
uint16 _displayWidth;
diff --git a/engines/sci/graphics/view.cpp b/engines/sci/graphics/view.cpp
index 4e5c4da8b2..36aaae9232 100644
--- a/engines/sci/graphics/view.cpp
+++ b/engines/sci/graphics/view.cpp
@@ -741,8 +741,14 @@ void GfxView::draw(const Common::Rect &rect, const Common::Rect &clipRect, const
const int x2 = clipRectTranslated.left + x;
const int y2 = clipRectTranslated.top + y;
if (!upscaledHires) {
- if (priority >= _screen->getPriority(x2, y2))
- _screen->putPixel(x2, y2, drawMask, palette->mapping[color], priority, 0);
+ if (priority >= _screen->getPriority(x2, y2)) {
+ if (!_palette->isRemapped(palette->mapping[color])) {
+ _screen->putPixel(x2, y2, drawMask, palette->mapping[color], priority, 0);
+ } else {
+ byte remappedColor = _palette->remapColor(palette->mapping[color], _screen->getVisual(x2, y2));
+ _screen->putPixel(x2, y2, drawMask, remappedColor, priority, 0);
+ }
+ }
} else {
// UpscaledHires means view is hires and is supposed to
// get drawn onto lowres screen.
@@ -851,7 +857,12 @@ void GfxView::drawScaled(const Common::Rect &rect, const Common::Rect &clipRect,
const int x2 = clipRectTranslated.left + x;
const int y2 = clipRectTranslated.top + y;
if (color != clearKey && priority >= _screen->getPriority(x2, y2)) {
- _screen->putPixel(x2, y2, drawMask, palette->mapping[color], priority, 0);
+ if (!_palette->isRemapped(palette->mapping[color])) {
+ _screen->putPixel(x2, y2, drawMask, palette->mapping[color], priority, 0);
+ } else {
+ byte remappedColor = _palette->remapColor(palette->mapping[color], _screen->getVisual(x2, y2));
+ _screen->putPixel(x2, y2, drawMask, remappedColor, priority, 0);
+ }
}
}
}
diff --git a/engines/scumm/detection.cpp b/engines/scumm/detection.cpp
index ebf1a2675c..87305921c9 100644
--- a/engines/scumm/detection.cpp
+++ b/engines/scumm/detection.cpp
@@ -1266,7 +1266,6 @@ SaveStateDescriptor ScummMetaEngine::querySaveMetaInfos(const char *target, int
Graphics::Surface *thumbnail = ScummEngine::loadThumbnailFromSlot(target, slot);
SaveStateDescriptor desc(slot, saveDesc);
- desc.setDeletableFlag(true);
desc.setThumbnail(thumbnail);
SaveStateMetaInfos infos;
diff --git a/engines/scumm/scumm-md5.h b/engines/scumm/scumm-md5.h
index 0814e3bfe1..d4eefe8c28 100644
--- a/engines/scumm/scumm-md5.h
+++ b/engines/scumm/scumm-md5.h
@@ -1,5 +1,5 @@
/*
- This file was generated by the md5table tool on Fri Jun 15 09:16:45 2012
+ This file was generated by the md5table tool on Sat Jul 07 23:39:27 2012
DO NOT EDIT MANUALLY!
*/
@@ -191,6 +191,7 @@ static const MD5Table md5table[] = {
{ "45082a5c9f42ba14dacfe1fdeeba819d", "freddicove", "HE 100", "Demo", 18422, Common::EN_ANY, Common::kPlatformUnknown },
{ "45152f7cf2ba8f43cf8a8ea2e740ae09", "monkey", "VGA", "VGA", 8357, Common::ES_ESP, Common::kPlatformPC },
{ "4521138d15d1fd7649c31fb981746231", "pajama2", "HE 98.5", "Demo", -1, Common::DE_DEU, Common::kPlatformUnknown },
+ { "4522564b3c31aaf218b6a96826a549fd", "maze", "HE 99", "", -1, Common::EN_USA, Common::kPlatformWindows },
{ "46b53fd430adcfbed791b48a0d4b079f", "funpack", "", "", -1, Common::EN_ANY, Common::kPlatformPC },
{ "470c45b636139bb40716daa1c7edaad0", "loom", "EGA", "EGA", -1, Common::DE_DEU, Common::kPlatformPC },
{ "477dbafbd66a53c98416dc01aef019ad", "monkey", "EGA", "EGA", -1, Common::IT_ITA, Common::kPlatformPC },
diff --git a/engines/sword1/detection.cpp b/engines/sword1/detection.cpp
index 087dcd09d8..5662e4672b 100644
--- a/engines/sword1/detection.cpp
+++ b/engines/sword1/detection.cpp
@@ -268,9 +268,6 @@ SaveStateDescriptor SwordMetaEngine::querySaveMetaInfos(const char *target, int
SaveStateDescriptor desc(slot, name);
- desc.setDeletableFlag(true);
- desc.setWriteProtectedFlag(false);
-
if (versionSave < 2) // These older version of the savegames used a flag to signal presence of thumbnail
in->skip(1);
diff --git a/engines/sword1/sound.cpp b/engines/sword1/sound.cpp
index 3574074b00..61bf5257ab 100644
--- a/engines/sword1/sound.cpp
+++ b/engines/sword1/sound.cpp
@@ -142,7 +142,7 @@ void Sound::checkSpeechFileEndianness() {
be_diff_sum += fabs((double)(be_value - prev_be_value));
prev_be_value = be_value;
}
- delete [] data;
+ delete[] data;
}
// Set the big endian flag
_bigEndianSpeech = (be_diff_sum < le_diff_sum);
diff --git a/engines/teenagent/callbacks.cpp b/engines/teenagent/callbacks.cpp
index 8882531d27..934727a478 100644
--- a/engines/teenagent/callbacks.cpp
+++ b/engines/teenagent/callbacks.cpp
@@ -2252,7 +2252,7 @@ bool TeenAgentEngine::processCallback(uint16 addr) {
return true;
case 0x78e0:
- processCallback(0x50c5);
+ processCallback(0x505c);
return false;
case 0x78e7:
@@ -2265,7 +2265,7 @@ bool TeenAgentEngine::processCallback(uint16 addr) {
case 0x78f5:
if (CHECK_FLAG(0xDB95, 1)) {
- displayMessage(0x3575);
+ displayMessage(0x3E75);
return true;
} else
return false;
@@ -3925,7 +3925,7 @@ bool TeenAgentEngine::processCallback(uint16 addr) {
displayMessage(0x39ae);
break;
default:
- displayMessage(0x39b7);
+ displayMessage(0x3ab7);
}
return true;
diff --git a/engines/teenagent/detection.cpp b/engines/teenagent/detection.cpp
index dad876dd97..2de6f49c44 100644
--- a/engines/teenagent/detection.cpp
+++ b/engines/teenagent/detection.cpp
@@ -80,7 +80,7 @@ static const ADGameDescription teenAgentGameDescriptions[] = {
};
enum {
- MAX_SAVES = 20
+ MAX_SAVES = 20
};
class TeenAgentMetaEngine : public AdvancedMetaEngine {
@@ -123,16 +123,15 @@ public:
virtual SaveStateList listSaves(const char *target) const {
Common::String pattern = target;
- pattern += ".*";
+ pattern += ".??";
Common::StringArray filenames = g_system->getSavefileManager()->listSavefiles(pattern);
Common::sort(filenames.begin(), filenames.end());
SaveStateList saveList;
for (Common::StringArray::const_iterator file = filenames.begin(); file != filenames.end(); ++file) {
- int slot;
- const char *ext = strrchr(file->c_str(), '.');
- if (ext && (slot = atoi(ext + 1)) >= 0 && slot < MAX_SAVES) {
+ int slot = atoi(file->c_str() + file->size() - 2);
+ if (slot >= 0 && slot < MAX_SAVES) {
Common::ScopedPtr<Common::InSaveFile> in(g_system->getSavefileManager()->openForLoading(*file));
if (!in)
continue;
@@ -174,7 +173,6 @@ public:
return SaveStateDescriptor(slot, desc);
SaveStateDescriptor ssd(slot, desc);
- ssd.setDeletableFlag(true);
//checking for the thumbnail
if (Graphics::Surface *const thumb = Graphics::loadThumbnail(*in))
diff --git a/engines/teenagent/resources.cpp b/engines/teenagent/resources.cpp
index 597ca670c0..dff58f98e2 100644
--- a/engines/teenagent/resources.cpp
+++ b/engines/teenagent/resources.cpp
@@ -22,6 +22,7 @@
#include "teenagent/resources.h"
#include "teenagent/teenagent.h"
#include "common/textconsole.h"
+#include "common/translation.h"
#include "common/zlib.h"
namespace TeenAgent {
@@ -64,28 +65,47 @@ bool Resources::loadArchives(const ADGameDescription *gd) {
Common::File *dat_file = new Common::File();
if (!dat_file->open("teenagent.dat")) {
delete dat_file;
- Common::String errorMessage = "You're missing the 'teenagent.dat' file. Get it from the ScummVM website";
- GUIErrorMessage(errorMessage);
+ Common::String errorMessage = _("You're missing the 'teenagent.dat' file. Get it from the ScummVM website");
warning("%s", errorMessage.c_str());
+ GUIErrorMessage(errorMessage);
return false;
}
+
+ // teenagent.dat used to be compressed with zlib compression. The usage of
+ // zlib here is no longer needed, and it's maintained only for backwards
+ // compatibility.
Common::SeekableReadStream *dat = Common::wrapCompressedReadStream(dat_file);
+
+#if !defined(USE_ZLIB)
+ uint16 header = dat->readUint16BE();
+ bool isCompressed = (header == 0x1F8B ||
+ ((header & 0x0F00) == 0x0800 &&
+ header % 31 == 0));
+ dat->seek(-2, SEEK_CUR);
+
+ if (isCompressed) {
+ // teenagent.dat is compressed, but zlib hasn't been compiled in
+ delete dat;
+ Common::String errorMessage = _("The teenagent.dat file is compressed and zlib hasn't been included in this executable. Please decompress it");
+ warning("%s", errorMessage.c_str());
+ GUIErrorMessage(errorMessage);
+ return false;
+ }
+#endif
+
cseg.read(dat, 0xb3b0);
dseg.read(dat, 0xe790);
eseg.read(dat, 0x8be2);
-
delete dat;
- {
- FilePack varia;
- varia.open("varia.res");
- font7.load(varia, 7);
- font7.width_pack = 1;
- font7.height = 11;
- font8.load(varia, 8);
- font8.height = 31;
- varia.close();
- }
+ FilePack varia;
+ varia.open("varia.res");
+ font7.load(varia, 7);
+ font7.width_pack = 1;
+ font7.height = 11;
+ font8.load(varia, 8);
+ font8.height = 31;
+ varia.close();
off.open("off.res");
on.open("on.res");
diff --git a/engines/tinsel/detection.cpp b/engines/tinsel/detection.cpp
index 0f662e22bd..2e4be33e53 100644
--- a/engines/tinsel/detection.cpp
+++ b/engines/tinsel/detection.cpp
@@ -63,6 +63,14 @@ uint16 TinselEngine::getVersion() const {
return _gameDescription->version;
}
+bool TinselEngine::getIsADGFDemo() const {
+ return (bool)(_gameDescription->desc.flags & ADGF_DEMO);
+}
+
+bool TinselEngine::isCD() const {
+ return (bool)(_gameDescription->desc.flags & ADGF_CD);
+}
+
} // End of namespace Tinsel
static const PlainGameDescriptor tinselGames[] = {
diff --git a/engines/tinsel/detection_tables.h b/engines/tinsel/detection_tables.h
index b6b19f6ee7..631c2dce14 100644
--- a/engines/tinsel/detection_tables.h
+++ b/engines/tinsel/detection_tables.h
@@ -47,7 +47,7 @@ static const TinselGameDescription gameDescriptions[] = {
},
GID_DW1,
0,
- GF_DEMO,
+ 0,
TINSEL_V0,
},
@@ -61,12 +61,12 @@ static const TinselGameDescription gameDescriptions[] = {
},
Common::EN_ANY,
Common::kPlatformPC,
- ADGF_DEMO,
+ ADGF_DEMO | ADGF_CD,
GUIO0()
},
GID_DW1,
0,
- GF_CD,
+ 0,
TINSEL_V1,
},
#if 0
@@ -81,12 +81,12 @@ static const TinselGameDescription gameDescriptions[] = {
},
Common::EN_ANY,
Common::kPlatformMacintosh,
- ADGF_DEMO,
+ ADGF_DEMO | ADGF_CD,
GUIO0()
},
GID_DW1,
0,
- GF_CD | GF_SCNFILES | GF_BIG_ENDIAN,
+ GF_SCNFILES,
TINSEL_V1,
},
#endif
@@ -110,7 +110,7 @@ static const TinselGameDescription gameDescriptions[] = {
},
GID_DW1,
0,
- GF_FLOPPY | GF_USE_4FLAGS | GF_ENHANCED_AUDIO_SUPPORT,
+ GF_USE_4FLAGS | GF_ENHANCED_AUDIO_SUPPORT,
TINSEL_V1,
},
@@ -133,7 +133,7 @@ static const TinselGameDescription gameDescriptions[] = {
},
GID_DW1,
0,
- GF_FLOPPY | GF_USE_4FLAGS | GF_ENHANCED_AUDIO_SUPPORT,
+ GF_USE_4FLAGS | GF_ENHANCED_AUDIO_SUPPORT,
TINSEL_V1,
},
@@ -156,7 +156,7 @@ static const TinselGameDescription gameDescriptions[] = {
},
GID_DW1,
0,
- GF_FLOPPY | GF_USE_4FLAGS | GF_ENHANCED_AUDIO_SUPPORT,
+ GF_USE_4FLAGS | GF_ENHANCED_AUDIO_SUPPORT,
TINSEL_V1,
},
@@ -179,7 +179,7 @@ static const TinselGameDescription gameDescriptions[] = {
},
GID_DW1,
0,
- GF_FLOPPY | GF_USE_4FLAGS | GF_ENHANCED_AUDIO_SUPPORT,
+ GF_USE_4FLAGS | GF_ENHANCED_AUDIO_SUPPORT,
TINSEL_V1,
},
@@ -195,7 +195,7 @@ static const TinselGameDescription gameDescriptions[] = {
},
GID_DW1,
0,
- GF_FLOPPY | GF_ENHANCED_AUDIO_SUPPORT,
+ GF_ENHANCED_AUDIO_SUPPORT,
TINSEL_V1,
},
@@ -214,7 +214,42 @@ static const TinselGameDescription gameDescriptions[] = {
},
GID_DW1,
0,
- GF_CD | GF_ENHANCED_AUDIO_SUPPORT,
+ GF_ENHANCED_AUDIO_SUPPORT,
+ TINSEL_V1,
+ },
+
+ { // Polish fan translation CD V1 version, with *.gra files (same as the floppy one, with english.smp)
+ {
+ "dw",
+ "CD",
+ {
+ {"dw.gra", 0, "ef05bbd2a754bd11a2e87bcd84ab5ccf", 781864},
+ {"english.smp", 0, NULL, -1},
+ },
+ Common::EN_ANY,
+ Common::kPlatformPC,
+ ADGF_CD,
+ GUIO_NONE
+ },
+ GID_DW1,
+ 0,
+ GF_ENHANCED_AUDIO_SUPPORT,
+ TINSEL_V1,
+ },
+
+ { // Polish fan translaction floppy V1 version, with *.gra files
+ {
+ "dw",
+ "Floppy",
+ AD_ENTRY1s("dw.gra", "ef05bbd2a754bd11a2e87bcd84ab5ccf", 781864),
+ Common::EN_ANY,
+ Common::kPlatformPC,
+ ADGF_NO_FLAGS,
+ GUIO_NOSPEECH
+ },
+ GID_DW1,
+ 0,
+ GF_ENHANCED_AUDIO_SUPPORT,
TINSEL_V1,
},
@@ -236,7 +271,7 @@ static const TinselGameDescription gameDescriptions[] = {
},
GID_DW1,
0,
- GF_CD | GF_USE_4FLAGS | GF_ENHANCED_AUDIO_SUPPORT,
+ GF_USE_4FLAGS | GF_ENHANCED_AUDIO_SUPPORT,
TINSEL_V1,
},
@@ -261,7 +296,7 @@ static const TinselGameDescription gameDescriptions[] = {
},
GID_DW1,
0,
- GF_CD | GF_USE_4FLAGS | GF_ENHANCED_AUDIO_SUPPORT,
+ GF_USE_4FLAGS | GF_ENHANCED_AUDIO_SUPPORT,
TINSEL_V1,
},
@@ -280,12 +315,12 @@ static const TinselGameDescription gameDescriptions[] = {
},
Common::DE_DEU,
Common::kPlatformPC,
- ADGF_DROPLANGUAGE | ADGF_CD,
+ ADGF_DROPLANGUAGE,
GUIO0()
},
GID_DW1,
0,
- GF_CD | GF_USE_4FLAGS | GF_ENHANCED_AUDIO_SUPPORT,
+ GF_USE_4FLAGS | GF_ENHANCED_AUDIO_SUPPORT,
TINSEL_V1,
},
{
@@ -308,7 +343,7 @@ static const TinselGameDescription gameDescriptions[] = {
},
GID_DW1,
0,
- GF_CD | GF_USE_4FLAGS | GF_ENHANCED_AUDIO_SUPPORT,
+ GF_USE_4FLAGS | GF_ENHANCED_AUDIO_SUPPORT,
TINSEL_V1,
},
{
@@ -331,7 +366,7 @@ static const TinselGameDescription gameDescriptions[] = {
},
GID_DW1,
0,
- GF_CD | GF_USE_4FLAGS | GF_ENHANCED_AUDIO_SUPPORT,
+ GF_USE_4FLAGS | GF_ENHANCED_AUDIO_SUPPORT,
TINSEL_V1,
},
@@ -351,7 +386,7 @@ static const TinselGameDescription gameDescriptions[] = {
},
GID_DW1,
0,
- GF_CD | GF_SCNFILES | GF_ENHANCED_AUDIO_SUPPORT,
+ GF_SCNFILES | GF_ENHANCED_AUDIO_SUPPORT,
TINSEL_V1,
},
@@ -371,7 +406,7 @@ static const TinselGameDescription gameDescriptions[] = {
},
GID_DW1,
0,
- GF_CD | GF_SCNFILES | GF_ENHANCED_AUDIO_SUPPORT,
+ GF_SCNFILES | GF_ENHANCED_AUDIO_SUPPORT,
TINSEL_V1,
},
@@ -390,7 +425,7 @@ static const TinselGameDescription gameDescriptions[] = {
},
GID_DW1,
0,
- GF_CD | GF_SCNFILES | GF_ENHANCED_AUDIO_SUPPORT,
+ GF_SCNFILES | GF_ENHANCED_AUDIO_SUPPORT,
TINSEL_V1,
},
@@ -408,12 +443,12 @@ static const TinselGameDescription gameDescriptions[] = {
},
Common::EN_ANY,
Common::kPlatformPSX,
- ADGF_DEMO,
+ ADGF_CD | ADGF_DEMO,
GUIO0()
},
GID_DW1,
0,
- GF_CD | GF_SCNFILES,
+ GF_SCNFILES,
TINSEL_V1,
},
@@ -434,7 +469,7 @@ static const TinselGameDescription gameDescriptions[] = {
},
GID_DW1,
0,
- GF_CD | GF_SCNFILES | GF_ENHANCED_AUDIO_SUPPORT,
+ GF_SCNFILES | GF_ENHANCED_AUDIO_SUPPORT,
TINSEL_V1,
},
#endif
@@ -456,7 +491,7 @@ static const TinselGameDescription gameDescriptions[] = {
},
GID_DW1,
0,
- GF_CD | GF_SCNFILES | GF_ENHANCED_AUDIO_SUPPORT | GF_BIG_ENDIAN,
+ GF_SCNFILES | GF_ENHANCED_AUDIO_SUPPORT,
TINSEL_V1,
},
@@ -475,7 +510,7 @@ static const TinselGameDescription gameDescriptions[] = {
},
GID_DW1,
0,
- GF_CD | GF_SCNFILES | GF_ENHANCED_AUDIO_SUPPORT | GF_ALT_MIDI,
+ GF_SCNFILES | GF_ENHANCED_AUDIO_SUPPORT | GF_ALT_MIDI,
TINSEL_V1,
},
@@ -496,11 +531,32 @@ static const TinselGameDescription gameDescriptions[] = {
},
GID_DW1,
0,
- GF_CD | GF_SCNFILES | GF_ENHANCED_AUDIO_SUPPORT,
+ GF_SCNFILES | GF_ENHANCED_AUDIO_SUPPORT,
+ TINSEL_V1,
+ },
+
+ { // Polish fan translaction Discworld 1
+ {
+ "dw",
+ "CD",
+ {
+ {"dw.scn", 0, "fa169d2c98660215ebd84b49c1899eef", 776396},
+ {"english.txt", 0, "c1a53eb7ec812689dab70e2bb22cf2ab", 224151},
+ {"english.smp", 0, NULL, -1},
+ {NULL, 0, NULL, 0}
+ },
+ Common::PL_POL,
+ Common::kPlatformPC,
+ ADGF_CD,
+ GUIO_NONE
+ },
+ GID_DW1,
+ 0,
+ GF_SCNFILES | GF_ENHANCED_AUDIO_SUPPORT,
TINSEL_V1,
},
- { // English DW2 demo
+ { // English Discworld 2 demo
{
"dw2",
"Demo",
@@ -511,12 +567,12 @@ static const TinselGameDescription gameDescriptions[] = {
},
Common::EN_ANY,
Common::kPlatformPC,
- ADGF_DEMO,
+ ADGF_DEMO | ADGF_CD,
GUIO1(GUIO_NOASPECT)
},
GID_DW2,
0,
- GF_CD | GF_SCNFILES | GF_DEMO,
+ GF_SCNFILES,
TINSEL_V2,
},
@@ -531,12 +587,12 @@ static const TinselGameDescription gameDescriptions[] = {
},
Common::EN_GRB,
Common::kPlatformPC,
- ADGF_NO_FLAGS,
+ ADGF_CD,
GUIO1(GUIO_NOASPECT)
},
GID_DW2,
0,
- GF_CD | GF_SCNFILES,
+ GF_SCNFILES,
TINSEL_V2,
},
@@ -551,12 +607,12 @@ static const TinselGameDescription gameDescriptions[] = {
},
Common::EN_USA,
Common::kPlatformPC,
- ADGF_NO_FLAGS,
+ ADGF_CD,
GUIO1(GUIO_NOASPECT)
},
GID_DW2,
0,
- GF_CD | GF_SCNFILES,
+ GF_SCNFILES,
TINSEL_V2,
},
@@ -571,12 +627,12 @@ static const TinselGameDescription gameDescriptions[] = {
},
Common::FR_FRA,
Common::kPlatformPC,
- ADGF_NO_FLAGS,
+ ADGF_CD,
GUIO1(GUIO_NOASPECT)
},
GID_DW2,
0,
- GF_CD | GF_SCNFILES,
+ GF_SCNFILES,
TINSEL_V2,
},
@@ -591,12 +647,12 @@ static const TinselGameDescription gameDescriptions[] = {
},
Common::DE_DEU,
Common::kPlatformPC,
- ADGF_NO_FLAGS,
+ ADGF_CD,
GUIO1(GUIO_NOASPECT)
},
GID_DW2,
0,
- GF_CD | GF_SCNFILES,
+ GF_SCNFILES,
TINSEL_V2,
},
@@ -612,12 +668,12 @@ static const TinselGameDescription gameDescriptions[] = {
},
Common::IT_ITA,
Common::kPlatformPC,
- ADGF_NO_FLAGS,
+ ADGF_CD,
GUIO1(GUIO_NOASPECT)
},
GID_DW2,
0,
- GF_CD | GF_SCNFILES,
+ GF_SCNFILES,
TINSEL_V2,
},
{
@@ -632,12 +688,12 @@ static const TinselGameDescription gameDescriptions[] = {
},
Common::ES_ESP,
Common::kPlatformPC,
- ADGF_NO_FLAGS,
+ ADGF_CD,
GUIO1(GUIO_NOASPECT)
},
GID_DW2,
0,
- GF_CD | GF_SCNFILES,
+ GF_SCNFILES,
TINSEL_V2,
},
@@ -653,12 +709,12 @@ static const TinselGameDescription gameDescriptions[] = {
},
Common::RU_RUS,
Common::kPlatformPC,
- ADGF_NO_FLAGS,
+ ADGF_CD,
GUIO1(GUIO_NOASPECT)
},
GID_DW2,
0,
- GF_CD | GF_SCNFILES,
+ GF_SCNFILES,
TINSEL_V2,
},
diff --git a/engines/tinsel/dialogs.cpp b/engines/tinsel/dialogs.cpp
index fbe9e8d1f6..dde34841cf 100644
--- a/engines/tinsel/dialogs.cpp
+++ b/engines/tinsel/dialogs.cpp
@@ -753,6 +753,11 @@ static CONFBOX t1RestartBox[] = {
#endif
};
+static CONFBOX t1RestartBoxPSX[] = {
+ { AAGBUT, INITGAME, TM_NONE, NULL, USE_POINTER, 122, 48, 23, 19, NULL, IX1_TICK1 },
+ { AAGBUT, CLOSEWIN, TM_NONE, NULL, USE_POINTER, 82, 48, 23, 19, NULL, IX1_CROSS1 }
+};
+
static CONFBOX t2RestartBox[] = {
{ AAGBUT, INITGAME, TM_NONE, NULL, 0, 140, 78, BW, BH, NULL, IX2_TICK1 },
{ AAGBUT, CLOSEWIN, TM_NONE, NULL, 0, 60, 78, BW, BH, NULL, IX2_CROSS1 }
@@ -763,10 +768,10 @@ static CONFINIT t1ciRestart = { 6, 2, 72, 53, false, t1RestartBox, ARRAYSIZE(t1R
#else
static CONFINIT t1ciRestart = { 4, 2, 98, 53, false, t1RestartBox, ARRAYSIZE(t1RestartBox), SIX_RESTART_HEADING };
#endif
+static CONFINIT t1ciRestartPSX = { 8, 2, 46, 53, false, t1RestartBoxPSX, ARRAYSIZE(t1RestartBoxPSX), SIX_RESTART_HEADING };
static CONFINIT t2ciRestart = { 4, 2, 196, 53, false, t2RestartBox, sizeof(t2RestartBox)/sizeof(CONFBOX), SS_RESTART_HEADING };
-#define ciRestart (TinselV2 ? t2ciRestart : t1ciRestart)
-#define restartBox (TinselV2 ? t2RestartBox : t1RestartBox)
+#define ciRestart (TinselV2 ? t2ciRestart : (TinselV1PSX ? t1ciRestartPSX : t1ciRestart))
/*-------------------------------------------------------------*\
| This is the sound control 'menu'. In Discworld 2, it also |
@@ -1038,18 +1043,20 @@ static bool RePosition();
static bool LanguageChange() {
LANGUAGE nLang = _vm->_config->_language;
- if (_vm->getFeatures() & GF_USE_3FLAGS) {
- // VERY quick dodgy bodge
- if (cd.selBox == 0)
- nLang = TXT_FRENCH; // = 1
- else if (cd.selBox == 1)
- nLang = TXT_GERMAN; // = 2
- else
- nLang = TXT_SPANISH; // = 4
- } else if (_vm->getFeatures() & GF_USE_4FLAGS) {
- nLang = (LANGUAGE)(cd.selBox + 1);
- } else if (_vm->getFeatures() & GF_USE_5FLAGS) {
- nLang = (LANGUAGE)cd.selBox;
+ if ((_vm->getFeatures() & GF_USE_3FLAGS) || (_vm->getFeatures() & GF_USE_4FLAGS) || (_vm->getFeatures() & GF_USE_5FLAGS)) {
+ // Languages: TXT_ENGLISH, TXT_FRENCH, TXT_GERMAN, TXT_ITALIAN, TXT_SPANISH
+ // 5 flag versions include English
+ int selected = (_vm->getFeatures() & GF_USE_5FLAGS) ? cd.selBox : cd.selBox + 1;
+ // Make sure that a language flag has been selected. If the user has
+ // changed the language speed slider and hasn't clicked on a flag, it
+ // won't be selected.
+ if (selected >= 0 && selected <= 4) {
+ nLang = (LANGUAGE)selected;
+
+ // 3 flag versions don't include Italian
+ if (selected >= 3 && (_vm->getFeatures() & GF_USE_3FLAGS))
+ nLang = TXT_SPANISH;
+ }
}
if (nLang != _vm->_config->_language) {
diff --git a/engines/tinsel/drives.cpp b/engines/tinsel/drives.cpp
index 5c4b939e4e..3ecef83753 100644
--- a/engines/tinsel/drives.cpp
+++ b/engines/tinsel/drives.cpp
@@ -149,7 +149,7 @@ bool GotoCD() {
bool TinselFile::_warningShown = false;
-TinselFile::TinselFile() : ReadStreamEndian((_vm->getFeatures() & GF_BIG_ENDIAN) != 0) {
+TinselFile::TinselFile() : ReadStreamEndian(TinselV1Mac) {
_stream = NULL;
}
diff --git a/engines/tinsel/handle.cpp b/engines/tinsel/handle.cpp
index c3089db990..14d588dcec 100644
--- a/engines/tinsel/handle.cpp
+++ b/engines/tinsel/handle.cpp
@@ -99,14 +99,16 @@ void SetupHandleTable() {
MEMHANDLE *pH;
TinselFile f;
- if (f.open(TinselV1PSX? PSX_INDEX_FILENAME : INDEX_FILENAME)) {
+ const char *indexFileName = TinselV1PSX ? PSX_INDEX_FILENAME : INDEX_FILENAME;
+
+ if (f.open(indexFileName)) {
// get size of index file
len = f.size();
if (len > 0) {
if ((len % RECORD_SIZE) != 0) {
// index file is corrupt
- error(FILE_IS_CORRUPT, TinselV1PSX? PSX_INDEX_FILENAME : INDEX_FILENAME);
+ error(FILE_IS_CORRUPT, indexFileName);
}
// calc number of handles
@@ -132,16 +134,16 @@ void SetupHandleTable() {
if (f.eos() || f.err()) {
// index file is corrupt
- error(FILE_IS_CORRUPT, (TinselV1PSX? PSX_INDEX_FILENAME : INDEX_FILENAME));
+ error(FILE_IS_CORRUPT, indexFileName);
}
// close the file
f.close();
} else { // index file is corrupt
- error(FILE_IS_CORRUPT, (TinselV1PSX? PSX_INDEX_FILENAME : INDEX_FILENAME));
+ error(FILE_IS_CORRUPT, indexFileName);
}
} else { // cannot find the index file
- error(CANNOT_FIND_FILE, (TinselV1PSX? PSX_INDEX_FILENAME : INDEX_FILENAME));
+ error(CANNOT_FIND_FILE, indexFileName);
}
// allocate memory nodes and load all permanent graphics
diff --git a/engines/tinsel/music.cpp b/engines/tinsel/music.cpp
index fa5334a033..b3bfbcc5dc 100644
--- a/engines/tinsel/music.cpp
+++ b/engines/tinsel/music.cpp
@@ -131,16 +131,13 @@ bool PlayMidiSequence(uint32 dwFileOffset, bool bLoop) {
g_currentMidi = dwFileOffset;
g_currentLoop = bLoop;
- if (_vm->_config->_musicVolume != 0) {
- bool mute = false;
- if (ConfMan.hasKey("mute"))
- mute = ConfMan.getBool("mute");
+ bool mute = false;
+ if (ConfMan.hasKey("mute"))
+ mute = ConfMan.getBool("mute");
- SetMidiVolume(mute ? 0 : _vm->_config->_musicVolume);
- }
+ SetMidiVolume(mute ? 0 : _vm->_config->_musicVolume);
// the index and length of the last tune loaded
- static uint32 dwLastMidiIndex = 0; // FIXME: Avoid non-const global vars
uint32 dwSeqLen = 0; // length of the sequence
// Support for external music from the music enhancement project
@@ -181,61 +178,53 @@ bool PlayMidiSequence(uint32 dwFileOffset, bool bLoop) {
if (dwFileOffset == 0)
return true;
- if (dwFileOffset != dwLastMidiIndex) {
- Common::File midiStream;
-
- // open MIDI sequence file in binary mode
- if (!midiStream.open(MIDI_FILE))
- error(CANNOT_FIND_FILE, MIDI_FILE);
-
- // update index of last tune loaded
- dwLastMidiIndex = dwFileOffset;
-
- // move to correct position in the file
- midiStream.seek(dwFileOffset, SEEK_SET);
-
- // read the length of the sequence
- dwSeqLen = midiStream.readUint32LE();
-
- // make sure buffer is large enough for this sequence
- assert(dwSeqLen > 0 && dwSeqLen <= g_midiBuffer.size);
-
- // stop any currently playing tune
- _vm->_midiMusic->stop();
-
- // read the sequence
- if (midiStream.read(g_midiBuffer.pDat, dwSeqLen) != dwSeqLen)
- error(FILE_IS_CORRUPT, MIDI_FILE);
-
- midiStream.close();
-
- // WORKAROUND for bug #2820054 "DW1: No intro music at first start on Wii",
- // which actually affects all ports, since it's specific to the GRA version.
- //
- // The GRA version does not seem to set the channel volume at all for the first
- // intro track, thus we need to do that here. We only initialize the channels
- // used in that sequence. And we are using 127 as default channel volume.
- //
- // Only in the GRA version dwFileOffset can be "38888", just to be sure, we
- // check for the SCN files feature flag not being set though.
- if (_vm->getGameID() == GID_DW1 && dwFileOffset == 38888 && !(_vm->getFeatures() & GF_SCNFILES)) {
- _vm->_midiMusic->send(0x7F07B0 | 3);
- _vm->_midiMusic->send(0x7F07B0 | 5);
- _vm->_midiMusic->send(0x7F07B0 | 8);
- _vm->_midiMusic->send(0x7F07B0 | 10);
- _vm->_midiMusic->send(0x7F07B0 | 13);
- }
+ Common::File midiStream;
- _vm->_midiMusic->playMIDI(dwSeqLen, bLoop);
+ // open MIDI sequence file in binary mode
+ if (!midiStream.open(MIDI_FILE))
+ error(CANNOT_FIND_FILE, MIDI_FILE);
- // Store the length
- //dwLastSeqLen = dwSeqLen;
- } else {
- // dwFileOffset == dwLastMidiIndex
- _vm->_midiMusic->stop();
- _vm->_midiMusic->playMIDI(dwSeqLen, bLoop);
+ // move to correct position in the file
+ midiStream.seek(dwFileOffset, SEEK_SET);
+
+ // read the length of the sequence
+ dwSeqLen = midiStream.readUint32LE();
+
+ // make sure buffer is large enough for this sequence
+ assert(dwSeqLen > 0 && dwSeqLen <= g_midiBuffer.size);
+
+ // stop any currently playing tune
+ _vm->_midiMusic->stop();
+
+ // read the sequence. This needs to be read again before playSEQ() is
+ // called even if the music is restarting, as playSEQ() reads the file
+ // name off the buffer itself. However, that function adds SMF headers
+ // to the buffer, thus if it's read again, the SMF headers will be read
+ // and the filename will always be 'MThd'.
+ if (midiStream.read(g_midiBuffer.pDat, dwSeqLen) != dwSeqLen)
+ error(FILE_IS_CORRUPT, MIDI_FILE);
+
+ midiStream.close();
+
+ // WORKAROUND for bug #2820054 "DW1: No intro music at first start on Wii",
+ // which actually affects all ports, since it's specific to the GRA version.
+ //
+ // The GRA version does not seem to set the channel volume at all for the first
+ // intro track, thus we need to do that here. We only initialize the channels
+ // used in that sequence. And we are using 127 as default channel volume.
+ //
+ // Only in the GRA version dwFileOffset can be "38888", just to be sure, we
+ // check for the SCN files feature flag not being set though.
+ if (_vm->getGameID() == GID_DW1 && dwFileOffset == 38888 && !(_vm->getFeatures() & GF_SCNFILES)) {
+ _vm->_midiMusic->send(0x7F07B0 | 3);
+ _vm->_midiMusic->send(0x7F07B0 | 5);
+ _vm->_midiMusic->send(0x7F07B0 | 8);
+ _vm->_midiMusic->send(0x7F07B0 | 10);
+ _vm->_midiMusic->send(0x7F07B0 | 13);
}
+ _vm->_midiMusic->playMIDI(dwSeqLen, bLoop);
+
return true;
}
@@ -279,27 +268,7 @@ int GetMidiVolume() {
*/
void SetMidiVolume(int vol) {
assert(vol >= 0 && vol <= Audio::Mixer::kMaxChannelVolume);
-
- static int priorVolMusic = 0; // FIXME: Avoid non-const global vars
-
- if (vol == 0 && priorVolMusic == 0) {
- // Nothing to do
- } else if (vol == 0 && priorVolMusic != 0) {
- // Stop current midi sequence
- StopMidi();
- _vm->_midiMusic->setVolume(vol);
- } else if (vol != 0 && priorVolMusic == 0) {
- // Perhaps restart last midi sequence
- if (g_currentLoop)
- PlayMidiSequence(g_currentMidi, true);
-
- _vm->_midiMusic->setVolume(vol);
- } else if (vol != 0 && priorVolMusic != 0) {
- // Alter current volume
- _vm->_midiMusic->setVolume(vol);
- }
-
- priorVolMusic = vol;
+ _vm->_midiMusic->setVolume(vol);
}
/**
@@ -309,7 +278,7 @@ void OpenMidiFiles() {
Common::File midiStream;
// Demo version has no midi file
- if ((_vm->getFeatures() & GF_DEMO) || (TinselVersion == TINSEL_V2))
+ if (TinselV0 || TinselV2)
return;
if (g_midiBuffer.pDat)
@@ -942,14 +911,12 @@ void RestoreMidiFacts(SCNHANDLE Midi, bool Loop) {
g_currentMidi = Midi;
g_currentLoop = Loop;
- if (_vm->_config->_musicVolume != 0 && Loop) {
- bool mute = false;
- if (ConfMan.hasKey("mute"))
- mute = ConfMan.getBool("mute");
+ bool mute = false;
+ if (ConfMan.hasKey("mute"))
+ mute = ConfMan.getBool("mute");
- PlayMidiSequence(g_currentMidi, true);
- SetMidiVolume(mute ? 0 : _vm->_config->_musicVolume);
- }
+ PlayMidiSequence(g_currentMidi, true);
+ SetMidiVolume(mute ? 0 : _vm->_config->_musicVolume);
}
#if 0
diff --git a/engines/tinsel/pcode.cpp b/engines/tinsel/pcode.cpp
index 60f04b47fd..6ea18c8268 100644
--- a/engines/tinsel/pcode.cpp
+++ b/engines/tinsel/pcode.cpp
@@ -122,6 +122,8 @@ static uint32 g_hMasterScript;
struct WorkaroundEntry {
TinselEngineVersion version; ///< Engine version this workaround applies to
bool scnFlag; ///< Only applicable for Tinsel 1 (DW 1)
+ bool isDemo; ///< Flags whether it's for a demo
+ Common::Platform platform; ///< Platform filter
SCNHANDLE hCode; ///< Script to apply fragment to
int ip; ///< Script offset to run this fragment before
int numBytes; ///< Number of bytes in the script
@@ -129,6 +131,7 @@ struct WorkaroundEntry {
};
#define FRAGMENT_WORD(x) (byte)(x & 0xFF), (byte)(x >> 8)
+#define FRAGMENT_DWORD(x) (byte)(x & 0xFF), (byte)(x >> 8), (byte)(x >> 16), (byte)(x >> 24)
static const byte fragment1[] = {OP_ZERO, OP_GSTORE | OPSIZE16, 206, 0};
static const byte fragment2[] = {OP_LIBCALL | OPSIZE8, 110};
@@ -149,6 +152,10 @@ static const byte fragment12[] = {OP_JMPTRUE | OPSIZE16, FRAGMENT_WORD(1491),
OP_IMM | OPSIZE16, FRAGMENT_WORD(322), OP_LIBCALL | OPSIZE8, 46, // Give back the whistle
OP_JUMP | OPSIZE16, FRAGMENT_WORD(1568)};
static const byte fragment13[] = {OP_ZERO, OP_GSTORE | OPSIZE16, FRAGMENT_WORD(306)};
+static const byte fragment14[] = {OP_LIBCALL | OPSIZE8, 58,
+ OP_IMM, FRAGMENT_DWORD((42 << 23)), OP_ONE, OP_ZERO, OP_LIBCALL | OPSIZE8, 44,
+ OP_LIBCALL | OPSIZE8, 97, OP_JUMP | OPSIZE16, FRAGMENT_WORD(2220)
+};
#undef FRAGMENT_WORD
@@ -157,7 +164,7 @@ const WorkaroundEntry workaroundList[] = {
// book back to the present. In the GRA version, it was global 373,
// and was reset when he is returned to the past, but was forgotten
// in the SCN version, so this ensures the flag is properly reset.
- {TINSEL_V1, true, 427942095, 1, sizeof(fragment1), fragment1},
+ {TINSEL_V1, true, false, Common::kPlatformUnknown, 427942095, 1, sizeof(fragment1), fragment1},
// DW1-GRA: Rincewind exiting the Inn is blocked by the luggage.
// Whilst you can then move into walkable areas, saving and
@@ -165,26 +172,26 @@ const WorkaroundEntry workaroundList[] = {
// fragment turns off NPC blocking for the Outside Inn rooms so that
// the luggage won't block Past Outside Inn.
// See bug report #2525010.
- {TINSEL_V1, false, 444622076, 0, sizeof(fragment2), fragment2},
+ {TINSEL_V1, false, false, Common::kPlatformUnknown, 444622076, 0, sizeof(fragment2), fragment2},
// Present Outside Inn
- {TINSEL_V1, false, 352600876, 0, sizeof(fragment2), fragment2},
+ {TINSEL_V1, false, false, Common::kPlatformUnknown, 352600876, 0, sizeof(fragment2), fragment2},
// DW1-GRA: Talking to palace guards in Act 2 gives !!!HIGH
// STRING||| - this happens if you initiate dialog with one of the
// guards, but not the other. So these fragments provide the correct
// talk parameters where needed.
// See bug report #2831159.
- {TINSEL_V1, false, 310506872, 463, sizeof(fragment4), fragment4},
- {TINSEL_V1, false, 310506872, 485, sizeof(fragment5), fragment5},
- {TINSEL_V1, false, 310506872, 513, sizeof(fragment6), fragment6},
- {TINSEL_V1, false, 310506872, 613, sizeof(fragment7), fragment7},
- {TINSEL_V1, false, 310506872, 641, sizeof(fragment8), fragment8},
+ {TINSEL_V1, false, false, Common::kPlatformUnknown, 310506872, 463, sizeof(fragment4), fragment4},
+ {TINSEL_V1, false, false, Common::kPlatformUnknown, 310506872, 485, sizeof(fragment5), fragment5},
+ {TINSEL_V1, false, false, Common::kPlatformUnknown, 310506872, 513, sizeof(fragment6), fragment6},
+ {TINSEL_V1, false, false, Common::kPlatformUnknown, 310506872, 613, sizeof(fragment7), fragment7},
+ {TINSEL_V1, false, false, Common::kPlatformUnknown, 310506872, 641, sizeof(fragment8), fragment8},
// DW1-SCN: The script for the lovable street-Starfish does a
// 'StopSample' after flicking the coin to ensure it's sound is
// stopped, but which also accidentally can stop any active
// conversation with the Amazon.
- {TINSEL_V1, true, 394640351, 121, sizeof(fragment9), fragment9},
+ {TINSEL_V1, true, false, Common::kPlatformUnknown, 394640351, 121, sizeof(fragment9), fragment9},
// DW2: In the garden, global #490 is set when the bees begin their
// 'out of hive' animation, and reset when done. But if the game is
@@ -197,25 +204,29 @@ const WorkaroundEntry workaroundList[] = {
// * Stealing the mallets from the wizards (bug #2820788).
// This fix ensures that the global is reset when the Garden scene
// is loaded (both entering and restoring a game).
- {TINSEL_V2, true, 2888147476U, 0, sizeof(fragment3), fragment3},
+ {TINSEL_V2, true, false, Common::kPlatformUnknown, 2888147476U, 0, sizeof(fragment3), fragment3},
// DW1-GRA: Corrects text being drawn partially off-screen during
// the blackboard description of the Librarian.
- {TINSEL_V1, false, 293831402, 133, sizeof(fragment10), fragment10},
+ {TINSEL_V1, false, false, Common::kPlatformUnknown, 293831402, 133, sizeof(fragment10), fragment10},
// DW1-GRA/SCN: Corrects the dead-end of being able to give the
// whistle back to the pirate before giving him the parrot.
// See bug report #2934211.
- {TINSEL_V1, true, 352601285, 1569, sizeof(fragment11), fragment11},
- {TINSEL_V1, false, 352602304, 1488, sizeof(fragment12), fragment12},
+ {TINSEL_V1, true, false, Common::kPlatformUnknown, 352601285, 1569, sizeof(fragment11), fragment11},
+ {TINSEL_V1, false, false, Common::kPlatformUnknown, 352602304, 1488, sizeof(fragment12), fragment12},
// DW2: Corrects a bug with global 306 not being cleared if you leave
// the marketplace scene whilst D'Blah is talking (even if it's not
// actually audible); returning to the scene and clicking on him multiple
// times would cause the game to crash
- {TINSEL_V2, true, 1109294728, 0, sizeof(fragment13), fragment13},
+ {TINSEL_V2, true, false, Common::kPlatformUnknown, 1109294728, 0, sizeof(fragment13), fragment13},
+
+ // DW1 PSX DEMO: Alters a script in the PSX DW1 demo to show the Idle animation scene rather than
+ // quitting the game when no user input happens for a while
+ {TINSEL_V1, true, true, Common::kPlatformPSX, 0, 2186, sizeof(fragment14), fragment14},
- {TINSEL_V0, false, 0, 0, 0, NULL}
+ {TINSEL_V0, false, false, Common::kPlatformUnknown, 0, 0, 0, NULL}
};
//----------------- LOCAL GLOBAL DATA --------------------
@@ -582,6 +593,8 @@ void Interpret(CORO_PARAM, INT_CONTEXT *ic) {
if ((wkEntry->version == TinselVersion) &&
(wkEntry->hCode == ic->hCode) &&
(wkEntry->ip == ip) &&
+ (wkEntry->isDemo == _vm->getIsADGFDemo()) &&
+ ((wkEntry->platform == Common::kPlatformUnknown) || (wkEntry->platform == _vm->getPlatform())) &&
(!TinselV1 || (wkEntry->scnFlag == ((_vm->getFeatures() & GF_SCNFILES) != 0)))) {
// Point to start of workaround fragment
ip = 0;
diff --git a/engines/tinsel/scene.h b/engines/tinsel/scene.h
index baaff27a3e..06e5c096d9 100644
--- a/engines/tinsel/scene.h
+++ b/engines/tinsel/scene.h
@@ -75,9 +75,9 @@ enum REEL {
typedef enum { TRANS_DEF, TRANS_CUT, TRANS_FADE } TRANSITS;
// amount to shift scene handles by
-#define SCNHANDLE_SHIFT ((TinselV2 && !IsDemo) ? 25 : 23)
-#define OFFSETMASK ((TinselV2 && !IsDemo) ? 0x01ffffffL : 0x007fffffL)
-#define HANDLEMASK ((TinselV2 && !IsDemo) ? 0xFE000000L : 0xFF800000L)
+#define SCNHANDLE_SHIFT ((TinselV2 && !TinselV2Demo) ? 25 : 23)
+#define OFFSETMASK ((TinselV2 && !TinselV2Demo) ? 0x01ffffffL : 0x007fffffL)
+#define HANDLEMASK ((TinselV2 && !TinselV2Demo) ? 0xFE000000L : 0xFF800000L)
void DoHailScene(SCNHANDLE scene);
diff --git a/engines/tinsel/sound.cpp b/engines/tinsel/sound.cpp
index f575b03270..e052302cfd 100644
--- a/engines/tinsel/sound.cpp
+++ b/engines/tinsel/sound.cpp
@@ -75,7 +75,7 @@ SoundManager::~SoundManager() {
// playSample for DiscWorld 1
bool SoundManager::playSample(int id, Audio::Mixer::SoundType type, Audio::SoundHandle *handle) {
// Floppy version has no sample file
- if (_vm->getFeatures() & GF_FLOPPY)
+ if (!_vm->isCD())
return false;
// no sample driver?
@@ -182,7 +182,7 @@ bool SoundManager::playSample(int id, int sub, bool bLooped, int x, int y, int p
Audio::Mixer::SoundType type, Audio::SoundHandle *handle) {
// Floppy version has no sample file
- if (_vm->getFeatures() & GF_FLOPPY)
+ if (!_vm->isCD())
return false;
// no sample driver?
@@ -471,7 +471,7 @@ void SoundManager::setSFXVolumes(uint8 volume) {
*/
void SoundManager::openSampleFiles() {
// Floppy and demo versions have no sample files, except for the Discworld 2 demo
- if (_vm->getFeatures() & GF_FLOPPY || (IsDemo && !TinselV2))
+ if (!_vm->isCD() || TinselV0)
return;
TinselFile f;
diff --git a/engines/tinsel/tinlib.cpp b/engines/tinsel/tinlib.cpp
index 5dda836144..058f8eb6fd 100644
--- a/engines/tinsel/tinlib.cpp
+++ b/engines/tinsel/tinlib.cpp
@@ -1625,10 +1625,6 @@ static void Play(CORO_PARAM, SCNHANDLE hFilm, int x, int y, bool bComplete, int
* Play a midi file.
*/
static void PlayMidi(CORO_PARAM, SCNHANDLE hMidi, int loop, bool complete) {
- // FIXME: This is a workaround for the FIXME below
- if (GetMidiVolume() == 0)
- return;
-
CORO_BEGIN_CONTEXT;
CORO_END_CONTEXT(_ctx);
@@ -1637,18 +1633,13 @@ static void PlayMidi(CORO_PARAM, SCNHANDLE hMidi, int loop, bool complete) {
PlayMidiSequence(hMidi, loop == MIDI_LOOP);
- // FIXME: The following check messes up the script arguments when
- // entering the secret door in the bookshelf in the library,
- // leading to a crash, when the music volume is set to 0 (MidiPlaying()
- // always false then).
- //
- // Why exactly this happens is unclear. An analysis of the involved
- // script(s) might reveal more.
- //
- // Note: This check&sleep was added in DW v2. It was most likely added
- // to ensure that the MIDI song started playing before the next opcode
+ // This check&sleep was added in DW v2. It was most likely added to
+ // ensure that the MIDI song started playing before the next opcode
// is executed.
- if (!MidiPlaying())
+ // In DW1, it messes up the script arguments when entering the secret
+ // door in the bookshelf in the library, leading to a crash, when the
+ // music volume is set to 0.
+ if (!MidiPlaying() && TinselV2)
CORO_SLEEP(1);
if (complete) {
@@ -3412,7 +3403,7 @@ static void TalkOrSay(CORO_PARAM, SPEECH_TYPE speechType, SCNHANDLE hText, int x
// Kick off the sample now (perhaps with a delay)
if (g_bNoPause)
g_bNoPause = false;
- else if (!IsDemo)
+ else if (!TinselV2Demo)
CORO_SLEEP(SysVar(SV_SPEECHDELAY));
//SamplePlay(VOICE, hText, _ctx->sub, false, -1, -1, PRIORITY_TALK);
@@ -4244,7 +4235,7 @@ int CallLibraryRoutine(CORO_PARAM, int operand, int32 *pp, const INT_CONTEXT *pi
int libCode;
if (TinselV0) libCode = DW1DEMO_CODES[operand];
else if (!TinselV2) libCode = DW1_CODES[operand];
- else if (_vm->getFeatures() & GF_DEMO) libCode = DW2DEMO_CODES[operand];
+ else if (TinselV2Demo) libCode = DW2DEMO_CODES[operand];
else libCode = DW2_CODES[operand];
debug(7, "CallLibraryRoutine op %d (escOn %d, myEscape %d)", operand, pic->escOn, pic->myEscape);
diff --git a/engines/tinsel/tinsel.h b/engines/tinsel/tinsel.h
index bac7ef6efb..123249125e 100644
--- a/engines/tinsel/tinsel.h
+++ b/engines/tinsel/tinsel.h
@@ -63,21 +63,16 @@ enum TinselGameID {
};
enum TinselGameFeatures {
- GF_DEMO = 1 << 0,
- GF_CD = 1 << 1,
- GF_FLOPPY = 1 << 2,
- GF_SCNFILES = 1 << 3,
- GF_ENHANCED_AUDIO_SUPPORT = 1 << 4,
- GF_ALT_MIDI = 1 << 5, // Alternate sequence in midi.dat file
+ GF_SCNFILES = 1 << 0,
+ GF_ENHANCED_AUDIO_SUPPORT = 1 << 1,
+ GF_ALT_MIDI = 1 << 2, // Alternate sequence in midi.dat file
// The GF_USE_?FLAGS values specify how many country flags are displayed
// in the subtitles options dialog.
// None of these defined -> 1 language, in ENGLISH.TXT
- GF_USE_3FLAGS = 1 << 6, // French, German, Spanish
- GF_USE_4FLAGS = 1 << 7, // French, German, Spanish, Italian
- GF_USE_5FLAGS = 1 << 8, // All 5 flags
-
- GF_BIG_ENDIAN = 1 << 9
+ GF_USE_3FLAGS = 1 << 3, // French, German, Spanish
+ GF_USE_4FLAGS = 1 << 4, // French, German, Spanish, Italian
+ GF_USE_5FLAGS = 1 << 5 // All 5 flags
};
/**
@@ -134,13 +129,12 @@ typedef bool (*KEYFPTR)(const Common::KeyState &);
#define TinselV0 (TinselVersion == TINSEL_V0)
#define TinselV1 (TinselVersion == TINSEL_V1)
#define TinselV2 (TinselVersion == TINSEL_V2)
+#define TinselV2Demo (TinselVersion == TINSEL_V2 && _vm->getIsADGFDemo())
#define TinselV1PSX (TinselVersion == TINSEL_V1 && _vm->getPlatform() == Common::kPlatformPSX)
#define TinselV1Mac (TinselVersion == TINSEL_V1 && _vm->getPlatform() == Common::kPlatformMacintosh)
-#define IsDemo (_vm->getFeatures() & GF_DEMO)
-
-#define READ_16(v) ((_vm->getFeatures() & GF_BIG_ENDIAN) ? READ_BE_UINT16(v) : READ_LE_UINT16(v))
-#define READ_32(v) ((_vm->getFeatures() & GF_BIG_ENDIAN) ? READ_BE_UINT32(v) : READ_LE_UINT32(v))
+#define READ_16(v) (TinselV1Mac ? READ_BE_UINT16(v) : READ_LE_UINT16(v))
+#define READ_32(v) (TinselV1Mac ? READ_BE_UINT32(v) : READ_LE_UINT32(v))
// Global reference to the TinselEngine object
extern TinselEngine *_vm;
@@ -186,6 +180,8 @@ public:
uint16 getVersion() const;
uint32 getFlags() const;
Common::Platform getPlatform() const;
+ bool getIsADGFDemo() const;
+ bool isCD() const;
const char *getSampleIndex(LANGUAGE lang);
const char *getSampleFile(LANGUAGE lang);
diff --git a/engines/toltecs/detection.cpp b/engines/toltecs/detection.cpp
index c532bbbf09..c1a57638c2 100644
--- a/engines/toltecs/detection.cpp
+++ b/engines/toltecs/detection.cpp
@@ -273,8 +273,6 @@ SaveStateDescriptor ToltecsMetaEngine::querySaveMetaInfos(const char *target, in
if (error == Toltecs::ToltecsEngine::kRSHENoError) {
SaveStateDescriptor desc(slot, header.description);
- desc.setDeletableFlag(true);
- desc.setWriteProtectedFlag(false);
desc.setThumbnail(header.thumbnail);
if (header.version > 0) {
diff --git a/engines/toon/anim.cpp b/engines/toon/anim.cpp
index a4eb1f210c..1c85a8d798 100644
--- a/engines/toon/anim.cpp
+++ b/engines/toon/anim.cpp
@@ -132,7 +132,7 @@ Common::Rect Animation::getRect() {
return Common::Rect(_x1, _y1, _x2, _y2);
}
-void Animation::drawFrame(Graphics::Surface &surface, int32 frame, int32 xx, int32 yy) {
+void Animation::drawFrame(Graphics::Surface &surface, int32 frame, int16 xx, int16 yy) {
debugC(3, kDebugAnim, "drawFrame(surface, %d, %d, %d)", frame, xx, yy);
if (frame < 0)
frame = 0;
@@ -149,10 +149,10 @@ void Animation::drawFrame(Graphics::Surface &surface, int32 frame, int32 xx, int
if (!_frames[frame]._data)
return;
- int32 rectX = _frames[frame]._x2 - _frames[frame]._x1;
- int32 rectY = _frames[frame]._y2 - _frames[frame]._y1;
- int32 offsX = 0;
- int32 offsY = 0;
+ int16 rectX = _frames[frame]._x2 - _frames[frame]._x1;
+ int16 rectY = _frames[frame]._y2 - _frames[frame]._y1;
+ int16 offsX = 0;
+ int16 offsY = 0;
_vm->addDirtyRect(xx + _x1 + _frames[frame]._x1, yy + _y1 + _frames[frame]._y1, xx + rectX + _x1 + _frames[frame]._x1 , yy + rectY + _y1 + _frames[frame]._y1);
@@ -189,10 +189,10 @@ void Animation::drawFrame(Graphics::Surface &surface, int32 frame, int32 xx, int
int32 destPitch = surface.pitch;
uint8 *srcRow = _frames[frame]._data + offsX + (_frames[frame]._x2 - _frames[frame]._x1) * offsY;
uint8 *curRow = (uint8 *)surface.pixels + (yy + _frames[frame]._y1 + _y1 + offsY) * destPitch + (xx + _x1 + _frames[frame]._x1 + offsX);
- for (int32 y = 0; y < rectY; y++) {
+ for (int16 y = 0; y < rectY; y++) {
uint8 *cur = curRow;
uint8 *c = srcRow + y * (_frames[frame]._x2 - _frames[frame]._x1);
- for (int32 x = 0; x < rectX; x++) {
+ for (int16 x = 0; x < rectX; x++) {
if (*c)
*cur = *c;
c++;
@@ -202,27 +202,27 @@ void Animation::drawFrame(Graphics::Surface &surface, int32 frame, int32 xx, int
}
}
-void Animation::drawFrameWithMask(Graphics::Surface &surface, int32 frame, int32 xx, int32 yy, int32 zz, Picture *mask) {
+void Animation::drawFrameWithMask(Graphics::Surface &surface, int32 frame, int16 xx, int16 yy, int32 zz, Picture *mask) {
debugC(1, kDebugAnim, "drawFrameWithMask(surface, %d, %d, %d, %d, mask)", frame, xx, yy, zz);
warning("STUB: drawFrameWithMask()");
}
-void Animation::drawFrameWithMaskAndScale(Graphics::Surface &surface, int32 frame, int32 xx, int32 yy, int32 zz, Picture *mask, int32 scale) {
+void Animation::drawFrameWithMaskAndScale(Graphics::Surface &surface, int32 frame, int16 xx, int16 yy, int32 zz, Picture *mask, int32 scale) {
debugC(5, kDebugAnim, "drawFrameWithMaskAndScale(surface, %d, %d, %d, %d, mask, %d)", frame, xx, yy, zz, scale);
if (_frames[frame]._ref != -1)
frame = _frames[frame]._ref;
- int32 rectX = _frames[frame]._x2 - _frames[frame]._x1;
- int32 rectY = _frames[frame]._y2 - _frames[frame]._y1;
+ int16 rectX = _frames[frame]._x2 - _frames[frame]._x1;
+ int16 rectY = _frames[frame]._y2 - _frames[frame]._y1;
- int32 finalWidth = rectX * scale / 1024;
- int32 finalHeight = rectY * scale / 1024;
+ int16 finalWidth = rectX * scale / 1024;
+ int16 finalHeight = rectY * scale / 1024;
// compute final x1, y1, x2, y2
- int32 xx1 = xx + _x1 + _frames[frame]._x1 * scale / 1024;
- int32 yy1 = yy + _y1 + _frames[frame]._y1 * scale / 1024;
- int32 xx2 = xx1 + finalWidth;
- int32 yy2 = yy1 + finalHeight;
- int32 w = _frames[frame]._x2 - _frames[frame]._x1;
+ int16 xx1 = xx + _x1 + _frames[frame]._x1 * scale / 1024;
+ int16 yy1 = yy + _y1 + _frames[frame]._y1 * scale / 1024;
+ int16 xx2 = xx1 + finalWidth;
+ int16 yy2 = yy1 + finalHeight;
+ int16 w = _frames[frame]._x2 - _frames[frame]._x1;
_vm->addDirtyRect(xx1, yy1, xx2, yy2);
@@ -236,8 +236,8 @@ void Animation::drawFrameWithMaskAndScale(Graphics::Surface &surface, int32 fram
if (strstr(_name, "SHADOW"))
shadowFlag = true;
- for (int32 y = yy1; y < yy2; y++) {
- for (int32 x = xx1; x < xx2; x++) {
+ for (int16 y = yy1; y < yy2; y++) {
+ for (int16 x = xx1; x < xx2; x++) {
if (x < 0 || x >= 1280 || y < 0 || y >= 400)
continue;
@@ -245,8 +245,8 @@ void Animation::drawFrameWithMaskAndScale(Graphics::Surface &surface, int32 fram
uint8 *curMask = curRowMask + x + y * destPitchMask;
// find the good c
- int32 xs = (x - xx1) * 1024 / scale;
- int32 ys = (y - yy1) * 1024 / scale;
+ int16 xs = (x - xx1) * 1024 / scale;
+ int16 ys = (y - yy1) * 1024 / scale;
uint8 *cc = &c[ys * w + xs];
if (*cc && ((*curMask) >= zz)) {
if (shadowFlag)
@@ -275,7 +275,7 @@ Common::Rect Animation::getFrameRect(int32 frame) {
return Common::Rect(_frames[frame]._x1, _frames[frame]._y1, _frames[frame]._x2, _frames[frame]._y2);
}
-int32 Animation::getFrameWidth(int32 frame) {
+int16 Animation::getFrameWidth(int32 frame) {
debugC(4, kDebugAnim, "getFrameWidth(%d)", frame);
if ((frame < 0) || (frame >= _numFrames))
return 0;
@@ -286,7 +286,7 @@ int32 Animation::getFrameWidth(int32 frame) {
return _frames[frame]._x2 - _frames[frame]._x1;
}
-int32 Animation::getFrameHeight(int32 frame) {
+int16 Animation::getFrameHeight(int32 frame) {
debugC(4, kDebugAnim, "getFrameHeight(%d)", frame);
if (frame < 0 || frame >= _numFrames)
return 0;
@@ -297,15 +297,15 @@ int32 Animation::getFrameHeight(int32 frame) {
return _frames[frame]._y2 - _frames[frame]._y1;
}
-int32 Animation::getWidth() const {
+int16 Animation::getWidth() const {
return _x2 - _x1;
}
-int32 Animation::getHeight() const {
+int16 Animation::getHeight() const {
return _y2 - _y1;
}
-void Animation::drawFontFrame(Graphics::Surface &surface, int32 frame, int32 xx, int32 yy, byte *colorMap) {
+void Animation::drawFontFrame(Graphics::Surface &surface, int32 frame, int16 xx, int16 yy, byte *colorMap) {
debugC(4, kDebugAnim, "drawFontFrame(surface, %d, %d, %d, colorMap)", frame, xx, yy);
if (frame < 0)
frame = 0;
@@ -319,8 +319,8 @@ void Animation::drawFontFrame(Graphics::Surface &surface, int32 frame, int32 xx,
if (_frames[frame]._ref != -1)
frame = _frames[frame]._ref;
- int32 rectX = _frames[frame]._x2 - _frames[frame]._x1;
- int32 rectY = _frames[frame]._y2 - _frames[frame]._y1;
+ int16 rectX = _frames[frame]._x2 - _frames[frame]._x1;
+ int16 rectY = _frames[frame]._y2 - _frames[frame]._y1;
if ((xx + _x1 + _frames[frame]._x1 < 0) || (yy + _y1 + _frames[frame]._y1 < 0))
return;
@@ -340,9 +340,9 @@ void Animation::drawFontFrame(Graphics::Surface &surface, int32 frame, int32 xx,
int32 destPitch = surface.pitch;
uint8 *c = _frames[frame]._data;
uint8 *curRow = (uint8 *)surface.pixels + (yy + _frames[frame]._y1 + _y1) * destPitch + (xx + _x1 + _frames[frame]._x1);
- for (int32 y = 0; y < rectY; y++) {
+ for (int16 y = 0; y < rectY; y++) {
unsigned char *cur = curRow;
- for (int32 x = 0; x < rectX; x++) {
+ for (int16 x = 0; x < rectX; x++) {
if (*c && *c < 4)
*cur = colorMap[*c];
c++;
@@ -352,7 +352,7 @@ void Animation::drawFontFrame(Graphics::Surface &surface, int32 frame, int32 xx,
}
}
-void Animation::drawFrameOnPicture(int32 frame, int32 xx, int32 yy) {
+void Animation::drawFrameOnPicture(int32 frame, int16 xx, int16 yy) {
debugC(1, kDebugAnim, "drawFrameOnPicture(%d, %d, %d)", frame, xx, yy);
if (frame < 0)
frame = 0;
@@ -366,8 +366,8 @@ void Animation::drawFrameOnPicture(int32 frame, int32 xx, int32 yy) {
if (_frames[frame]._ref != -1)
frame = _frames[frame]._ref;
- int32 rectX = _frames[frame]._x2 - _frames[frame]._x1;
- int32 rectY = _frames[frame]._y2 - _frames[frame]._y1;
+ int16 rectX = _frames[frame]._x2 - _frames[frame]._x1;
+ int16 rectY = _frames[frame]._y2 - _frames[frame]._y1;
Picture *pic = _vm->getPicture();
@@ -389,9 +389,9 @@ void Animation::drawFrameOnPicture(int32 frame, int32 xx, int32 yy) {
int32 destPitch = pic->getWidth();
uint8 *c = _frames[frame]._data;
uint8 *curRow = (uint8 *)pic->getDataPtr() + (yy + _frames[frame]._y1 + _y1) * destPitch + (xx + _x1 + _frames[frame]._x1);
- for (int32 y = 0; y < rectY; y++) {
+ for (int16 y = 0; y < rectY; y++) {
unsigned char *cur = curRow;
- for (int32 x = 0; x < rectX; x++) {
+ for (int16 x = 0; x < rectX; x++) {
if (*c)
*cur = *c;
c++;
@@ -458,8 +458,8 @@ void AnimationInstance::render() {
if (frame >= _animation->_numFrames)
frame = _animation->_numFrames - 1;
- int32 x = _x;
- int32 y = _y;
+ int16 x = _x;
+ int16 y = _y;
if (_alignBottom) {
int32 offsetX = (_animation->_x2 - _animation->_x1) / 2 * (_scale - 1024);
@@ -501,7 +501,7 @@ void AnimationInstance::setAnimation(Animation *animation, bool setRange) {
}
}
-void AnimationInstance::setAnimationRange(int32 rangeStart, int rangeEnd) {
+void AnimationInstance::setAnimationRange(int32 rangeStart, int32 rangeEnd) {
debugC(5, kDebugAnim, "setAnimationRange(%d, %d)", rangeStart, rangeEnd);
_rangeStart = rangeStart;
_rangeEnd = rangeEnd;
@@ -513,7 +513,7 @@ void AnimationInstance::setAnimationRange(int32 rangeStart, int rangeEnd) {
_currentFrame = _rangeEnd;
}
-void AnimationInstance::setPosition(int32 x, int32 y, int32 z, bool relative) {
+void AnimationInstance::setPosition(int16 x, int16 y, int32 z, bool relative) {
debugC(5, kDebugAnim, "setPosition(%d, %d, %d, %d)", x, y, z, (relative) ? 1 : 0);
if (relative || !_animation) {
_x = x;
@@ -526,7 +526,7 @@ void AnimationInstance::setPosition(int32 x, int32 y, int32 z, bool relative) {
}
}
-void AnimationInstance::moveRelative(int32 dx, int32 dy, int32 dz) {
+void AnimationInstance::moveRelative(int16 dx, int16 dy, int32 dz) {
debugC(1, kDebugAnim, "moveRelative(%d, %d, %d)", dx, dy, dz);
_x += dx;
_y += dy;
@@ -571,13 +571,13 @@ void AnimationInstance::setUseMask(bool useMask) {
_useMask = useMask;
}
-void AnimationInstance::getRect(int32 *x1, int32 *y1, int32 *x2, int32 *y2) const {
+void AnimationInstance::getRect(int16 *x1, int16 *y1, int16 *x2, int16 *y2) const {
debugC(5, kDebugAnim, "getRect(%d, %d, %d, %d)", *x1, *y1, *x2, *y2);
- int32 rectX = _animation->_frames[_currentFrame]._x2 - _animation->_frames[_currentFrame]._x1;
- int32 rectY = _animation->_frames[_currentFrame]._y2 - _animation->_frames[_currentFrame]._y1;
+ int16 rectX = _animation->_frames[_currentFrame]._x2 - _animation->_frames[_currentFrame]._x1;
+ int16 rectY = _animation->_frames[_currentFrame]._y2 - _animation->_frames[_currentFrame]._y1;
- int32 finalWidth = rectX * _scale / 1024;
- int32 finalHeight = rectY * _scale / 1024;
+ int16 finalWidth = rectX * _scale / 1024;
+ int16 finalHeight = rectY * _scale / 1024;
// compute final x1, y1, x2, y2
*x1 = _x + _animation->_x1 + _animation->_frames[_currentFrame]._x1 * _scale / 1024;
@@ -586,7 +586,7 @@ void AnimationInstance::getRect(int32 *x1, int32 *y1, int32 *x2, int32 *y2) cons
*y2 = *y1 + finalHeight;
}
-void AnimationInstance::setX(int32 x, bool relative) {
+void AnimationInstance::setX(int16 x, bool relative) {
debugC(1, kDebugAnim, "setX(%d, %d)", x, (relative) ? 1 : 0);
if (relative || !_animation)
_x = x;
@@ -594,7 +594,7 @@ void AnimationInstance::setX(int32 x, bool relative) {
_x = x - _animation->_x1;
}
-void AnimationInstance::setY(int32 y, bool relative) {
+void AnimationInstance::setY(int16 y, bool relative) {
debugC(1, kDebugAnim, "setY(%d, %d)", y, (relative) ? 1 : 0);
if (relative || !_animation)
_y = y;
@@ -617,11 +617,11 @@ int32 AnimationInstance::getLayerZ() const {
return _layerZ;
}
-int32 AnimationInstance::getX2() const {
+int16 AnimationInstance::getX2() const {
return _x + _animation->_x1;
}
-int32 AnimationInstance::getY2() const {
+int16 AnimationInstance::getY2() const {
return _y + _animation->_y1;
}
@@ -650,6 +650,7 @@ void AnimationInstance::save(Common::WriteStream *stream) {
stream->writeSint32LE(_visible);
stream->writeSint32LE(_useMask);
}
+
void AnimationInstance::load(Common::ReadStream *stream) {
_currentFrame = stream->readSint32LE();
_currentTime = stream->readSint32LE();
@@ -698,14 +699,13 @@ void AnimationManager::updateInstance(AnimationInstance* instance) {
}
void AnimationManager::addInstance(AnimationInstance *instance) {
-
// if the instance already exists, we skip the add
for (uint32 i = 0; i < _instances.size(); i++) {
if (_instances[i] == instance)
return;
}
- int found = -1;
+ int32 found = -1;
// here we now do an ordered insert (closer to the original game)
for (uint32 i = 0; i < _instances.size(); i++) {
@@ -715,11 +715,10 @@ void AnimationManager::addInstance(AnimationInstance *instance) {
}
}
- if ( found == -1 ) {
+ if (found == -1)
_instances.push_back(instance);
- } else {
+ else
_instances.insert_at(found, instance);
- }
}
void AnimationManager::removeInstance(AnimationInstance *instance) {
diff --git a/engines/toon/anim.h b/engines/toon/anim.h
index eb8dcbd600..cd550b2621 100644
--- a/engines/toon/anim.h
+++ b/engines/toon/anim.h
@@ -36,10 +36,10 @@ class Picture;
class ToonEngine;
struct AnimationFrame {
- int32 _x1;
- int32 _y1;
- int32 _x2;
- int32 _y2;
+ int16 _x1;
+ int16 _y1;
+ int16 _x2;
+ int16 _y2;
int32 _ref;
uint8 *_data;
};
@@ -49,10 +49,10 @@ public:
Animation(ToonEngine *vm);
~Animation();
- int32 _x1;
- int32 _y1;
- int32 _x2;
- int32 _y2;
+ int16 _x1;
+ int16 _y1;
+ int16 _x2;
+ int16 _y2;
int32 _numFrames;
int32 _fps;
AnimationFrame *_frames;
@@ -61,18 +61,18 @@ public:
char _name[32];
bool loadAnimation(const Common::String &file);
- void drawFrame(Graphics::Surface &surface, int32 frame, int32 x, int32 y);
- void drawFontFrame(Graphics::Surface &surface, int32 frame, int32 x, int32 y, byte *colorMap);
- void drawFrameOnPicture(int32 frame, int32 x, int32 y);
- void drawFrameWithMask(Graphics::Surface &surface, int32 frame, int32 xx, int32 yy, int32 zz, Picture *mask);
- void drawFrameWithMaskAndScale(Graphics::Surface &surface, int32 frame, int32 xx, int32 yy, int32 zz, Picture *mask, int32 scale);
+ void drawFrame(Graphics::Surface &surface, int32 frame, int16 x, int16 y);
+ void drawFontFrame(Graphics::Surface &surface, int32 frame, int16 x, int16 y, byte *colorMap);
+ void drawFrameOnPicture(int32 frame, int16 x, int16 y);
+ void drawFrameWithMask(Graphics::Surface &surface, int32 frame, int16 xx, int16 yy, int32 zz, Picture *mask);
+ void drawFrameWithMaskAndScale(Graphics::Surface &surface, int32 frame, int16 xx, int16 yy, int32 zz, Picture *mask, int32 scale);
void drawStrip(int32 offset = 0);
void applyPalette(int32 offset, int32 srcOffset, int32 numEntries);
Common::Rect getFrameRect(int32 frame);
- int32 getFrameWidth(int32 frame);
- int32 getFrameHeight(int32 frame);
- int32 getWidth() const;
- int32 getHeight() const;
+ int16 getFrameWidth(int32 frame);
+ int16 getFrameHeight(int32 frame);
+ int16 getWidth() const;
+ int16 getHeight() const;
Common::Rect getRect();
protected:
ToonEngine *_vm;
@@ -92,25 +92,25 @@ public:
void renderOnPicture();
void setAnimation(Animation *animation, bool setRange = true);
void playAnimation();
- void setAnimationRange(int32 rangeStart, int rangeEnd);
+ void setAnimationRange(int32 rangeStart, int32 rangeEnd);
void setFps(int32 fps);
void setLooping(bool enable);
void stopAnimation();
void setFrame(int32 position);
void forceFrame(int32 position);
- void setPosition(int32 x, int32 y, int32 z, bool relative = false);
+ void setPosition(int16 x, int16 y, int32 z, bool relative = false);
Animation *getAnimation() const { return _animation; }
void setScale(int32 scale, bool align = false);
void setVisible(bool visible);
bool getVisible() const { return _visible; }
void setUseMask(bool useMask);
- void moveRelative(int32 dx, int32 dy, int32 dz);
- void getRect(int32 *x1, int32 *y1, int32 *x2, int32 *y2) const;
- int32 getX() const { return _x; }
- int32 getY() const { return _y; }
+ void moveRelative(int16 dx, int16 dy, int32 dz);
+ void getRect(int16 *x1, int16 *y1, int16 *x2, int16 *y2) const;
+ int16 getX() const { return _x; }
+ int16 getY() const { return _y; }
int32 getZ() const { return _z; }
- int32 getX2() const;
- int32 getY2() const;
+ int16 getX2() const;
+ int16 getY2() const;
int32 getZ2() const;
int32 getFrame() const { return _currentFrame; }
void reset();
@@ -120,8 +120,8 @@ public:
void setId(int32 id) { _id = id; }
int32 getId() const { return _id; }
- void setX(int32 x, bool relative = false);
- void setY(int32 y, bool relative = false);
+ void setX(int16 x, bool relative = false);
+ void setY(int16 y, bool relative = false);
void setZ(int32 z, bool relative = false);
void setLayerZ(int32 layer);
int32 getLayerZ() const;
@@ -133,8 +133,8 @@ protected:
int32 _currentTime;
int32 _fps;
Animation *_animation;
- int32 _x;
- int32 _y;
+ int16 _x;
+ int16 _y;
int32 _z;
int32 _layerZ;
int32 _rangeStart;
diff --git a/engines/toon/audio.cpp b/engines/toon/audio.cpp
index 77822ab078..bc0e051057 100644
--- a/engines/toon/audio.cpp
+++ b/engines/toon/audio.cpp
@@ -326,7 +326,7 @@ bool AudioStreamInstance::readPacket() {
}
if (numDecompressedBytes > _bufferMaxSize) {
- delete [] _buffer;
+ delete[] _buffer;
_bufferMaxSize = numDecompressedBytes;
_buffer = new int16[numDecompressedBytes];
}
diff --git a/engines/toon/character.cpp b/engines/toon/character.cpp
index 09730626f2..479f4965f3 100644
--- a/engines/toon/character.cpp
+++ b/engines/toon/character.cpp
@@ -62,7 +62,7 @@ Character::Character(ToonEngine *vm) : _vm(vm) {
_speed = 150; // 150 = nominal drew speed
_lastWalkTime = 0;
_numPixelToWalk = 0;
- _nextIdleTime = _vm->getSystem()->getMillis() + (_vm->randRange(0, 600) + 300) * _vm->getTickLength();
+ _nextIdleTime = _vm->_system->getMillis() + (_vm->randRange(0, 600) + 300) * _vm->getTickLength();
_lineToSayId = 0;
}
@@ -101,7 +101,7 @@ void Character::setFacing(int32 facing) {
int32 dir = 0;
- _lastWalkTime = _vm->getSystem()->getMillis();
+ _lastWalkTime = _vm->_system->getMillis();
if ((_facing - facing + 8) % 8 > (facing - _facing + 8) % 8)
dir = 1;
else
@@ -188,7 +188,7 @@ bool Character::walkTo(int16 newPosX, int16 newPosY) {
_currentPathNode = 0;
stopSpecialAnim();
- _lastWalkTime = _vm->getSystem()->getMillis();
+ _lastWalkTime = _vm->_system->getMillis();
_numPixelToWalk = 0;
@@ -220,8 +220,8 @@ bool Character::walkTo(int16 newPosX, int16 newPosY) {
}
// in 1/1000 pixels
- _numPixelToWalk += _speed * (_vm->getSystem()->getMillis() - _lastWalkTime) * _scale / 1024;
- _lastWalkTime = _vm->getSystem()->getMillis();
+ _numPixelToWalk += _speed * (_vm->_system->getMillis() - _lastWalkTime) * _scale / 1024;
+ _lastWalkTime = _vm->_system->getMillis();
while (_numPixelToWalk >= 1000 && _currentPathNode < _currentPath.size()) {
_x = _currentPath[_currentPathNode].x;
@@ -356,8 +356,8 @@ void Character::update(int32 timeIncrement) {
}
// in 1/1000 pixels
- _numPixelToWalk += _speed * (_vm->getSystem()->getMillis() - _lastWalkTime) * _scale / 1024;
- _lastWalkTime = _vm->getSystem()->getMillis();
+ _numPixelToWalk += _speed * (_vm->_system->getMillis() - _lastWalkTime) * _scale / 1024;
+ _lastWalkTime = _vm->_system->getMillis();
while (_numPixelToWalk > 1000 && _currentPathNode < _currentPath.size()) {
_x = _currentPath[_currentPathNode].x;
@@ -534,35 +534,33 @@ int32 Character::getFacingFromDirection(int16 dx, int16 dy) {
dx = -dx;
int32 facingEntry = 0;
- int32 ydiff = dy;
+ int16 ydiff = dy;
if (ydiff < 0) {
++facingEntry;
ydiff = -ydiff;
}
- facingEntry <<= 1;
+ facingEntry *= 2;
- int32 xdiff = dx;
+ int16 xdiff = dx;
if (xdiff < 0) {
++facingEntry;
xdiff = -xdiff;
}
- facingEntry <<= 1;
+ facingEntry *= 2;
if (xdiff >= ydiff) {
- int32 temp = ydiff;
+ // Swap xdiff and ydiff
+ int16 temp = ydiff;
ydiff = xdiff;
xdiff = temp;
- } else {
- facingEntry += 1;
- }
-
- facingEntry <<= 1;
+ } else
+ facingEntry++;
- int32 temp = (ydiff + 1) >> 1;
+ facingEntry *= 2;
- if (xdiff < temp)
- facingEntry += 1;
+ if (xdiff < ((ydiff + 1) / 2))
+ facingEntry++;
return facingTable[facingEntry];
}
diff --git a/engines/toon/detection.cpp b/engines/toon/detection.cpp
index 9c50c20ef8..3877fa2a6c 100644
--- a/engines/toon/detection.cpp
+++ b/engines/toon/detection.cpp
@@ -234,9 +234,6 @@ SaveStateDescriptor ToonMetaEngine::querySaveMetaInfos(const char *target, int s
Graphics::Surface *const thumbnail = Graphics::loadThumbnail(*file);
desc.setThumbnail(thumbnail);
- desc.setDeletableFlag(true);
- desc.setWriteProtectedFlag(false);
-
uint32 saveDate = file->readUint32BE();
uint16 saveTime = file->readUint16BE();
diff --git a/engines/toon/font.cpp b/engines/toon/font.cpp
index d58663a00c..1e851ff4ae 100644
--- a/engines/toon/font.cpp
+++ b/engines/toon/font.cpp
@@ -65,10 +65,10 @@ byte FontRenderer::textToFont(byte c) {
return map_textToFont[c - 0x80];
}
-void FontRenderer::renderText(int32 x, int32 y, const Common::String &origText, int32 mode) {
+void FontRenderer::renderText(int16 x, int16 y, const Common::String &origText, int32 mode) {
debugC(5, kDebugFont, "renderText(%d, %d, %s, %d)", x, y, origText.c_str(), mode);
- int32 xx, yy;
+ int16 xx, yy;
computeSize(origText, &xx, &yy);
if (mode & 2) {
@@ -83,8 +83,8 @@ void FontRenderer::renderText(int32 x, int32 y, const Common::String &origText,
_vm->addDirtyRect(x, y, x + xx, y + yy);
- int32 curX = x;
- int32 curY = y;
+ int16 curX = x;
+ int16 curY = y;
int32 height = 0;
const byte *text = (const byte *)origText.c_str();
@@ -98,20 +98,20 @@ void FontRenderer::renderText(int32 x, int32 y, const Common::String &origText,
curChar = textToFont(curChar);
_currentFont->drawFontFrame(_vm->getMainSurface(), curChar, curX, curY, _currentFontColor);
curX = curX + _currentFont->getFrameWidth(curChar) - 1;
- height = MAX(height, _currentFont->getFrameHeight(curChar));
+ height = MAX<int32>(height, _currentFont->getFrameHeight(curChar));
}
text++;
}
}
-void FontRenderer::computeSize(const Common::String &origText, int32 *retX, int32 *retY) {
+void FontRenderer::computeSize(const Common::String &origText, int16 *retX, int16 *retY) {
debugC(4, kDebugFont, "computeSize(%s, retX, retY)", origText.c_str());
- int32 lineWidth = 0;
- int32 lineHeight = 0;
- int32 totalHeight = 0;
- int32 totalWidth = 0;
- int32 lastLineHeight = 0;
+ int16 lineWidth = 0;
+ int16 lineHeight = 0;
+ int16 totalHeight = 0;
+ int16 totalWidth = 0;
+ int16 lastLineHeight = 0;
const byte *text = (const byte *)origText.c_str();
while (*text) {
@@ -127,8 +127,8 @@ void FontRenderer::computeSize(const Common::String &origText, int32 *retX, int3
lastLineHeight = 0;
} else {
curChar = textToFont(curChar);
- int32 charWidth = _currentFont->getFrameWidth(curChar) - 1;
- int32 charHeight = _currentFont->getFrameHeight(curChar);
+ int16 charWidth = _currentFont->getFrameWidth(curChar) - 1;
+ int16 charHeight = _currentFont->getFrameHeight(curChar);
lineWidth += charWidth;
lineHeight = MAX(lineHeight, charHeight);
@@ -137,7 +137,7 @@ void FontRenderer::computeSize(const Common::String &origText, int32 *retX, int3
// assume we only need to take the lower bound into
// consideration.
Common::Rect charRect = _currentFont->getFrameRect(curChar);
- lastLineHeight = MAX<int32>(lastLineHeight, charRect.bottom);
+ lastLineHeight = MAX(lastLineHeight, charRect.bottom);
}
text++;
}
@@ -189,7 +189,7 @@ void FontRenderer::setFontColor(int32 fontColor1, int32 fontColor2, int32 fontCo
_currentFontColor[3] = fontColor3;
}
-void FontRenderer::renderMultiLineText(int32 x, int32 y, const Common::String &origText, int32 mode) {
+void FontRenderer::renderMultiLineText(int16 x, int16 y, const Common::String &origText, int32 mode) {
debugC(5, kDebugFont, "renderMultiLineText(%d, %d, %s, %d)", x, y, origText.c_str(), mode);
// divide the text in several lines
@@ -204,10 +204,10 @@ void FontRenderer::renderMultiLineText(int32 x, int32 y, const Common::String &o
byte *it = text;
- int32 maxWidth = 0;
- int32 curWidth = 0;
+ int16 maxWidth = 0;
+ int16 curWidth = 0;
- while (1) {
+ while (true) {
byte *lastLine = it;
byte *lastSpace = it;
int32 lastSpaceX = 0;
@@ -223,7 +223,7 @@ void FontRenderer::renderMultiLineText(int32 x, int32 y, const Common::String &o
curChar = textToFont(curChar);
int width = _currentFont->getFrameWidth(curChar);
- curWidth += MAX<int32>(width - 2, 0);
+ curWidth += MAX(width - 2, 0);
it++;
curLetterNr++;
}
@@ -260,8 +260,8 @@ void FontRenderer::renderMultiLineText(int32 x, int32 y, const Common::String &o
//numLines++;
// get font height (assumed to be constant)
- int32 height = _currentFont->getHeight();
- int textSize = (height - 2) * numLines;
+ int16 height = _currentFont->getHeight();
+ int32 textSize = (height - 2) * numLines;
y = y - textSize;
if (y < 30)
y = 30;
@@ -278,8 +278,8 @@ void FontRenderer::renderMultiLineText(int32 x, int32 y, const Common::String &o
x = TOON_SCREEN_WIDTH - (maxWidth / 2) - 30;
// we have good coordinates now, we can render the multi line
- int32 curX = x;
- int32 curY = y;
+ int16 curX = x;
+ int16 curY = y;
for (int32 i = 0; i < numLines; i++) {
const byte *line = lines[i];
diff --git a/engines/toon/font.h b/engines/toon/font.h
index 349d9d1ee7..2a46ad3559 100644
--- a/engines/toon/font.h
+++ b/engines/toon/font.h
@@ -33,9 +33,9 @@ public:
~FontRenderer();
void setFont(Animation *font);
- void computeSize(const Common::String &origText, int32 *retX, int32 *retY);
- void renderText(int32 x, int32 y, const Common::String &origText, int32 mode);
- void renderMultiLineText(int32 x, int32 y, const Common::String &origText, int32 mode);
+ void computeSize(const Common::String &origText, int16 *retX, int16 *retY);
+ void renderText(int16 x, int16 y, const Common::String &origText, int32 mode);
+ void renderMultiLineText(int16 x, int16 y, const Common::String &origText, int32 mode);
void setFontColorByCharacter(int32 characterId);
void setFontColor(int32 fontColor1, int32 fontColor2, int32 fontColor3);
protected:
diff --git a/engines/toon/hotspot.cpp b/engines/toon/hotspot.cpp
index ce2cdf1bb9..8b8f0ab577 100644
--- a/engines/toon/hotspot.cpp
+++ b/engines/toon/hotspot.cpp
@@ -57,7 +57,7 @@ void Hotspots::save(Common::WriteStream *Stream) {
}
}
-int32 Hotspots::FindBasedOnCorner(int32 x, int32 y) {
+int32 Hotspots::FindBasedOnCorner(int16 x, int16 y) {
debugC(1, kDebugHotspot, "FindBasedOnCorner(%d, %d)", x, y);
for (int32 i = 0; i < _numItems; i++) {
@@ -73,7 +73,7 @@ int32 Hotspots::FindBasedOnCorner(int32 x, int32 y) {
return -1;
}
-int32 Hotspots::Find(int32 x, int32 y) {
+int32 Hotspots::Find(int16 x, int16 y) {
debugC(6, kDebugHotspot, "Find(%d, %d)", x, y);
int32 priority = -1;
diff --git a/engines/toon/hotspot.h b/engines/toon/hotspot.h
index 70e80046e1..3852e2e42e 100644
--- a/engines/toon/hotspot.h
+++ b/engines/toon/hotspot.h
@@ -51,8 +51,8 @@ public:
~Hotspots();
bool LoadRif(const Common::String &rifName, const Common::String &additionalRifName);
- int32 Find(int32 x, int32 y);
- int32 FindBasedOnCorner(int32 x, int32 y);
+ int32 Find(int16 x, int16 y);
+ int32 FindBasedOnCorner(int16 x, int16 y);
HotspotData *Get(int32 id);
int32 getCount() const { return _numItems; }
diff --git a/engines/toon/movie.cpp b/engines/toon/movie.cpp
index 8cdf92363f..93e41adf57 100644
--- a/engines/toon/movie.cpp
+++ b/engines/toon/movie.cpp
@@ -109,40 +109,40 @@ bool Movie::playVideo(bool isFirstIntroVideo) {
if (frame) {
if (_decoder->isLowRes()) {
// handle manually 2x scaling here
- Graphics::Surface* surf = _vm->getSystem()->lockScreen();
+ Graphics::Surface* surf = _vm->_system->lockScreen();
for (int y = 0; y < frame->h / 2; y++) {
memcpy(surf->getBasePtr(0, y * 2 + 0), frame->getBasePtr(0, y), frame->pitch);
memcpy(surf->getBasePtr(0, y * 2 + 1), frame->getBasePtr(0, y), frame->pitch);
}
- _vm->getSystem()->unlockScreen();
+ _vm->_system->unlockScreen();
} else {
- _vm->getSystem()->copyRectToScreen(frame->pixels, frame->pitch, 0, 0, frame->w, frame->h);
+ _vm->_system->copyRectToScreen(frame->pixels, frame->pitch, 0, 0, frame->w, frame->h);
// WORKAROUND: There is an encoding glitch in the first intro video. This hides this using the adjacent pixels.
if (isFirstIntroVideo) {
int32 currentFrame = _decoder->getCurFrame();
if (currentFrame >= 956 && currentFrame <= 1038) {
debugC(1, kDebugMovie, "Triggered workaround for glitch in first intro video...");
- _vm->getSystem()->copyRectToScreen(frame->getBasePtr(frame->w-188, 123), frame->pitch, frame->w-188, 124, 188, 1);
- _vm->getSystem()->copyRectToScreen(frame->getBasePtr(frame->w-188, 126), frame->pitch, frame->w-188, 125, 188, 1);
- _vm->getSystem()->copyRectToScreen(frame->getBasePtr(0, 125), frame->pitch, 0, 126, 64, 1);
- _vm->getSystem()->copyRectToScreen(frame->getBasePtr(0, 128), frame->pitch, 0, 127, 64, 1);
+ _vm->_system->copyRectToScreen(frame->getBasePtr(frame->w-188, 123), frame->pitch, frame->w-188, 124, 188, 1);
+ _vm->_system->copyRectToScreen(frame->getBasePtr(frame->w-188, 126), frame->pitch, frame->w-188, 125, 188, 1);
+ _vm->_system->copyRectToScreen(frame->getBasePtr(0, 125), frame->pitch, 0, 126, 64, 1);
+ _vm->_system->copyRectToScreen(frame->getBasePtr(0, 128), frame->pitch, 0, 127, 64, 1);
}
}
}
}
_decoder->setSystemPalette();
- _vm->getSystem()->updateScreen();
+ _vm->_system->updateScreen();
}
Common::Event event;
- while (_vm->getSystem()->getEventManager()->pollEvent(event))
+ while (_vm->_system->getEventManager()->pollEvent(event))
if ((event.type == Common::EVENT_KEYDOWN && event.kbd.keycode == Common::KEYCODE_ESCAPE)) {
_vm->dirtyAllScreen();
return false;
}
- _vm->getSystem()->delayMillis(10);
+ _vm->_system->delayMillis(10);
}
_vm->dirtyAllScreen();
return !_vm->shouldQuit();
diff --git a/engines/toon/picture.cpp b/engines/toon/picture.cpp
index ff136e5acb..204b0fe576 100644
--- a/engines/toon/picture.cpp
+++ b/engines/toon/picture.cpp
@@ -150,7 +150,7 @@ void Picture::setupPalette() {
_vm->setPaletteEntries(_palette, 1, 128);
}
-void Picture::drawMask(Graphics::Surface &surface, int32 x, int32 y, int32 dx, int32 dy) {
+void Picture::drawMask(Graphics::Surface &surface, int16 x, int16 y, int16 dx, int16 dy) {
debugC(1, kDebugPicture, "drawMask(surface, %d, %d, %d, %d)", x, y, dx, dy);
for (int32 i = 0; i < 128; i++) {
@@ -161,8 +161,8 @@ void Picture::drawMask(Graphics::Surface &surface, int32 x, int32 y, int32 dx, i
_vm->setPaletteEntries(color, i, 1);
}
- int32 rx = MIN(_width, surface.w - x);
- int32 ry = MIN(_height, surface.h - y);
+ int16 rx = MIN<int16>(_width, surface.w - x);
+ int16 ry = MIN<int16>(_height, surface.h - y);
if (rx < 0 || ry < 0)
return;
@@ -172,10 +172,10 @@ void Picture::drawMask(Graphics::Surface &surface, int32 x, int32 y, int32 dx, i
uint8 *c = _data + _width * dy + dx;
uint8 *curRow = (uint8 *)surface.pixels + y * destPitch + x;
- for (int32 yy = 0; yy < ry; yy++) {
+ for (int16 yy = 0; yy < ry; yy++) {
uint8 *curSrc = c;
uint8 *cur = curRow;
- for (int32 xx = 0; xx < rx; xx++) {
+ for (int16 xx = 0; xx < rx; xx++) {
//*cur = (*curSrc >> 5) * 8; // & 0x1f;
*cur = (*curSrc & 0x1f) ? 127 : 0;
@@ -187,10 +187,9 @@ void Picture::drawMask(Graphics::Surface &surface, int32 x, int32 y, int32 dx, i
}
}
-void Picture::drawWithRectList(Graphics::Surface& surface, int32 x, int32 y, int32 dx, int32 dy, Common::Array<Common::Rect>& rectArray) {
-
- int32 rx = MIN(_width, surface.w - x);
- int32 ry = MIN(_height, surface.h - y);
+void Picture::drawWithRectList(Graphics::Surface& surface, int16 x, int16 y, int16 dx, int16 dy, Common::Array<Common::Rect>& rectArray) {
+ int16 rx = MIN<int16>(_width, surface.w - x);
+ int16 ry = MIN<int16>(_height, surface.h - y);
if (rx < 0 || ry < 0)
return;
@@ -202,16 +201,16 @@ void Picture::drawWithRectList(Graphics::Surface& surface, int32 x, int32 y, int
Common::Rect rect = rectArray[i];
- int32 fillRx = MIN<int32>(rx, rect.right - rect.left);
- int32 fillRy = MIN<int32>(ry, rect.bottom - rect.top);
+ int16 fillRx = MIN<int32>(rx, rect.right - rect.left);
+ int16 fillRy = MIN<int32>(ry, rect.bottom - rect.top);
uint8 *c = _data + _width * (dy + rect.top) + (dx + rect.left);
uint8 *curRow = (uint8 *)surface.pixels + (y + rect.top) * destPitch + (x + rect.left);
- for (int32 yy = 0; yy < fillRy; yy++) {
+ for (int16 yy = 0; yy < fillRy; yy++) {
uint8 *curSrc = c;
uint8 *cur = curRow;
- for (int32 xx = 0; xx < fillRx; xx++) {
+ for (int16 xx = 0; xx < fillRx; xx++) {
*cur = *curSrc;
curSrc++;
cur++;
@@ -222,11 +221,11 @@ void Picture::drawWithRectList(Graphics::Surface& surface, int32 x, int32 y, int
}
}
-void Picture::draw(Graphics::Surface &surface, int32 x, int32 y, int32 dx, int32 dy) {
+void Picture::draw(Graphics::Surface &surface, int16 x, int16 y, int16 dx, int16 dy) {
debugC(6, kDebugPicture, "draw(surface, %d, %d, %d, %d)", x, y, dx, dy);
- int32 rx = MIN(_width, surface.w - x);
- int32 ry = MIN(_height, surface.h - y);
+ int16 rx = MIN<int16>(_width, surface.w - x);
+ int16 ry = MIN<int16>(_height, surface.h - y);
if (rx < 0 || ry < 0)
return;
@@ -236,10 +235,10 @@ void Picture::draw(Graphics::Surface &surface, int32 x, int32 y, int32 dx, int32
uint8 *c = _data + _width * dy + dx;
uint8 *curRow = (uint8 *)surface.pixels + y * destPitch + x;
- for (int32 yy = 0; yy < ry; yy++) {
+ for (int16 yy = 0; yy < ry; yy++) {
uint8 *curSrc = c;
uint8 *cur = curRow;
- for (int32 xx = 0; xx < rx; xx++) {
+ for (int16 xx = 0; xx < rx; xx++) {
*cur = *curSrc;
curSrc++;
cur++;
@@ -249,7 +248,7 @@ void Picture::draw(Graphics::Surface &surface, int32 x, int32 y, int32 dx, int32
}
}
-uint8 Picture::getData(int32 x, int32 y) {
+uint8 Picture::getData(int16 x, int16 y) {
debugC(6, kDebugPicture, "getData(%d, %d)", x, y);
if (!_data)
@@ -259,7 +258,7 @@ uint8 Picture::getData(int32 x, int32 y) {
}
// use original work from johndoe
-void Picture::floodFillNotWalkableOnMask(int32 x, int32 y) {
+void Picture::floodFillNotWalkableOnMask(int16 x, int16 y) {
debugC(1, kDebugPicture, "floodFillNotWalkableOnMask(%d, %d)", x, y);
// Stack-based floodFill algorithm based on
// http://student.kuleuven.be/~m0216922/CG/files/floodfill.cpp
@@ -292,10 +291,10 @@ void Picture::floodFillNotWalkableOnMask(int32 x, int32 y) {
}
}
-void Picture::drawLineOnMask(int32 x, int32 y, int32 x2, int32 y2, bool walkable) {
+void Picture::drawLineOnMask(int16 x, int16 y, int16 x2, int16 y2, bool walkable) {
debugC(1, kDebugPicture, "drawLineOnMask(%d, %d, %d, %d, %d)", x, y, x2, y2, (walkable) ? 1 : 0);
- static int32 lastX = 0;
- static int32 lastY = 0;
+ static int16 lastX = 0;
+ static int16 lastY = 0;
if (x == -1) {
x = lastX;
@@ -303,12 +302,12 @@ void Picture::drawLineOnMask(int32 x, int32 y, int32 x2, int32 y2, bool walkable
}
uint32 bx = x << 16;
- int32 dx = x2 - x;
+ int16 dx = x2 - x;
uint32 by = y << 16;
- int32 dy = y2 - y;
- uint32 adx = abs(dx);
- uint32 ady = abs(dy);
- int32 t = 0;
+ int16 dy = y2 - y;
+ uint16 adx = abs(dx);
+ uint16 ady = abs(dy);
+ int16 t = 0;
if (adx <= ady)
t = ady;
else
@@ -317,9 +316,7 @@ void Picture::drawLineOnMask(int32 x, int32 y, int32 x2, int32 y2, bool walkable
int32 cdx = (dx << 16) / t;
int32 cdy = (dy << 16) / t;
- int32 i = t;
- while (i) {
-
+ for (int16 i = t; i > 0; i--) {
int32 rx = bx >> 16;
int32 ry = by >> 16;
@@ -337,7 +334,6 @@ void Picture::drawLineOnMask(int32 x, int32 y, int32 x2, int32 y2, bool walkable
bx += cdx;
by += cdy;
- i--;
}
}
} // End of namespace Toon
diff --git a/engines/toon/picture.h b/engines/toon/picture.h
index 460c5b58a2..5e79612a39 100644
--- a/engines/toon/picture.h
+++ b/engines/toon/picture.h
@@ -33,25 +33,27 @@
namespace Toon {
class ToonEngine;
-class Picture {
+class Picture {
public:
Picture(ToonEngine *vm);
~Picture();
+
bool loadPicture(const Common::String &file);
void setupPalette();
- void draw(Graphics::Surface &surface, int32 x, int32 y, int32 dx, int32 dy);
- void drawWithRectList(Graphics::Surface& surface, int32 x, int32 y, int32 dx, int32 dy, Common::Array<Common::Rect>& rectArray);
- void drawMask(Graphics::Surface &surface, int32 x, int32 y, int32 dx, int32 dy);
- void drawLineOnMask(int32 x, int32 y, int32 x2, int32 y2, bool walkable);
- void floodFillNotWalkableOnMask(int32 x, int32 y);
- uint8 getData(int32 x, int32 y);
+ void draw(Graphics::Surface &surface, int16 x, int16 y, int16 dx, int16 dy);
+ void drawWithRectList(Graphics::Surface& surface, int16 x, int16 y, int16 dx, int16 dy, Common::Array<Common::Rect>& rectArray);
+ void drawMask(Graphics::Surface &surface, int16 x, int16 y, int16 dx, int16 dy);
+ void drawLineOnMask(int16 x, int16 y, int16 x2, int16 y2, bool walkable);
+ void floodFillNotWalkableOnMask(int16 x, int16 y);
+ uint8 getData(int16 x, int16 y);
uint8 *getDataPtr() { return _data; }
- int32 getWidth() const { return _width; }
- int32 getHeight() const { return _height; }
+ int16 getWidth() const { return _width; }
+ int16 getHeight() const { return _height; }
+
protected:
- int32 _width;
- int32 _height;
+ int16 _width;
+ int16 _height;
uint8 *_data;
uint8 *_palette; // need to be copied at 3-387
int32 _paletteEntries;
diff --git a/engines/toon/script_func.cpp b/engines/toon/script_func.cpp
index e9b7534198..1fa4058114 100644
--- a/engines/toon/script_func.cpp
+++ b/engines/toon/script_func.cpp
@@ -564,9 +564,9 @@ int32 ScriptFunc::sys_Cmd_Exit_Conversation(EMCState *state) {
int32 ScriptFunc::sys_Cmd_Set_Mouse_Pos(EMCState *state) {
if (_vm->state()->_inCloseUp) {
- _vm->getSystem()->warpMouse(stackPos(0), stackPos(1));
+ _vm->_system->warpMouse(stackPos(0), stackPos(1));
} else {
- _vm->getSystem()->warpMouse(stackPos(0) - _vm->state()->_currentScrollValue, stackPos(1));
+ _vm->_system->warpMouse(stackPos(0) - _vm->state()->_currentScrollValue, stackPos(1));
}
return 0;
}
diff --git a/engines/toon/toon.cpp b/engines/toon/toon.cpp
index 416daa1fe8..ee427652d8 100644
--- a/engines/toon/toon.cpp
+++ b/engines/toon/toon.cpp
@@ -820,7 +820,6 @@ Common::Error ToonEngine::run() {
ToonEngine::ToonEngine(OSystem *syst, const ADGameDescription *gameDescription)
: Engine(syst), _gameDescription(gameDescription),
_language(gameDescription->language), _rnd("toon") {
- _system = syst;
_tickLength = 16;
_currentPicture = NULL;
_inventoryPicture = NULL;
@@ -1224,7 +1223,7 @@ void ToonEngine::loadScene(int32 SceneId, bool forGameLoad) {
_script->init(&_sceneAnimationScripts[i]._state, _sceneAnimationScripts[i]._data);
if (!forGameLoad) {
_script->start(&_sceneAnimationScripts[i]._state, 9 + i);
- _sceneAnimationScripts[i]._lastTimer = getSystem()->getMillis();
+ _sceneAnimationScripts[i]._lastTimer = _system->getMillis();
_sceneAnimationScripts[i]._frozen = false;
_sceneAnimationScripts[i]._frozenForConversation = false;
}
@@ -1588,12 +1587,12 @@ void ToonEngine::clickEvent() {
}
void ToonEngine::selectHotspot() {
- int32 x1 = 0;
- int32 x2 = 0;
- int32 y1 = 0;
- int32 y2 = 0;
+ int16 x1 = 0;
+ int16 x2 = 0;
+ int16 y1 = 0;
+ int16 y2 = 0;
- int32 mouseX = _mouseX;
+ int16 mouseX = _mouseX;
if (_gameState->_inCutaway)
mouseX += TOON_BACKBUFFER_WIDTH;
@@ -1693,7 +1692,6 @@ void ToonEngine::selectHotspot() {
}
void ToonEngine::exitScene() {
-
fadeOut(5);
// disable all scene animation
@@ -2831,7 +2829,6 @@ void ToonEngine::playSoundWrong() {
}
void ToonEngine::getTextPosition(int32 characterId, int32 *retX, int32 *retY) {
-
if (characterId < 0)
characterId = 0;
@@ -2852,8 +2849,8 @@ void ToonEngine::getTextPosition(int32 characterId, int32 *retX, int32 *retY) {
}
} else if (characterId == 1) {
// flux
- int32 x = _flux->getX();
- int32 y = _flux->getY();
+ int16 x = _flux->getX();
+ int16 y = _flux->getY();
if (x >= _gameState->_currentScrollValue && x <= _gameState->_currentScrollValue + TOON_SCREEN_WIDTH) {
if (!_gameState->_inCutaway) {
*retX = x;
@@ -2885,7 +2882,7 @@ void ToonEngine::getTextPosition(int32 characterId, int32 *retX, int32 *retY) {
if (character && !_gameState->_inCutaway) {
if (character->getAnimationInstance()) {
if (character->getX() >= _gameState->_currentScrollValue && character->getX() <= _gameState->_currentScrollValue + TOON_SCREEN_WIDTH) {
- int32 x1, y1, x2, y2;
+ int16 x1, y1, x2, y2;
character->getAnimationInstance()->getRect(&x1, &y1, &x2, &y2);
*retX = (x1 + x2) / 2;
*retY = y1;
@@ -2896,7 +2893,6 @@ void ToonEngine::getTextPosition(int32 characterId, int32 *retX, int32 *retY) {
}
Character *ToonEngine::getCharacterById(int32 charId) {
-
for (int32 i = 0; i < 8; i++) {
if (_characters[i] && _characters[i]->getId() == charId)
return _characters[i];
diff --git a/engines/toon/toon.h b/engines/toon/toon.h
index 540f3e403b..d40c489011 100644
--- a/engines/toon/toon.h
+++ b/engines/toon/toon.h
@@ -289,10 +289,6 @@ public:
return _oldTimer2;
}
- OSystem *getSystem() {
- return _system;
- }
-
AudioManager *getAudioManager() {
return _audioManager;
}
@@ -340,7 +336,6 @@ public:
void clearDirtyRects();
protected:
- OSystem *_system;
int32 _tickLength;
Resources *_resources;
TextResource *_genericTexts;
diff --git a/engines/tsage/blue_force/blueforce_scenes9.cpp b/engines/tsage/blue_force/blueforce_scenes9.cpp
index 2178f31b30..1cb8191640 100644
--- a/engines/tsage/blue_force/blueforce_scenes9.cpp
+++ b/engines/tsage/blue_force/blueforce_scenes9.cpp
@@ -794,12 +794,12 @@ bool Scene910::Lyle::startAction(CursorType action, Event &event) {
Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
if (action == CURSOR_USE) {
- if (BF_GLOBALS._v4CEE2 == 0)
+ if (BF_GLOBALS._nico910State == 0)
return NamedObject::startAction(action, event);
else
return false;
} else if (action == CURSOR_TALK) {
- if ((BF_GLOBALS._hiddenDoorStatus != 0) || (BF_GLOBALS._v4CEE2 != 0)) {
+ if ((BF_GLOBALS._hiddenDoorStatus != 0) || (BF_GLOBALS._nico910State != 0)) {
scene->_stripManager.start(9100 + _field90, &BF_GLOBALS._stripProxy);
if (_field90 < 1)
_field90++;
@@ -833,7 +833,7 @@ bool Scene910::Nico::startAction(CursorType action, Event &event) {
return true;
break;
case CURSOR_TALK:
- if (BF_GLOBALS._v4CEE2 >= 4)
+ if (BF_GLOBALS._nico910State >= 4)
return NamedObject::startAction(action, event);
if (BF_GLOBALS._v4CEE6 < 4)
@@ -847,8 +847,8 @@ bool Scene910::Nico::startAction(CursorType action, Event &event) {
return true;
break;
case INV_COLT45:
- if (BF_GLOBALS._v4CEE2 > 1) {
- if (BF_GLOBALS._v4CEE2 != 4) {
+ if (BF_GLOBALS._nico910State > 1) {
+ if (BF_GLOBALS._nico910State != 4) {
if ((BF_GLOBALS.getFlag(gunDrawn)) && (BF_GLOBALS.getFlag(fGunLoaded)) && (BF_GLOBALS.getHasBullets())) {
if (scene->_field2DE0 == 0) {
BF_GLOBALS._player.disableControl();
@@ -880,7 +880,7 @@ bool Scene910::Nico::startAction(CursorType action, Event &event) {
break;
case INV_BADGE:
case INV_ID:
- if (BF_GLOBALS._v4CEE2 >= 4)
+ if (BF_GLOBALS._nico910State >= 4)
return NamedObject::startAction(action, event);
if (BF_GLOBALS._v4CEE6 < 4)
@@ -895,11 +895,12 @@ bool Scene910::Nico::startAction(CursorType action, Event &event) {
return true;
break;
case INV_YELLOW_CORD:
- if (BF_GLOBALS._v4CEE2 < 4) {
+ if (BF_GLOBALS._nico910State < 4) {
BF_GLOBALS._player.disableControl();
scene->_yellowCord.fixPriority(121);
scene->_sceneSubMode = 10;
scene->_sceneMode = 9123;
+ BF_GLOBALS._nico910State = 3;
if (BF_GLOBALS._player._visage == 1911)
scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL);
else
@@ -995,7 +996,7 @@ bool Scene910::Stuart::startAction(CursorType action, Event &event) {
return true;
} else {
BF_GLOBALS._player.disableControl();
- if (BF_GLOBALS._v4CEE2 == 4) {
+ if (BF_GLOBALS._nico910State == 4) {
scene->_sceneSubMode = 11;
scene->_sceneMode = 9123;
if (BF_GLOBALS._player._visage == 1911)
@@ -1136,7 +1137,7 @@ bool Scene910::BreakerBox::startAction(CursorType action, Event &event) {
SceneItem::display2(910, 62);
return true;
} else if (scene->_sceneMode != 9120) {
- if (BF_GLOBALS._v4CEE2 == 1) {
+ if (BF_GLOBALS._nico910State == 1) {
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 9118;
scene->setAction(&scene->_sequenceManager1, scene, 9118, &BF_GLOBALS._player, &scene->_nico, NULL);
@@ -1291,7 +1292,7 @@ bool Scene910::Object13::startAction(CursorType action, Event &event) {
switch (_state) {
case 1:
- if (BF_GLOBALS._v4CEE2 < 1) {
+ if (BF_GLOBALS._nico910State < 1) {
if (_frame == 2) {
if (!BF_GLOBALS.getFlag(fGotPointsForClosingDoor)) {
T2_GLOBALS._uiElements.addScore(30);
@@ -1299,7 +1300,7 @@ bool Scene910::Object13::startAction(CursorType action, Event &event) {
}
scene->_sceneMode = 0;
if (BF_GLOBALS._dayNumber == 5) {
- if (BF_GLOBALS._v4CEE2 == 0) {
+ if (BF_GLOBALS._nico910State == 0) {
scene->_breakerBoxInset.remove();
// _objectList.draw();
BF_GLOBALS._player.disableControl();
@@ -1309,7 +1310,7 @@ bool Scene910::Object13::startAction(CursorType action, Event &event) {
scene->_nico.postInit();
scene->_sceneMode = 9129;
scene->setAction(&scene->_sequenceManager1, scene, 9129, &BF_GLOBALS._player, &scene->_nico, NULL);
- } else if (BF_GLOBALS._v4CEE2 == 2) {
+ } else if (BF_GLOBALS._nico910State == 2) {
scene->_breakerBoxInset.remove();
// _objectList.draw();
BF_GLOBALS._player.disableControl();
@@ -1612,7 +1613,7 @@ bool Scene910::BlackPlug::startAction(CursorType action, Event &event) {
SET_EXT_FGCOLOR, 13, LIST_END);
return true;
}
- if (BF_GLOBALS._v4CEE2 == 3) {
+ if (BF_GLOBALS._nico910State == 3) {
SceneItem::display(910, 84, SET_WIDTH, 312,
SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
@@ -1830,7 +1831,7 @@ bool Scene910::Generator::startAction(CursorType action, Event &event) {
SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
SET_EXT_FGCOLOR, 13, LIST_END);
- else if (BF_GLOBALS._v4CEE2 == 1) {
+ else if (BF_GLOBALS._nico910State == 1) {
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 9118;
scene->setAction(&scene->_sequenceManager1, scene, 9118, &BF_GLOBALS._player, &scene->_nico, NULL);
@@ -1869,7 +1870,7 @@ bool Scene910::Item2::startAction(CursorType action, Event &event) {
bool Scene910::Item3::startAction(CursorType action, Event &event) {
Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
- if ((action == CURSOR_TALK) && (BF_GLOBALS._v4CEE2 == 4) && (BF_GLOBALS._v4CEE4 == 0)) {
+ if ((action == CURSOR_TALK) && (BF_GLOBALS._nico910State == 4) && (BF_GLOBALS._v4CEE4 == 0)) {
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 15;
scene->_stripManager.start(9102, scene);
@@ -1907,7 +1908,7 @@ bool Scene910::Item15::startAction(CursorType action, Event &event) {
bool Scene910::Item16::startAction(CursorType action, Event &event) {
Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
- if ((BF_GLOBALS._hiddenDoorStatus == 0) || (BF_GLOBALS._v4CEE2 != 0))
+ if ((BF_GLOBALS._hiddenDoorStatus == 0) || (BF_GLOBALS._nico910State != 0))
return false;
if (BF_GLOBALS._player._visage == 1911) {
@@ -2016,7 +2017,7 @@ void Scene910::postInit(SceneObjectList *OwnerList) {
if (BF_GLOBALS._dayNumber < 5)
_item17.setDetails(Rect(0, 149, 29, 167), 910, -1, -1, -1, 1, NULL);
- if (BF_GLOBALS._v4CEE2 == 0)
+ if (BF_GLOBALS._nico910State == 0)
_item16.setDetails(Rect(265, 18, 319, 102), 910, -1, -1, -1, 1, NULL);
_breakerBox.setDetails(910, 6, -1, -1, 1, (SceneItem *)NULL);
@@ -2048,7 +2049,7 @@ void Scene910::postInit(SceneObjectList *OwnerList) {
|| (BF_GLOBALS._sceneManager._previousScene == 190)
|| (BF_GLOBALS._sceneManager._previousScene == 300)) {
BF_GLOBALS._sceneManager._previousScene = 900;
- BF_GLOBALS._v4CEE2 = 0;
+ BF_GLOBALS._nico910State = 0;
BF_GLOBALS._v4CEE4 = 0;
}
@@ -2142,7 +2143,7 @@ void Scene910::postInit(SceneObjectList *OwnerList) {
_nico.setPosition(Common::Point(262, 124));
_nico.setStrip(6);
BF_GLOBALS._v4CEE6 = 0;
- BF_GLOBALS._v4CEE2 = 1;
+ BF_GLOBALS._nico910State = 1;
_nico.setDetails(910, 63, 64, 67, 5, &_item4);
BF_GLOBALS._v4CECA = 2;
if (BF_GLOBALS._v4CECC == 0)
@@ -2157,7 +2158,7 @@ void Scene910::postInit(SceneObjectList *OwnerList) {
BF_GLOBALS._player.disableControl();
}
- if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._v4CEE2 == 0)){
+ if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._nico910State == 0)){
_shadow.postInit();
_shadow.setAction(&_action2);
}
@@ -2297,7 +2298,7 @@ void Scene910::signal() {
case 13:
BF_GLOBALS._player.disableControl();
BF_GLOBALS._player.setAction(&_sequenceManager2, NULL, 9117, &_nico, NULL);
- BF_GLOBALS._v4CEE2 = 2;
+ BF_GLOBALS._nico910State = 2;
// No break on purpose
case 15:
_stuart.postInit();
@@ -2314,7 +2315,7 @@ void Scene910::signal() {
_lyle._field90 = 1;
_sceneMode = 10;
addFader((const byte *)&black, 2, this);
- BF_GLOBALS._v4CEE2 = 1;
+ BF_GLOBALS._nico910State = 1;
BF_GLOBALS._walkRegions.disableRegion(16);
BF_GLOBALS._walkRegions.disableRegion(14);
BF_GLOBALS._sceneItems.remove(&_item16);
@@ -2324,7 +2325,7 @@ void Scene910::signal() {
BF_GLOBALS._player._frame = 1;
if (_field2DE2 == 0) {
_field2DE2 = 1;
- if (BF_GLOBALS._v4CEE2 == 4) {
+ if (BF_GLOBALS._nico910State == 4) {
_sceneMode = 9149;
setAction(&_sequenceManager1, this, 9149, &BF_GLOBALS._player, NULL);
} else {
@@ -2452,7 +2453,7 @@ void Scene910::signal() {
break;
case 9114:
_fakeWall.hide();
- if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._v4CEE2 == 0)) {
+ if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._nico910State == 0)) {
BF_GLOBALS._player.disableControl();
_nico.postInit();
_nico.setDetails(910, 63, 64, 65, 5, &_item4);
@@ -2496,7 +2497,7 @@ void Scene910::signal() {
case 9121:
_item3.setDetails(7, 910, 96, 60, 61, 3);
BF_GLOBALS._v4CEE4 = 2;
- if (BF_GLOBALS._v4CEE2 == 4) {
+ if (BF_GLOBALS._nico910State == 4) {
_sceneMode = 20;
_stripManager.start(9115, this);
} else {
@@ -2527,7 +2528,7 @@ void Scene910::signal() {
setAction(&_sequenceManager1, this, 9111, &BF_GLOBALS._player, &_blackCord, NULL);
break;
case 5:
- switch (BF_GLOBALS._v4CEE2 - 1) {
+ switch (BF_GLOBALS._nico910State - 1) {
case 0:
_sceneMode = 9118;
setAction(&_sequenceManager1, this, 9118, &BF_GLOBALS._player, &_nico, NULL);
@@ -2598,7 +2599,7 @@ void Scene910::signal() {
break;
case 9125:
BF_GLOBALS.setFlag(fBackupAt340);
- BF_GLOBALS._v4CEE2 = 4;
+ BF_GLOBALS._nico910State = 4;
_stuart.postInit();
_nico.setDetails(910, 72, 73, 74, 3, (SceneItem *)NULL);
_stuart.setDetails(910, 66, 67, 68, 5, &_nico);
@@ -2645,7 +2646,7 @@ void Scene910::signal() {
}
_lyle.setAction(&_sequenceManager2, NULL, 9131, &_lyle, NULL);
BF_GLOBALS._walkRegions.enableRegion(16);
- if (BF_GLOBALS._v4CEE2 == 4)
+ if (BF_GLOBALS._nico910State == 4)
BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, 0);
else
BF_INVENTORY.setObjectScene(INV_HALF_YELLOW_CORD, 910);
@@ -2679,7 +2680,7 @@ void Scene910::signal() {
}
break;
case 9143:
- if (BF_GLOBALS._v4CEE2 == 0) {
+ if (BF_GLOBALS._nico910State == 0) {
BF_GLOBALS._v51C44 = 1;
BF_GLOBALS._sceneManager.changeScene(920);
} else {
@@ -2730,7 +2731,7 @@ void Scene910::process(Event &event) {
if (_item17._bounds.contains(event.mousePos)) {
GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_SW);
BF_GLOBALS._events.setCursor(surface);
- } else if ((BF_GLOBALS._hiddenDoorStatus == 0) || (BF_GLOBALS._v4CEE2 != 0)) {
+ } else if ((BF_GLOBALS._hiddenDoorStatus == 0) || (BF_GLOBALS._nico910State != 0)) {
CursorType cursorId = BF_GLOBALS._events.getCursor();
BF_GLOBALS._events.setCursor(cursorId);
} else if (!_item16._bounds.contains(event.mousePos)) {
@@ -2755,7 +2756,7 @@ void Scene910::process(Event &event) {
_sceneMode = 9123;
setAction(&_sequenceManager1, this, 9123, &BF_GLOBALS._player, NULL);
event.handled = true;
- } else if (BF_GLOBALS._v4CEE2 <= 1) {
+ } else if (BF_GLOBALS._nico910State <= 1) {
if (BF_GLOBALS.getFlag(fCanDrawGun)) {
BF_GLOBALS._player.addMover(NULL);
BF_GLOBALS._player.disableControl();
@@ -2776,7 +2777,7 @@ void Scene910::process(Event &event) {
event.handled = true;
break;
case CURSOR_WALK:
- if (BF_GLOBALS._v4CEE2 == 1) {
+ if (BF_GLOBALS._nico910State == 1) {
BF_GLOBALS._player.disableControl();
if (BF_GLOBALS._player._visage == 1911) {
BF_GLOBALS._player.disableControl();
@@ -2826,7 +2827,7 @@ void Scene910::dispatch() {
_sceneSubMode = 3;
_sceneMode = 9123;
setAction(&_sequenceManager1, this, 9123, &BF_GLOBALS._player, NULL);
- } else if (BF_GLOBALS._v4CEE2 == 0) {
+ } else if (BF_GLOBALS._nico910State == 0) {
_sceneMode = 9143;
setAction(&_sequenceManager1, this, 9143, &BF_GLOBALS._player, NULL);
} else {
@@ -2840,7 +2841,7 @@ void Scene910::dispatch() {
}
}
- if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._player._position.x > 250) && (_sceneMode != 9135) && (_sceneMode != 11) && (BF_GLOBALS._hiddenDoorStatus != 0) && (BF_GLOBALS._v4CEE2 == 0)) {
+ if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._player._position.x > 250) && (_sceneMode != 9135) && (_sceneMode != 11) && (BF_GLOBALS._hiddenDoorStatus != 0) && (BF_GLOBALS._nico910State == 0)) {
BF_GLOBALS._player.disableControl();
_shadow.remove();
_nico.remove();
@@ -2853,7 +2854,7 @@ void Scene910::dispatch() {
}
void Scene910::checkGun() {
- if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._v4CEE2 == 0) && (BF_GLOBALS._hiddenDoorStatus != 0))
+ if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._nico910State == 0) && (BF_GLOBALS._hiddenDoorStatus != 0))
SceneItem::display(910, 70, SET_WIDTH, 312,
SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
@@ -2900,7 +2901,7 @@ void Scene910::closeHiddenDoor() {
setAction(&_sequenceManager1, this, 9115, &_fakeWall, &_object5, NULL);
}
- if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._v4CEE2 == 0)) {
+ if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._nico910State == 0)) {
// _objectList.draw();
if (BF_GLOBALS._sceneObjects->contains(&_breakerBoxInset))
_breakerBoxInset.remove();
diff --git a/engines/tsage/detection.cpp b/engines/tsage/detection.cpp
index 0c458f5c35..bcadfdc201 100644
--- a/engines/tsage/detection.cpp
+++ b/engines/tsage/detection.cpp
@@ -164,8 +164,6 @@ public:
// Create the return descriptor
SaveStateDescriptor desc(slot, header.saveName);
- desc.setDeletableFlag(true);
- desc.setWriteProtectedFlag(false);
desc.setThumbnail(header.thumbnail);
desc.setSaveDate(header.saveYear, header.saveMonth, header.saveDay);
desc.setSaveTime(header.saveHour, header.saveMinutes);
diff --git a/engines/tsage/detection_tables.h b/engines/tsage/detection_tables.h
index d538cbacbf..a84ee5662f 100644
--- a/engines/tsage/detection_tables.h
+++ b/engines/tsage/detection_tables.h
@@ -105,7 +105,7 @@ static const tSageGameDescription gameDescriptions[] = {
AD_ENTRY1s("blue.rlb", "17c3993415e8a2cf93040eef7e88ec93", 1156508),
Common::EN_ANY,
Common::kPlatformPC,
- ADGF_TESTING,
+ ADGF_UNSTABLE,
GUIO2(GUIO_NOSPEECH, GUIO_NOSFX)
},
GType_BlueForce,
@@ -120,7 +120,7 @@ static const tSageGameDescription gameDescriptions[] = {
AD_ENTRY1s("blue.rlb", "17eabb456cb1546c66baf1aff387ba6a", 10032614),
Common::EN_ANY,
Common::kPlatformPC,
- ADGF_TESTING,
+ ADGF_NO_FLAGS,
GUIO2(GUIO_NOSPEECH, GUIO_NOSFX)
},
GType_BlueForce,
@@ -134,7 +134,7 @@ static const tSageGameDescription gameDescriptions[] = {
AD_ENTRY1s("blue.rlb", "99983f48cb218f1f3760cf2f9a7ef11d", 63863322),
Common::EN_ANY,
Common::kPlatformPC,
- ADGF_CD | ADGF_TESTING,
+ ADGF_CD,
GUIO2(GUIO_NOSPEECH, GUIO_NOSFX)
},
GType_BlueForce,
@@ -150,7 +150,7 @@ static const tSageGameDescription gameDescriptions[] = {
AD_ENTRY1s("blue.rlb", "5b2b35c51b62e82d82b0791540bfae2d", 10082565),
Common::ES_ESP,
Common::kPlatformPC,
- ADGF_CD | ADGF_TESTING,
+ ADGF_CD | ADGF_UNSTABLE,
GUIO2(GUIO_NOSPEECH, GUIO_NOSFX)
},
GType_BlueForce,
diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp
index 59eb59b194..de9463268b 100644
--- a/engines/tsage/globals.cpp
+++ b/engines/tsage/globals.cpp
@@ -247,7 +247,7 @@ void BlueForceGlobals::synchronize(Serializer &s) {
for (int i = 0; i < 18; i++)
s.syncAsByte(_breakerBoxStatusArr[i]);
s.syncAsSint16LE(_hiddenDoorStatus);
- s.syncAsSint16LE(_v4CEE2);
+ s.syncAsSint16LE(_nico910State);
s.syncAsSint16LE(_v4CEE4);
s.syncAsSint16LE(_v4CEE6);
s.syncAsSint16LE(_v4CEE8);
@@ -320,7 +320,7 @@ void BlueForceGlobals::reset() {
_breakerBoxStatusArr[16] = 3;
_breakerBoxStatusArr[17] = 0;
_hiddenDoorStatus = 0;
- _v4CEE2 = 0;
+ _nico910State = 0;
_v4CEE4 = 0;
_v4CEE6 = 0;
_v4CEE8 = 0;
diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h
index 45226c921b..d190b6a2a4 100644
--- a/engines/tsage/globals.h
+++ b/engines/tsage/globals.h
@@ -200,7 +200,7 @@ public:
int _v4CECC;
int8 _breakerBoxStatusArr[18];
int _hiddenDoorStatus;
- int _v4CEE2;
+ int _nico910State;
int _v4CEE4;
int _v4CEE6;
int _v4CEE8;
diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h
index e336564c5f..fa2946d56c 100644
--- a/engines/tsage/ringworld2/ringworld2_speakers.h
+++ b/engines/tsage/ringworld2/ringworld2_speakers.h
@@ -504,14 +504,14 @@ public:
class SpeakerSoldier300 : public SpeakerSoldier {
public:
- SpeakerSoldier300() : SpeakerSoldier(60) {};
+ SpeakerSoldier300() : SpeakerSoldier(60) {}
virtual Common::String getClassName() { return "SpeakerSoldier300"; }
virtual void proc15();
};
class SpeakerSoldier1625 : public SpeakerSoldier {
public:
- SpeakerSoldier1625() : SpeakerSoldier(5) {};
+ SpeakerSoldier1625() : SpeakerSoldier(5) {}
virtual Common::String getClassName() { return "SpeakerSoldier1625"; }
};
@@ -585,7 +585,7 @@ public:
class SpeakerWebbster3240 : public SpeakerWebbster {
public:
- SpeakerWebbster3240() : SpeakerWebbster(10) {};
+ SpeakerWebbster3240() : SpeakerWebbster(10) {}
virtual Common::String getClassName() { return "SpeakerWebbster3240"; }
virtual void proc15();
@@ -593,7 +593,7 @@ public:
class SpeakerWebbster3375 : public SpeakerWebbster {
public:
- SpeakerWebbster3375() : SpeakerWebbster(60) {};
+ SpeakerWebbster3375() : SpeakerWebbster(60) {}
virtual Common::String getClassName() { return "SpeakerWebbster3375"; }
virtual void proc15();
@@ -601,7 +601,7 @@ public:
class SpeakerWebbster3385 : public SpeakerWebbster {
public:
- SpeakerWebbster3385() : SpeakerWebbster(60) {};
+ SpeakerWebbster3385() : SpeakerWebbster(60) {}
virtual Common::String getClassName() { return "SpeakerWebbster3385"; }
virtual void proc15();
@@ -609,7 +609,7 @@ public:
class SpeakerWebbster3395 : public SpeakerWebbster {
public:
- SpeakerWebbster3395() : SpeakerWebbster(60) {};
+ SpeakerWebbster3395() : SpeakerWebbster(60) {}
virtual Common::String getClassName() { return "SpeakerWebbster3395"; }
virtual void proc15();
@@ -617,7 +617,7 @@ public:
class SpeakerWebbster3400 : public SpeakerWebbster {
public:
- SpeakerWebbster3400() : SpeakerWebbster(27) {};
+ SpeakerWebbster3400() : SpeakerWebbster(27) {}
virtual Common::String getClassName() { return "SpeakerWebbster3400"; }
virtual void proc15();
diff --git a/graphics/iff.cpp b/graphics/iff.cpp
index 7434a6bebc..4011126bd3 100644
--- a/graphics/iff.cpp
+++ b/graphics/iff.cpp
@@ -68,7 +68,7 @@ void ILBMDecoder::loadBitmap(uint32 mode, byte *buffer, Common::ReadStream *stre
Graphics::PackBitsReadStream packStream(*stream);
// setup a buffer to hold enough data to build a line in the output
- uint32 scanlineWidth = ((_header.width + 15)/16) << 1;
+ uint32 scanlineWidth = ((_header.width + 15) / 16) << 1;
byte *scanline = new byte[scanlineWidth * _header.depth];
for (uint i = 0; i < _header.height; ++i) {
@@ -82,7 +82,7 @@ void ILBMDecoder::loadBitmap(uint32 mode, byte *buffer, Common::ReadStream *stre
out += outPitch;
}
- delete []scanline;
+ delete[] scanline;
break;
}
@@ -121,15 +121,12 @@ void ILBMDecoder::planarToChunky(byte *out, uint32 outPitch, byte *in, uint32 in
// then output the pixel according to the requested packing
if (!packPlanes) {
out[x] = pix;
- } else
- if (nPlanes == 1) {
- out[x/8] |= (pix << (x & 7));
- } else
- if (nPlanes == 2) {
- out[x/4] |= (pix << ((x & 3) << 1));
- } else
- if (nPlanes == 4) {
- out[x/2] |= (pix << ((x & 1) << 2));
+ } else if (nPlanes == 1) {
+ out[x / 8] |= (pix << (x & 7));
+ } else if (nPlanes == 2) {
+ out[x / 4] |= (pix << ((x & 3) << 1));
+ } else if (nPlanes == 4) {
+ out[x / 2] |= (pix << ((x & 1) << 2));
}
}
@@ -187,7 +184,7 @@ struct PBMLoader {
_surface = &surface;
_colors = colors;
Common::IFFParser parser(&input);
- Common::Functor1Mem< Common::IFFChunk&, bool, PBMLoader > c(this, &PBMLoader::callback);
+ Common::Functor1Mem<Common::IFFChunk &, bool, PBMLoader> c(this, &PBMLoader::callback);
parser.parse(c);
}
@@ -251,7 +248,7 @@ uint32 PackBitsReadStream::read(void *dataPtr, uint32 dataSize) {
for (uint32 j = 0; j < lenW; j++) {
*out++ = _input->readByte();
}
- for ( ; lenR > lenW; lenR--) {
+ for (; lenR > lenW; lenR--) {
_input->readByte();
}
} else { // len > 128
diff --git a/gui/credits.h b/gui/credits.h
index ecfe280d20..34c6f21026 100644
--- a/gui/credits.h
+++ b/gui/credits.h
@@ -106,8 +106,10 @@ static const char *credits[] = {
"C1""DreamWeb",
"C0""Torbj\366rn Andersson",
"C0""Bertrand Augereau",
+"C0""Filippos Karapetis",
"C0""Vladimir Menshakov",
"C2""(retired)",
+"C0""Willem Jan Palenstijn",
"",
"C1""Gob",
"C0""Torbj\366rn Andersson",
@@ -486,10 +488,10 @@ static const char *credits[] = {
"C0""Matteo Angelino",
"",
"C1""Norwegian (Bokm\345l)",
-"C0""Einar Johan T. S\370m\345en",
+"C0""Einar Johan S\370m\345en",
"",
"C1""Norwegian (Nynorsk)",
-"C0""Einar Johan T. S\370m\345en",
+"C0""Einar Johan S\370m\345en",
"",
"C1""Polish",
"C0""GrajPoPolsku.pl Team",
@@ -710,5 +712,9 @@ static const char *credits[] = {
"C0""",
"C0""Broken Sword 2.5 team for providing sources of their engine and their great support.",
"C0""",
+"C0""Neil Dodwell and David Dew from Creative Reality for providing the source of Dreamweb and for their tremendous support.",
+"C0""",
+"C0""Janusz Wisniewski and Miroslaw Liminowicz from Laboratorium Komputerowe Avalon for providing full source code for Soltys and letting us to redistribute the game.",
+"C0""",
"",
};
diff --git a/gui/themes/translations.dat b/gui/themes/translations.dat
index 12ad3d4352..4b35fdb9a8 100644
--- a/gui/themes/translations.dat
+++ b/gui/themes/translations.dat
Binary files differ
diff --git a/po/POTFILES b/po/POTFILES
index 8b74115939..36bd2ff4c7 100644
--- a/po/POTFILES
+++ b/po/POTFILES
@@ -53,6 +53,7 @@ engines/sword1/logic.cpp
engines/sword1/sword1.cpp
engines/sword2/animation.cpp
engines/sword2/sword2.cpp
+engines/teenagent/resources.cpp
engines/tinsel/saveload.cpp
engines/parallaction/saveload.cpp
diff --git a/po/ca_ES.po b/po/ca_ES.po
index d076f96f55..8a978bee0d 100644
--- a/po/ca_ES.po
+++ b/po/ca_ES.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2012-06-24 18:06+0100\n"
+"POT-Creation-Date: 2012-07-08 12:25+0100\n"
"PO-Revision-Date: 2011-10-04 20:51+0100\n"
"Last-Translator: Jordi Vilalta Prat <jvprat@jvprat.com>\n"
"Language-Team: Catalan <scummvm-devel@lists.sf.net>\n"
@@ -1144,13 +1144,13 @@ msgid "~R~eturn to Launcher"
msgstr "~R~etorna al Llanчador"
#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
-#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:728
+#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:735
msgid "Save game:"
msgstr "Desa la partida:"
#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
#: engines/scumm/dialogs.cpp:187 engines/cruise/menu.cpp:212
-#: engines/sci/engine/kfile.cpp:728
+#: engines/sci/engine/kfile.cpp:735
#: backends/platform/symbian/src/SymbianActions.cpp:44
#: backends/platform/wince/CEActionsPocket.cpp:43
#: backends/platform/wince/CEActionsPocket.cpp:267
@@ -1268,11 +1268,11 @@ msgstr ""
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr ""
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:831
msgid "Restore game:"
msgstr "Recupera la partida:"
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:831
msgid "Restore"
msgstr "Restaura"
@@ -1304,12 +1304,12 @@ msgid "Prefer digital sound effects instead of synthesized ones"
msgstr ""
#: engines/sci/detection.cpp:400
-msgid "Use IMF/Yahama FB-01 for MIDI output"
+msgid "Use IMF/Yamaha FB-01 for MIDI output"
msgstr ""
#: engines/sci/detection.cpp:401
msgid ""
-"Use an IBM Music Feature card or a Yahama FB-01 FM synth module for MIDI "
+"Use an IBM Music Feature card or a Yamaha FB-01 FM synth module for MIDI "
"output"
msgstr ""
@@ -2203,12 +2203,13 @@ msgid "Choose Spell"
msgstr "Escull"
#: engines/kyra/sound_midi.cpp:475
+#, fuzzy
msgid ""
"You appear to be using a General MIDI device,\n"
"but your game only supports Roland MT32 MIDI.\n"
"We try to map the Roland MT32 instruments to\n"
-"General MIDI ones. After all it might happen\n"
-"that a few tracks will not be correctly played."
+"General MIDI ones. It is still possible that\n"
+"some tracks sound incorrect."
msgstr ""
"Sembla que esteu utilitzant un dispositiu General\n"
"MIDI, perђ el joc nomщs suporta MIDI de Roland\n"
diff --git a/po/cs_CZ.po b/po/cs_CZ.po
index 93bfed0261..a2d640651c 100644
--- a/po/cs_CZ.po
+++ b/po/cs_CZ.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.4.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2012-06-24 18:06+0100\n"
-"PO-Revision-Date: 2012-05-22 21:02+0100\n"
+"POT-Creation-Date: 2012-07-08 12:25+0100\n"
+"PO-Revision-Date: 2012-07-08 18:03+0100\n"
"Last-Translator: Zbynьk Schwarz <zbynek.schwarz@gmail.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@@ -27,7 +27,7 @@ msgstr "(sestaveno %s)"
#: gui/about.cpp:98
msgid "Features compiled in:"
-msgstr "Zakompilovanщ Funkce:"
+msgstr "Zakompilovanщ funkce:"
#: gui/about.cpp:107
msgid "Available engines:"
@@ -309,7 +309,7 @@ msgstr "Cesta pro uloОenэ:"
#: gui/launcher.cpp:333 gui/launcher.cpp:335 gui/launcher.cpp:336
#: gui/options.cpp:1123 gui/options.cpp:1125 gui/options.cpp:1126
msgid "Specifies where your savegames are put"
-msgstr "Stanovuje, kam jsou umэstьny VaЙe uloОenщ hry"
+msgstr "Stanovuje, kam jsou umэstьny vaЙe uloОenщ hry"
#: gui/launcher.cpp:335 gui/options.cpp:1125
msgctxt "lowres"
@@ -726,7 +726,7 @@ msgid ""
"connected to your computer"
msgstr ""
"ZaЙkrtnьte, pokud chcete pouОэt pravщ hardwarovщ zaјэzenэ kompatibilnэ s "
-"Roland, pјipojenщ k VaЙemu poшэtaшi"
+"Roland, pјipojenщ k vaЙemu poшэtaшi"
#: gui/options.cpp:877
msgctxt "lowres"
@@ -1131,13 +1131,13 @@ msgid "~R~eturn to Launcher"
msgstr "~N~сvrat do SpouЙtьшe"
#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
-#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:728
+#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:735
msgid "Save game:"
msgstr "UloОit hru:"
#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
#: engines/scumm/dialogs.cpp:187 engines/cruise/menu.cpp:212
-#: engines/sci/engine/kfile.cpp:728
+#: engines/sci/engine/kfile.cpp:735
#: backends/platform/symbian/src/SymbianActions.cpp:44
#: backends/platform/wince/CEActionsPocket.cpp:43
#: backends/platform/wince/CEActionsPocket.cpp:267
@@ -1256,11 +1256,11 @@ msgstr "PouОэt pљvodnэ obrazovky naшtenэ/uloОenэ"
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr "PouОэt pљvodnэ obrazovky naшtenэ/uloОenэ mэsto ze ScummVM"
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:831
msgid "Restore game:"
msgstr "Obnovit hru"
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:831
msgid "Restore"
msgstr "Obnovit"
@@ -1289,15 +1289,15 @@ msgid "Prefer digital sound effects instead of synthesized ones"
msgstr "Upјednostђovat digitсlnэ zvukovщ efekty pјed syntetizovan§mi"
#: engines/sci/detection.cpp:400
-msgid "Use IMF/Yahama FB-01 for MIDI output"
-msgstr "PouОэt IMF/Yahama FB-01 pro v§stup MIDI"
+msgid "Use IMF/Yamaha FB-01 for MIDI output"
+msgstr "PouОэt IMF/Yamaha FB-01 pro v§stup MIDI"
#: engines/sci/detection.cpp:401
msgid ""
-"Use an IBM Music Feature card or a Yahama FB-01 FM synth module for MIDI "
+"Use an IBM Music Feature card or a Yamaha FB-01 FM synth module for MIDI "
"output"
msgstr ""
-"PouОэt kartu IBM Music Feature nebo modul syntetizсtoru Yahama FB-01 FM pro "
+"PouОэt kartu IBM Music Feature nebo modul syntetizсtoru Yamaha FB-01 FM pro "
"v§stup MIDI"
#: engines/sci/detection.cpp:411
@@ -2184,14 +2184,14 @@ msgid ""
"You appear to be using a General MIDI device,\n"
"but your game only supports Roland MT32 MIDI.\n"
"We try to map the Roland MT32 instruments to\n"
-"General MIDI ones. After all it might happen\n"
-"that a few tracks will not be correctly played."
+"General MIDI ones. It is still possible that\n"
+"some tracks sound incorrect."
msgstr ""
"Zdс se, Оe pouОэvсte zaјэzenэ General MIDI,\n"
-"ale VaЙe hra podporuje pouze Roland MT32 MIDI.\n"
+"ale vaЙe hra podporuje pouze Roland MT32 MIDI.\n"
"SnaОэme se mapovat nсstroje Roland MT32 na\n"
-"ty od General MIDI. Po tomto se mљОe stсt,\n"
-"Оe pсr stop nebude sprсvnь pјehrсno."
+"ty od General MIDI. Je stсle moОnщ, Оe\n"
+"nьkterщ stopy nebudou znэt sprсvnь."
#: engines/queen/queen.cpp:59 engines/sky/detection.cpp:44
msgid "Floppy intro"
@@ -2248,7 +2248,7 @@ msgstr ""
"ScummVM zjistil, Оe mсte starщ uloОenщ pozice pro Broken Sword 1, kterщ by "
"mьly b§t pјevedeny.\n"
"Star§ formсt uloОen§ch her jiО nenэ podporovсn, takОe pokud je nepјevedete, "
-"nebudete moci VaЙe hry naшэst.\n"
+"nebudete moci vaЙe hry naшэst.\n"
"\n"
"Stisknьte OK, abyste je pјevedli teя, jinak budete poОсdсni znovu, pјi "
"spuЙtьnэ tщto hry.\n"
@@ -2316,13 +2316,13 @@ msgstr ""
"ScummVM zjistil, Оe mсte starщ uloОenщ pozice pro Nippon Safes, kterщ by "
"mьly b§t pјejmenovсny.\n"
"Starщ nсzvy jiО nejsou podporovсny, takОe pokud je nepјevedete, nebudete "
-"moci VaЙe hry naшэst.\n"
+"moci vaЙe hry naшэst.\n"
"\n"
"Stisknьte OK, abyste je pјevedli teя, jinak budete poОсdсni pјэЙtь.\n"
#: engines/parallaction/saveload.cpp:319
msgid "ScummVM successfully converted all your savefiles."
-msgstr "ScummVM њspьЙnь pјevedl vЙechny VaЙe uloОenщ pozice. "
+msgstr "ScummVM њspьЙnь pјevedl vЙechny vaЙe uloОenщ pozice. "
#: engines/parallaction/saveload.cpp:321
msgid ""
@@ -2331,8 +2331,8 @@ msgid ""
"\n"
"Please report to the team."
msgstr ""
-"ScummVM vytiskl nьkterс varovсnэ ve VaЙem oknь konzole a nemљОe zaruшit, Оe "
-"vЙechny VaЙe soubory byly pјevedeny.\n"
+"ScummVM vytiskl nьkterс varovсnэ ve vaЙem oknь konzole a nemљОe zaruшit, Оe "
+"vЙechny vaЙe soubory byly pјevedeny.\n"
"\n"
"Prosэm nahlaste to t§mu"
diff --git a/po/da_DA.po b/po/da_DA.po
index 50068cae5e..c2d55f82cd 100644
--- a/po/da_DA.po
+++ b/po/da_DA.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2012-06-24 18:06+0100\n"
-"PO-Revision-Date: 2011-01-08 22:53+0100\n"
+"POT-Creation-Date: 2012-07-08 12:25+0100\n"
+"PO-Revision-Date: 2012-07-09 20:27+0100\n"
"Last-Translator: Steffen Nyeland <steffen@nyeland.dk>\n"
"Language-Team: Steffen Nyeland <steffen@nyeland.dk>\n"
"MIME-Version: 1.0\n"
@@ -15,6 +15,8 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Language: Dansk\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Poedit-Language: Danish\n"
+"X-Poedit-Country: DENMARK\n"
#: gui/about.cpp:91
#, c-format
@@ -33,7 +35,8 @@ msgstr "Tilgцngelige \"motorer\":"
msgid "Go up"
msgstr "Gх op"
-#: gui/browser.cpp:66 gui/browser.cpp:68
+#: gui/browser.cpp:66
+#: gui/browser.cpp:68
msgid "Go to previous directory level"
msgstr "Gх til forrige biblioteks niveau"
@@ -42,24 +45,37 @@ msgctxt "lowres"
msgid "Go up"
msgstr "Gх op"
-#: gui/browser.cpp:69 gui/chooser.cpp:45 gui/KeysDialog.cpp:43
-#: gui/launcher.cpp:345 gui/massadd.cpp:94 gui/options.cpp:1228
-#: gui/saveload.cpp:64 gui/saveload.cpp:173 gui/themebrowser.cpp:54
-#: engines/engine.cpp:442 engines/scumm/dialogs.cpp:190
-#: engines/sword1/control.cpp:865 engines/parallaction/saveload.cpp:274
+#: gui/browser.cpp:69
+#: gui/chooser.cpp:45
+#: gui/KeysDialog.cpp:43
+#: gui/launcher.cpp:345
+#: gui/massadd.cpp:94
+#: gui/options.cpp:1228
+#: gui/saveload.cpp:64
+#: gui/saveload.cpp:173
+#: gui/themebrowser.cpp:54
+#: engines/engine.cpp:442
+#: engines/scumm/dialogs.cpp:190
+#: engines/sword1/control.cpp:865
+#: engines/parallaction/saveload.cpp:274
#: backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:191
#: backends/events/default/default-events.cpp:213
msgid "Cancel"
msgstr "Fortryd"
-#: gui/browser.cpp:70 gui/chooser.cpp:46 gui/themebrowser.cpp:55
+#: gui/browser.cpp:70
+#: gui/chooser.cpp:46
+#: gui/themebrowser.cpp:55
msgid "Choose"
msgstr "Vцlg"
-#: gui/gui-manager.cpp:115 engines/scumm/help.cpp:125
-#: engines/scumm/help.cpp:140 engines/scumm/help.cpp:165
-#: engines/scumm/help.cpp:191 engines/scumm/help.cpp:209
+#: gui/gui-manager.cpp:115
+#: engines/scumm/help.cpp:125
+#: engines/scumm/help.cpp:140
+#: engines/scumm/help.cpp:165
+#: engines/scumm/help.cpp:191
+#: engines/scumm/help.cpp:209
#: backends/keymapper/remap-dialog.cpp:52
msgid "Close"
msgstr "Luk"
@@ -68,20 +84,23 @@ msgstr "Luk"
msgid "Mouse click"
msgstr "Muse klik"
-#: gui/gui-manager.cpp:122 base/main.cpp:300
+#: gui/gui-manager.cpp:122
+#: base/main.cpp:300
msgid "Display keyboard"
msgstr "Vis tastatur"
-#: gui/gui-manager.cpp:126 base/main.cpp:304
+#: gui/gui-manager.cpp:126
+#: base/main.cpp:304
msgid "Remap keys"
msgstr "Kortlцg taster"
-#: gui/gui-manager.cpp:129 base/main.cpp:307
-#, fuzzy
+#: gui/gui-manager.cpp:129
+#: base/main.cpp:307
msgid "Toggle FullScreen"
msgstr "Skift fuldskцrm"
-#: gui/KeysDialog.h:36 gui/KeysDialog.cpp:145
+#: gui/KeysDialog.h:36
+#: gui/KeysDialog.cpp:145
msgid "Choose an action to map"
msgstr "Vцlg en handling at kortlцgge"
@@ -89,17 +108,31 @@ msgstr "Vцlg en handling at kortlцgge"
msgid "Map"
msgstr "Kortlцg"
-#: gui/KeysDialog.cpp:42 gui/launcher.cpp:346 gui/launcher.cpp:1001
-#: gui/launcher.cpp:1005 gui/massadd.cpp:91 gui/options.cpp:1229
-#: engines/engine.cpp:361 engines/engine.cpp:372 engines/scumm/dialogs.cpp:192
-#: engines/scumm/scumm.cpp:1775 engines/agos/animation.cpp:561
-#: engines/groovie/script.cpp:420 engines/sky/compact.cpp:131
-#: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:539
-#: engines/sword1/animation.cpp:560 engines/sword1/animation.cpp:570
-#: engines/sword1/animation.cpp:577 engines/sword1/control.cpp:865
-#: engines/sword1/logic.cpp:1633 engines/sword2/animation.cpp:435
-#: engines/sword2/animation.cpp:455 engines/sword2/animation.cpp:465
-#: engines/sword2/animation.cpp:474 engines/parallaction/saveload.cpp:274
+#: gui/KeysDialog.cpp:42
+#: gui/launcher.cpp:346
+#: gui/launcher.cpp:1001
+#: gui/launcher.cpp:1005
+#: gui/massadd.cpp:91
+#: gui/options.cpp:1229
+#: engines/engine.cpp:361
+#: engines/engine.cpp:372
+#: engines/scumm/dialogs.cpp:192
+#: engines/scumm/scumm.cpp:1775
+#: engines/agos/animation.cpp:561
+#: engines/groovie/script.cpp:420
+#: engines/sky/compact.cpp:131
+#: engines/sky/compact.cpp:141
+#: engines/sword1/animation.cpp:539
+#: engines/sword1/animation.cpp:560
+#: engines/sword1/animation.cpp:570
+#: engines/sword1/animation.cpp:577
+#: engines/sword1/control.cpp:865
+#: engines/sword1/logic.cpp:1633
+#: engines/sword2/animation.cpp:435
+#: engines/sword2/animation.cpp:455
+#: engines/sword2/animation.cpp:465
+#: engines/sword2/animation.cpp:474
+#: engines/parallaction/saveload.cpp:274
#: backends/platform/wii/options.cpp:47
#: backends/platform/wince/CELauncherDialog.cpp:54
msgid "OK"
@@ -109,12 +142,16 @@ msgstr "OK"
msgid "Select an action and click 'Map'"
msgstr "Vцlg en handling og klik 'Kortlцg'"
-#: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141
+#: gui/KeysDialog.cpp:80
+#: gui/KeysDialog.cpp:102
+#: gui/KeysDialog.cpp:141
#, c-format
msgid "Associated key : %s"
msgstr "Tilknyttet tast : %s"
-#: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143
+#: gui/KeysDialog.cpp:82
+#: gui/KeysDialog.cpp:104
+#: gui/KeysDialog.cpp:143
#, c-format
msgid "Associated key : none"
msgstr "Tilknyttet tast : ingen"
@@ -135,13 +172,11 @@ msgstr "Spil"
msgid "ID:"
msgstr "ID:"
-#: gui/launcher.cpp:191 gui/launcher.cpp:193 gui/launcher.cpp:194
-msgid ""
-"Short game identifier used for referring to savegames and running the game "
-"from the command line"
-msgstr ""
-"Kort spil identifikator til brug for gemmer, og for at kјre spillet fra "
-"kommandolinien"
+#: gui/launcher.cpp:191
+#: gui/launcher.cpp:193
+#: gui/launcher.cpp:194
+msgid "Short game identifier used for referring to savegames and running the game from the command line"
+msgstr "Kort spil identifikator til brug for gemmer, og for at kјre spillet fra kommandolinien"
#: gui/launcher.cpp:193
msgctxt "lowres"
@@ -152,7 +187,9 @@ msgstr "ID:"
msgid "Name:"
msgstr "Navn:"
-#: gui/launcher.cpp:198 gui/launcher.cpp:200 gui/launcher.cpp:201
+#: gui/launcher.cpp:198
+#: gui/launcher.cpp:200
+#: gui/launcher.cpp:201
msgid "Full title of the game"
msgstr "Fuld titel pх spillet"
@@ -165,16 +202,17 @@ msgstr "Navn:"
msgid "Language:"
msgstr "Sprog:"
-#: gui/launcher.cpp:204 gui/launcher.cpp:205
-msgid ""
-"Language of the game. This will not turn your Spanish game version into "
-"English"
-msgstr ""
-"Spillets sprog. Dette vil ikke цndre din spanske version af spillet til "
-"engelsk"
+#: gui/launcher.cpp:204
+#: gui/launcher.cpp:205
+msgid "Language of the game. This will not turn your Spanish game version into English"
+msgstr "Spillets sprog. Dette vil ikke цndre din spanske version af spillet til engelsk"
-#: gui/launcher.cpp:206 gui/launcher.cpp:220 gui/options.cpp:80
-#: gui/options.cpp:730 gui/options.cpp:743 gui/options.cpp:1199
+#: gui/launcher.cpp:206
+#: gui/launcher.cpp:220
+#: gui/options.cpp:80
+#: gui/options.cpp:730
+#: gui/options.cpp:743
+#: gui/options.cpp:1199
#: audio/null.cpp:40
msgid "<default>"
msgstr "<standard>"
@@ -183,7 +221,9 @@ msgstr "<standard>"
msgid "Platform:"
msgstr "Platform:"
-#: gui/launcher.cpp:216 gui/launcher.cpp:218 gui/launcher.cpp:219
+#: gui/launcher.cpp:216
+#: gui/launcher.cpp:218
+#: gui/launcher.cpp:219
msgid "Platform the game was originally designed for"
msgstr "Platform som spillet oprindeligt var designet til"
@@ -193,15 +233,18 @@ msgid "Platform:"
msgstr "Platform:"
#: gui/launcher.cpp:231
-#, fuzzy
msgid "Engine"
-msgstr "Undersјg"
+msgstr "Motor"
-#: gui/launcher.cpp:239 gui/options.cpp:1062 gui/options.cpp:1079
+#: gui/launcher.cpp:239
+#: gui/options.cpp:1062
+#: gui/options.cpp:1079
msgid "Graphics"
msgstr "Grafik"
-#: gui/launcher.cpp:239 gui/options.cpp:1062 gui/options.cpp:1079
+#: gui/launcher.cpp:239
+#: gui/options.cpp:1062
+#: gui/options.cpp:1079
msgid "GFX"
msgstr "GFX"
@@ -214,7 +257,8 @@ msgctxt "lowres"
msgid "Override global graphic settings"
msgstr "Overstyr globale grafik indstillinger"
-#: gui/launcher.cpp:251 gui/options.cpp:1085
+#: gui/launcher.cpp:251
+#: gui/options.cpp:1085
msgid "Audio"
msgstr "Lyd"
@@ -227,11 +271,13 @@ msgctxt "lowres"
msgid "Override global audio settings"
msgstr "Overstyr globale lyd indstillinger"
-#: gui/launcher.cpp:265 gui/options.cpp:1090
+#: gui/launcher.cpp:265
+#: gui/options.cpp:1090
msgid "Volume"
msgstr "Lydstyrke"
-#: gui/launcher.cpp:267 gui/options.cpp:1092
+#: gui/launcher.cpp:267
+#: gui/options.cpp:1092
msgctxt "lowres"
msgid "Volume"
msgstr "Lydstyrke"
@@ -245,7 +291,8 @@ msgctxt "lowres"
msgid "Override global volume settings"
msgstr "Overstyr globale lydstyrke indstillinger"
-#: gui/launcher.cpp:280 gui/options.cpp:1100
+#: gui/launcher.cpp:280
+#: gui/options.cpp:1100
msgid "MIDI"
msgstr "MIDI"
@@ -258,7 +305,8 @@ msgctxt "lowres"
msgid "Override global MIDI settings"
msgstr "Overstyr globale MIDI indstillinger"
-#: gui/launcher.cpp:294 gui/options.cpp:1106
+#: gui/launcher.cpp:294
+#: gui/options.cpp:1106
msgid "MT-32"
msgstr "MT-32"
@@ -271,11 +319,13 @@ msgctxt "lowres"
msgid "Override global MT-32 settings"
msgstr "Overstyr globale MT-32 indstillinger"
-#: gui/launcher.cpp:308 gui/options.cpp:1113
+#: gui/launcher.cpp:308
+#: gui/options.cpp:1113
msgid "Paths"
msgstr "Stier"
-#: gui/launcher.cpp:310 gui/options.cpp:1115
+#: gui/launcher.cpp:310
+#: gui/options.cpp:1115
msgctxt "lowres"
msgid "Paths"
msgstr "Stier"
@@ -289,54 +339,80 @@ msgctxt "lowres"
msgid "Game Path:"
msgstr "Spil sti:"
-#: gui/launcher.cpp:324 gui/options.cpp:1139
+#: gui/launcher.cpp:324
+#: gui/options.cpp:1139
msgid "Extra Path:"
msgstr "Ekstra sti:"
-#: gui/launcher.cpp:324 gui/launcher.cpp:326 gui/launcher.cpp:327
+#: gui/launcher.cpp:324
+#: gui/launcher.cpp:326
+#: gui/launcher.cpp:327
msgid "Specifies path to additional data used the game"
msgstr "Angiver sti til ekstra data der bruges i spillet"
-#: gui/launcher.cpp:326 gui/options.cpp:1141
+#: gui/launcher.cpp:326
+#: gui/options.cpp:1141
msgctxt "lowres"
msgid "Extra Path:"
msgstr "Ekstra sti:"
-#: gui/launcher.cpp:333 gui/options.cpp:1123
+#: gui/launcher.cpp:333
+#: gui/options.cpp:1123
msgid "Save Path:"
msgstr "Gemme sti:"
-#: gui/launcher.cpp:333 gui/launcher.cpp:335 gui/launcher.cpp:336
-#: gui/options.cpp:1123 gui/options.cpp:1125 gui/options.cpp:1126
+#: gui/launcher.cpp:333
+#: gui/launcher.cpp:335
+#: gui/launcher.cpp:336
+#: gui/options.cpp:1123
+#: gui/options.cpp:1125
+#: gui/options.cpp:1126
msgid "Specifies where your savegames are put"
msgstr "Angiver hvor dine gemmer bliver lagt"
-#: gui/launcher.cpp:335 gui/options.cpp:1125
+#: gui/launcher.cpp:335
+#: gui/options.cpp:1125
msgctxt "lowres"
msgid "Save Path:"
msgstr "Gemme sti:"
-#: gui/launcher.cpp:354 gui/launcher.cpp:453 gui/launcher.cpp:511
-#: gui/launcher.cpp:565 gui/options.cpp:1134 gui/options.cpp:1142
-#: gui/options.cpp:1151 gui/options.cpp:1258 gui/options.cpp:1264
-#: gui/options.cpp:1272 gui/options.cpp:1302 gui/options.cpp:1308
-#: gui/options.cpp:1315 gui/options.cpp:1408 gui/options.cpp:1411
+#: gui/launcher.cpp:354
+#: gui/launcher.cpp:453
+#: gui/launcher.cpp:511
+#: gui/launcher.cpp:565
+#: gui/options.cpp:1134
+#: gui/options.cpp:1142
+#: gui/options.cpp:1151
+#: gui/options.cpp:1258
+#: gui/options.cpp:1264
+#: gui/options.cpp:1272
+#: gui/options.cpp:1302
+#: gui/options.cpp:1308
+#: gui/options.cpp:1315
+#: gui/options.cpp:1408
+#: gui/options.cpp:1411
#: gui/options.cpp:1423
msgctxt "path"
msgid "None"
msgstr "Ingen"
-#: gui/launcher.cpp:359 gui/launcher.cpp:459 gui/launcher.cpp:569
-#: gui/options.cpp:1252 gui/options.cpp:1296 gui/options.cpp:1414
+#: gui/launcher.cpp:359
+#: gui/launcher.cpp:459
+#: gui/launcher.cpp:569
+#: gui/options.cpp:1252
+#: gui/options.cpp:1296
+#: gui/options.cpp:1414
#: backends/platform/wii/options.cpp:56
msgid "Default"
msgstr "Standard"
-#: gui/launcher.cpp:504 gui/options.cpp:1417
+#: gui/launcher.cpp:504
+#: gui/options.cpp:1417
msgid "Select SoundFont"
msgstr "Vцlg SoundFont"
-#: gui/launcher.cpp:523 gui/launcher.cpp:677
+#: gui/launcher.cpp:523
+#: gui/launcher.cpp:677
msgid "Select directory with game data"
msgstr "Vцlg bibliotek med spil data"
@@ -352,11 +428,13 @@ msgstr "Vцlg bibliotek til spil gemmer"
msgid "This game ID is already taken. Please choose another one."
msgstr "Dette spil ID er allerede i brug. Vцlg venligst et andet."
-#: gui/launcher.cpp:621 engines/dialogs.cpp:110
+#: gui/launcher.cpp:621
+#: engines/dialogs.cpp:110
msgid "~Q~uit"
msgstr "~A~fslut"
-#: gui/launcher.cpp:621 backends/platform/sdl/macosx/appmenu_osx.mm:96
+#: gui/launcher.cpp:621
+#: backends/platform/sdl/macosx/appmenu_osx.mm:96
msgid "Quit ScummVM"
msgstr "Slut ScummVM"
@@ -364,7 +442,8 @@ msgstr "Slut ScummVM"
msgid "A~b~out..."
msgstr "~O~m..."
-#: gui/launcher.cpp:622 backends/platform/sdl/macosx/appmenu_osx.mm:70
+#: gui/launcher.cpp:622
+#: backends/platform/sdl/macosx/appmenu_osx.mm:70
msgid "About ScummVM"
msgstr "Om ScummVM"
@@ -386,17 +465,19 @@ msgstr "Start det valgte spil"
#: gui/launcher.cpp:628
msgid "~L~oad..."
-msgstr "~H~ent..."
+msgstr "Ind~l~цs..."
#: gui/launcher.cpp:628
msgid "Load savegame for selected game"
-msgstr "Hent gemmer for det valgte spil"
+msgstr "Indlцs gemmer for det valgte spil"
-#: gui/launcher.cpp:633 gui/launcher.cpp:1120
+#: gui/launcher.cpp:633
+#: gui/launcher.cpp:1120
msgid "~A~dd Game..."
msgstr "~T~ilfјj spil..."
-#: gui/launcher.cpp:633 gui/launcher.cpp:640
+#: gui/launcher.cpp:633
+#: gui/launcher.cpp:640
msgid "Hold Shift for Mass Add"
msgstr "Hold Skift for at tilfјje flere"
@@ -404,7 +485,8 @@ msgstr "Hold Skift for at tilfјje flere"
msgid "~E~dit Game..."
msgstr "~R~ediger spil..."
-#: gui/launcher.cpp:635 gui/launcher.cpp:642
+#: gui/launcher.cpp:635
+#: gui/launcher.cpp:642
msgid "Change game options"
msgstr "Цndre spil indstillinger"
@@ -412,11 +494,13 @@ msgstr "Цndre spil indstillinger"
msgid "~R~emove Game"
msgstr "~F~jern spil"
-#: gui/launcher.cpp:637 gui/launcher.cpp:644
+#: gui/launcher.cpp:637
+#: gui/launcher.cpp:644
msgid "Remove game from the list. The game data files stay intact"
msgstr "Fjerner spil fra listen. Spillets data filer forbliver uberјrt"
-#: gui/launcher.cpp:640 gui/launcher.cpp:1120
+#: gui/launcher.cpp:640
+#: gui/launcher.cpp:1120
msgctxt "lowres"
msgid "~A~dd Game..."
msgstr "~T~ilfјj spil..."
@@ -435,31 +519,36 @@ msgstr "~F~jern spil"
msgid "Search in game list"
msgstr "Sјg i spil liste"
-#: gui/launcher.cpp:656 gui/launcher.cpp:1167
+#: gui/launcher.cpp:656
+#: gui/launcher.cpp:1167
msgid "Search:"
msgstr "Sјg:"
-#: gui/launcher.cpp:680 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255
-#: engines/mohawk/riven.cpp:716 engines/cruise/menu.cpp:214
+#: gui/launcher.cpp:680
+#: engines/dialogs.cpp:114
+#: engines/mohawk/myst.cpp:255
+#: engines/mohawk/riven.cpp:716
+#: engines/cruise/menu.cpp:214
msgid "Load game:"
msgstr "Indlцs spil:"
-#: gui/launcher.cpp:680 engines/dialogs.cpp:114 engines/scumm/dialogs.cpp:188
-#: engines/mohawk/myst.cpp:255 engines/mohawk/riven.cpp:716
-#: engines/cruise/menu.cpp:214 backends/platform/wince/CEActionsPocket.cpp:267
+#: gui/launcher.cpp:680
+#: engines/dialogs.cpp:114
+#: engines/scumm/dialogs.cpp:188
+#: engines/mohawk/myst.cpp:255
+#: engines/mohawk/riven.cpp:716
+#: engines/cruise/menu.cpp:214
+#: backends/platform/wince/CEActionsPocket.cpp:267
#: backends/platform/wince/CEActionsSmartphone.cpp:231
msgid "Load"
msgstr "Indlцs"
#: gui/launcher.cpp:788
-msgid ""
-"Do you really want to run the mass game detector? This could potentially add "
-"a huge number of games."
-msgstr ""
-"Vil du virkelig kјre fler spils detektoren? Dette kunne potentielt tilfјje "
-"et stort antal spil."
+msgid "Do you really want to run the mass game detector? This could potentially add a huge number of games."
+msgstr "Vil du virkelig kјre fler spils detektoren? Dette kunne potentielt tilfјje et stort antal spil."
-#: gui/launcher.cpp:789 gui/launcher.cpp:937
+#: gui/launcher.cpp:789
+#: gui/launcher.cpp:937
#: backends/events/symbiansdl/symbiansdl-events.cpp:184
#: backends/platform/wince/CEActionsPocket.cpp:326
#: backends/platform/wince/CEActionsSmartphone.cpp:287
@@ -467,7 +556,8 @@ msgstr ""
msgid "Yes"
msgstr "Ja"
-#: gui/launcher.cpp:789 gui/launcher.cpp:937
+#: gui/launcher.cpp:789
+#: gui/launcher.cpp:937
#: backends/events/symbiansdl/symbiansdl-events.cpp:184
#: backends/platform/wince/CEActionsPocket.cpp:326
#: backends/platform/wince/CEActionsSmartphone.cpp:287
@@ -493,12 +583,11 @@ msgstr "Vil du virkelig fjerne denne spil konfiguration?"
#: gui/launcher.cpp:1001
msgid "This game does not support loading games from the launcher."
-msgstr "Dette spil understјtter ikke hentning af spil fra spiloversigten."
+msgstr "Dette spil understјtter ikke indlцsning af spil fra spiloversigten."
#: gui/launcher.cpp:1005
msgid "ScummVM could not find any engine capable of running the selected game!"
-msgstr ""
-"ScummVM kunne ikke finde en motor, istand til at afvikle det valgte spil!"
+msgstr "ScummVM kunne ikke finde en motor, istand til at afvikle det valgte spil!"
#: gui/launcher.cpp:1119
msgctxt "lowres"
@@ -509,7 +598,8 @@ msgstr "Tilfјj flere..."
msgid "Mass Add..."
msgstr "Tilfјj flere..."
-#: gui/massadd.cpp:78 gui/massadd.cpp:81
+#: gui/massadd.cpp:78
+#: gui/massadd.cpp:81
msgid "... progress ..."
msgstr "... fremskridt ..."
@@ -520,7 +610,7 @@ msgstr "Skan gennemfјrt!"
#: gui/massadd.cpp:261
#, c-format
msgid "Discovered %d new games, ignored %d previously added games."
-msgstr ""
+msgstr "Opdaget %d nye spil, ignorerede %d tidligere tilfјjede spil."
#: gui/massadd.cpp:265
#, c-format
@@ -528,9 +618,9 @@ msgid "Scanned %d directories ..."
msgstr "Gennemset %d biblioteker ..."
#: gui/massadd.cpp:268
-#, fuzzy, c-format
+#, c-format
msgid "Discovered %d new games, ignored %d previously added games ..."
-msgstr "Fundet %d nye spil ..."
+msgstr "Fundet %d nye spil, ignorer %d tidligere tilfјjede spil ..."
#: gui/options.cpp:78
msgid "Never"
@@ -572,27 +662,30 @@ msgstr "44 kHz"
msgid "48 kHz"
msgstr "48 kHz"
-#: gui/options.cpp:248 gui/options.cpp:474 gui/options.cpp:575
-#: gui/options.cpp:644 gui/options.cpp:852
+#: gui/options.cpp:248
+#: gui/options.cpp:474
+#: gui/options.cpp:575
+#: gui/options.cpp:644
+#: gui/options.cpp:852
msgctxt "soundfont"
msgid "None"
msgstr "Ingen"
#: gui/options.cpp:382
msgid "Failed to apply some of the graphic options changes:"
-msgstr ""
+msgstr "Anvendelse af цndringer for grafiske indstillinger fejlede:"
#: gui/options.cpp:394
msgid "the video mode could not be changed."
-msgstr ""
+msgstr "videotilstanden kunne ikke цndres."
#: gui/options.cpp:400
msgid "the fullscreen setting could not be changed"
-msgstr ""
+msgstr "fuld skцrm indstillingen kunne ikke цndres"
#: gui/options.cpp:406
msgid "the aspect ratio setting could not be changed"
-msgstr ""
+msgstr "billedformat indstillingen ikke kunne цndres"
#: gui/options.cpp:727
msgid "Graphics mode:"
@@ -602,7 +695,8 @@ msgstr "Grafik tilstand:"
msgid "Render mode:"
msgstr "Rendere tilstand:"
-#: gui/options.cpp:741 gui/options.cpp:742
+#: gui/options.cpp:741
+#: gui/options.cpp:742
msgid "Special dithering modes supported by some games"
msgstr "Speciel farvereduceringstilstand understјttet a nogle spil"
@@ -628,11 +722,14 @@ msgstr "Foretruk. enhed:"
msgid "Music Device:"
msgstr "Musik enhed:"
-#: gui/options.cpp:764 gui/options.cpp:766
+#: gui/options.cpp:764
+#: gui/options.cpp:766
msgid "Specifies preferred sound device or sound card emulator"
msgstr "Angiver foretukket lyd enhed eller lydkort emulator"
-#: gui/options.cpp:764 gui/options.cpp:766 gui/options.cpp:767
+#: gui/options.cpp:764
+#: gui/options.cpp:766
+#: gui/options.cpp:767
msgid "Specifies output sound device or sound card emulator"
msgstr "Angiver lyd udgangsenhed eller lydkorts emulator"
@@ -650,7 +747,8 @@ msgstr "Musik enhed:"
msgid "AdLib emulator:"
msgstr "AdLib emulator:"
-#: gui/options.cpp:793 gui/options.cpp:794
+#: gui/options.cpp:793
+#: gui/options.cpp:794
msgid "AdLib is used for music in many games"
msgstr "AdLib bliver brugt til musik i mange spil"
@@ -658,13 +756,10 @@ msgstr "AdLib bliver brugt til musik i mange spil"
msgid "Output rate:"
msgstr "Udgangsfrekvens:"
-#: gui/options.cpp:804 gui/options.cpp:805
-msgid ""
-"Higher value specifies better sound quality but may be not supported by your "
-"soundcard"
-msgstr ""
-"Hјjere vцrdi angiver bedre lyd kvalitet, men understјttes mхske ikke af dit "
-"lydkort"
+#: gui/options.cpp:804
+#: gui/options.cpp:805
+msgid "Higher value specifies better sound quality but may be not supported by your soundcard"
+msgstr "Hјjere vцrdi angiver bedre lyd kvalitet, men understјttes mхske ikke af dit lydkort"
#: gui/options.cpp:815
msgid "GM Device:"
@@ -672,13 +767,14 @@ msgstr "GM enhed:"
#: gui/options.cpp:815
msgid "Specifies default sound device for General MIDI output"
-msgstr "Angiver standard lyd enhed for General MIDI udgang"
+msgstr "Angiver standard lyd enhed for Generel MIDI-udgang"
#: gui/options.cpp:826
msgid "Don't use General MIDI music"
-msgstr "Brug ikke General MIDI musik"
+msgstr "Brug ikke Generel MIDI musik"
-#: gui/options.cpp:837 gui/options.cpp:899
+#: gui/options.cpp:837
+#: gui/options.cpp:899
msgid "Use first available device"
msgstr "Brug fјrste tilgцngelig enhed"
@@ -686,7 +782,9 @@ msgstr "Brug fјrste tilgцngelig enhed"
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:849 gui/options.cpp:851 gui/options.cpp:852
+#: gui/options.cpp:849
+#: gui/options.cpp:851
+#: gui/options.cpp:852
msgid "SoundFont is supported by some audio cards, Fluidsynth and Timidity"
msgstr "SoundFont er understјttet af nogle lydkort, Fluidsynth og Timidity"
@@ -719,13 +817,10 @@ msgstr "Angiver standard lyd enhed for Roland MT-32/LAPC1/CM32I/CM64 udgang"
msgid "True Roland MT-32 (disable GM emulation)"
msgstr "Цgte Roland MT-32 (undlad GM emulering)"
-#: gui/options.cpp:875 gui/options.cpp:877
-msgid ""
-"Check if you want to use your real hardware Roland-compatible sound device "
-"connected to your computer"
-msgstr ""
-"Kontroller om du vil bruge din rigtige hardware Roland-kompatible lyd enhed "
-"tilsluttet til din computer"
+#: gui/options.cpp:875
+#: gui/options.cpp:877
+msgid "Check if you want to use your real hardware Roland-compatible sound device connected to your computer"
+msgstr "Kontroller om du vil bruge din rigtige hardware Roland-kompatible lyd enhed tilsluttet til din computer"
#: gui/options.cpp:877
msgctxt "lowres"
@@ -738,7 +833,7 @@ msgstr "Aktivщr Roland GS tilstand"
#: gui/options.cpp:880
msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack"
-msgstr "Sluk for General MIDI kortlцgning for spil med Roland MT-32 lydspor"
+msgstr "Sluk for Generel MIDI kortlцgning for spil med Roland MT-32 lydspor"
#: gui/options.cpp:889
msgid "Don't use Roland MT-32 music"
@@ -748,11 +843,13 @@ msgstr "Brug ikke Roland MT-32 musik"
msgid "Text and Speech:"
msgstr "Tekst og tale:"
-#: gui/options.cpp:920 gui/options.cpp:930
+#: gui/options.cpp:920
+#: gui/options.cpp:930
msgid "Speech"
msgstr "Tale"
-#: gui/options.cpp:921 gui/options.cpp:931
+#: gui/options.cpp:921
+#: gui/options.cpp:931
msgid "Subtitles"
msgstr "Undertekster"
@@ -808,7 +905,9 @@ msgstr "Mute alle"
msgid "SFX volume:"
msgstr "SFX lydstyrke:"
-#: gui/options.cpp:962 gui/options.cpp:964 gui/options.cpp:965
+#: gui/options.cpp:962
+#: gui/options.cpp:964
+#: gui/options.cpp:965
msgid "Special sound effects volume"
msgstr "Lydstyrke for specielle lydeffekter"
@@ -835,7 +934,9 @@ msgctxt "lowres"
msgid "Theme Path:"
msgstr "Tema sti:"
-#: gui/options.cpp:1139 gui/options.cpp:1141 gui/options.cpp:1142
+#: gui/options.cpp:1139
+#: gui/options.cpp:1141
+#: gui/options.cpp:1142
msgid "Specifies path to additional data used by all games or ScummVM"
msgstr "Angiver sti til ekstra data brugt af alle spil eller ScummVM"
@@ -887,9 +988,8 @@ msgid "Language of ScummVM GUI"
msgstr "Sprog for brugerfladen i ScummVM"
#: gui/options.cpp:1347
-#, fuzzy
msgid "You have to restart ScummVM before your changes will take effect."
-msgstr "Du skal genstarte ScummVM for at цndringer vises."
+msgstr "Du skal genstarte ScummVM fјr dine цndringer har effekt."
#: gui/options.cpp:1360
msgid "Select directory for savegames"
@@ -912,26 +1012,26 @@ msgid "Select directory for plugins"
msgstr "Vцlg bibliotek for plugins"
#: gui/options.cpp:1450
-msgid ""
-"The theme you selected does not support your current language. If you want "
-"to use this theme you need to switch to another language first."
-msgstr ""
-"Temaet du valgte understјtter ikke dit aktuelle sprog. Hvis du јnsker at "
-"bruge dette tema, skal du skifte til et andet sprog fјrst."
+msgid "The theme you selected does not support your current language. If you want to use this theme you need to switch to another language first."
+msgstr "Temaet du valgte understјtter ikke dit aktuelle sprog. Hvis du јnsker at bruge dette tema, skal du skifte til et andet sprog fјrst."
-#: gui/saveload.cpp:59 gui/saveload.cpp:257
+#: gui/saveload.cpp:59
+#: gui/saveload.cpp:257
msgid "No date saved"
msgstr "Ingen dato gemt"
-#: gui/saveload.cpp:60 gui/saveload.cpp:258
+#: gui/saveload.cpp:60
+#: gui/saveload.cpp:258
msgid "No time saved"
msgstr "Intet tidspunkt gemt"
-#: gui/saveload.cpp:61 gui/saveload.cpp:259
+#: gui/saveload.cpp:61
+#: gui/saveload.cpp:259
msgid "No playtime saved"
msgstr "Ingen spilletid gemt"
-#: gui/saveload.cpp:68 gui/saveload.cpp:173
+#: gui/saveload.cpp:68
+#: gui/saveload.cpp:173
msgid "Delete"
msgstr "Slet"
@@ -951,7 +1051,8 @@ msgstr "Tid:"
msgid "Playtime: "
msgstr "Spilletid:"
-#: gui/saveload.cpp:305 gui/saveload.cpp:372
+#: gui/saveload.cpp:305
+#: gui/saveload.cpp:372
msgid "Untitled savestate"
msgstr "Unavngivet gemmetilstand"
@@ -984,7 +1085,10 @@ msgstr "Antialias renderer (16bpp)"
msgid "Antialiased (16bpp)"
msgstr "Antialias (16bpp)"
-#: gui/widget.cpp:322 gui/widget.cpp:324 gui/widget.cpp:330 gui/widget.cpp:332
+#: gui/widget.cpp:322
+#: gui/widget.cpp:324
+#: gui/widget.cpp:330
+#: gui/widget.cpp:332
msgid "Clear value"
msgstr "Slet vцrdi"
@@ -997,13 +1101,15 @@ msgstr "Motor understјtter ikke fejlfindingsniveau '%s'"
msgid "Menu"
msgstr "Menu"
-#: base/main.cpp:290 backends/platform/symbian/src/SymbianActions.cpp:45
+#: base/main.cpp:290
+#: backends/platform/symbian/src/SymbianActions.cpp:45
#: backends/platform/wince/CEActionsPocket.cpp:45
#: backends/platform/wince/CEActionsSmartphone.cpp:46
msgid "Skip"
msgstr "Spring over"
-#: base/main.cpp:293 backends/platform/symbian/src/SymbianActions.cpp:50
+#: base/main.cpp:293
+#: backends/platform/symbian/src/SymbianActions.cpp:50
#: backends/platform/wince/CEActionsPocket.cpp:42
msgid "Pause"
msgstr "Pause"
@@ -1022,20 +1128,17 @@ msgstr "Kunne ikke finde nogen motor istand til at afvikle det valgte spil"
#: common/error.cpp:38
msgid "No error"
-msgstr ""
+msgstr "Ingen fejl"
#: common/error.cpp:40
-#, fuzzy
msgid "Game data not found"
msgstr "Spil data ikke fundet"
#: common/error.cpp:42
-#, fuzzy
msgid "Game id not supported"
msgstr "Spil id ikke understјttet"
#: common/error.cpp:44
-#, fuzzy
msgid "Unsupported color mode"
msgstr "Ikke understјttet farve tilstand"
@@ -1048,7 +1151,6 @@ msgid "Write permission denied"
msgstr "Skrive rettighed nцgtet"
#: common/error.cpp:52
-#, fuzzy
msgid "Path does not exist"
msgstr "Sti eksistere ikke"
@@ -1065,9 +1167,8 @@ msgid "Cannot create file"
msgstr "Kan ikke oprette fil"
#: common/error.cpp:61
-#, fuzzy
msgid "Reading data failed"
-msgstr "Lцsning fejlet"
+msgstr "Lцsning af data fejlet"
#: common/error.cpp:63
msgid "Writing data failed"
@@ -1075,34 +1176,32 @@ msgstr "Skrivning af data fejlet"
#: common/error.cpp:66
msgid "Could not find suitable engine plugin"
-msgstr ""
+msgstr "Kunne ikke finde passende motor udvidelse"
#: common/error.cpp:68
-#, fuzzy
msgid "Engine plugin does not support save states"
-msgstr "Motor understјtter ikke fejlfindingsniveau '%s'"
+msgstr "Motor udvidelse understјtter ikke gemmetilstande"
#: common/error.cpp:71
msgid "User canceled"
-msgstr ""
+msgstr "Bruger annullerede"
#: common/error.cpp:75
-#, fuzzy
msgid "Unknown error"
msgstr "Ukendt fejl"
#: engines/advancedDetector.cpp:324
#, c-format
msgid "The game in '%s' seems to be unknown."
-msgstr ""
+msgstr "Spillet i '%s' ser ud til at vцre ukendt."
#: engines/advancedDetector.cpp:325
msgid "Please, report the following data to the ScummVM team along with name"
-msgstr ""
+msgstr "Venligst, rapportere fјlgende data til ScummVM holdet sammen med navnet"
#: engines/advancedDetector.cpp:327
msgid "of the game you tried to add and its version/language/etc.:"
-msgstr ""
+msgstr "pх det spil, du forsјgte at tilfјje og dets version/sprog/ etc.:"
#: engines/dialogs.cpp:84
msgid "~R~esume"
@@ -1128,23 +1227,29 @@ msgstr "H~j~цlp"
msgid "~A~bout"
msgstr "~O~m"
-#: engines/dialogs.cpp:104 engines/dialogs.cpp:180
+#: engines/dialogs.cpp:104
+#: engines/dialogs.cpp:180
msgid "~R~eturn to Launcher"
msgstr "~R~etur til spiloversigt"
-#: engines/dialogs.cpp:106 engines/dialogs.cpp:182
+#: engines/dialogs.cpp:106
+#: engines/dialogs.cpp:182
msgctxt "lowres"
msgid "~R~eturn to Launcher"
msgstr "~R~etur til oversigt"
-#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
-#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:728
+#: engines/dialogs.cpp:115
+#: engines/agi/saveload.cpp:803
+#: engines/cruise/menu.cpp:212
+#: engines/sci/engine/kfile.cpp:735
msgid "Save game:"
msgstr "Gemmer:"
-#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
-#: engines/scumm/dialogs.cpp:187 engines/cruise/menu.cpp:212
-#: engines/sci/engine/kfile.cpp:728
+#: engines/dialogs.cpp:115
+#: engines/agi/saveload.cpp:803
+#: engines/scumm/dialogs.cpp:187
+#: engines/cruise/menu.cpp:212
+#: engines/sci/engine/kfile.cpp:735
#: backends/platform/symbian/src/SymbianActions.cpp:44
#: backends/platform/wince/CEActionsPocket.cpp:43
#: backends/platform/wince/CEActionsPocket.cpp:267
@@ -1154,25 +1259,22 @@ msgid "Save"
msgstr "Gem"
#: engines/dialogs.cpp:144
-msgid ""
-"Sorry, this engine does not currently provide in-game help. Please consult "
-"the README for basic information, and for instructions on how to obtain "
-"further assistance."
-msgstr ""
+msgid "Sorry, this engine does not currently provide in-game help. Please consult the README for basic information, and for instructions on how to obtain further assistance."
+msgstr "Beklager, denne motor leverer i јjeblikket ikke spil hjцlp. Se venligst README for grundlцggende oplysninger, og for at fх instruktioner om, hvordan man fхr yderligere hjцlp."
#: engines/dialogs.cpp:228
#, c-format
-msgid ""
-"Gamestate save failed (%s)! Please consult the README for basic information, "
-"and for instructions on how to obtain further assistance."
-msgstr ""
+msgid "Gamestate save failed (%s)! Please consult the README for basic information, and for instructions on how to obtain further assistance."
+msgstr "Gem af spiltilstand fejlede (%s)! Se venligst README for grundlцggende oplysninger, og for at fх instruktioner om, hvordan man fхr yderligere hjцlp."
-#: engines/dialogs.cpp:301 engines/mohawk/dialogs.cpp:109
+#: engines/dialogs.cpp:301
+#: engines/mohawk/dialogs.cpp:109
#: engines/mohawk/dialogs.cpp:174
msgid "~O~K"
msgstr "~O~K"
-#: engines/dialogs.cpp:302 engines/mohawk/dialogs.cpp:110
+#: engines/dialogs.cpp:302
+#: engines/mohawk/dialogs.cpp:110
#: engines/mohawk/dialogs.cpp:175
msgid "~C~ancel"
msgstr "~F~ortryd"
@@ -1183,21 +1285,19 @@ msgstr "~T~aster"
#: engines/engine.cpp:235
msgid "Could not initialize color format."
-msgstr ""
+msgstr "Kunne ikke initialisere farveformat."
#: engines/engine.cpp:243
-#, fuzzy
msgid "Could not switch to video mode: '"
-msgstr "Aktuel videotilstand:"
+msgstr "Kunne ikke skifte til videotilstand: '"
#: engines/engine.cpp:252
-#, fuzzy
msgid "Could not apply aspect ratio setting."
-msgstr "Skift billedformat korrektion"
+msgstr "Kunne ikke anvende billedformat korrektion indstilling."
#: engines/engine.cpp:257
msgid "Could not apply fullscreen setting."
-msgstr ""
+msgstr "Kunne ikke anvende fuldskцrm indstilling."
#: engines/engine.cpp:357
msgid ""
@@ -1207,6 +1307,11 @@ msgid ""
"the data files to your hard disk instead.\n"
"See the README file for details."
msgstr ""
+"Det lader til at du spiller dette spil direkte\n"
+"fra cd'en. Dette er kendt for at forхrsage problemer,\n"
+"og det anbefales derfor, at du kopierer\n"
+"datafiler til din harddisk i stedet.\n"
+"Se README fil for detaljer."
#: engines/engine.cpp:368
msgid ""
@@ -1216,145 +1321,140 @@ msgid ""
"order to listen to the game's music.\n"
"See the README file for details."
msgstr ""
+"Dette spil har lydspor pх sin disk. Disse\n"
+"spor skal rippes fra disken ved hjцlp af\n"
+"en passende CD audio udvindingsvцrktјj\n"
+"for at lytte til spillets musik.\n"
+"Se README fil for detaljer."
#: engines/engine.cpp:426
#, c-format
-msgid ""
-"Gamestate load failed (%s)! Please consult the README for basic information, "
-"and for instructions on how to obtain further assistance."
-msgstr ""
+msgid "Gamestate load failed (%s)! Please consult the README for basic information, and for instructions on how to obtain further assistance."
+msgstr "Indlцsning af spiltilstand fejlede (%s)! Se venligst README for grundlцggende oplysninger, og for at fх instruktioner om, hvordan man fхr yderligere hjцlp."
#: engines/engine.cpp:439
-msgid ""
-"WARNING: The game you are about to start is not yet fully supported by "
-"ScummVM. As such, it is likely to be unstable, and any saves you make might "
-"not work in future versions of ScummVM."
-msgstr ""
+msgid "WARNING: The game you are about to start is not yet fully supported by ScummVM. As such, it is likely to be unstable, and any saves you make might not work in future versions of ScummVM."
+msgstr "ADVARSEL: Spillet du er ved at starte endnu ikke er fuldt understјttet af ScummVM. Sхledes, er det sandsynligt, at det er ustabilt, og alle gemmer du foretager fungerer muligvis ikke i fremtidige versioner af ScummVM."
#: engines/engine.cpp:442
msgid "Start anyway"
-msgstr ""
+msgstr "Start alligevel"
-#: engines/agi/detection.cpp:145 engines/dreamweb/detection.cpp:47
+#: engines/agi/detection.cpp:145
+#: engines/dreamweb/detection.cpp:47
#: engines/sci/detection.cpp:390
msgid "Use original save/load screens"
-msgstr ""
+msgstr "Brug original gem/indlцs skцrme"
-#: engines/agi/detection.cpp:146 engines/dreamweb/detection.cpp:48
+#: engines/agi/detection.cpp:146
+#: engines/dreamweb/detection.cpp:48
#: engines/sci/detection.cpp:391
msgid "Use the original save/load screens, instead of the ScummVM ones"
-msgstr ""
+msgstr "Brug de originale gem/indlцs skцrme, istedet for dem fra ScummVM"
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816
+#: engines/sci/engine/kfile.cpp:831
msgid "Restore game:"
msgstr "Gendan spil:"
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816
+#: engines/sci/engine/kfile.cpp:831
msgid "Restore"
msgstr "Gendan"
#: engines/dreamweb/detection.cpp:57
-#, fuzzy
msgid "Use bright palette mode"
-msgstr "иverste hјjre punkt"
+msgstr "Brug lys palet tilstand"
#: engines/dreamweb/detection.cpp:58
msgid "Display graphics using the game's bright palette"
-msgstr ""
+msgstr "Vis grafik ved hjцlp af spillets lyse palette"
#: engines/sci/detection.cpp:370
msgid "EGA undithering"
msgstr "EGA farveforјgelse"
#: engines/sci/detection.cpp:371
-#, fuzzy
msgid "Enable undithering in EGA games"
-msgstr "Aktiver farveforјgelse i EGA spil der understјtter det"
+msgstr "Aktiver farveforјgelse i EGA spil"
#: engines/sci/detection.cpp:380
-#, fuzzy
msgid "Prefer digital sound effects"
-msgstr "Lydstyrke for specielle lydeffekter"
+msgstr "Foretrцk digitale lydeffekter"
#: engines/sci/detection.cpp:381
msgid "Prefer digital sound effects instead of synthesized ones"
-msgstr ""
+msgstr "Foretrцk digitale lydeffekter i stedet for syntetiserede"
#: engines/sci/detection.cpp:400
-msgid "Use IMF/Yahama FB-01 for MIDI output"
-msgstr ""
+msgid "Use IMF/Yamaha FB-01 for MIDI output"
+msgstr "Brug IMF/Yamaha FB-01 til MIDI-udgang"
#: engines/sci/detection.cpp:401
-msgid ""
-"Use an IBM Music Feature card or a Yahama FB-01 FM synth module for MIDI "
-"output"
-msgstr ""
+msgid "Use an IBM Music Feature card or a Yamaha FB-01 FM synth module for MIDI output"
+msgstr "Bruge et IBM Musik Feature-kort eller et Yamaha FB-01 FM synth modul til MIDI-udgang"
#: engines/sci/detection.cpp:411
msgid "Use CD audio"
-msgstr ""
+msgstr "Brug CD lyd"
#: engines/sci/detection.cpp:412
msgid "Use CD audio instead of in-game audio, if available"
-msgstr ""
+msgstr "Brug cd-lyd i stedet for lyd fra spillet, hvis tilgцngelige"
#: engines/sci/detection.cpp:422
msgid "Use Windows cursors"
-msgstr ""
+msgstr "Brug Windows markјr"
#: engines/sci/detection.cpp:423
-msgid ""
-"Use the Windows cursors (smaller and monochrome) instead of the DOS ones"
-msgstr ""
+msgid "Use the Windows cursors (smaller and monochrome) instead of the DOS ones"
+msgstr "Brug Windows-markјrer (mindre og monokrome) i stedet for dem fra DOS"
#: engines/sci/detection.cpp:433
-#, fuzzy
msgid "Use silver cursors"
-msgstr "Normal markјr"
+msgstr "Brug sјlv markјr"
#: engines/sci/detection.cpp:434
-msgid ""
-"Use the alternate set of silver cursors, instead of the normal golden ones"
-msgstr ""
+msgid "Use the alternate set of silver cursors, instead of the normal golden ones"
+msgstr "Brug det alternative sцt af sјlv markјrer, i stedet for de normale gyldne"
#: engines/scumm/dialogs.cpp:175
#, c-format
msgid "Insert Disk %c and Press Button to Continue."
-msgstr ""
+msgstr "Indsцt Disk %c og Tryk pх knappen for at fortsцtte."
#: engines/scumm/dialogs.cpp:176
#, c-format
msgid "Unable to Find %s, (%c%d) Press Button."
-msgstr ""
+msgstr "Kunne ikke finde %s, (%c%d) Tryk pх knappen."
#: engines/scumm/dialogs.cpp:177
#, c-format
msgid "Error reading disk %c, (%c%d) Press Button."
-msgstr ""
+msgstr "Fejl ved lцsning af disk %c, (%c%d) Tryk pх knappen."
#: engines/scumm/dialogs.cpp:178
msgid "Game Paused. Press SPACE to Continue."
-msgstr ""
+msgstr "Spil sat pх pause. Tryk MELLEMRUM for at fortsцtte."
#. I18N: You may specify 'Yes' symbol at the end of the line, like this:
#. "Moechten Sie wirklich neu starten? (J/N)J"
#. Will react to J as 'Yes'
#: engines/scumm/dialogs.cpp:182
-#, fuzzy
msgid "Are you sure you want to restart? (Y/N)"
-msgstr " Er du sikker pх at du vil afslutte ? "
+msgstr "Er du sikker pх at du vil genstarte? (J/N) "
#. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment
#: engines/scumm/dialogs.cpp:184
-#, fuzzy
msgid "Are you sure you want to quit? (Y/N)"
-msgstr " Er du sikker pх at du vil afslutte ? "
+msgstr "Er du sikker pх at du vil afslutte? (J/N) "
#: engines/scumm/dialogs.cpp:189
msgid "Play"
-msgstr ""
+msgstr "Spil"
-#: engines/scumm/dialogs.cpp:191 engines/scumm/help.cpp:82
+#: engines/scumm/dialogs.cpp:191
+#: engines/scumm/help.cpp:82
#: engines/scumm/help.cpp:84
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
@@ -1365,42 +1465,41 @@ msgstr "Afslut"
#: engines/scumm/dialogs.cpp:193
msgid "Insert save/load game disk"
-msgstr ""
+msgstr "Indsцt gem/indlцs spil disk"
#: engines/scumm/dialogs.cpp:194
msgid "You must enter a name"
-msgstr ""
+msgstr "Du skal indtaste et name"
#: engines/scumm/dialogs.cpp:195
msgid "The game was NOT saved (disk full?)"
-msgstr ""
+msgstr "Spillet blev ikke gemt (disk fuld?)"
#: engines/scumm/dialogs.cpp:196
msgid "The game was NOT loaded"
-msgstr ""
+msgstr "Spillet blev IKKE indlцst"
#: engines/scumm/dialogs.cpp:197
#, c-format
msgid "Saving '%s'"
-msgstr ""
+msgstr "Gemmer '%s'"
#: engines/scumm/dialogs.cpp:198
#, c-format
msgid "Loading '%s'"
-msgstr ""
+msgstr "Indlцser '%s'"
#: engines/scumm/dialogs.cpp:199
msgid "Name your SAVE game"
-msgstr ""
+msgstr "Navngiv din GEMMER"
#: engines/scumm/dialogs.cpp:200
-#, fuzzy
msgid "Select a game to LOAD"
-msgstr "Vцlg et tema"
+msgstr "Vцlg et spil at indlцse"
#: engines/scumm/dialogs.cpp:201
msgid "Game title)"
-msgstr ""
+msgstr "Spil titel)"
#. I18N: Previous page button
#: engines/scumm/dialogs.cpp:287
@@ -1418,46 +1517,41 @@ msgid "~C~lose"
msgstr "~L~uk"
#: engines/scumm/dialogs.cpp:597
-#, fuzzy
msgid "Speech Only"
-msgstr "Tale"
+msgstr "Kun tale"
#: engines/scumm/dialogs.cpp:598
-#, fuzzy
msgid "Speech and Subtitles"
-msgstr "Undertekster"
+msgstr "Tale og Undertekster"
#: engines/scumm/dialogs.cpp:599
-#, fuzzy
msgid "Subtitles Only"
-msgstr "Undertekster"
+msgstr "Kun undertekster"
#: engines/scumm/dialogs.cpp:607
-#, fuzzy
msgctxt "lowres"
msgid "Speech & Subs"
-msgstr "Tale"
+msgstr "Tale & Tekst"
#: engines/scumm/dialogs.cpp:653
msgid "Select a Proficiency Level."
-msgstr ""
+msgstr "Vцlg et Fцrdighedsniveau."
#: engines/scumm/dialogs.cpp:655
msgid "Refer to your Loom(TM) manual for help."
-msgstr ""
+msgstr "Se din Loom(TM) manual for hjцlp."
#: engines/scumm/dialogs.cpp:658
-#, fuzzy
msgid "Standard"
-msgstr "Standard (16bpp)"
+msgstr "Standard"
#: engines/scumm/dialogs.cpp:659
msgid "Practice"
-msgstr ""
+msgstr "Trцning"
#: engines/scumm/dialogs.cpp:660
msgid "Expert"
-msgstr ""
+msgstr "Ekspert"
#: engines/scumm/help.cpp:73
msgid "Common keyboard commands:"
@@ -1465,7 +1559,7 @@ msgstr "Almindelige tastatur kommandoer:"
#: engines/scumm/help.cpp:74
msgid "Save / Load dialog"
-msgstr "Gem / Hent dialog"
+msgstr "Gem / Indlцs dialog"
#: engines/scumm/help.cpp:76
msgid "Skip line of text"
@@ -1487,21 +1581,29 @@ msgstr "Mellemrum"
msgid "Pause game"
msgstr "Pause spil"
-#: engines/scumm/help.cpp:79 engines/scumm/help.cpp:84
-#: engines/scumm/help.cpp:95 engines/scumm/help.cpp:96
-#: engines/scumm/help.cpp:97 engines/scumm/help.cpp:98
-#: engines/scumm/help.cpp:99 engines/scumm/help.cpp:100
-#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102
+#: engines/scumm/help.cpp:79
+#: engines/scumm/help.cpp:84
+#: engines/scumm/help.cpp:95
+#: engines/scumm/help.cpp:96
+#: engines/scumm/help.cpp:97
+#: engines/scumm/help.cpp:98
+#: engines/scumm/help.cpp:99
+#: engines/scumm/help.cpp:100
+#: engines/scumm/help.cpp:101
+#: engines/scumm/help.cpp:102
msgid "Ctrl"
msgstr "Ctrl"
#: engines/scumm/help.cpp:79
msgid "Load game state 1-10"
-msgstr "Hent spil tilstand 1-10"
+msgstr "Indlцs spil tilstand 1-10"
-#: engines/scumm/help.cpp:80 engines/scumm/help.cpp:84
-#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:100
-#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102
+#: engines/scumm/help.cpp:80
+#: engines/scumm/help.cpp:84
+#: engines/scumm/help.cpp:86
+#: engines/scumm/help.cpp:100
+#: engines/scumm/help.cpp:101
+#: engines/scumm/help.cpp:102
msgid "Alt"
msgstr "Alt"
@@ -1509,7 +1611,8 @@ msgstr "Alt"
msgid "Save game state 1-10"
msgstr "Gem spil tilstand 1-10"
-#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:89
+#: engines/scumm/help.cpp:86
+#: engines/scumm/help.cpp:89
msgid "Enter"
msgstr "Enter"
@@ -1590,7 +1693,6 @@ msgid " since they may cause crashes"
msgstr " siden de kan skabe nedbrud"
#: engines/scumm/help.cpp:110
-#, fuzzy
msgid " or incorrect game behavior."
msgstr " eller ukorrekt opfјrsel af spil."
@@ -1602,24 +1704,30 @@ msgstr "Spind ordspil pх tastaturet:"
msgid "Main game controls:"
msgstr "Vigtigste spilstyring:"
-#: engines/scumm/help.cpp:121 engines/scumm/help.cpp:136
+#: engines/scumm/help.cpp:121
+#: engines/scumm/help.cpp:136
#: engines/scumm/help.cpp:161
msgid "Push"
msgstr "Skub"
-#: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137
+#: engines/scumm/help.cpp:122
+#: engines/scumm/help.cpp:137
#: engines/scumm/help.cpp:162
msgid "Pull"
msgstr "Trцk"
-#: engines/scumm/help.cpp:123 engines/scumm/help.cpp:138
-#: engines/scumm/help.cpp:163 engines/scumm/help.cpp:197
+#: engines/scumm/help.cpp:123
+#: engines/scumm/help.cpp:138
+#: engines/scumm/help.cpp:163
+#: engines/scumm/help.cpp:197
#: engines/scumm/help.cpp:207
msgid "Give"
msgstr "Giv"
-#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139
-#: engines/scumm/help.cpp:164 engines/scumm/help.cpp:190
+#: engines/scumm/help.cpp:124
+#: engines/scumm/help.cpp:139
+#: engines/scumm/help.cpp:164
+#: engines/scumm/help.cpp:190
#: engines/scumm/help.cpp:208
msgid "Open"
msgstr "Хbn"
@@ -1632,43 +1740,54 @@ msgstr "Gх til"
msgid "Get"
msgstr "Tag"
-#: engines/scumm/help.cpp:128 engines/scumm/help.cpp:152
-#: engines/scumm/help.cpp:170 engines/scumm/help.cpp:198
-#: engines/scumm/help.cpp:213 engines/scumm/help.cpp:224
+#: engines/scumm/help.cpp:128
+#: engines/scumm/help.cpp:152
+#: engines/scumm/help.cpp:170
+#: engines/scumm/help.cpp:198
+#: engines/scumm/help.cpp:213
+#: engines/scumm/help.cpp:224
#: engines/scumm/help.cpp:250
msgid "Use"
msgstr "Brug"
-#: engines/scumm/help.cpp:129 engines/scumm/help.cpp:141
+#: engines/scumm/help.cpp:129
+#: engines/scumm/help.cpp:141
msgid "Read"
msgstr "Lцs"
-#: engines/scumm/help.cpp:130 engines/scumm/help.cpp:147
+#: engines/scumm/help.cpp:130
+#: engines/scumm/help.cpp:147
msgid "New kid"
msgstr "Nyt barn"
-#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:153
+#: engines/scumm/help.cpp:131
+#: engines/scumm/help.cpp:153
#: engines/scumm/help.cpp:171
msgid "Turn on"
msgstr "Tцnd"
-#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:154
+#: engines/scumm/help.cpp:132
+#: engines/scumm/help.cpp:154
#: engines/scumm/help.cpp:172
msgid "Turn off"
msgstr "Sluk"
-#: engines/scumm/help.cpp:142 engines/scumm/help.cpp:167
+#: engines/scumm/help.cpp:142
+#: engines/scumm/help.cpp:167
#: engines/scumm/help.cpp:194
msgid "Walk to"
msgstr "Gх til"
-#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168
-#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:210
+#: engines/scumm/help.cpp:143
+#: engines/scumm/help.cpp:168
+#: engines/scumm/help.cpp:195
+#: engines/scumm/help.cpp:210
#: engines/scumm/help.cpp:227
msgid "Pick up"
msgstr "Tag op"
-#: engines/scumm/help.cpp:144 engines/scumm/help.cpp:169
+#: engines/scumm/help.cpp:144
+#: engines/scumm/help.cpp:169
msgid "What is"
msgstr "Hvad er"
@@ -1692,11 +1811,13 @@ msgstr "Lav"
msgid "Switch"
msgstr "Skift"
-#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:228
+#: engines/scumm/help.cpp:166
+#: engines/scumm/help.cpp:228
msgid "Look"
msgstr "Se"
-#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:223
+#: engines/scumm/help.cpp:173
+#: engines/scumm/help.cpp:223
msgid "Talk"
msgstr "Tal"
@@ -1741,20 +1862,24 @@ msgstr "spil H pх rok"
msgid "play C major on distaff"
msgstr "spil C-dur pх rok"
-#: engines/scumm/help.cpp:192 engines/scumm/help.cpp:214
+#: engines/scumm/help.cpp:192
+#: engines/scumm/help.cpp:214
msgid "puSh"
msgstr "Skub"
-#: engines/scumm/help.cpp:193 engines/scumm/help.cpp:215
+#: engines/scumm/help.cpp:193
+#: engines/scumm/help.cpp:215
msgid "pull (Yank)"
msgstr "trцk (Y)"
-#: engines/scumm/help.cpp:196 engines/scumm/help.cpp:212
+#: engines/scumm/help.cpp:196
+#: engines/scumm/help.cpp:212
#: engines/scumm/help.cpp:248
msgid "Talk to"
msgstr "Tal til"
-#: engines/scumm/help.cpp:199 engines/scumm/help.cpp:211
+#: engines/scumm/help.cpp:199
+#: engines/scumm/help.cpp:211
msgid "Look at"
msgstr "Lur pх"
@@ -1786,8 +1911,10 @@ msgstr "Fremhцv nцste dialog"
msgid "Walk"
msgstr "Gх"
-#: engines/scumm/help.cpp:225 engines/scumm/help.cpp:234
-#: engines/scumm/help.cpp:241 engines/scumm/help.cpp:249
+#: engines/scumm/help.cpp:225
+#: engines/scumm/help.cpp:234
+#: engines/scumm/help.cpp:241
+#: engines/scumm/help.cpp:249
msgid "Inventory"
msgstr "Oversigt"
@@ -1815,7 +1942,8 @@ msgstr "Slag"
msgid "Kick"
msgstr "Spark"
-#: engines/scumm/help.cpp:239 engines/scumm/help.cpp:247
+#: engines/scumm/help.cpp:239
+#: engines/scumm/help.cpp:247
msgid "Examine"
msgstr "Undersјg"
@@ -1830,37 +1958,44 @@ msgstr "Komm"
#: engines/scumm/help.cpp:246
msgid "Save / Load / Options"
-msgstr "Gem / Hent / Indstillinger"
+msgstr "Gem / Indlцs / Indstillinger"
#: engines/scumm/help.cpp:255
msgid "Other game controls:"
msgstr "Andre spil kontroller"
-#: engines/scumm/help.cpp:257 engines/scumm/help.cpp:267
+#: engines/scumm/help.cpp:257
+#: engines/scumm/help.cpp:267
msgid "Inventory:"
msgstr "Oversigt:"
-#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:274
+#: engines/scumm/help.cpp:258
+#: engines/scumm/help.cpp:274
msgid "Scroll list up"
msgstr "Rul liste op"
-#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:275
+#: engines/scumm/help.cpp:259
+#: engines/scumm/help.cpp:275
msgid "Scroll list down"
msgstr "Rul liste ned"
-#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:268
+#: engines/scumm/help.cpp:260
+#: engines/scumm/help.cpp:268
msgid "Upper left item"
msgstr "иverste venstre punkt"
-#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:270
+#: engines/scumm/help.cpp:261
+#: engines/scumm/help.cpp:270
msgid "Lower left item"
msgstr "Nederste hјjre punkt"
-#: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271
+#: engines/scumm/help.cpp:262
+#: engines/scumm/help.cpp:271
msgid "Upper right item"
msgstr "иverste hјjre punkt"
-#: engines/scumm/help.cpp:263 engines/scumm/help.cpp:273
+#: engines/scumm/help.cpp:263
+#: engines/scumm/help.cpp:273
msgid "Lower right item"
msgstr "Nederste venstre punkt"
@@ -1872,7 +2007,8 @@ msgstr "Midterste hјjre punkt"
msgid "Middle right item"
msgstr "Midterste hјjre punkt"
-#: engines/scumm/help.cpp:279 engines/scumm/help.cpp:284
+#: engines/scumm/help.cpp:279
+#: engines/scumm/help.cpp:284
msgid "Switching characters:"
msgstr "Skift personer:"
@@ -1888,7 +2024,8 @@ msgstr "Tredie barn"
msgid "Fighting controls (numpad):"
msgstr "Kamp kontroller (numtast):"
-#: engines/scumm/help.cpp:295 engines/scumm/help.cpp:296
+#: engines/scumm/help.cpp:295
+#: engines/scumm/help.cpp:296
#: engines/scumm/help.cpp:297
msgid "Step back"
msgstr "Skridt tilbage"
@@ -1979,8 +2116,11 @@ msgid ""
"Native MIDI support requires the Roland Upgrade from LucasArts,\n"
"but %s is missing. Using AdLib instead."
msgstr ""
+"Indbygget MIDI understјttelse krцver Roland opgradering fra LucasArts,\n"
+"men %s mangler. Bruger AdLib i stedet."
-#: engines/scumm/scumm.cpp:2278 engines/agos/saveload.cpp:202
+#: engines/scumm/scumm.cpp:2278
+#: engines/agos/saveload.cpp:202
#, c-format
msgid ""
"Failed to save game state to file:\n"
@@ -1991,18 +2131,20 @@ msgstr ""
"\n"
"%s"
-#: engines/scumm/scumm.cpp:2285 engines/agos/saveload.cpp:167
+#: engines/scumm/scumm.cpp:2285
+#: engines/agos/saveload.cpp:167
#, c-format
msgid ""
"Failed to load game state from file:\n"
"\n"
"%s"
msgstr ""
-"Mislykkedes at hente spil tilstand fra fil:\n"
+"Mislykkedes at indlцse spil tilstand fra fil:\n"
"\n"
"%s"
-#: engines/scumm/scumm.cpp:2297 engines/agos/saveload.cpp:210
+#: engines/scumm/scumm.cpp:2297
+#: engines/agos/saveload.cpp:210
#, c-format
msgid ""
"Successfully saved game state in file:\n"
@@ -2014,14 +2156,12 @@ msgstr ""
"%s"
#: engines/scumm/scumm.cpp:2512
-msgid ""
-"Usually, Maniac Mansion would start now. But ScummVM doesn't do that yet. To "
-"play it, go to 'Add Game' in the ScummVM start menu and select the 'Maniac' "
-"directory inside the Tentacle game directory."
-msgstr ""
+msgid "Usually, Maniac Mansion would start now. But ScummVM doesn't do that yet. To play it, go to 'Add Game' in the ScummVM start menu and select the 'Maniac' directory inside the Tentacle game directory."
+msgstr "Normalt ville Maniac Mansion begynde nu. Men ScummVM kan ikke gјre det endnu. For at spille det, gх til 'Tilfјj spil' i ScummVM start-menuen og vцlg 'Maniac' mappen inde i Tentacle spillets mappe."
#. I18N: Option for fast scene switching
-#: engines/mohawk/dialogs.cpp:92 engines/mohawk/dialogs.cpp:171
+#: engines/mohawk/dialogs.cpp:92
+#: engines/mohawk/dialogs.cpp:171
msgid "~Z~ip Mode Activated"
msgstr "~Z~ip tilstand aktiveret"
@@ -2032,16 +2172,15 @@ msgstr "~O~vergange aktiveret"
#. I18N: Drop book page
#: engines/mohawk/dialogs.cpp:95
msgid "~D~rop Page"
-msgstr ""
+msgstr "Smi~d~ side"
#: engines/mohawk/dialogs.cpp:99
msgid "~S~how Map"
-msgstr ""
+msgstr "Vi~s~ kort"
#: engines/mohawk/dialogs.cpp:105
-#, fuzzy
msgid "~M~ain Menu"
-msgstr "ScummVM Hovedmenu"
+msgstr "Hoved~m~enu"
#: engines/mohawk/dialogs.cpp:172
msgid "~W~ater Effect Enabled"
@@ -2050,212 +2189,205 @@ msgstr "~V~andeffekter aktiveret"
#: engines/agos/animation.cpp:560
#, c-format
msgid "Cutscene file '%s' not found!"
-msgstr ""
+msgstr "Filmsekvens fil '%s' ikke fundet!"
-#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1287
+#: engines/gob/inter_playtoons.cpp:256
+#: engines/gob/inter_v2.cpp:1287
#: engines/tinsel/saveload.cpp:502
-#, fuzzy
msgid "Failed to load game state from file."
-msgstr ""
-"Mislykkedes at hente spil tilstand fra fil:\n"
-"\n"
-"%s"
+msgstr "Mislykkedes at indlцse spil tilstand fra fil."
-#: engines/gob/inter_v2.cpp:1357 engines/tinsel/saveload.cpp:515
-#, fuzzy
+#: engines/gob/inter_v2.cpp:1357
+#: engines/tinsel/saveload.cpp:515
msgid "Failed to save game state to file."
-msgstr ""
-"Mislykkedes at gemme spil tilstand til fil:\n"
-"\n"
-"%s"
+msgstr "Mislykkedes at gemme spil tilstand til fil."
#: engines/gob/inter_v5.cpp:107
-#, fuzzy
msgid "Failed to delete file."
-msgstr ""
-"Mislykkedes at gemme spil tilstand til fil:\n"
-"\n"
-"%s"
+msgstr "Mislykkedes at slette fil."
#: engines/groovie/script.cpp:420
-#, fuzzy
msgid "Failed to save game"
-msgstr ""
-"Mislykkedes at gemme spil tilstand til fil:\n"
-"\n"
-"%s"
+msgstr "Mislykkedes at gemme spil"
#. I18N: Studio audience adds an applause and cheering sounds whenever
#. Malcolm makes a joke.
#: engines/kyra/detection.cpp:62
msgid "Studio audience"
-msgstr ""
+msgstr "Studio publikum"
#: engines/kyra/detection.cpp:63
msgid "Enable studio audience"
-msgstr ""
+msgstr "Aktivщr studio publikum"
#. I18N: This option allows the user to skip text and cutscenes.
#: engines/kyra/detection.cpp:73
msgid "Skip support"
-msgstr ""
+msgstr "Spring over stјtte"
#: engines/kyra/detection.cpp:74
msgid "Allow text and cutscenes to be skipped"
-msgstr ""
+msgstr "Tillad at tekst og filmsekvenser kan springes over"
#. I18N: Helium mode makes people sound like they've inhaled Helium.
#: engines/kyra/detection.cpp:84
msgid "Helium mode"
-msgstr ""
+msgstr "Helium tilstand"
#: engines/kyra/detection.cpp:85
-#, fuzzy
msgid "Enable helium mode"
-msgstr "Aktivщr Roland GS tilstand"
+msgstr "Aktivщr helium tilstand"
#. I18N: When enabled, this option makes scrolling smoother when
#. changing from one screen to another.
#: engines/kyra/detection.cpp:99
msgid "Smooth scrolling"
-msgstr ""
+msgstr "Jцvn bevцgelse"
#: engines/kyra/detection.cpp:100
msgid "Enable smooth scrolling when walking"
-msgstr ""
+msgstr "Aktivщr jцvn bevцgelse nхr du gхr"
#. I18N: When enabled, this option changes the cursor when it floats to the
#. edge of the screen to a directional arrow. The player can then click to
#. walk towards that direction.
#: engines/kyra/detection.cpp:112
-#, fuzzy
msgid "Floating cursors"
-msgstr "Normal markјr"
+msgstr "Flydende markјr"
#: engines/kyra/detection.cpp:113
msgid "Enable floating cursors"
-msgstr ""
+msgstr "Aktivщr flydende markјr"
#. I18N: HP stands for Hit Points
#: engines/kyra/detection.cpp:127
msgid "HP bar graphs"
-msgstr ""
+msgstr "HP sјjlegrafer"
#: engines/kyra/detection.cpp:128
msgid "Enable hit point bar graphs"
-msgstr ""
+msgstr "Aktivщr trцfpoint (HP) sјjlediagrammer"
#: engines/kyra/lol.cpp:478
msgid "Attack 1"
-msgstr ""
+msgstr "Angreb 1"
#: engines/kyra/lol.cpp:479
msgid "Attack 2"
-msgstr ""
+msgstr "Angreb 2"
#: engines/kyra/lol.cpp:480
msgid "Attack 3"
-msgstr ""
+msgstr "Angreb 3"
#: engines/kyra/lol.cpp:481
msgid "Move Forward"
-msgstr ""
+msgstr "Flyt fremad"
#: engines/kyra/lol.cpp:482
msgid "Move Back"
-msgstr ""
+msgstr "Flyt bagud"
#: engines/kyra/lol.cpp:483
msgid "Slide Left"
-msgstr ""
+msgstr "Flyt til venstre"
#: engines/kyra/lol.cpp:484
-#, fuzzy
msgid "Slide Right"
-msgstr "Hјjre"
+msgstr "Flyt til hјjre"
#: engines/kyra/lol.cpp:485
-#, fuzzy
msgid "Turn Left"
-msgstr "Sluk"
+msgstr "Drej til venstre"
#: engines/kyra/lol.cpp:486
-#, fuzzy
msgid "Turn Right"
-msgstr "Pil til hјjre"
+msgstr "Drej til hјjre"
#: engines/kyra/lol.cpp:487
-#, fuzzy
msgid "Rest"
-msgstr "Gendan"
+msgstr "Hvil"
#: engines/kyra/lol.cpp:488
-#, fuzzy
msgid "Options"
-msgstr "~I~ndstillinger"
+msgstr "Indstillinger"
#: engines/kyra/lol.cpp:489
-#, fuzzy
msgid "Choose Spell"
-msgstr "Vцlg"
+msgstr "Vцlg magi"
#: engines/kyra/sound_midi.cpp:475
msgid ""
"You appear to be using a General MIDI device,\n"
"but your game only supports Roland MT32 MIDI.\n"
"We try to map the Roland MT32 instruments to\n"
-"General MIDI ones. After all it might happen\n"
-"that a few tracks will not be correctly played."
+"General MIDI ones. It is still possible that\n"
+"some tracks sound incorrect."
msgstr ""
+"Det lader til at du bruger en Generel MIDI-enhed,\n"
+"men dit spil kun understјtter Roland MT32 MIDI.\n"
+"Vi forsјger at kortlцgge Roland MT32 instrumenterne til\n"
+"dem i Generel MIDI. Trods det kan det ske\n"
+"at nogle stykker ikke lyder korrekt."
-#: engines/queen/queen.cpp:59 engines/sky/detection.cpp:44
+#: engines/queen/queen.cpp:59
+#: engines/sky/detection.cpp:44
msgid "Floppy intro"
-msgstr ""
+msgstr "Diskette intro"
-#: engines/queen/queen.cpp:60 engines/sky/detection.cpp:45
+#: engines/queen/queen.cpp:60
+#: engines/sky/detection.cpp:45
msgid "Use the floppy version's intro (CD version only)"
-msgstr ""
+msgstr "Brug diskette versionens intro (kun CD version)"
#: engines/sky/compact.cpp:130
msgid ""
"Unable to find \"sky.cpt\" file!\n"
"Please download it from www.scummvm.org"
msgstr ""
+"Kunne ikke finde \"sky.cpt\" filen!\n"
+"Venligst download den fra www.scummvm.org"
#: engines/sky/compact.cpp:141
msgid ""
"The \"sky.cpt\" file has an incorrect size.\n"
"Please (re)download it from www.scummvm.org"
msgstr ""
+"\"sky.cpt\" filen har en forkert stјrrelse.\n"
+"Venligst (gen)hent den fra www.scummvm.org"
#: engines/sword1/animation.cpp:539
#, c-format
msgid "PSX stream cutscene '%s' cannot be played in paletted mode"
-msgstr ""
+msgstr "PSX stream filmsekvens '%s' kan ikke afspilles i palette tilstand"
-#: engines/sword1/animation.cpp:560 engines/sword2/animation.cpp:455
+#: engines/sword1/animation.cpp:560
+#: engines/sword2/animation.cpp:455
msgid "DXA cutscenes found but ScummVM has been built without zlib support"
-msgstr ""
+msgstr "DXA filmsekvenser fundet, men ScummVM er bygget uden zlib understјttelse"
-#: engines/sword1/animation.cpp:570 engines/sword2/animation.cpp:465
+#: engines/sword1/animation.cpp:570
+#: engines/sword2/animation.cpp:465
msgid "MPEG2 cutscenes are no longer supported"
-msgstr ""
+msgstr "MPEG2 filmsekvenser understјttes ikke lцngere"
-#: engines/sword1/animation.cpp:576 engines/sword2/animation.cpp:473
+#: engines/sword1/animation.cpp:576
+#: engines/sword2/animation.cpp:473
#, c-format
msgid "Cutscene '%s' not found"
-msgstr ""
+msgstr "Filmsekvens '%s' ikke fundet"
#: engines/sword1/control.cpp:863
msgid ""
-"ScummVM found that you have old savefiles for Broken Sword 1 that should be "
-"converted.\n"
-"The old save game format is no longer supported, so you will not be able to "
-"load your games if you don't convert them.\n"
+"ScummVM found that you have old savefiles for Broken Sword 1 that should be converted.\n"
+"The old save game format is no longer supported, so you will not be able to load your games if you don't convert them.\n"
"\n"
-"Press OK to convert them now, otherwise you will be asked again the next "
-"time you start the game.\n"
+"Press OK to convert them now, otherwise you will be asked again the next time you start the game.\n"
msgstr ""
+"ScummVM har konstateret, at du har gamle gemmer for Broken Sword 1, der skal konverteres.\n"
+"Det gamle gemte spil format understјttes ikke lцngere, sх vil du ikke vцre i stand til at indlцse dine spil, hvis du ikke konvertere dem.\n"
+"\n"
+"Tryk pх OK for at konvertere dem nu, ellers vil du blive spurgt igen, nцste gang du starter spillet.\n"
#: engines/sword1/control.cpp:1232
#, c-format
@@ -2263,31 +2395,32 @@ msgid ""
"Target new save game already exists!\n"
"Would you like to keep the old save game (%s) or the new one (%s)?\n"
msgstr ""
+"Nyt gemt spil findes allerede!\n"
+"Vil du gerne beholde det gamle gemte spil (%s) eller det nye (%s)?\n"
#: engines/sword1/control.cpp:1235
msgid "Keep the old one"
-msgstr ""
+msgstr "Behold den gamle"
#: engines/sword1/control.cpp:1235
msgid "Keep the new one"
-msgstr ""
+msgstr "Behold den nye"
#: engines/sword1/logic.cpp:1633
msgid "This is the end of the Broken Sword 1 Demo"
-msgstr ""
+msgstr "Dette er slutningen af Broken Sword 1 demoen"
#: engines/sword2/animation.cpp:435
-msgid ""
-"PSX cutscenes found but ScummVM has been built without RGB color support"
-msgstr ""
+msgid "PSX cutscenes found but ScummVM has been built without RGB color support"
+msgstr "PSX filmsekvenser fundet, men ScummVM er bygget uden RGB farve understјttelse"
#: engines/sword2/sword2.cpp:79
msgid "Show object labels"
-msgstr ""
+msgstr "Vis labels pх genstande"
#: engines/sword2/sword2.cpp:80
msgid "Show labels for objects on mouse hover"
-msgstr ""
+msgstr "Vis labels for genstande musen er henover"
#: engines/parallaction/saveload.cpp:133
#, c-format
@@ -2295,38 +2428,42 @@ msgid ""
"Can't save game in slot %i\n"
"\n"
msgstr ""
+"Kan ikke gemme spil pх plads %i\n"
+"\n"
#: engines/parallaction/saveload.cpp:204
-#, fuzzy
msgid "Loading game..."
-msgstr "Indlцs spil:"
+msgstr "Indlцser spil..."
#: engines/parallaction/saveload.cpp:219
-#, fuzzy
msgid "Saving game..."
-msgstr "Gemmer:"
+msgstr "Gemmer spil..."
#: engines/parallaction/saveload.cpp:272
msgid ""
-"ScummVM found that you have old savefiles for Nippon Safes that should be "
-"renamed.\n"
-"The old names are no longer supported, so you will not be able to load your "
-"games if you don't convert them.\n"
+"ScummVM found that you have old savefiles for Nippon Safes that should be renamed.\n"
+"The old names are no longer supported, so you will not be able to load your games if you don't convert them.\n"
"\n"
"Press OK to convert them now, otherwise you will be asked next time.\n"
msgstr ""
+"ScummVM har konstateret, at du har gamle gemmer for Nippon Safes, der skal omdјbes.\n"
+"De gamle navne er ikke lцngere understјttet, sх du vil ikke vцre i stand til at indlцse dine spil, hvis du ikke konvertere dem.\n"
+"\n"
+"Tryk pх OK for at konvertere dem nu, ellers vil du blive spurgt nцste gang.\n"
#: engines/parallaction/saveload.cpp:319
msgid "ScummVM successfully converted all your savefiles."
-msgstr ""
+msgstr "ScummVM konverterede med succes alle dine gemmer."
#: engines/parallaction/saveload.cpp:321
msgid ""
-"ScummVM printed some warnings in your console window and can't guarantee all "
-"your files have been converted.\n"
+"ScummVM printed some warnings in your console window and can't guarantee all your files have been converted.\n"
"\n"
"Please report to the team."
msgstr ""
+"ScummVM udskrev nogle advarsler i dit konsol vindue, og kan ikke garantere at alle dine filer er blevet konverteret.\n"
+"\n"
+"Venligst rapportщr til holdet."
#: audio/fmopl.cpp:49
msgid "MAME OPL emulator"
@@ -2338,36 +2475,30 @@ msgstr "DOSBox OPL emulator"
#: audio/mididrv.cpp:209
#, c-format
-msgid ""
-"The selected audio device '%s' was not found (e.g. might be turned off or "
-"disconnected)."
-msgstr ""
+msgid "The selected audio device '%s' was not found (e.g. might be turned off or disconnected)."
+msgstr "Den valgte lydenhed '%s' blev ikke fundet (kan f.eks vцre slukket eller afbrudt)."
-#: audio/mididrv.cpp:209 audio/mididrv.cpp:221 audio/mididrv.cpp:257
+#: audio/mididrv.cpp:209
+#: audio/mididrv.cpp:221
+#: audio/mididrv.cpp:257
#: audio/mididrv.cpp:272
msgid "Attempting to fall back to the next available device..."
-msgstr ""
+msgstr "Forsјger at falde tilbage til den nцste tilgцngelig enhed..."
#: audio/mididrv.cpp:221
#, c-format
-msgid ""
-"The selected audio device '%s' cannot be used. See log file for more "
-"information."
-msgstr ""
+msgid "The selected audio device '%s' cannot be used. See log file for more information."
+msgstr "Den valgte lydenhed '%s' kan ikke bruges. Se log filen for mere information."
#: audio/mididrv.cpp:257
#, c-format
-msgid ""
-"The preferred audio device '%s' was not found (e.g. might be turned off or "
-"disconnected)."
-msgstr ""
+msgid "The preferred audio device '%s' was not found (e.g. might be turned off or disconnected)."
+msgstr "Den foretrukne lydenhed '%s' blev ikke fundet (kan f.eks vцre slukket eller afbrudt)."
#: audio/mididrv.cpp:272
#, c-format
-msgid ""
-"The preferred audio device '%s' cannot be used. See log file for more "
-"information."
-msgstr ""
+msgid "The preferred audio device '%s' cannot be used. See log file for more information."
+msgstr "Den foretrukne lydenhed '%s' kan ikke bruges. Se log filen for mere information."
#: audio/null.h:43
msgid "No music"
@@ -2390,7 +2521,6 @@ msgid "C64 Audio Emulator"
msgstr "C64 lyd emulator"
#: audio/softsynth/mt32.cpp:293
-#, fuzzy
msgid "Initializing MT-32 Emulator"
msgstr "Initialisere MT-32 emulator"
@@ -2411,7 +2541,6 @@ msgid "Keymap:"
msgstr "Tasteoversigt:"
#: backends/keymapper/remap-dialog.cpp:66
-#, fuzzy
msgid " (Effective)"
msgstr " (Aktiv)"
@@ -2421,7 +2550,7 @@ msgstr " (Aktiv)"
#: backends/keymapper/remap-dialog.cpp:106
msgid " (Blocked)"
-msgstr ""
+msgstr "(Blokeret)"
#: backends/keymapper/remap-dialog.cpp:119
msgid " (Global)"
@@ -2508,14 +2637,12 @@ msgid "Disable power off"
msgstr "Deaktiver slukning"
#: backends/platform/iphone/osys_events.cpp:300
-#, fuzzy
msgid "Mouse-click-and-drag mode enabled."
-msgstr "Pegeplade tilstand aktiveret."
+msgstr "Muse-klik-og-trцk tilstand aktiveret."
#: backends/platform/iphone/osys_events.cpp:302
-#, fuzzy
msgid "Mouse-click-and-drag mode disabled."
-msgstr "Pegeplade tilstand deaktiveret."
+msgstr "Muse-klik-og-trцk tilstand deaktiveret."
#: backends/platform/iphone/osys_events.cpp:313
msgid "Touchpad mode enabled."
@@ -2527,7 +2654,7 @@ msgstr "Pegeplade tilstand deaktiveret."
#: backends/platform/maemo/maemo.cpp:205
msgid "Click Mode"
-msgstr ""
+msgstr "Klik tilstand"
#: backends/platform/maemo/maemo.cpp:211
#: backends/platform/symbian/src/SymbianActions.cpp:42
@@ -2538,9 +2665,8 @@ msgid "Left Click"
msgstr "Venstre klik"
#: backends/platform/maemo/maemo.cpp:214
-#, fuzzy
msgid "Middle Click"
-msgstr "Midterste hјjre punkt"
+msgstr "Miderste klik"
#: backends/platform/maemo/maemo.cpp:217
#: backends/platform/symbian/src/SymbianActions.cpp:43
@@ -2550,7 +2676,6 @@ msgid "Right Click"
msgstr "Hјjre klik"
#: backends/platform/sdl/macosx/appmenu_osx.mm:78
-#, fuzzy
msgid "Hide ScummVM"
msgstr "Skjul ScummVM"
@@ -2582,26 +2707,22 @@ msgstr "Normal (ingen skalering)"
#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2135
#: backends/graphics/openglsdl/openglsdl-graphics.cpp:533
-#, fuzzy
msgid "Enabled aspect ratio correction"
-msgstr "Skift billedformat korrektion"
+msgstr "Aktivщr billedformat korrektion"
#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2141
#: backends/graphics/openglsdl/openglsdl-graphics.cpp:538
-#, fuzzy
msgid "Disabled aspect ratio correction"
-msgstr "Skift billedformat korrektion"
+msgstr "Deaktivщr billedformat korrektion"
#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2196
-#, fuzzy
msgid "Active graphics filter:"
-msgstr "Skift mellem grafik filtre"
+msgstr "Aktive grafik filtre:"
#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2238
#: backends/graphics/openglsdl/openglsdl-graphics.cpp:477
-#, fuzzy
msgid "Windowed mode"
-msgstr "Rendere tilstand:"
+msgstr "Vindue tilstand"
#: backends/graphics/opengl/opengl-graphics.cpp:135
msgid "OpenGL Normal"
@@ -2616,21 +2737,20 @@ msgid "OpenGL Original"
msgstr "OpenGL Original"
#: backends/graphics/openglsdl/openglsdl-graphics.cpp:415
-#, fuzzy
msgid "Current display mode"
-msgstr "Aktuel videotilstand:"
+msgstr "Aktuel videotilstand"
#: backends/graphics/openglsdl/openglsdl-graphics.cpp:428
msgid "Current scale"
-msgstr ""
+msgstr "Aktuel skalering"
#: backends/graphics/openglsdl/openglsdl-graphics.cpp:558
msgid "Active filter mode: Linear"
-msgstr ""
+msgstr "Aktiv filter tilstand: Linцr"
#: backends/graphics/openglsdl/openglsdl-graphics.cpp:560
msgid "Active filter mode: Nearest"
-msgstr ""
+msgstr "Aktiv filter tilstand: Nцrmest"
#: backends/platform/symbian/src/SymbianActions.cpp:38
#: backends/platform/wince/CEActionsSmartphone.cpp:39
@@ -2731,11 +2851,13 @@ msgstr "GC Pad acceleration:"
msgid "DVD"
msgstr "DVD"
-#: backends/platform/wii/options.cpp:89 backends/platform/wii/options.cpp:101
+#: backends/platform/wii/options.cpp:89
+#: backends/platform/wii/options.cpp:101
msgid "Status:"
msgstr "Status:"
-#: backends/platform/wii/options.cpp:90 backends/platform/wii/options.cpp:102
+#: backends/platform/wii/options.cpp:90
+#: backends/platform/wii/options.cpp:102
msgid "Unknown"
msgstr "Ukendt"
@@ -2812,17 +2934,15 @@ msgid "Network down"
msgstr "Netvцrk nede"
#: backends/platform/wii/options.cpp:178
-#, fuzzy
msgid "Initializing network"
msgstr "Initialisere netvцrk"
#: backends/platform/wii/options.cpp:182
-#, fuzzy
msgid "Timeout while initializing network"
msgstr "Tidsgrцnse nхet ved initialisering af netvцrk"
#: backends/platform/wii/options.cpp:186
-#, fuzzy, c-format
+#, c-format
msgid "Network not initialized (%d)"
msgstr "Netvцrk ikke initialiseret (%d)"
@@ -2882,12 +3002,12 @@ msgstr "Pil til hјjre"
#: backends/platform/wince/CEActionsPocket.cpp:267
#: backends/platform/wince/CEActionsSmartphone.cpp:231
msgid "Do you want to load or save the game?"
-msgstr "Vil du hente eller gemme spillet?"
+msgstr "Vil du indlцse eller gemme spillet?"
#: backends/platform/wince/CEActionsPocket.cpp:326
#: backends/platform/wince/CEActionsSmartphone.cpp:287
msgid " Are you sure you want to quit ? "
-msgstr " Er du sikker pх at du vil afslutte ? "
+msgstr " Er du sikker pх at du vil afslutte? "
#: backends/platform/wince/CEActionsSmartphone.cpp:50
msgid "Keyboard"
@@ -2915,8 +3035,7 @@ msgstr "Tildel hјjreklikshandling"
#: backends/platform/wince/wince-sdl.cpp:519
msgid "You must map a key to the 'Right Click' action to play this game"
-msgstr ""
-"Du skal tildele en tast til 'Hјjreklik' handlingen for at spille dette spil"
+msgstr "Du skal tildele en tast til 'Hјjreklik' handlingen for at spille dette spil"
#: backends/platform/wince/wince-sdl.cpp:528
msgid "Map hide toolbar action"
@@ -2924,9 +3043,7 @@ msgstr "Tildel \"skjul vцrktјjslinje\" handling"
#: backends/platform/wince/wince-sdl.cpp:532
msgid "You must map a key to the 'Hide toolbar' action to play this game"
-msgstr ""
-"Du skal tildele en tast til 'Skjul vцrktјjslinje' handlingen for at spille "
-"dette spil"
+msgstr "Du skal tildele en tast til 'Skjul vцrktјjslinje' handlingen for at spille dette spil"
#: backends/platform/wince/wince-sdl.cpp:541
msgid "Map Zoom Up action (optional)"
@@ -2937,122 +3054,110 @@ msgid "Map Zoom Down action (optional)"
msgstr "Tildel Forstјr handling (valgfri)"
#: backends/platform/wince/wince-sdl.cpp:552
-msgid ""
-"Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory"
-msgstr ""
-"Glem ikke at tildele en tast til 'Skjul vцrktјjslinje' handling for at se "
-"hele oversigten"
+msgid "Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory"
+msgstr "Glem ikke at tildele en tast til 'Skjul vцrktјjslinje' handling for at se hele oversigten"
#: backends/events/default/default-events.cpp:191
-#, fuzzy
msgid "Do you really want to return to the Launcher?"
-msgstr "Vil du virkelig slette denne gemmer?"
+msgstr "Vil du virkelig gх tilbage til oversigten?"
#: backends/events/default/default-events.cpp:191
-#, fuzzy
msgid "Launcher"
-msgstr "Slag"
+msgstr "Oversigt"
#: backends/events/default/default-events.cpp:213
-#, fuzzy
msgid "Do you really want to quit?"
-msgstr "Vil du afslutte?"
+msgstr "Vil du virkelig afslutte?"
#: backends/events/gph/gph-events.cpp:338
#: backends/events/gph/gph-events.cpp:381
#: backends/events/openpandora/op-events.cpp:139
msgid "Touchscreen 'Tap Mode' - Left Click"
-msgstr ""
+msgstr "Touchscreen 'Tap Mode' - Venstre Klik"
#: backends/events/gph/gph-events.cpp:340
#: backends/events/gph/gph-events.cpp:383
#: backends/events/openpandora/op-events.cpp:141
msgid "Touchscreen 'Tap Mode' - Right Click"
-msgstr ""
+msgstr "Touchscreen 'Tap Mode' - Hјjre Klik"
#: backends/events/gph/gph-events.cpp:342
#: backends/events/gph/gph-events.cpp:385
#: backends/events/openpandora/op-events.cpp:143
msgid "Touchscreen 'Tap Mode' - Hover (No Click)"
-msgstr ""
+msgstr "Touchscreen 'Tap Mode' - Henover (Ingen Klik)"
#: backends/events/gph/gph-events.cpp:362
-#, fuzzy
msgid "Maximum Volume"
-msgstr "Lydstyrke"
+msgstr "Maximal lydstyrke"
#: backends/events/gph/gph-events.cpp:364
msgid "Increasing Volume"
-msgstr ""
+msgstr "Hцver lydstyrke"
#: backends/events/gph/gph-events.cpp:370
-#, fuzzy
msgid "Minimal Volume"
-msgstr "Lydstyrke"
+msgstr "Minimal lydstyrke"
#: backends/events/gph/gph-events.cpp:372
msgid "Decreasing Volume"
-msgstr ""
+msgstr "Sцnker lydstyrke"
#: backends/updates/macosx/macosx-updates.mm:65
msgid "Check for Updates..."
-msgstr ""
+msgstr "Sјg efter opdateringer..."
#: backends/platform/bada/form.cpp:269
-#, fuzzy
msgid "Right Click Once"
-msgstr "Hјjre klik"
+msgstr "Enkelt hјjre klik"
#: backends/platform/bada/form.cpp:277
-#, fuzzy
msgid "Move Only"
-msgstr "Tale"
+msgstr "Flyt kun"
#: backends/platform/bada/form.cpp:291
msgid "Escape Key"
-msgstr ""
+msgstr "Escape tast"
#: backends/platform/bada/form.cpp:296
-#, fuzzy
msgid "Game Menu"
-msgstr "Spil"
+msgstr "Spil menu"
#: backends/platform/bada/form.cpp:301
-#, fuzzy
msgid "Show Keypad"
msgstr "Vis tastatur"
#: backends/platform/bada/form.cpp:309
msgid "Control Mouse"
-msgstr ""
+msgstr "Kontrollщr mus"
#: backends/events/maemosdl/maemosdl-events.cpp:192
msgid "Clicking Enabled"
-msgstr ""
+msgstr "Klik aktiveret"
#: backends/events/maemosdl/maemosdl-events.cpp:192
msgid "Clicking Disabled"
-msgstr ""
+msgstr "Klik deaktiveret"
#~ msgid "Hercules Green"
#~ msgstr "Hercules grјn"
#~ msgid "Hercules Amber"
#~ msgstr "Hercules brun"
-
#~ msgctxt "lowres"
+
#~ msgid "Hercules Green"
#~ msgstr "Hercules grјn"
-
#~ msgctxt "lowres"
+
#~ msgid "Hercules Amber"
#~ msgstr "Hercules brun"
#, fuzzy
#~ msgid "Save game failed!"
#~ msgstr "Gemmer:"
-
#~ msgctxt "lowres"
+
#~ msgid "Add Game..."
#~ msgstr "Tilfјj spil..."
diff --git a/po/de_DE.po b/po/de_DE.po
index 3d9a0ca38c..bb53f4e2ff 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -7,11 +7,11 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.5.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2012-06-24 18:06+0100\n"
-"PO-Revision-Date: 2012-01-29 21:11+0100\n"
+"POT-Creation-Date: 2012-07-08 12:25+0100\n"
+"PO-Revision-Date: 2012-07-14 22:49+0100\n"
"Last-Translator: Simon Sawatzki <SimSaw@gmx.de>\n"
"Language-Team: Simon Sawatzki <SimSaw@gmx.de> (Lead), Lothar Serra Mari "
-"<Lothar@Windowsbase.de> (Contributor)\n"
+"(Contributor)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=iso-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -931,6 +931,9 @@ msgid ""
"The theme you selected does not support your current language. If you want "
"to use this theme you need to switch to another language first."
msgstr ""
+"Das ausgewфhlte Thema unterstќtzt nicht die aktuelle Sprache. Wenn Sie "
+"dieses Thema benutzen wollen, mќssen Sie erst zu einer anderen Sprache "
+"wechseln."
#: gui/saveload.cpp:59 gui/saveload.cpp:257
msgid "No date saved"
@@ -1148,13 +1151,13 @@ msgid "~R~eturn to Launcher"
msgstr "Zur Spiele~l~iste"
#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
-#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:728
+#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:735
msgid "Save game:"
msgstr "Speichern:"
#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
#: engines/scumm/dialogs.cpp:187 engines/cruise/menu.cpp:212
-#: engines/sci/engine/kfile.cpp:728
+#: engines/sci/engine/kfile.cpp:735
#: backends/platform/symbian/src/SymbianActions.cpp:44
#: backends/platform/wince/CEActionsPocket.cpp:43
#: backends/platform/wince/CEActionsPocket.cpp:267
@@ -1248,8 +1251,8 @@ msgid ""
"Gamestate load failed (%s)! Please consult the README for basic information, "
"and for instructions on how to obtain further assistance."
msgstr ""
-"Laden des Spielstands %s fehlgeschlagen! Bitte lesen Sie die Liesmich-"
-"Datei fќr grundlegende Informationen und Anweisungen zu weiterer Hilfe."
+"Laden des Spielstands %s fehlgeschlagen! Bitte lesen Sie die Liesmich-Datei "
+"fќr grundlegende Informationen und Anweisungen zu weiterer Hilfe."
#: engines/engine.cpp:439
msgid ""
@@ -1274,13 +1277,14 @@ msgstr "Originale Spielstand-Menќs"
#: engines/agi/detection.cpp:146 engines/dreamweb/detection.cpp:48
#: engines/sci/detection.cpp:391
msgid "Use the original save/load screens, instead of the ScummVM ones"
-msgstr "Verwendet die originalen Menќs zum Speichern und Laden statt der von ScummVM."
+msgstr ""
+"Verwendet die originalen Menќs zum Speichern und Laden statt der von ScummVM."
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:831
msgid "Restore game:"
msgstr "Spiel laden:"
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:831
msgid "Restore"
msgstr "Laden"
@@ -1309,16 +1313,16 @@ msgid "Prefer digital sound effects instead of synthesized ones"
msgstr "Bevorzugt digitale Sound-Effekte statt synthethisierter."
#: engines/sci/detection.cpp:400
-msgid "Use IMF/Yahama FB-01 for MIDI output"
-msgstr "IMF/Yahama FB-01 fќr MIDI-Ausgabe verwenden"
+msgid "Use IMF/Yamaha FB-01 for MIDI output"
+msgstr "IMF/Yamaha FB-01 fќr MIDI-Ausgabe verwenden"
#: engines/sci/detection.cpp:401
msgid ""
-"Use an IBM Music Feature card or a Yahama FB-01 FM synth module for MIDI "
+"Use an IBM Music Feature card or a Yamaha FB-01 FM synth module for MIDI "
"output"
msgstr ""
-"Verwendet eine Music-Feature-Karte von IBM oder ein "
-"Yahama-FB-01-FM-Synthetisierungsmodul fќr die MIDI-Ausgabe."
+"Verwendet eine Music-Feature-Karte von IBM oder ein Yamaha-FB-01-FM-"
+"Synthetisierungsmodul fќr die MIDI-Ausgabe."
#: engines/sci/detection.cpp:411
msgid "Use CD audio"
@@ -2210,15 +2214,15 @@ msgid ""
"You appear to be using a General MIDI device,\n"
"but your game only supports Roland MT32 MIDI.\n"
"We try to map the Roland MT32 instruments to\n"
-"General MIDI ones. After all it might happen\n"
-"that a few tracks will not be correctly played."
+"General MIDI ones. It is still possible that\n"
+"some tracks sound incorrect."
msgstr ""
"Sie scheinen ein General-MIDI-Gerфt zu\n"
"verwenden, aber das Spiel unterstќtzt nur\n"
-"Roland MT-32 MIDI. Es wird versucht, die\n"
-"Roland-MT-32-Instrumente denen von\n"
-"General MIDI zuzuordnen. Es kann jedoch\n"
-"vorkommen, dass ein paar Musikstќcke nicht\n"
+"Roland MT32 MIDI. Es wird versucht, die\n"
+"Roland-MT32-Instrumente denen von\n"
+"General MIDI zuzuordnen. Es ist dennoch\n"
+"mіglich, dass ein paar Musikstќcke nicht\n"
"richtig abgespielt werden."
#: engines/queen/queen.cpp:59 engines/sky/detection.cpp:44
@@ -2278,10 +2282,10 @@ msgid ""
"Press OK to convert them now, otherwise you will be asked again the next "
"time you start the game.\n"
msgstr ""
-"ScummVM hat erkannt, dass Sie alte Spielstфnde von Baphomets Fluch 1 "
-"haben, die umgewandelt werden sollten.\n"
-"Das alte Speicherformat wird nicht mehr unterstќtzt, also kіnnen Sie "
-"diese Spielstфnde unkonvertiert nicht laden.\n"
+"ScummVM hat erkannt, dass Sie alte Spielstфnde von Baphomets Fluch 1 haben, "
+"die umgewandelt werden sollten.\n"
+"Das alte Speicherformat wird nicht mehr unterstќtzt, also kіnnen Sie diese "
+"Spielstфnde unkonvertiert nicht laden.\n"
"\n"
"Klicken Sie auf OK, um diese jetzt umzuwandeln, sonst werden Sie erneut "
"gefragt, wenn Sie nфchstes Mal dieses Spiel starten.\n"
@@ -2311,8 +2315,8 @@ msgstr "Das ist das Ende der Demo von Broken Sword 1 (Baphomets Fluch 1)."
msgid ""
"PSX cutscenes found but ScummVM has been built without RGB color support"
msgstr ""
-"PSX-Zwischensequenzen gefunden, aber ScummVM wurde ohne Unterstќtzung "
-"fќr RGB-Farben erstellt."
+"PSX-Zwischensequenzen gefunden, aber ScummVM wurde ohne Unterstќtzung fќr "
+"RGB-Farben erstellt."
#: engines/sword2/sword2.cpp:79
msgid "Show object labels"
@@ -2348,8 +2352,8 @@ msgid ""
"\n"
"Press OK to convert them now, otherwise you will be asked next time.\n"
msgstr ""
-"ScummVM hat erkannt, dass Sie alte Spielstфnde von Nippon Safes haben, "
-"die umbenannt werden sollten.\n"
+"ScummVM hat erkannt, dass Sie alte Spielstфnde von Nippon Safes haben, die "
+"umbenannt werden sollten.\n"
"Die alten Dateinamen werden nicht mehr unterstќtzt, also kіnnen Sie diese "
"Spielstфnde unkonvertiert nicht laden.\n"
"\n"
diff --git a/po/es_ES.po b/po/es_ES.po
index 9849a1798b..8e23894dcf 100644
--- a/po/es_ES.po
+++ b/po/es_ES.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.4.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2012-06-24 18:06+0100\n"
-"PO-Revision-Date: 2012-06-22 17:44+0100\n"
+"POT-Creation-Date: 2012-07-08 12:25+0100\n"
+"PO-Revision-Date: 2012-07-08 18:19+0100\n"
"Last-Translator: Tomсs Maidagan\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@@ -1136,13 +1136,13 @@ msgid "~R~eturn to Launcher"
msgstr "~V~olver al lanzador"
#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
-#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:728
+#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:735
msgid "Save game:"
msgstr "Guardar partida"
#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
#: engines/scumm/dialogs.cpp:187 engines/cruise/menu.cpp:212
-#: engines/sci/engine/kfile.cpp:728
+#: engines/sci/engine/kfile.cpp:735
#: backends/platform/symbian/src/SymbianActions.cpp:44
#: backends/platform/wince/CEActionsPocket.cpp:43
#: backends/platform/wince/CEActionsPocket.cpp:267
@@ -1264,11 +1264,11 @@ msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr ""
"Utilizar las pantallas de guardar/cargar originales, en vez de las de ScummVM"
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:831
msgid "Restore game:"
msgstr "Cargar partida:"
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:831
msgid "Restore"
msgstr "Cargar"
@@ -1297,15 +1297,15 @@ msgid "Prefer digital sound effects instead of synthesized ones"
msgstr "Preferir efectos de sonido digitales en vez de los sintetizados"
#: engines/sci/detection.cpp:400
-msgid "Use IMF/Yahama FB-01 for MIDI output"
-msgstr "Usar IMF/Yahama FB-01 para la salida MIDI"
+msgid "Use IMF/Yamaha FB-01 for MIDI output"
+msgstr "Usar IMF/Yamaha FB-01 para la salida MIDI"
#: engines/sci/detection.cpp:401
msgid ""
-"Use an IBM Music Feature card or a Yahama FB-01 FM synth module for MIDI "
+"Use an IBM Music Feature card or a Yamaha FB-01 FM synth module for MIDI "
"output"
msgstr ""
-"Usa una tarjeta IBM Music o un mѓdulo sintetizador Yahama FB-01 FM para la "
+"Usa una tarjeta IBM Music o un mѓdulo sintetizador Yamaha FB-01 FM para la "
"salida MIDI"
#: engines/sci/detection.cpp:411
@@ -2194,14 +2194,14 @@ msgid ""
"You appear to be using a General MIDI device,\n"
"but your game only supports Roland MT32 MIDI.\n"
"We try to map the Roland MT32 instruments to\n"
-"General MIDI ones. After all it might happen\n"
-"that a few tracks will not be correctly played."
+"General MIDI ones. It is still possible that\n"
+"some tracks sound incorrect."
msgstr ""
-"Estсs usando un dispositivo General Midi, pero el\n"
+"Estсs usando un dispositivo General MIDI, pero el\n"
"juego solo es compatible con MIDI Roland MT32.\n"
"Intentamos adaptar los instrumentos Roland MT32\n"
"a los de General MIDI, pero es posible que algunas\n"
-"de las pistas no se reproduzcan correctamente."
+"de las pistas no suenen correctamente."
#: engines/queen/queen.cpp:59 engines/sky/detection.cpp:44
msgid "Floppy intro"
diff --git a/po/eu.po b/po/eu.po
index fa0d3030b6..5bc553e572 100644
--- a/po/eu.po
+++ b/po/eu.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.5.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2012-06-24 18:06+0100\n"
+"POT-Creation-Date: 2012-07-08 12:25+0100\n"
"PO-Revision-Date: 2011-12-15 14:53+0100\n"
"Last-Translator: Mikel Iturbe Urretxa <mikel@hamahiru.org>\n"
"Language-Team: Librezale <librezale@librezale.org>\n"
@@ -1137,13 +1137,13 @@ msgid "~R~eturn to Launcher"
msgstr "It~z~uli abiarazlera"
#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
-#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:728
+#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:735
msgid "Save game:"
msgstr "Gorde jokoa:"
#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
#: engines/scumm/dialogs.cpp:187 engines/cruise/menu.cpp:212
-#: engines/sci/engine/kfile.cpp:728
+#: engines/sci/engine/kfile.cpp:735
#: backends/platform/symbian/src/SymbianActions.cpp:44
#: backends/platform/wince/CEActionsPocket.cpp:43
#: backends/platform/wince/CEActionsPocket.cpp:267
@@ -1261,11 +1261,11 @@ msgstr ""
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr ""
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:831
msgid "Restore game:"
msgstr "Jokoa kargatu:"
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:831
msgid "Restore"
msgstr "Kargatu"
@@ -1297,12 +1297,12 @@ msgid "Prefer digital sound effects instead of synthesized ones"
msgstr ""
#: engines/sci/detection.cpp:400
-msgid "Use IMF/Yahama FB-01 for MIDI output"
+msgid "Use IMF/Yamaha FB-01 for MIDI output"
msgstr ""
#: engines/sci/detection.cpp:401
msgid ""
-"Use an IBM Music Feature card or a Yahama FB-01 FM synth module for MIDI "
+"Use an IBM Music Feature card or a Yamaha FB-01 FM synth module for MIDI "
"output"
msgstr ""
@@ -2189,12 +2189,13 @@ msgid "Choose Spell"
msgstr "Sorginkeria aukeratu"
#: engines/kyra/sound_midi.cpp:475
+#, fuzzy
msgid ""
"You appear to be using a General MIDI device,\n"
"but your game only supports Roland MT32 MIDI.\n"
"We try to map the Roland MT32 instruments to\n"
-"General MIDI ones. After all it might happen\n"
-"that a few tracks will not be correctly played."
+"General MIDI ones. It is still possible that\n"
+"some tracks sound incorrect."
msgstr ""
"General MIDI gailua erabiltzen zaudela dirudi,\n"
"baina zure jokoak Roland MT32 MIDI bakarrik\n"
diff --git a/po/fr_FR.po b/po/fr_FR.po
index be7ddddbed..5faab55d83 100644
--- a/po/fr_FR.po
+++ b/po/fr_FR.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2012-06-24 18:06+0100\n"
-"PO-Revision-Date: 2011-10-23 14:52+0100\n"
+"POT-Creation-Date: 2012-07-08 12:25+0100\n"
+"PO-Revision-Date: 2012-07-08 12:24+0100\n"
"Last-Translator: Thierry Crozat <criezy@scummvm.org>\n"
"Language-Team: French <scummvm-devel@lists.sf.net>\n"
"MIME-Version: 1.0\n"
@@ -193,9 +193,8 @@ msgid "Platform:"
msgstr "Systшme:"
#: gui/launcher.cpp:231
-#, fuzzy
msgid "Engine"
-msgstr "Examiner"
+msgstr "Moteur"
#: gui/launcher.cpp:239 gui/options.cpp:1062 gui/options.cpp:1079
msgid "Graphics"
@@ -1145,13 +1144,13 @@ msgid "~R~eturn to Launcher"
msgstr "Retour au ~L~anceur"
#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
-#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:728
+#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:735
msgid "Save game:"
msgstr "Sauvegarde:"
#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
#: engines/scumm/dialogs.cpp:187 engines/cruise/menu.cpp:212
-#: engines/sci/engine/kfile.cpp:728
+#: engines/sci/engine/kfile.cpp:735
#: backends/platform/symbian/src/SymbianActions.cpp:44
#: backends/platform/wince/CEActionsPocket.cpp:43
#: backends/platform/wince/CEActionsPocket.cpp:267
@@ -1171,14 +1170,13 @@ msgstr ""
"obtenir de l'aide supplщmentaire."
#: engines/dialogs.cpp:228
-#, fuzzy, c-format
+#, c-format
msgid ""
"Gamestate save failed (%s)! Please consult the README for basic information, "
"and for instructions on how to obtain further assistance."
msgstr ""
-"Dщsolщ, il n'y a pas d'aide disponible dans ce jeu actuellement. Lisez le "
-"fichier README pour les informations de base et les instructions pour "
-"obtenir de l'aide supplщmentaire."
+"Echec de la sauvegarde (%s)! Lisez le fichier README pour les informations "
+"de base et les instructions pour obtenir de l'aide supplщmentaire."
#: engines/dialogs.cpp:301 engines/mohawk/dialogs.cpp:109
#: engines/mohawk/dialogs.cpp:174
@@ -1239,14 +1237,13 @@ msgstr ""
"Lisez le fichier README pour plus de dщtails."
#: engines/engine.cpp:426
-#, fuzzy, c-format
+#, c-format
msgid ""
"Gamestate load failed (%s)! Please consult the README for basic information, "
"and for instructions on how to obtain further assistance."
msgstr ""
-"Dщsolщ, il n'y a pas d'aide disponible dans ce jeu actuellement. Lisez le "
-"fichier README pour les informations de base et les instructions pour "
-"obtenir de l'aide supplщmentaire."
+"Echec du chargement (%s)! . Lisez le fichier README pour les informations de "
+"base et les instructions pour obtenir de l'aide supplщmentaire."
#: engines/engine.cpp:439
msgid ""
@@ -1265,84 +1262,88 @@ msgstr "Jouer quand mъme"
#: engines/agi/detection.cpp:145 engines/dreamweb/detection.cpp:47
#: engines/sci/detection.cpp:390
msgid "Use original save/load screens"
-msgstr ""
+msgstr "Dialogues sauvegarde/chargement d'origine"
#: engines/agi/detection.cpp:146 engines/dreamweb/detection.cpp:48
#: engines/sci/detection.cpp:391
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr ""
+"Utiliser les dialogues sauvegarde/chargement d'origine plutєt que ceux de "
+"ScummVM"
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:831
msgid "Restore game:"
msgstr "Charger le jeu:"
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:831
msgid "Restore"
msgstr "Charger"
#: engines/dreamweb/detection.cpp:57
-#, fuzzy
msgid "Use bright palette mode"
-msgstr "Щlщment en haut р droite"
+msgstr "Utiliser le mode palette lumineuse"
#: engines/dreamweb/detection.cpp:58
msgid "Display graphics using the game's bright palette"
-msgstr ""
+msgstr "Utiliser la palette lumineuse du jeu pour l'affichage"
#: engines/sci/detection.cpp:370
msgid "EGA undithering"
msgstr "Dщtramage EGA"
#: engines/sci/detection.cpp:371
-#, fuzzy
msgid "Enable undithering in EGA games"
-msgstr "Active le dщtramage dans les jeux EGA qui le supporte"
+msgstr "Activer le dщtramage dans les jeux EGA"
#: engines/sci/detection.cpp:380
-#, fuzzy
msgid "Prefer digital sound effects"
-msgstr "Volume des effets spщciaux sonores"
+msgstr "Prщfщrer les effets sonors digitals"
#: engines/sci/detection.cpp:381
msgid "Prefer digital sound effects instead of synthesized ones"
-msgstr ""
+msgstr "Prщfщrer les effets sonores digitaux plutєt que ceux synthщtisщs"
#: engines/sci/detection.cpp:400
-msgid "Use IMF/Yahama FB-01 for MIDI output"
-msgstr ""
+msgid "Use IMF/Yamaha FB-01 for MIDI output"
+msgstr "Utiliser IMF/Yamaha FB-01 pour la sortie MIDI"
#: engines/sci/detection.cpp:401
msgid ""
-"Use an IBM Music Feature card or a Yahama FB-01 FM synth module for MIDI "
+"Use an IBM Music Feature card or a Yamaha FB-01 FM synth module for MIDI "
"output"
msgstr ""
+"Utiliser une carte IBM Music Feature ou un module Yamaha FB-01 FM pour la "
+"sortie MIDI"
#: engines/sci/detection.cpp:411
msgid "Use CD audio"
-msgstr ""
+msgstr "Utiliser la musique du CD"
#: engines/sci/detection.cpp:412
msgid "Use CD audio instead of in-game audio, if available"
msgstr ""
+"Utiliser la musique du CD quand elle est disponible au lieu de la musique du "
+"jeu"
#: engines/sci/detection.cpp:422
msgid "Use Windows cursors"
-msgstr ""
+msgstr "Utiliser les curseurs Windows"
#: engines/sci/detection.cpp:423
msgid ""
"Use the Windows cursors (smaller and monochrome) instead of the DOS ones"
msgstr ""
+"Utiliser les curseurs Windows (plus petits et monochromes) au lieu des "
+"curseurs DOS"
#: engines/sci/detection.cpp:433
-#, fuzzy
msgid "Use silver cursors"
-msgstr "Curseur normal"
+msgstr "Utiliser les curseurs argentщs"
#: engines/sci/detection.cpp:434
msgid ""
"Use the alternate set of silver cursors, instead of the normal golden ones"
-msgstr ""
+msgstr "Utiliser les curseurs argentщs au lieu des curseurs normaux dorщs"
#: engines/scumm/dialogs.cpp:175
#, c-format
@@ -2096,61 +2097,59 @@ msgstr "Щchec de la sauvegarde."
#. Malcolm makes a joke.
#: engines/kyra/detection.cpp:62
msgid "Studio audience"
-msgstr ""
+msgstr "Public en studio"
#: engines/kyra/detection.cpp:63
msgid "Enable studio audience"
-msgstr ""
+msgstr "Activer le public en studio"
#. I18N: This option allows the user to skip text and cutscenes.
#: engines/kyra/detection.cpp:73
msgid "Skip support"
-msgstr ""
+msgstr "Support des interruptions"
#: engines/kyra/detection.cpp:74
msgid "Allow text and cutscenes to be skipped"
-msgstr ""
+msgstr "Permet de sauter les textes et scшnes cinщmatiques"
#. I18N: Helium mode makes people sound like they've inhaled Helium.
#: engines/kyra/detection.cpp:84
msgid "Helium mode"
-msgstr ""
+msgstr "Mode Helium"
#: engines/kyra/detection.cpp:85
-#, fuzzy
msgid "Enable helium mode"
-msgstr "Activer le mode Roland GS"
+msgstr "Activer le mode helium"
#. I18N: When enabled, this option makes scrolling smoother when
#. changing from one screen to another.
#: engines/kyra/detection.cpp:99
msgid "Smooth scrolling"
-msgstr ""
+msgstr "Dщfilement rщgulier"
#: engines/kyra/detection.cpp:100
msgid "Enable smooth scrolling when walking"
-msgstr ""
+msgstr "Activer le dщfilement rщgulier en marchant"
#. I18N: When enabled, this option changes the cursor when it floats to the
#. edge of the screen to a directional arrow. The player can then click to
#. walk towards that direction.
#: engines/kyra/detection.cpp:112
-#, fuzzy
msgid "Floating cursors"
-msgstr "Curseur normal"
+msgstr "Curseurs flotants"
#: engines/kyra/detection.cpp:113
msgid "Enable floating cursors"
-msgstr ""
+msgstr "Activer les curseurs flotants"
#. I18N: HP stands for Hit Points
#: engines/kyra/detection.cpp:127
msgid "HP bar graphs"
-msgstr ""
+msgstr "Bar HP"
#: engines/kyra/detection.cpp:128
msgid "Enable hit point bar graphs"
-msgstr ""
+msgstr "Activer les bars de santщ (Hit Point)"
#: engines/kyra/lol.cpp:478
msgid "Attack 1"
@@ -2205,22 +2204,22 @@ msgid ""
"You appear to be using a General MIDI device,\n"
"but your game only supports Roland MT32 MIDI.\n"
"We try to map the Roland MT32 instruments to\n"
-"General MIDI ones. After all it might happen\n"
-"that a few tracks will not be correctly played."
+"General MIDI ones. It is still possible that\n"
+"some tracks sound incorrect."
msgstr ""
"Il semble que vous utilisiez un pщriphщrique General MIDI,\n"
-"mais ce jeu ne support que le MIDI Roland MT32.\n"
-"Nous essayons d'associer les instruments Roland MT32 auxinstruments General "
-"MIDI. Mais il est possible que quelquespistes ne soient pas jouщes "
-"correctement."
+"mais ce jeu ne support que le MIDI Roland MT32. Nous essayons\n"
+"d'associer les instruments Roland MT32 aux instruments General\n"
+"MIDI. Cependant il est possible que quelques pistes ne soient\n "
+"pas jouщes correctement."
#: engines/queen/queen.cpp:59 engines/sky/detection.cpp:44
msgid "Floppy intro"
-msgstr ""
+msgstr "Intro disquette"
#: engines/queen/queen.cpp:60 engines/sky/detection.cpp:45
msgid "Use the floppy version's intro (CD version only)"
-msgstr ""
+msgstr "Utiliser l'intro de la version disquette (version CD uniquement)"
#: engines/sky/compact.cpp:130
msgid ""
@@ -2242,6 +2241,7 @@ msgstr ""
#, c-format
msgid "PSX stream cutscene '%s' cannot be played in paletted mode"
msgstr ""
+"La scшne cinщmatique PSX '%s' ne peut pas ъtre lu avec 256 couleurs ou moins"
#: engines/sword1/animation.cpp:560 engines/sword2/animation.cpp:455
msgid "DXA cutscenes found but ScummVM has been built without zlib support"
@@ -2298,20 +2298,19 @@ msgid "This is the end of the Broken Sword 1 Demo"
msgstr "C'est la fin de la dщmo des Chevaliers de Baphomet"
#: engines/sword2/animation.cpp:435
-#, fuzzy
msgid ""
"PSX cutscenes found but ScummVM has been built without RGB color support"
msgstr ""
-"Les sщquences DXA sont prщsente mais ScummVM a щtщ compilщ sans le support "
-"zlib."
+"Scшnes cinщmatique PSX dщtectщes mais ScummVM a щtщ compilщ sans le support "
+"des couleurs RGB"
#: engines/sword2/sword2.cpp:79
msgid "Show object labels"
-msgstr ""
+msgstr "Afficher la description des objets"
#: engines/sword2/sword2.cpp:80
msgid "Show labels for objects on mouse hover"
-msgstr ""
+msgstr "Afficher la description des objets lors de passage du pointeur"
#: engines/parallaction/saveload.cpp:133
#, c-format
@@ -2451,9 +2450,8 @@ msgid "Keymap:"
msgstr "Affectation des touches:"
#: backends/keymapper/remap-dialog.cpp:66
-#, fuzzy
msgid " (Effective)"
-msgstr "(Actif)"
+msgstr "(Effectif)"
#: backends/keymapper/remap-dialog.cpp:106
msgid " (Active)"
@@ -2461,7 +2459,7 @@ msgstr "(Actif)"
#: backends/keymapper/remap-dialog.cpp:106
msgid " (Blocked)"
-msgstr ""
+msgstr "(Bloquщ)"
#: backends/keymapper/remap-dialog.cpp:119
msgid " (Global)"
diff --git a/po/hu_HU.po b/po/hu_HU.po
index c868806a8a..828659dea6 100644
--- a/po/hu_HU.po
+++ b/po/hu_HU.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2012-06-24 18:06+0100\n"
-"PO-Revision-Date: 2012-06-25 06:21+0100\n"
+"POT-Creation-Date: 2012-07-08 12:25+0100\n"
+"PO-Revision-Date: 2012-07-09 05:58+0100\n"
"Last-Translator: George Kormendi <grubycza@hotmail.com>\n"
"Language-Team: Hungarian\n"
"MIME-Version: 1.0\n"
@@ -1130,13 +1130,13 @@ msgid "~R~eturn to Launcher"
msgstr "Visszatщrщs az indэtѓba"
#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
-#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:728
+#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:735
msgid "Save game:"
msgstr "Jсtщk mentщse:"
#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
#: engines/scumm/dialogs.cpp:187 engines/cruise/menu.cpp:212
-#: engines/sci/engine/kfile.cpp:728
+#: engines/sci/engine/kfile.cpp:735
#: backends/platform/symbian/src/SymbianActions.cpp:44
#: backends/platform/wince/CEActionsPocket.cpp:43
#: backends/platform/wince/CEActionsPocket.cpp:267
@@ -1254,11 +1254,11 @@ msgstr "Eredeti ment/tіlt kщpernyѕk hasznсlata"
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr "Az eredeti mentщs/betіltщs kщpernyѕ hasznсlata a ScummVM kщpek helyett"
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:831
msgid "Restore game:"
msgstr "Jсtщkmenet visszaсllэtсsa:"
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:831
msgid "Restore"
msgstr "Visszaсllэtсs"
@@ -1287,15 +1287,15 @@ msgid "Prefer digital sound effects instead of synthesized ones"
msgstr "Digitсlis hanghatсsok elѕnyben a szintetizсltakkal szemben"
#: engines/sci/detection.cpp:400
-msgid "Use IMF/Yahama FB-01 for MIDI output"
-msgstr "IMF/Yahama FB-01 hasznсlata MIDI kimentre"
+msgid "Use IMF/Yamaha FB-01 for MIDI output"
+msgstr "IMF/Yamaha FB-01 hasznсlata MIDI kimentre"
#: engines/sci/detection.cpp:401
msgid ""
-"Use an IBM Music Feature card or a Yahama FB-01 FM synth module for MIDI "
+"Use an IBM Music Feature card or a Yamaha FB-01 FM synth module for MIDI "
"output"
msgstr ""
-"IBM Music Feature kсrtya vagy Yahama FB-01 FM szintetizсtor modul hasznсlata "
+"IBM Music Feature kсrtya vagy Yamaha FB-01 FM szintetizсtor modul hasznсlata "
"MIDI kimenetre"
#: engines/sci/detection.cpp:411
@@ -2182,14 +2182,14 @@ msgid ""
"You appear to be using a General MIDI device,\n"
"but your game only supports Roland MT32 MIDI.\n"
"We try to map the Roland MT32 instruments to\n"
-"General MIDI ones. After all it might happen\n"
-"that a few tracks will not be correctly played."
+"General MIDI ones. It is still possible that\n"
+"some tracks sound incorrect."
msgstr ""
-"кgy nщz ki egy General MIDI eszkіzt hasznсlsz,\n"
-"a jсtщk csak Roland MT32 MIDI eszkіzt tсmogat.\n"
-"Cserщld ki Roland MT32 hangszerekre\n"
-"a General MIDI-t. Kќlіnben nщhсny\n"
-"sсvot nem lehet rendesen lejсtszani."
+"кgy tћnik, egy General MIDI eszkіzt hasznсlsz,\n"
+"de a jсtщk csak Roland MT32 MIDI eszkіzt tсmogat.\n"
+"Megprѓbсljuk lecserщlni a Roland MT32 hangszereket\n"
+"General MIDIre. Tovсbbra is lehetsщges hogy\n"
+"nщhсny hangsсv helytelenќl hangzik."
#: engines/queen/queen.cpp:59 engines/sky/detection.cpp:44
msgid "Floppy intro"
diff --git a/po/it_IT.po b/po/it_IT.po
index dc33811e28..164171ce8f 100644
--- a/po/it_IT.po
+++ b/po/it_IT.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2012-06-24 18:06+0100\n"
-"PO-Revision-Date: 2011-10-08 17:29+0100\n"
+"POT-Creation-Date: 2012-07-08 12:25+0100\n"
+"PO-Revision-Date: 2012-07-09 09:30+0100\n"
"Last-Translator: Matteo 'Maff' Angelino <matteo.maff at gmail dot com>\n"
"Language-Team: Italian\n"
"MIME-Version: 1.0\n"
@@ -77,7 +77,6 @@ msgid "Remap keys"
msgstr "Riprogramma tasti"
#: gui/gui-manager.cpp:129 base/main.cpp:307
-#, fuzzy
msgid "Toggle FullScreen"
msgstr "Attiva / disattiva schermo intero"
@@ -192,9 +191,8 @@ msgid "Platform:"
msgstr "Piattaf.:"
#: gui/launcher.cpp:231
-#, fuzzy
msgid "Engine"
-msgstr "Esamina"
+msgstr "Motore"
#: gui/launcher.cpp:239 gui/options.cpp:1062 gui/options.cpp:1079
msgid "Graphics"
@@ -1139,13 +1137,13 @@ msgid "~R~eturn to Launcher"
msgstr "~V~ai a elenco giochi"
#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
-#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:728
+#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:735
msgid "Save game:"
msgstr "Salva gioco:"
#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
#: engines/scumm/dialogs.cpp:187 engines/cruise/menu.cpp:212
-#: engines/sci/engine/kfile.cpp:728
+#: engines/sci/engine/kfile.cpp:735
#: backends/platform/symbian/src/SymbianActions.cpp:44
#: backends/platform/wince/CEActionsPocket.cpp:43
#: backends/platform/wince/CEActionsPocket.cpp:267
@@ -1165,14 +1163,14 @@ msgstr ""
"per le istruzioni su come ottenere ulteriore assistenza."
#: engines/dialogs.cpp:228
-#, fuzzy, c-format
+#, c-format
msgid ""
"Gamestate save failed (%s)! Please consult the README for basic information, "
"and for instructions on how to obtain further assistance."
msgstr ""
-"Siamo spiacenti, ma l'attuale motore non prevede aiuto all'interno del "
-"gioco. Si prega di consultare il file README per le informazioni di base e "
-"per le istruzioni su come ottenere ulteriore assistenza."
+"Salvataggio fallito (%s)! Si prega di consultare il file README per le "
+"informazioni di base e per le istruzioni su come ottenere ulteriore "
+"assistenza."
#: engines/dialogs.cpp:301 engines/mohawk/dialogs.cpp:109
#: engines/mohawk/dialogs.cpp:174
@@ -1233,14 +1231,14 @@ msgstr ""
"Vedi il file README per i dettagli."
#: engines/engine.cpp:426
-#, fuzzy, c-format
+#, c-format
msgid ""
"Gamestate load failed (%s)! Please consult the README for basic information, "
"and for instructions on how to obtain further assistance."
msgstr ""
-"Siamo spiacenti, ma l'attuale motore non prevede aiuto all'interno del "
-"gioco. Si prega di consultare il file README per le informazioni di base e "
-"per le istruzioni su come ottenere ulteriore assistenza."
+"Caricamento salvataggio fallito (%s)! Si prega di consultare il file README "
+"per le informazioni di base e per le istruzioni su come ottenere ulteriore "
+"assistenza."
#: engines/engine.cpp:439
msgid ""
@@ -1259,84 +1257,87 @@ msgstr "Avvia comunque"
#: engines/agi/detection.cpp:145 engines/dreamweb/detection.cpp:47
#: engines/sci/detection.cpp:390
msgid "Use original save/load screens"
-msgstr ""
+msgstr "Usa schermate di salvataggio originali"
#: engines/agi/detection.cpp:146 engines/dreamweb/detection.cpp:48
#: engines/sci/detection.cpp:391
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr ""
+"Usa le schermate originali di salvataggio e caricamento, al posto di quelle "
+"di ScummVM"
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:831
msgid "Restore game:"
msgstr "Ripristina gioco:"
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:831
msgid "Restore"
msgstr "Ripristina"
#: engines/dreamweb/detection.cpp:57
-#, fuzzy
msgid "Use bright palette mode"
-msgstr "Oggetto in alto a destra"
+msgstr "Usa modalitр colori brillanti"
#: engines/dreamweb/detection.cpp:58
msgid "Display graphics using the game's bright palette"
-msgstr ""
+msgstr "Visualizza la grafica con i colori brillanti del gioco"
#: engines/sci/detection.cpp:370
msgid "EGA undithering"
msgstr "Undithering EGA"
#: engines/sci/detection.cpp:371
-#, fuzzy
msgid "Enable undithering in EGA games"
-msgstr "Attiva undithering nei giochi EGA che lo supportano"
+msgstr "Attiva undithering nei giochi EGA"
#: engines/sci/detection.cpp:380
-#, fuzzy
msgid "Prefer digital sound effects"
-msgstr "Volume degli effetti sonori"
+msgstr "Scegli effetti sonori digitali"
#: engines/sci/detection.cpp:381
msgid "Prefer digital sound effects instead of synthesized ones"
-msgstr ""
+msgstr "Scegli gli effetti sonori digitali al posto di quelli sintetizzati"
#: engines/sci/detection.cpp:400
-msgid "Use IMF/Yahama FB-01 for MIDI output"
-msgstr ""
+msgid "Use IMF/Yamaha FB-01 for MIDI output"
+msgstr "Usa IMF/Yamaha FB-01 per output MIDI"
#: engines/sci/detection.cpp:401
msgid ""
-"Use an IBM Music Feature card or a Yahama FB-01 FM synth module for MIDI "
+"Use an IBM Music Feature card or a Yamaha FB-01 FM synth module for MIDI "
"output"
msgstr ""
+"Usa una scheda IBM Music Feature o un modulo synth Yamaha FB-01 FM per "
+"l'output MIDI"
#: engines/sci/detection.cpp:411
msgid "Use CD audio"
-msgstr ""
+msgstr "Usa audio da CD"
#: engines/sci/detection.cpp:412
msgid "Use CD audio instead of in-game audio, if available"
msgstr ""
+"Usa l'audio da CD al posto di quello incorporato nel gioco, se disponibile"
#: engines/sci/detection.cpp:422
msgid "Use Windows cursors"
-msgstr ""
+msgstr "Usa cursori di Windows"
#: engines/sci/detection.cpp:423
msgid ""
"Use the Windows cursors (smaller and monochrome) instead of the DOS ones"
msgstr ""
+"Usa i cursori di Windows (piљ piccoli e monocromatici) al posto di quelli DOS"
#: engines/sci/detection.cpp:433
-#, fuzzy
msgid "Use silver cursors"
-msgstr "Cursore normale"
+msgstr "Usa cursori d'argento"
#: engines/sci/detection.cpp:434
msgid ""
"Use the alternate set of silver cursors, instead of the normal golden ones"
msgstr ""
+"Usa il set alternativo di cursori d'argento al posto di quelli normali d'oro"
#: engines/scumm/dialogs.cpp:175
#, c-format
@@ -1362,12 +1363,12 @@ msgstr "Gioco in pausa. Premere SPAZIO per continuare."
#. Will react to J as 'Yes'
#: engines/scumm/dialogs.cpp:182
msgid "Are you sure you want to restart? (Y/N)"
-msgstr "Sei sicuro di voler riavviare? (Y/N)"
+msgstr "Sei sicuro di voler riavviare? (S/N)S"
#. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment
#: engines/scumm/dialogs.cpp:184
msgid "Are you sure you want to quit? (Y/N)"
-msgstr "Sei sicuro di voler uscire? (Y/N)"
+msgstr "Sei sicuro di voler uscire? (S/N)S"
#: engines/scumm/dialogs.cpp:189
msgid "Play"
@@ -2090,137 +2091,129 @@ msgstr "Impossibile salvare il gioco"
#. Malcolm makes a joke.
#: engines/kyra/detection.cpp:62
msgid "Studio audience"
-msgstr ""
+msgstr "Reazioni del pubblico"
#: engines/kyra/detection.cpp:63
msgid "Enable studio audience"
-msgstr ""
+msgstr "Attiva le reazioni del pubblico"
#. I18N: This option allows the user to skip text and cutscenes.
#: engines/kyra/detection.cpp:73
msgid "Skip support"
-msgstr ""
+msgstr "Interruzione del parlato"
#: engines/kyra/detection.cpp:74
msgid "Allow text and cutscenes to be skipped"
-msgstr ""
+msgstr "Permette di saltare i dialoghi e le scene di intermezzo"
#. I18N: Helium mode makes people sound like they've inhaled Helium.
#: engines/kyra/detection.cpp:84
msgid "Helium mode"
-msgstr ""
+msgstr "Modalitр elio"
#: engines/kyra/detection.cpp:85
-#, fuzzy
msgid "Enable helium mode"
-msgstr "Attiva la modalitр Roland GS"
+msgstr "Attiva la modalitр elio"
#. I18N: When enabled, this option makes scrolling smoother when
#. changing from one screen to another.
#: engines/kyra/detection.cpp:99
msgid "Smooth scrolling"
-msgstr ""
+msgstr "Scorrimento morbido"
#: engines/kyra/detection.cpp:100
msgid "Enable smooth scrolling when walking"
-msgstr ""
+msgstr "Attiva lo scorrimento morbido durante gli spostamenti"
#. I18N: When enabled, this option changes the cursor when it floats to the
#. edge of the screen to a directional arrow. The player can then click to
#. walk towards that direction.
#: engines/kyra/detection.cpp:112
-#, fuzzy
msgid "Floating cursors"
-msgstr "Cursore normale"
+msgstr "Cursori fluttuanti"
#: engines/kyra/detection.cpp:113
msgid "Enable floating cursors"
-msgstr ""
+msgstr "Attiva cursori fluttuanti"
#. I18N: HP stands for Hit Points
#: engines/kyra/detection.cpp:127
msgid "HP bar graphs"
-msgstr ""
+msgstr "Barre HP"
#: engines/kyra/detection.cpp:128
msgid "Enable hit point bar graphs"
-msgstr ""
+msgstr "Attiva le barre di Hit Point"
#: engines/kyra/lol.cpp:478
msgid "Attack 1"
-msgstr ""
+msgstr "Attacco 1"
#: engines/kyra/lol.cpp:479
msgid "Attack 2"
-msgstr ""
+msgstr "Attacco 2"
#: engines/kyra/lol.cpp:480
msgid "Attack 3"
-msgstr ""
+msgstr "Attacco 3"
#: engines/kyra/lol.cpp:481
msgid "Move Forward"
-msgstr ""
+msgstr "Vai avanti"
#: engines/kyra/lol.cpp:482
msgid "Move Back"
-msgstr ""
+msgstr "Vai indietro"
#: engines/kyra/lol.cpp:483
msgid "Slide Left"
-msgstr ""
+msgstr "Scorri a sinistra"
#: engines/kyra/lol.cpp:484
-#, fuzzy
msgid "Slide Right"
-msgstr "Destra"
+msgstr "Scorri a destra"
#: engines/kyra/lol.cpp:485
-#, fuzzy
msgid "Turn Left"
-msgstr "Spegni"
+msgstr "Gira a sinistra"
#: engines/kyra/lol.cpp:486
-#, fuzzy
msgid "Turn Right"
-msgstr "Cursore a destra"
+msgstr "Gira a destra"
#: engines/kyra/lol.cpp:487
-#, fuzzy
msgid "Rest"
-msgstr "Ripristina"
+msgstr "Riposa"
#: engines/kyra/lol.cpp:488
-#, fuzzy
msgid "Options"
-msgstr "~O~pzioni"
+msgstr "Opzioni"
#: engines/kyra/lol.cpp:489
-#, fuzzy
msgid "Choose Spell"
-msgstr "Scegli"
+msgstr "Scegli incantesimo"
#: engines/kyra/sound_midi.cpp:475
msgid ""
"You appear to be using a General MIDI device,\n"
"but your game only supports Roland MT32 MIDI.\n"
"We try to map the Roland MT32 instruments to\n"
-"General MIDI ones. After all it might happen\n"
-"that a few tracks will not be correctly played."
+"General MIDI ones. It is still possible that\n"
+"some tracks sound incorrect."
msgstr ""
"Sembra che tu stia utilizzanto un dispositivo\n"
"General MIDI, ma il gioco supporta solo Roland\n"
"MT32 MIDI. Tenteremo di mappare gli strumenti\n"
"Roland MT32 in quelli General MIDI. Alcune tracce\n"
-"potrebbero non essere riprodotte correttamente."
+"potrebbero avere un suono non corretto."
#: engines/queen/queen.cpp:59 engines/sky/detection.cpp:44
msgid "Floppy intro"
-msgstr ""
+msgstr "Intro floppy"
#: engines/queen/queen.cpp:60 engines/sky/detection.cpp:45
msgid "Use the floppy version's intro (CD version only)"
-msgstr ""
+msgstr "Usa la versione floppy dell'intro (solo versione CD)"
#: engines/sky/compact.cpp:130
msgid ""
@@ -2242,6 +2235,7 @@ msgstr ""
#, c-format
msgid "PSX stream cutscene '%s' cannot be played in paletted mode"
msgstr ""
+"La scena PSX di intermezzo '%s' non puђ essere eseguita in modalitр tavolozza"
#: engines/sword1/animation.cpp:560 engines/sword2/animation.cpp:455
msgid "DXA cutscenes found but ScummVM has been built without zlib support"
@@ -2298,20 +2292,19 @@ msgid "This is the end of the Broken Sword 1 Demo"
msgstr "Questa ш la fine della demo di Broken Sword 1"
#: engines/sword2/animation.cpp:435
-#, fuzzy
msgid ""
"PSX cutscenes found but ScummVM has been built without RGB color support"
msgstr ""
-"Sono state trovare scene di intermezzo DXA ma ScummVM ш stato compilato "
-"senza il supporto zlib"
+"Sono state trovare scene di intermezzo PSX ma ScummVM ш stato compilato "
+"senza il supporto colori RGB"
#: engines/sword2/sword2.cpp:79
msgid "Show object labels"
-msgstr ""
+msgstr "Mostra etichette oggetti"
#: engines/sword2/sword2.cpp:80
msgid "Show labels for objects on mouse hover"
-msgstr ""
+msgstr "Mostra etichette per gli oggetti al passaggio del mouse"
#: engines/parallaction/saveload.cpp:133
#, c-format
@@ -2453,9 +2446,8 @@ msgid "Keymap:"
msgstr "Mappa tasti:"
#: backends/keymapper/remap-dialog.cpp:66
-#, fuzzy
msgid " (Effective)"
-msgstr " (Attivo)"
+msgstr " (Efficace)"
#: backends/keymapper/remap-dialog.cpp:106
msgid " (Active)"
@@ -2463,7 +2455,7 @@ msgstr " (Attivo)"
#: backends/keymapper/remap-dialog.cpp:106
msgid " (Blocked)"
-msgstr ""
+msgstr " (Bloccato)"
#: backends/keymapper/remap-dialog.cpp:119
msgid " (Global)"
@@ -2567,7 +2559,7 @@ msgstr "Modalitр touchpad disattivata."
#: backends/platform/maemo/maemo.cpp:205
msgid "Click Mode"
-msgstr ""
+msgstr "Modalitр clic"
#: backends/platform/maemo/maemo.cpp:211
#: backends/platform/symbian/src/SymbianActions.cpp:42
@@ -2578,9 +2570,8 @@ msgid "Left Click"
msgstr "Clic sinistro"
#: backends/platform/maemo/maemo.cpp:214
-#, fuzzy
msgid "Middle Click"
-msgstr "Oggetto al centro a sinistra"
+msgstr "Clic centrale"
#: backends/platform/maemo/maemo.cpp:217
#: backends/platform/symbian/src/SymbianActions.cpp:43
@@ -3025,40 +3016,36 @@ msgid "Check for Updates..."
msgstr "Cerca aggiornamenti..."
#: backends/platform/bada/form.cpp:269
-#, fuzzy
msgid "Right Click Once"
-msgstr "Clic destro"
+msgstr "Un clic destro"
#: backends/platform/bada/form.cpp:277
-#, fuzzy
msgid "Move Only"
-msgstr "Solo voci"
+msgstr "Muovi soltanto"
#: backends/platform/bada/form.cpp:291
msgid "Escape Key"
-msgstr ""
+msgstr "Tasto Esc"
#: backends/platform/bada/form.cpp:296
-#, fuzzy
msgid "Game Menu"
-msgstr "Gioco"
+msgstr "Menu di gioco"
#: backends/platform/bada/form.cpp:301
-#, fuzzy
msgid "Show Keypad"
-msgstr "Mostra tastiera"
+msgstr "Mostra tastierino numerico"
#: backends/platform/bada/form.cpp:309
msgid "Control Mouse"
-msgstr ""
+msgstr "Controllo mouse"
#: backends/events/maemosdl/maemosdl-events.cpp:192
msgid "Clicking Enabled"
-msgstr ""
+msgstr "Clic attivato"
#: backends/events/maemosdl/maemosdl-events.cpp:192
msgid "Clicking Disabled"
-msgstr ""
+msgstr "Clic disattivato"
#~ msgid "Hercules Green"
#~ msgstr "Hercules verde"
diff --git a/po/nb_NO.po b/po/nb_NO.po
index 9dfc58331c..bc7b1720fa 100644
--- a/po/nb_NO.po
+++ b/po/nb_NO.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2012-06-24 18:06+0100\n"
-"PO-Revision-Date: 2011-04-25 22:56+0100\n"
-"Last-Translator: Einar Johan T. Sјmхen <einarjohants@gmail.com>\n"
+"POT-Creation-Date: 2012-07-08 12:25+0100\n"
+"PO-Revision-Date: 2012-07-04 02:19+0100\n"
+"Last-Translator: Einar Johan Sјmхen <einarjohants@gmail.com>\n"
"Language-Team: somaen <einarjohants@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=iso-8859-1\n"
@@ -81,7 +81,6 @@ msgid "Remap keys"
msgstr "Omkoble taster"
#: gui/gui-manager.cpp:129 base/main.cpp:307
-#, fuzzy
msgid "Toggle FullScreen"
msgstr "Veksle fullskjerm"
@@ -197,9 +196,8 @@ msgid "Platform:"
msgstr "Plattform:"
#: gui/launcher.cpp:231
-#, fuzzy
msgid "Engine"
-msgstr "Undersјk"
+msgstr "Motor"
#: gui/launcher.cpp:239 gui/options.cpp:1062 gui/options.cpp:1079
msgid "Graphics"
@@ -525,6 +523,7 @@ msgstr "Sјk fullfјrt!"
#, c-format
msgid "Discovered %d new games, ignored %d previously added games."
msgstr ""
+"Fant %d nye spill, ignorerte %d spill som har blitt lagt til tidligere."
#: gui/massadd.cpp:265
#, c-format
@@ -532,9 +531,10 @@ msgid "Scanned %d directories ..."
msgstr "Sjekket %d mapper ..."
#: gui/massadd.cpp:268
-#, fuzzy, c-format
+#, c-format
msgid "Discovered %d new games, ignored %d previously added games ..."
-msgstr "Fant %d nye spill ..."
+msgstr ""
+"Fant %d nye spill, ignorerte %d spill som har blitt lagt til tidligere..."
#: gui/options.cpp:78
msgid "Never"
@@ -584,19 +584,19 @@ msgstr "Ingen"
#: gui/options.cpp:382
msgid "Failed to apply some of the graphic options changes:"
-msgstr ""
+msgstr "Klarte ikke х aktivere enkelte av endringene i grafikkinstillinger:"
#: gui/options.cpp:394
msgid "the video mode could not be changed."
-msgstr ""
+msgstr "videomodusen kunne ikke endres."
#: gui/options.cpp:400
msgid "the fullscreen setting could not be changed"
-msgstr ""
+msgstr "fullskjermsinnstillingen kunne ikke endres"
#: gui/options.cpp:406
msgid "the aspect ratio setting could not be changed"
-msgstr ""
+msgstr "aspektrate-innstillingen kunne ikke endres"
#: gui/options.cpp:727
msgid "Graphics mode:"
@@ -891,9 +891,8 @@ msgid "Language of ScummVM GUI"
msgstr "Sprхk i ScummVM-GUIet"
#: gui/options.cpp:1347
-#, fuzzy
msgid "You have to restart ScummVM before your changes will take effect."
-msgstr "Du mх omstarte ScummVM for at endringene skal skje. "
+msgstr "Du mх starte ScummVM pх nytt for at endringene skal tre i kraft. "
#: gui/options.cpp:1360
msgid "Select directory for savegames"
@@ -1082,7 +1081,7 @@ msgstr "Spillmotor-plugin stјtter ikke lagrede tilstander"
#: common/error.cpp:71
msgid "User canceled"
-msgstr ""
+msgstr "Brukeren avbrјt"
#: common/error.cpp:75
msgid "Unknown error"
@@ -1091,15 +1090,16 @@ msgstr "Ukjent feil"
#: engines/advancedDetector.cpp:324
#, c-format
msgid "The game in '%s' seems to be unknown."
-msgstr ""
+msgstr "Spillet i '%s' ser ut til х vцre ukjent."
#: engines/advancedDetector.cpp:325
msgid "Please, report the following data to the ScummVM team along with name"
msgstr ""
+"Vennligst rapporter de fјlgende dataene til ScummVM-teamet sammen med navnet"
#: engines/advancedDetector.cpp:327
msgid "of the game you tried to add and its version/language/etc.:"
-msgstr ""
+msgstr "pх spillet du forsјkte х legge til, og dets versjon/sprхk/etc.:"
#: engines/dialogs.cpp:84
msgid "~R~esume"
@@ -1135,13 +1135,13 @@ msgid "~R~eturn to Launcher"
msgstr "~T~ilbake til oppstarter"
#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
-#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:728
+#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:735
msgid "Save game:"
msgstr "Lagret spill:"
#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
#: engines/scumm/dialogs.cpp:187 engines/cruise/menu.cpp:212
-#: engines/sci/engine/kfile.cpp:728
+#: engines/sci/engine/kfile.cpp:735
#: backends/platform/symbian/src/SymbianActions.cpp:44
#: backends/platform/wince/CEActionsPocket.cpp:43
#: backends/platform/wince/CEActionsPocket.cpp:267
@@ -1156,6 +1156,9 @@ msgid ""
"the README for basic information, and for instructions on how to obtain "
"further assistance."
msgstr ""
+"Beklager, men denne motoren stјtter for јyeblikket ikke hjelp i spillet. "
+"Vennligst se i README-filen for grunnleggende informasjon, og for "
+"instruksjoner om hvordan du kan fх ytterligere hjelp."
#: engines/dialogs.cpp:228
#, c-format
@@ -1163,6 +1166,8 @@ msgid ""
"Gamestate save failed (%s)! Please consult the README for basic information, "
"and for instructions on how to obtain further assistance."
msgstr ""
+"Lagring av spilltilstand feilet (%s)! Vennligst konsulter README-filen for "
+"grunnleggende informasjon og instruksjon om hvordan du fхr ytterligere hjelp."
#: engines/dialogs.cpp:301 engines/mohawk/dialogs.cpp:109
#: engines/mohawk/dialogs.cpp:174
@@ -1180,21 +1185,19 @@ msgstr "~T~aster"
#: engines/engine.cpp:235
msgid "Could not initialize color format."
-msgstr ""
+msgstr "Kunne ikke initalisere fargeformat."
#: engines/engine.cpp:243
-#, fuzzy
msgid "Could not switch to video mode: '"
-msgstr "Nхvцrende videomodus:"
+msgstr "Kunne ikke veksle til videomodus: '"
#: engines/engine.cpp:252
-#, fuzzy
msgid "Could not apply aspect ratio setting."
-msgstr "Veksle aspekt-rate korrigering"
+msgstr "Kunne ikke aktivere aspektrate-innstilling."
#: engines/engine.cpp:257
msgid "Could not apply fullscreen setting."
-msgstr ""
+msgstr "Kunne ikke aktivere fullskjermsinnstilling."
#: engines/engine.cpp:357
msgid ""
@@ -1204,6 +1207,11 @@ msgid ""
"the data files to your hard disk instead.\n"
"See the README file for details."
msgstr ""
+"Du ser ut til х spille dette spillet direkte fra\n"
+"CDen. Dette er kjent for х skape problemer,\n"
+"og det er derfor anbefalt at du kopierer\n"
+"datafilene til harddisken din istedet.\n"
+"Se README-filen for detaljer."
#: engines/engine.cpp:368
msgid ""
@@ -1227,97 +1235,97 @@ msgid ""
"ScummVM. As such, it is likely to be unstable, and any saves you make might "
"not work in future versions of ScummVM."
msgstr ""
+"ADVARSEL: Spillet du prјver х starte er ikke fullstendig stјttet av ScummVM. "
+"Derfor er det sannsynlig at det vil vцre ustabilt, og det er ikke sikkert at "
+"lagrede spill vil fortsette х fungere i fremtidige versjoner av ScummVM."
#: engines/engine.cpp:442
msgid "Start anyway"
-msgstr ""
+msgstr "Start allikevel"
#: engines/agi/detection.cpp:145 engines/dreamweb/detection.cpp:47
#: engines/sci/detection.cpp:390
msgid "Use original save/load screens"
-msgstr ""
+msgstr "Bruk originale lagre/laste-skjermer"
#: engines/agi/detection.cpp:146 engines/dreamweb/detection.cpp:48
#: engines/sci/detection.cpp:391
msgid "Use the original save/load screens, instead of the ScummVM ones"
-msgstr ""
+msgstr "Bruk de originale lagre/laste-skjermene, istedenfor ScummVM-variantene"
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:831
msgid "Restore game:"
msgstr "Gjennopprett spill:"
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:831
msgid "Restore"
msgstr "Gjenopprett"
#: engines/dreamweb/detection.cpp:57
-#, fuzzy
msgid "Use bright palette mode"
-msgstr "иvre hјyre gjenstand"
+msgstr "Bruk lys palettmodus"
#: engines/dreamweb/detection.cpp:58
msgid "Display graphics using the game's bright palette"
-msgstr ""
+msgstr "Vis grafikk med spillets lyse palett"
#: engines/sci/detection.cpp:370
msgid "EGA undithering"
msgstr "EGA av-dithering"
#: engines/sci/detection.cpp:371
-#, fuzzy
msgid "Enable undithering in EGA games"
-msgstr "Slхr av dithering i EGA-spill som stјtter det."
+msgstr "Aktiver av-dithering i EGA-spill"
#: engines/sci/detection.cpp:380
-#, fuzzy
msgid "Prefer digital sound effects"
-msgstr "Volum for spesielle lydeffekter"
+msgstr "Foretrekk digitale lydeffekter"
#: engines/sci/detection.cpp:381
msgid "Prefer digital sound effects instead of synthesized ones"
-msgstr ""
+msgstr "Foretrekk digitale lydeffekter fremfor syntetiske"
#: engines/sci/detection.cpp:400
-msgid "Use IMF/Yahama FB-01 for MIDI output"
-msgstr ""
+msgid "Use IMF/Yamaha FB-01 for MIDI output"
+msgstr "Bruk IMF/Yamaha-FB-01 for MIDI-output"
#: engines/sci/detection.cpp:401
msgid ""
-"Use an IBM Music Feature card or a Yahama FB-01 FM synth module for MIDI "
+"Use an IBM Music Feature card or a Yamaha FB-01 FM synth module for MIDI "
"output"
msgstr ""
#: engines/sci/detection.cpp:411
msgid "Use CD audio"
-msgstr ""
+msgstr "Bruk CD-lyd"
#: engines/sci/detection.cpp:412
msgid "Use CD audio instead of in-game audio, if available"
-msgstr ""
+msgstr "Bruk CD-lyd istedenfor spillets lyd, hvis tilgjengelig"
#: engines/sci/detection.cpp:422
msgid "Use Windows cursors"
-msgstr ""
+msgstr "Bruk Windows-muspekere"
#: engines/sci/detection.cpp:423
msgid ""
"Use the Windows cursors (smaller and monochrome) instead of the DOS ones"
-msgstr ""
+msgstr "Bruk Windows-muspekerene (mindre, og monokrome) isteden"
#: engines/sci/detection.cpp:433
-#, fuzzy
msgid "Use silver cursors"
-msgstr "Vanlig muspeker"
+msgstr "Bruk sјlvmuspekere"
#: engines/sci/detection.cpp:434
msgid ""
"Use the alternate set of silver cursors, instead of the normal golden ones"
msgstr ""
+"Bruk det alternative settet med sјlvmuspekere, istedenfor de normale gylne."
#: engines/scumm/dialogs.cpp:175
#, c-format
msgid "Insert Disk %c and Press Button to Continue."
-msgstr ""
+msgstr "Sett inn disk %c, og trykk Tast for х fortsette."
#: engines/scumm/dialogs.cpp:176
#, c-format
@@ -1331,25 +1339,23 @@ msgstr ""
#: engines/scumm/dialogs.cpp:178
msgid "Game Paused. Press SPACE to Continue."
-msgstr ""
+msgstr "Spill pauset. Trykk pх MELLOMROMstasten for х fortsette."
#. I18N: You may specify 'Yes' symbol at the end of the line, like this:
#. "Moechten Sie wirklich neu starten? (J/N)J"
#. Will react to J as 'Yes'
#: engines/scumm/dialogs.cpp:182
-#, fuzzy
msgid "Are you sure you want to restart? (Y/N)"
-msgstr " Er du sikker pх at du vil avslutte ?"
+msgstr "Er du sikker pх at du vil avslutte? (Y/N)"
#. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment
#: engines/scumm/dialogs.cpp:184
-#, fuzzy
msgid "Are you sure you want to quit? (Y/N)"
-msgstr " Er du sikker pх at du vil avslutte ?"
+msgstr "Er du sikker pх at du vil avslutte? (Y/N)"
#: engines/scumm/dialogs.cpp:189
msgid "Play"
-msgstr ""
+msgstr "Spill"
#: engines/scumm/dialogs.cpp:191 engines/scumm/help.cpp:82
#: engines/scumm/help.cpp:84
@@ -1366,38 +1372,37 @@ msgstr ""
#: engines/scumm/dialogs.cpp:194
msgid "You must enter a name"
-msgstr ""
+msgstr "Du mх skrive inn et navn"
#: engines/scumm/dialogs.cpp:195
msgid "The game was NOT saved (disk full?)"
-msgstr ""
+msgstr "Spillet ble IKKE lagret (full disk?)"
#: engines/scumm/dialogs.cpp:196
msgid "The game was NOT loaded"
-msgstr ""
+msgstr "Spillet ble IKKE lastet"
#: engines/scumm/dialogs.cpp:197
#, c-format
msgid "Saving '%s'"
-msgstr ""
+msgstr "Lagrer '%s'"
#: engines/scumm/dialogs.cpp:198
#, c-format
msgid "Loading '%s'"
-msgstr ""
+msgstr "Laster '%s'"
#: engines/scumm/dialogs.cpp:199
msgid "Name your SAVE game"
-msgstr ""
+msgstr "Gi det LAGREDE spillet ditt et navn"
#: engines/scumm/dialogs.cpp:200
-#, fuzzy
msgid "Select a game to LOAD"
-msgstr "Velg et tema"
+msgstr "Velg et spill for LASTING"
#: engines/scumm/dialogs.cpp:201
msgid "Game title)"
-msgstr ""
+msgstr "Spilltittel)"
#. I18N: Previous page button
#: engines/scumm/dialogs.cpp:287
@@ -1415,25 +1420,21 @@ msgid "~C~lose"
msgstr "~L~ukk"
#: engines/scumm/dialogs.cpp:597
-#, fuzzy
msgid "Speech Only"
-msgstr "Tale"
+msgstr "Kun tale"
#: engines/scumm/dialogs.cpp:598
-#, fuzzy
msgid "Speech and Subtitles"
-msgstr "Undertekster"
+msgstr "Tale og undertekster"
#: engines/scumm/dialogs.cpp:599
-#, fuzzy
msgid "Subtitles Only"
-msgstr "Undertekster"
+msgstr "Kun undertekster"
#: engines/scumm/dialogs.cpp:607
-#, fuzzy
msgctxt "lowres"
msgid "Speech & Subs"
-msgstr "Tale"
+msgstr "Tekst & Tale"
#: engines/scumm/dialogs.cpp:653
msgid "Select a Proficiency Level."
@@ -1441,20 +1442,19 @@ msgstr ""
#: engines/scumm/dialogs.cpp:655
msgid "Refer to your Loom(TM) manual for help."
-msgstr ""
+msgstr "Referer til Loom(TM)-hхndboka di for hjelp."
#: engines/scumm/dialogs.cpp:658
-#, fuzzy
msgid "Standard"
-msgstr "Standard (16bpp)"
+msgstr "Standard"
#: engines/scumm/dialogs.cpp:659
msgid "Practice"
-msgstr ""
+msgstr "Trening"
#: engines/scumm/dialogs.cpp:660
msgid "Expert"
-msgstr ""
+msgstr "Ekspert"
#: engines/scumm/help.cpp:73
msgid "Common keyboard commands:"
@@ -1587,9 +1587,8 @@ msgid " since they may cause crashes"
msgstr " de kan forхrsake krцsj, eller"
#: engines/scumm/help.cpp:110
-#, fuzzy
msgid " or incorrect game behavior."
-msgstr " feilaktig spilloppfјrsel."
+msgstr " eller feilaktig spilloppfјrsel."
#: engines/scumm/help.cpp:114
msgid "Spinning drafts on the keyboard:"
@@ -2032,16 +2031,15 @@ msgstr "~O~verganger aktivert"
#. I18N: Drop book page
#: engines/mohawk/dialogs.cpp:95
msgid "~D~rop Page"
-msgstr ""
+msgstr "~D~ropp Side"
#: engines/mohawk/dialogs.cpp:99
msgid "~S~how Map"
-msgstr ""
+msgstr "Vi~s~ Kart"
#: engines/mohawk/dialogs.cpp:105
-#, fuzzy
msgid "~M~ain Menu"
-msgstr "ScummVM Hovedmeny"
+msgstr "Hoved~m~eny"
#: engines/mohawk/dialogs.cpp:172
msgid "~W~ater Effect Enabled"
@@ -2054,46 +2052,30 @@ msgstr ""
#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1287
#: engines/tinsel/saveload.cpp:502
-#, fuzzy
msgid "Failed to load game state from file."
-msgstr ""
-"Klarte ikke хpne spilltilstand fra fil:\n"
-"\n"
-"%s"
+msgstr "Klarte ikke хpne spilltilstand fra fil."
#: engines/gob/inter_v2.cpp:1357 engines/tinsel/saveload.cpp:515
-#, fuzzy
msgid "Failed to save game state to file."
-msgstr ""
-"Klarte ikke lagre spilltilstand til fil:\n"
-"\n"
-"%s"
+msgstr "Klarte ikke lagre spilltilstand fra fil."
#: engines/gob/inter_v5.cpp:107
-#, fuzzy
msgid "Failed to delete file."
-msgstr ""
-"Klarte ikke lagre spilltilstand til fil:\n"
-"\n"
-"%s"
+msgstr "Klarte ikke х slette fil."
#: engines/groovie/script.cpp:420
-#, fuzzy
msgid "Failed to save game"
-msgstr ""
-"Klarte ikke lagre spilltilstand til fil:\n"
-"\n"
-"%s"
+msgstr "Klarte ikke х lagre spill."
#. I18N: Studio audience adds an applause and cheering sounds whenever
#. Malcolm makes a joke.
#: engines/kyra/detection.cpp:62
msgid "Studio audience"
-msgstr ""
+msgstr "Studiopublikum"
#: engines/kyra/detection.cpp:63
msgid "Enable studio audience"
-msgstr ""
+msgstr "Aktiver studiopublikum"
#. I18N: This option allows the user to skip text and cutscenes.
#: engines/kyra/detection.cpp:73
@@ -2102,39 +2084,37 @@ msgstr ""
#: engines/kyra/detection.cpp:74
msgid "Allow text and cutscenes to be skipped"
-msgstr ""
+msgstr "Tillat х hoppe over tekst og kutt-scener"
#. I18N: Helium mode makes people sound like they've inhaled Helium.
#: engines/kyra/detection.cpp:84
msgid "Helium mode"
-msgstr ""
+msgstr "Helium-modus"
#: engines/kyra/detection.cpp:85
-#, fuzzy
msgid "Enable helium mode"
-msgstr "Aktiver Roland GS-modus"
+msgstr "Aktiver helium-modus"
#. I18N: When enabled, this option makes scrolling smoother when
#. changing from one screen to another.
#: engines/kyra/detection.cpp:99
msgid "Smooth scrolling"
-msgstr ""
+msgstr "Myk scrolling"
#: engines/kyra/detection.cpp:100
msgid "Enable smooth scrolling when walking"
-msgstr ""
+msgstr "Aktiver myk scrolling nхr man gхr"
#. I18N: When enabled, this option changes the cursor when it floats to the
#. edge of the screen to a directional arrow. The player can then click to
#. walk towards that direction.
#: engines/kyra/detection.cpp:112
-#, fuzzy
msgid "Floating cursors"
-msgstr "Vanlig muspeker"
+msgstr "Flytende muspekere"
#: engines/kyra/detection.cpp:113
msgid "Enable floating cursors"
-msgstr ""
+msgstr "Aktiver flytende muspekere"
#. I18N: HP stands for Hit Points
#: engines/kyra/detection.cpp:127
@@ -2147,52 +2127,47 @@ msgstr ""
#: engines/kyra/lol.cpp:478
msgid "Attack 1"
-msgstr ""
+msgstr "Angrep 1"
#: engines/kyra/lol.cpp:479
msgid "Attack 2"
-msgstr ""
+msgstr "Angrep 2"
#: engines/kyra/lol.cpp:480
msgid "Attack 3"
-msgstr ""
+msgstr "Angrep 3"
#: engines/kyra/lol.cpp:481
msgid "Move Forward"
-msgstr ""
+msgstr "Beveg Fremover"
#: engines/kyra/lol.cpp:482
msgid "Move Back"
-msgstr ""
+msgstr "Beveg Bakover"
#: engines/kyra/lol.cpp:483
msgid "Slide Left"
-msgstr ""
+msgstr "Skli mot Venstre"
#: engines/kyra/lol.cpp:484
-#, fuzzy
msgid "Slide Right"
-msgstr "Hјyre"
+msgstr "Skli mot Hјyre"
#: engines/kyra/lol.cpp:485
-#, fuzzy
msgid "Turn Left"
-msgstr "Slх av"
+msgstr "Svin til Venstre"
#: engines/kyra/lol.cpp:486
-#, fuzzy
msgid "Turn Right"
-msgstr "Peker hјyre"
+msgstr "Sving til Hјyre"
#: engines/kyra/lol.cpp:487
-#, fuzzy
msgid "Rest"
-msgstr "Gjenopprett"
+msgstr "Hvil"
#: engines/kyra/lol.cpp:488
-#, fuzzy
msgid "Options"
-msgstr "~V~alg"
+msgstr "Valg"
#: engines/kyra/lol.cpp:489
#, fuzzy
@@ -2200,27 +2175,35 @@ msgid "Choose Spell"
msgstr "Velg"
#: engines/kyra/sound_midi.cpp:475
+#, fuzzy
msgid ""
"You appear to be using a General MIDI device,\n"
"but your game only supports Roland MT32 MIDI.\n"
"We try to map the Roland MT32 instruments to\n"
-"General MIDI ones. After all it might happen\n"
-"that a few tracks will not be correctly played."
+"General MIDI ones. It is still possible that\n"
+"some tracks sound incorrect."
msgstr ""
+"Du ser ut til х bruke en General MIDI-enhet,\n"
+"men spillet ditt stјtter bare Roland MT32-MIDI.\n"
+"Vi forsјker х koble Roland MT32-instrumentene til\n"
+"General MIDI-instrumentene. Allikevel, kan det\n"
+"skje at enkelte spor ikke vil spilles riktig."
#: engines/queen/queen.cpp:59 engines/sky/detection.cpp:44
msgid "Floppy intro"
-msgstr ""
+msgstr "Diskett-intro"
#: engines/queen/queen.cpp:60 engines/sky/detection.cpp:45
msgid "Use the floppy version's intro (CD version only)"
-msgstr ""
+msgstr "Bruk diskettversjonens intro (Kun for CD-versjon)"
#: engines/sky/compact.cpp:130
msgid ""
"Unable to find \"sky.cpt\" file!\n"
"Please download it from www.scummvm.org"
msgstr ""
+"Fant ikke filen \"sky.cpt\"!\n"
+"Vennligst last den ned fra www.scummvm.org"
#: engines/sky/compact.cpp:141
msgid ""
@@ -2256,6 +2239,13 @@ msgid ""
"Press OK to convert them now, otherwise you will be asked again the next "
"time you start the game.\n"
msgstr ""
+"ScummVM oppdaget at du har gamle lagrede spill for Broken Sword 1 som bјr "
+"konverteres.\n"
+"Det gamle formatet for lagrede spill stјttes ikke lengre, sх du vil ikke "
+"vцre i stand til х laste de lagrede spillene,\n"
+"med mindre du konverterer dem.\n"
+"Trykk OK for х konvertere dem nх, ellers vil du bli spurt igjen neste gang "
+"du starter spillet."
#: engines/sword1/control.cpp:1232
#, c-format
@@ -2266,15 +2256,15 @@ msgstr ""
#: engines/sword1/control.cpp:1235
msgid "Keep the old one"
-msgstr ""
+msgstr "Behold den gamle"
#: engines/sword1/control.cpp:1235
msgid "Keep the new one"
-msgstr ""
+msgstr "Behold den nye"
#: engines/sword1/logic.cpp:1633
msgid "This is the end of the Broken Sword 1 Demo"
-msgstr ""
+msgstr "Dette er slutten pх Broken Sword 1-demoen"
#: engines/sword2/animation.cpp:435
msgid ""
@@ -2297,14 +2287,12 @@ msgid ""
msgstr ""
#: engines/parallaction/saveload.cpp:204
-#, fuzzy
msgid "Loading game..."
-msgstr "Хpne spill:"
+msgstr "Laster spill..."
#: engines/parallaction/saveload.cpp:219
-#, fuzzy
msgid "Saving game..."
-msgstr "Lagret spill:"
+msgstr "Lagrer spill..."
#: engines/parallaction/saveload.cpp:272
msgid ""
@@ -2315,10 +2303,17 @@ msgid ""
"\n"
"Press OK to convert them now, otherwise you will be asked next time.\n"
msgstr ""
+"ScummVM oppdaget at du har gamle lagrede spill for Nippon Safes som bјr "
+"omdјpes.\n"
+"De gamle navnene stјttes ikke lengre, sх du vil ikke vцre i stand til х "
+"laste de lagrede spillene,\n"
+"med mindre du konverterer dem.\n"
+"Trykk OK for х konvertere dem nх, ellers vil du bli spurt igjen neste gang "
+"du starter spillet."
#: engines/parallaction/saveload.cpp:319
msgid "ScummVM successfully converted all your savefiles."
-msgstr ""
+msgstr "ScummVM konverterte alle de lagrede spillene dine uten problemer."
#: engines/parallaction/saveload.cpp:321
msgid ""
@@ -2327,6 +2322,10 @@ msgid ""
"\n"
"Please report to the team."
msgstr ""
+"ScummVM skrev ut noen advarsler i konsollvinduet ditt og kan ikke garantere "
+"at alle filene dine har blitt konvertert.\n"
+"\n"
+"Vennligst rapporter dette til teamet."
#: audio/fmopl.cpp:49
msgid "MAME OPL emulator"
@@ -2342,11 +2341,13 @@ msgid ""
"The selected audio device '%s' was not found (e.g. might be turned off or "
"disconnected)."
msgstr ""
+"Den valgte lydenheten '%s' ble ikke funnet (den kan f.eks. vцre avslхtt "
+"eller frakoblet)."
#: audio/mididrv.cpp:209 audio/mididrv.cpp:221 audio/mididrv.cpp:257
#: audio/mididrv.cpp:272
msgid "Attempting to fall back to the next available device..."
-msgstr ""
+msgstr "Forsјker х falle tilbake pх den neste tilgjengelige enheten..."
#: audio/mididrv.cpp:221
#, c-format
@@ -2354,6 +2355,8 @@ msgid ""
"The selected audio device '%s' cannot be used. See log file for more "
"information."
msgstr ""
+"Den valgte lydenheten '%s' kan ikke brukes. Se logg-filen for mer "
+"informasjon."
#: audio/mididrv.cpp:257
#, c-format
@@ -2361,6 +2364,8 @@ msgid ""
"The preferred audio device '%s' was not found (e.g. might be turned off or "
"disconnected)."
msgstr ""
+"Den foretrukne lydenheten '%s' ble ikke funnet (den kan f.eks. vцre avslхtt "
+"eller frakoblet)."
#: audio/mididrv.cpp:272
#, c-format
@@ -2368,6 +2373,8 @@ msgid ""
"The preferred audio device '%s' cannot be used. See log file for more "
"information."
msgstr ""
+"Den foretrukne lydenheten '%s' kan ikke brukes. Se i logg-filen for mer "
+"informasjon."
#: audio/null.h:43
msgid "No music"
@@ -2390,7 +2397,6 @@ msgid "C64 Audio Emulator"
msgstr "C64 Lydemulator"
#: audio/softsynth/mt32.cpp:293
-#, fuzzy
msgid "Initializing MT-32 Emulator"
msgstr "Initialiserer MT-32-Emulator"
@@ -2421,7 +2427,7 @@ msgstr " (Aktiv)"
#: backends/keymapper/remap-dialog.cpp:106
msgid " (Blocked)"
-msgstr ""
+msgstr " (Blokkert)"
#: backends/keymapper/remap-dialog.cpp:119
msgid " (Global)"
@@ -2508,14 +2514,12 @@ msgid "Disable power off"
msgstr "Deaktiver strјmsparing"
#: backends/platform/iphone/osys_events.cpp:300
-#, fuzzy
msgid "Mouse-click-and-drag mode enabled."
-msgstr "Touchpad-modus aktivert."
+msgstr "Mus-klikk-og-dra-modus aktivert."
#: backends/platform/iphone/osys_events.cpp:302
-#, fuzzy
msgid "Mouse-click-and-drag mode disabled."
-msgstr "Touchpad-modus deaktivert."
+msgstr "Mus-klikk-og-dra-modus-deaktivert."
#: backends/platform/iphone/osys_events.cpp:313
msgid "Touchpad mode enabled."
@@ -2527,7 +2531,7 @@ msgstr "Touchpad-modus deaktivert."
#: backends/platform/maemo/maemo.cpp:205
msgid "Click Mode"
-msgstr ""
+msgstr "Klikkmodus"
#: backends/platform/maemo/maemo.cpp:211
#: backends/platform/symbian/src/SymbianActions.cpp:42
@@ -2538,9 +2542,8 @@ msgid "Left Click"
msgstr "Venstreklikk"
#: backends/platform/maemo/maemo.cpp:214
-#, fuzzy
msgid "Middle Click"
-msgstr "Midtre venstre gjenstand"
+msgstr "Midtklikk"
#: backends/platform/maemo/maemo.cpp:217
#: backends/platform/symbian/src/SymbianActions.cpp:43
@@ -2550,7 +2553,6 @@ msgid "Right Click"
msgstr "Hјyreklikk"
#: backends/platform/sdl/macosx/appmenu_osx.mm:78
-#, fuzzy
msgid "Hide ScummVM"
msgstr "Skjul ScummVM"
@@ -2582,26 +2584,22 @@ msgstr "Normal (ingen skalering)"
#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2135
#: backends/graphics/openglsdl/openglsdl-graphics.cpp:533
-#, fuzzy
msgid "Enabled aspect ratio correction"
-msgstr "Veksle aspekt-rate korrigering"
+msgstr "Aspekt-rate korrigering aktivert"
#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2141
#: backends/graphics/openglsdl/openglsdl-graphics.cpp:538
-#, fuzzy
msgid "Disabled aspect ratio correction"
-msgstr "Veksle aspekt-rate korrigering"
+msgstr "Aspekt-rate korrigering deaktivert"
#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2196
-#, fuzzy
msgid "Active graphics filter:"
-msgstr "Bytt grafikkfiltre"
+msgstr "Aktivt grafikkfilter:"
#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2238
#: backends/graphics/openglsdl/openglsdl-graphics.cpp:477
-#, fuzzy
msgid "Windowed mode"
-msgstr "Tegnemodus:"
+msgstr "Vindusmodus"
#: backends/graphics/opengl/opengl-graphics.cpp:135
msgid "OpenGL Normal"
@@ -2616,21 +2614,20 @@ msgid "OpenGL Original"
msgstr "OpenGL Original"
#: backends/graphics/openglsdl/openglsdl-graphics.cpp:415
-#, fuzzy
msgid "Current display mode"
-msgstr "Nхvцrende videomodus:"
+msgstr "Nхvцrende videomodus"
#: backends/graphics/openglsdl/openglsdl-graphics.cpp:428
msgid "Current scale"
-msgstr ""
+msgstr "Nхvцrende skala"
#: backends/graphics/openglsdl/openglsdl-graphics.cpp:558
msgid "Active filter mode: Linear"
-msgstr ""
+msgstr "Aktiv filtermodus: Linjцr"
#: backends/graphics/openglsdl/openglsdl-graphics.cpp:560
msgid "Active filter mode: Nearest"
-msgstr ""
+msgstr "Aktiv filtermodus: Nцrmeste"
#: backends/platform/symbian/src/SymbianActions.cpp:38
#: backends/platform/wince/CEActionsSmartphone.cpp:39
@@ -2714,7 +2711,7 @@ msgstr "Horisontal underscan:"
#: backends/platform/wii/options.cpp:66
msgid "Vertical underscan:"
-msgstr "Vertikal underscan"
+msgstr "Vertikal underscan:"
#: backends/platform/wii/options.cpp:71
msgid "Input"
@@ -2813,17 +2810,15 @@ msgid "Network down"
msgstr "Nettverket er nede"
#: backends/platform/wii/options.cpp:178
-#, fuzzy
msgid "Initializing network"
msgstr "Initialiserer nettverk"
#: backends/platform/wii/options.cpp:182
-#, fuzzy
msgid "Timeout while initializing network"
msgstr "Timeout under initialisering av nettverk"
#: backends/platform/wii/options.cpp:186
-#, fuzzy, c-format
+#, c-format
msgid "Network not initialized (%d)"
msgstr "Nettverk ikke initialisert (%d)"
@@ -2945,83 +2940,74 @@ msgstr ""
"inventaret"
#: backends/events/default/default-events.cpp:191
-#, fuzzy
msgid "Do you really want to return to the Launcher?"
-msgstr "Vil du virkelig slette dette lagrede spillet?"
+msgstr "Vil du virkelig returnere til oppstarteren?"
#: backends/events/default/default-events.cpp:191
-#, fuzzy
msgid "Launcher"
-msgstr "Slх"
+msgstr "Oppstarter"
#: backends/events/default/default-events.cpp:213
-#, fuzzy
msgid "Do you really want to quit?"
-msgstr "Vil du avslutte?"
+msgstr "Vil du virkelig avslutte?"
#: backends/events/gph/gph-events.cpp:338
#: backends/events/gph/gph-events.cpp:381
#: backends/events/openpandora/op-events.cpp:139
msgid "Touchscreen 'Tap Mode' - Left Click"
-msgstr ""
+msgstr "Touchskjerm 'Tapmodus' - Venstreklikk"
#: backends/events/gph/gph-events.cpp:340
#: backends/events/gph/gph-events.cpp:383
#: backends/events/openpandora/op-events.cpp:141
msgid "Touchscreen 'Tap Mode' - Right Click"
-msgstr ""
+msgstr "Touchskjerm 'Tapmodus' - Hјyreklikk"
#: backends/events/gph/gph-events.cpp:342
#: backends/events/gph/gph-events.cpp:385
#: backends/events/openpandora/op-events.cpp:143
msgid "Touchscreen 'Tap Mode' - Hover (No Click)"
-msgstr ""
+msgstr "Touchskjerm 'Tapmodus' - Sveve (Ingen Klikk)"
#: backends/events/gph/gph-events.cpp:362
-#, fuzzy
msgid "Maximum Volume"
-msgstr "Volum"
+msgstr "Maksimalt Volum"
#: backends/events/gph/gph-events.cpp:364
msgid "Increasing Volume"
-msgstr ""
+msgstr "иker volum"
#: backends/events/gph/gph-events.cpp:370
-#, fuzzy
msgid "Minimal Volume"
-msgstr "Volum"
+msgstr "Minimalt Volum"
#: backends/events/gph/gph-events.cpp:372
msgid "Decreasing Volume"
-msgstr ""
+msgstr "Senker volum"
#: backends/updates/macosx/macosx-updates.mm:65
msgid "Check for Updates..."
-msgstr ""
+msgstr "Sjekk for oppdateringer..."
#: backends/platform/bada/form.cpp:269
-#, fuzzy
msgid "Right Click Once"
-msgstr "Hјyreklikk"
+msgstr "Hјyreklikk щn gang"
#: backends/platform/bada/form.cpp:277
-#, fuzzy
msgid "Move Only"
-msgstr "Tale"
+msgstr "Kun Beveg"
#: backends/platform/bada/form.cpp:291
msgid "Escape Key"
-msgstr ""
+msgstr "ESC-tast"
#: backends/platform/bada/form.cpp:296
-#, fuzzy
msgid "Game Menu"
-msgstr "Spill"
+msgstr "Spillmeny"
#: backends/platform/bada/form.cpp:301
-#, fuzzy
msgid "Show Keypad"
-msgstr "Vis tastatur"
+msgstr "Vis talltastatur"
#: backends/platform/bada/form.cpp:309
msgid "Control Mouse"
@@ -3029,11 +3015,11 @@ msgstr ""
#: backends/events/maemosdl/maemosdl-events.cpp:192
msgid "Clicking Enabled"
-msgstr ""
+msgstr "Klikking aktivert"
#: backends/events/maemosdl/maemosdl-events.cpp:192
msgid "Clicking Disabled"
-msgstr ""
+msgstr "Klikking deaktivert"
#~ msgid "Hercules Green"
#~ msgstr "Hercules Grјnn"
@@ -3049,7 +3035,6 @@ msgstr ""
#~ msgid "Hercules Amber"
#~ msgstr "Hercules Oransje"
-#, fuzzy
#~ msgid "Save game failed!"
#~ msgstr "Lagret spill:"
diff --git a/po/nn_NO.po b/po/nn_NO.po
index fe0c1d1106..a88637b7c0 100644
--- a/po/nn_NO.po
+++ b/po/nn_NO.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2012-06-24 18:06+0100\n"
+"POT-Creation-Date: 2012-07-08 12:25+0100\n"
"PO-Revision-Date: 2011-04-25 23:07+0100\n"
"Last-Translator: Einar Johan T. Sјmхen <einarjohants@gmail.com>\n"
"Language-Team: somaen <einarjohants@gmail.com>\n"
@@ -1135,13 +1135,13 @@ msgid "~R~eturn to Launcher"
msgstr "~T~ilbake til oppstarter"
#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
-#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:728
+#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:735
msgid "Save game:"
msgstr "Lagra spel:"
#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
#: engines/scumm/dialogs.cpp:187 engines/cruise/menu.cpp:212
-#: engines/sci/engine/kfile.cpp:728
+#: engines/sci/engine/kfile.cpp:735
#: backends/platform/symbian/src/SymbianActions.cpp:44
#: backends/platform/wince/CEActionsPocket.cpp:43
#: backends/platform/wince/CEActionsPocket.cpp:267
@@ -1242,11 +1242,11 @@ msgstr ""
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr ""
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:831
msgid "Restore game:"
msgstr "Gjenopprett spel:"
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:831
msgid "Restore"
msgstr "Gjenopprett"
@@ -1276,12 +1276,12 @@ msgid "Prefer digital sound effects instead of synthesized ones"
msgstr ""
#: engines/sci/detection.cpp:400
-msgid "Use IMF/Yahama FB-01 for MIDI output"
+msgid "Use IMF/Yamaha FB-01 for MIDI output"
msgstr ""
#: engines/sci/detection.cpp:401
msgid ""
-"Use an IBM Music Feature card or a Yahama FB-01 FM synth module for MIDI "
+"Use an IBM Music Feature card or a Yamaha FB-01 FM synth module for MIDI "
"output"
msgstr ""
@@ -2178,8 +2178,8 @@ msgid ""
"You appear to be using a General MIDI device,\n"
"but your game only supports Roland MT32 MIDI.\n"
"We try to map the Roland MT32 instruments to\n"
-"General MIDI ones. After all it might happen\n"
-"that a few tracks will not be correctly played."
+"General MIDI ones. It is still possible that\n"
+"some tracks sound incorrect."
msgstr ""
#: engines/queen/queen.cpp:59 engines/sky/detection.cpp:44
diff --git a/po/pl_PL.po b/po/pl_PL.po
index da089c5026..5d3655f8b6 100644
--- a/po/pl_PL.po
+++ b/po/pl_PL.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2012-06-24 18:06+0100\n"
+"POT-Creation-Date: 2012-07-08 12:25+0100\n"
"PO-Revision-Date: 2011-10-24 21:14+0100\n"
"Last-Translator: MichaГ ZiБbkowski <mziab@o2.pl>\n"
"Language-Team: Grajpopolsku.pl <grajpopolsku@gmail.com>\n"
@@ -1134,13 +1134,13 @@ msgid "~R~eturn to Launcher"
msgstr "~P~owrѓt do launchera"
#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
-#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:728
+#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:735
msgid "Save game:"
msgstr "Zapis:"
#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
#: engines/scumm/dialogs.cpp:187 engines/cruise/menu.cpp:212
-#: engines/sci/engine/kfile.cpp:728
+#: engines/sci/engine/kfile.cpp:735
#: backends/platform/symbian/src/SymbianActions.cpp:44
#: backends/platform/wince/CEActionsPocket.cpp:43
#: backends/platform/wince/CEActionsPocket.cpp:267
@@ -1257,11 +1257,11 @@ msgstr ""
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr ""
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:831
msgid "Restore game:"
msgstr "Wznѓw grъ:"
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:831
msgid "Restore"
msgstr "Wznѓw"
@@ -1293,12 +1293,12 @@ msgid "Prefer digital sound effects instead of synthesized ones"
msgstr ""
#: engines/sci/detection.cpp:400
-msgid "Use IMF/Yahama FB-01 for MIDI output"
+msgid "Use IMF/Yamaha FB-01 for MIDI output"
msgstr ""
#: engines/sci/detection.cpp:401
msgid ""
-"Use an IBM Music Feature card or a Yahama FB-01 FM synth module for MIDI "
+"Use an IBM Music Feature card or a Yamaha FB-01 FM synth module for MIDI "
"output"
msgstr ""
@@ -2192,12 +2192,13 @@ msgid "Choose Spell"
msgstr "Wybierz"
#: engines/kyra/sound_midi.cpp:475
+#, fuzzy
msgid ""
"You appear to be using a General MIDI device,\n"
"but your game only supports Roland MT32 MIDI.\n"
"We try to map the Roland MT32 instruments to\n"
-"General MIDI ones. After all it might happen\n"
-"that a few tracks will not be correctly played."
+"General MIDI ones. It is still possible that\n"
+"some tracks sound incorrect."
msgstr ""
"WyglБda na to, Пe uПywasz urzБdzenia General MIDI, ale gra obsГuguje tylko "
"MIDI Roland MT32.\n"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index cb0c50a7c8..ac60a814e2 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2012-06-24 18:06+0100\n"
+"POT-Creation-Date: 2012-07-08 12:25+0100\n"
"PO-Revision-Date: 2011-10-21 21:30-0300\n"
"Last-Translator: Saulo Benigno <saulobenigno@gmail.com>\n"
"Language-Team: ScummBR (www.scummbr.com) <scummbr@yahoo.com.br>\n"
@@ -1146,13 +1146,13 @@ msgid "~R~eturn to Launcher"
msgstr "~V~oltar ao menu"
#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
-#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:728
+#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:735
msgid "Save game:"
msgstr "Salvar jogo:"
#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
#: engines/scumm/dialogs.cpp:187 engines/cruise/menu.cpp:212
-#: engines/sci/engine/kfile.cpp:728
+#: engines/sci/engine/kfile.cpp:735
#: backends/platform/symbian/src/SymbianActions.cpp:44
#: backends/platform/wince/CEActionsPocket.cpp:43
#: backends/platform/wince/CEActionsPocket.cpp:267
@@ -1273,11 +1273,11 @@ msgstr ""
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr ""
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:831
msgid "Restore game:"
msgstr "Restaurar jogo:"
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:831
msgid "Restore"
msgstr "Restaurar"
@@ -1309,12 +1309,12 @@ msgid "Prefer digital sound effects instead of synthesized ones"
msgstr ""
#: engines/sci/detection.cpp:400
-msgid "Use IMF/Yahama FB-01 for MIDI output"
+msgid "Use IMF/Yamaha FB-01 for MIDI output"
msgstr ""
#: engines/sci/detection.cpp:401
msgid ""
-"Use an IBM Music Feature card or a Yahama FB-01 FM synth module for MIDI "
+"Use an IBM Music Feature card or a Yamaha FB-01 FM synth module for MIDI "
"output"
msgstr ""
@@ -2216,12 +2216,13 @@ msgid "Choose Spell"
msgstr "Escolher"
#: engines/kyra/sound_midi.cpp:475
+#, fuzzy
msgid ""
"You appear to be using a General MIDI device,\n"
"but your game only supports Roland MT32 MIDI.\n"
"We try to map the Roland MT32 instruments to\n"
-"General MIDI ones. After all it might happen\n"
-"that a few tracks will not be correctly played."
+"General MIDI ones. It is still possible that\n"
+"some tracks sound incorrect."
msgstr ""
"Vocъ parece estar usando um dispositivo General MIDI,\n"
"mas, o jogo sѓ suporta Roland MT32 MIDI.\n"
diff --git a/po/ru_RU.po b/po/ru_RU.po
index 5d5f8dabf4..019acbddbc 100644
--- a/po/ru_RU.po
+++ b/po/ru_RU.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2012-06-24 18:06+0100\n"
-"PO-Revision-Date: 2012-02-16 13:09+0200+0200\n"
+"POT-Creation-Date: 2012-07-08 12:25+0100\n"
+"PO-Revision-Date: 2012-07-08 22:00+0200+0200\n"
"Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n"
"Language-Team: Russian\n"
"MIME-Version: 1.0\n"
@@ -193,9 +193,8 @@ msgid "Platform:"
msgstr "Платформа:"
#: gui/launcher.cpp:231
-#, fuzzy
msgid "Engine"
-msgstr "Проверить"
+msgstr "Движок"
#: gui/launcher.cpp:239 gui/options.cpp:1062 gui/options.cpp:1079
msgid "Graphics"
@@ -689,7 +688,7 @@ msgstr "SoundFont:"
#: gui/options.cpp:849 gui/options.cpp:851 gui/options.cpp:852
msgid "SoundFont is supported by some audio cards, Fluidsynth and Timidity"
msgstr ""
-"SoundFontы поддердживаются некоторыми звуковыми картами, Fluidsynth и "
+"SoundFontы поддерживаются некоторыми звуковыми картами, Fluidsynth и "
"Timidity"
#: gui/options.cpp:851
@@ -716,7 +715,7 @@ msgstr "Устр. MT-32:"
#: gui/options.cpp:870
msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
msgstr ""
-"Указывает звуковое устройство по умолчания для вывода на Roland MT-32/LAPC1/"
+"Указывает звуковое устройство по умолчанию для вывода на Roland MT-32/LAPC1/"
"CM32l/CM64"
#: gui/options.cpp:875
@@ -743,7 +742,7 @@ msgstr "Включить режим Roland GS"
#: gui/options.cpp:880
msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack"
msgstr ""
-"Выключает маппинг General MIDI для игр с звуковой дорожкой для Roland MT-32"
+"Выключает сопоставление General MIDI для игр с звуковой дорожкой для Roland MT-32"
#: gui/options.cpp:889
msgid "Don't use Roland MT-32 music"
@@ -922,7 +921,7 @@ msgid ""
"The theme you selected does not support your current language. If you want "
"to use this theme you need to switch to another language first."
msgstr ""
-"Тема, выбранная вами, не поддерживает выбранный язык. Если вы хотите "
+"Тема, выбранная вами, не поддерживает текущий язык. Если вы хотите "
"использовать эту тему, вам необходимо сначала переключиться на другой язык."
#: gui/saveload.cpp:59 gui/saveload.cpp:257
@@ -1138,13 +1137,13 @@ msgid "~R~eturn to Launcher"
msgstr "~В~ главное меню"
#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
-#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:728
+#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:735
msgid "Save game:"
msgstr "Сохранить игру:"
#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
#: engines/scumm/dialogs.cpp:187 engines/cruise/menu.cpp:212
-#: engines/sci/engine/kfile.cpp:728
+#: engines/sci/engine/kfile.cpp:735
#: backends/platform/symbian/src/SymbianActions.cpp:44
#: backends/platform/wince/CEActionsPocket.cpp:43
#: backends/platform/wince/CEActionsPocket.cpp:267
@@ -1159,17 +1158,17 @@ msgid ""
"the README for basic information, and for instructions on how to obtain "
"further assistance."
msgstr ""
-"Просим прощения, но этот движое пока не предоставляет помощи внутри игры. "
+"Просим прощения, но этот движок пока не предоставляет помощи внутри игры. "
"Пожалуйста, обратитесь в файл README за базовой информацией, а также "
"инструкциями о том, как получить дальнейшую помощь."
#: engines/dialogs.cpp:228
-#, fuzzy, c-format
+#, c-format
msgid ""
"Gamestate save failed (%s)! Please consult the README for basic information, "
"and for instructions on how to obtain further assistance."
msgstr ""
-"Просим прощения, но этот движое пока не предоставляет помощи внутри игры. "
+"Не удалось сохранить игру (%s)! "
"Пожалуйста, обратитесь в файл README за базовой информацией, а также "
"инструкциями о том, как получить дальнейшую помощь."
@@ -1233,12 +1232,12 @@ msgstr ""
"файле README."
#: engines/engine.cpp:426
-#, fuzzy, c-format
+#, c-format
msgid ""
"Gamestate load failed (%s)! Please consult the README for basic information, "
"and for instructions on how to obtain further assistance."
msgstr ""
-"Просим прощения, но этот движое пока не предоставляет помощи внутри игры. "
+"Не удалось прочитать сохранение игры (%s)! "
"Пожалуйста, обратитесь в файл README за базовой информацией, а также "
"инструкциями о том, как получить дальнейшую помощь."
@@ -1259,86 +1258,86 @@ msgstr "Всё равно запустить"
#: engines/agi/detection.cpp:145 engines/dreamweb/detection.cpp:47
#: engines/sci/detection.cpp:390
msgid "Use original save/load screens"
-msgstr ""
+msgstr "Использовать оригинальные экраны записи/чтения игры"
#: engines/agi/detection.cpp:146 engines/dreamweb/detection.cpp:48
#: engines/sci/detection.cpp:391
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr ""
+"Использовать оригинальные экраны записи и сохранения игры вместо "
+"сделанных в ScummVM"
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:831
msgid "Restore game:"
msgstr "Восстановить игру:"
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:831
msgid "Restore"
-msgstr "Восствновить"
+msgstr "Восстановить"
#: engines/dreamweb/detection.cpp:57
-#, fuzzy
msgid "Use bright palette mode"
-msgstr "Верхний правый предмет"
+msgstr "Использовать режим яркой палитры"
#: engines/dreamweb/detection.cpp:58
msgid "Display graphics using the game's bright palette"
-msgstr ""
+msgstr "Рисует графику с использованием яркой палитры игры"
#: engines/sci/detection.cpp:370
msgid "EGA undithering"
msgstr "EGA без растра"
#: engines/sci/detection.cpp:371
-#, fuzzy
msgid "Enable undithering in EGA games"
-msgstr ""
-"Включает режим без растрирования в EGA играх, которые поддерживают такой "
-"режим"
+msgstr "Включает режим без растрирования в EGA играх"
#: engines/sci/detection.cpp:380
-#, fuzzy
msgid "Prefer digital sound effects"
-msgstr "Громкость специальных звуковых эффектов"
+msgstr "Предпочитать цифровые звуковые эффекты"
#: engines/sci/detection.cpp:381
msgid "Prefer digital sound effects instead of synthesized ones"
-msgstr ""
+msgstr "Отдавать предпочтение цифровым звуковым эффектам вместо синтезированных"
#: engines/sci/detection.cpp:400
-msgid "Use IMF/Yahama FB-01 for MIDI output"
-msgstr ""
+msgid "Use IMF/Yamaha FB-01 for MIDI output"
+msgstr "Использовать IMF/Yamaha FB-01 для вывода MIDI"
#: engines/sci/detection.cpp:401
msgid ""
-"Use an IBM Music Feature card or a Yahama FB-01 FM synth module for MIDI "
+"Use an IBM Music Feature card or a Yamaha FB-01 FM synth module for MIDI "
"output"
msgstr ""
+"Использвовать звуковую картку IBM Music Feature или модуль синтеза "
+"Yamaha FB-01 FM для MIDI"
#: engines/sci/detection.cpp:411
msgid "Use CD audio"
-msgstr ""
+msgstr "Использовать CD аудио"
#: engines/sci/detection.cpp:412
msgid "Use CD audio instead of in-game audio, if available"
-msgstr ""
+msgstr "Использовать звуковые дорожки с CD вместо музыки из файлов игры (если доступно)"
#: engines/sci/detection.cpp:422
msgid "Use Windows cursors"
-msgstr ""
+msgstr "Использовать курсоры Windows"
#: engines/sci/detection.cpp:423
msgid ""
"Use the Windows cursors (smaller and monochrome) instead of the DOS ones"
msgstr ""
+"Использовать курсоры Windows (меньшие по размеру и одноцветные) вместо курсоров DOS"
#: engines/sci/detection.cpp:433
-#, fuzzy
msgid "Use silver cursors"
-msgstr "Обычный курсор"
+msgstr "Использовать серебрянные курсоры"
#: engines/sci/detection.cpp:434
msgid ""
"Use the alternate set of silver cursors, instead of the normal golden ones"
msgstr ""
+"Использовать альтернативный набор серебрянных курсоров вместо обычных золотых"
#: engines/scumm/dialogs.cpp:175
#, c-format
@@ -2091,61 +2090,59 @@ msgstr "Не удалось сохранить игру"
#. Malcolm makes a joke.
#: engines/kyra/detection.cpp:62
msgid "Studio audience"
-msgstr ""
+msgstr "Студийная аудитория"
#: engines/kyra/detection.cpp:63
msgid "Enable studio audience"
-msgstr ""
+msgstr "Включить звуки аудитории в студии"
#. I18N: This option allows the user to skip text and cutscenes.
#: engines/kyra/detection.cpp:73
msgid "Skip support"
-msgstr ""
+msgstr "Поддрежка пропусков"
#: engines/kyra/detection.cpp:74
msgid "Allow text and cutscenes to be skipped"
-msgstr ""
+msgstr "Включает возможность пропускать тексты и заставки"
#. I18N: Helium mode makes people sound like they've inhaled Helium.
#: engines/kyra/detection.cpp:84
msgid "Helium mode"
-msgstr ""
+msgstr "Режим гелия"
#: engines/kyra/detection.cpp:85
-#, fuzzy
msgid "Enable helium mode"
-msgstr "Включить режим Roland GS"
+msgstr "Включить режим гелия"
#. I18N: When enabled, this option makes scrolling smoother when
#. changing from one screen to another.
#: engines/kyra/detection.cpp:99
msgid "Smooth scrolling"
-msgstr ""
+msgstr "Плавная прокрутка"
#: engines/kyra/detection.cpp:100
msgid "Enable smooth scrolling when walking"
-msgstr ""
+msgstr "Включить плавную прокрутку во время ходьбы"
#. I18N: When enabled, this option changes the cursor when it floats to the
#. edge of the screen to a directional arrow. The player can then click to
#. walk towards that direction.
#: engines/kyra/detection.cpp:112
-#, fuzzy
msgid "Floating cursors"
-msgstr "Обычный курсор"
+msgstr "Плавающие курсоры"
#: engines/kyra/detection.cpp:113
msgid "Enable floating cursors"
-msgstr ""
+msgstr "Включить плавающие курсоры"
#. I18N: HP stands for Hit Points
#: engines/kyra/detection.cpp:127
msgid "HP bar graphs"
-msgstr ""
+msgstr "Полоски здоровья"
#: engines/kyra/detection.cpp:128
msgid "Enable hit point bar graphs"
-msgstr ""
+msgstr "Включить отображение полосок здоровья"
#: engines/kyra/lol.cpp:478
msgid "Attack 1"
@@ -2200,8 +2197,8 @@ msgid ""
"You appear to be using a General MIDI device,\n"
"but your game only supports Roland MT32 MIDI.\n"
"We try to map the Roland MT32 instruments to\n"
-"General MIDI ones. After all it might happen\n"
-"that a few tracks will not be correctly played."
+"General MIDI ones. It is still possible that\n"
+"some tracks sound incorrect."
msgstr ""
"Кажется, вы пытаетесь использовать устройство\n"
"General MIDI, но эта игра поддерживает только\n"
@@ -2212,11 +2209,11 @@ msgstr ""
#: engines/queen/queen.cpp:59 engines/sky/detection.cpp:44
msgid "Floppy intro"
-msgstr ""
+msgstr "Вступление с флоппиков"
#: engines/queen/queen.cpp:60 engines/sky/detection.cpp:45
msgid "Use the floppy version's intro (CD version only)"
-msgstr ""
+msgstr "Использовать вступление с гибких дисков (только для CD версии игры)"
#: engines/sky/compact.cpp:130
msgid ""
@@ -2237,7 +2234,7 @@ msgstr ""
#: engines/sword1/animation.cpp:539
#, c-format
msgid "PSX stream cutscene '%s' cannot be played in paletted mode"
-msgstr ""
+msgstr "Заставка PSX '%s' не может быть проиграна в режиме с палитрой"
#: engines/sword1/animation.cpp:560 engines/sword2/animation.cpp:455
msgid "DXA cutscenes found but ScummVM has been built without zlib support"
@@ -2292,19 +2289,18 @@ msgid "This is the end of the Broken Sword 1 Demo"
msgstr "Это завершение демо Сломанного Меча 1"
#: engines/sword2/animation.cpp:435
-#, fuzzy
msgid ""
"PSX cutscenes found but ScummVM has been built without RGB color support"
msgstr ""
-"Найдены заставки в формате DXA, но ScummVM был собран без поддержки zlib"
+"Найдены заставки в формате PSX, но ScummVM был собран без поддержки RGB цветов"
#: engines/sword2/sword2.cpp:79
msgid "Show object labels"
-msgstr ""
+msgstr "Показывать названия объектов"
#: engines/sword2/sword2.cpp:80
msgid "Show labels for objects on mouse hover"
-msgstr ""
+msgstr "Показывает названия объектов пр инаведении курсора мыши"
#: engines/parallaction/saveload.cpp:133
#, c-format
@@ -2333,7 +2329,7 @@ msgid ""
"Press OK to convert them now, otherwise you will be asked next time.\n"
msgstr ""
"ScummVM обнаружил у вас старые сохранения игры Nippon Safes, которые "
-"необходимо переименовать.Старые названия больше не поддерживаются, и поэтому "
+"необходимо переименовать. Старые названия больше не поддерживаются, и поэтому "
"вы не сможете загрузить сохранения, если не переименуете их.\n"
"\n"
"Нажмите ОК, чтобы переименовать их сейчас, в противном случае это же "
@@ -2350,7 +2346,7 @@ msgid ""
"\n"
"Please report to the team."
msgstr ""
-"ScummVM написал несколько предупреждений в окно консоли, и не смог "
+"ScummVM написал несколько предупреждений в окно консоли и не смог "
"преобразовать все файлы.\n"
"\n"
"Пожалуйста, сообщите об этом команде ScummVM."
@@ -2454,7 +2450,7 @@ msgstr " (Активная)"
#: backends/keymapper/remap-dialog.cpp:106
msgid " (Blocked)"
-msgstr ""
+msgstr " (Заблокирована)"
#: backends/keymapper/remap-dialog.cpp:119
msgid " (Global)"
diff --git a/po/scummvm.pot b/po/scummvm.pot
index 86067a3083..8a68e4372b 100644
--- a/po/scummvm.pot
+++ b/po/scummvm.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.5.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2012-06-24 18:06+0100\n"
+"POT-Creation-Date: 2012-07-08 12:25+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -1115,13 +1115,13 @@ msgid "~R~eturn to Launcher"
msgstr ""
#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
-#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:728
+#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:735
msgid "Save game:"
msgstr ""
#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
#: engines/scumm/dialogs.cpp:187 engines/cruise/menu.cpp:212
-#: engines/sci/engine/kfile.cpp:728
+#: engines/sci/engine/kfile.cpp:735
#: backends/platform/symbian/src/SymbianActions.cpp:44
#: backends/platform/wince/CEActionsPocket.cpp:43
#: backends/platform/wince/CEActionsPocket.cpp:267
@@ -1220,11 +1220,11 @@ msgstr ""
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr ""
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:831
msgid "Restore game:"
msgstr ""
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:831
msgid "Restore"
msgstr ""
@@ -1253,12 +1253,12 @@ msgid "Prefer digital sound effects instead of synthesized ones"
msgstr ""
#: engines/sci/detection.cpp:400
-msgid "Use IMF/Yahama FB-01 for MIDI output"
+msgid "Use IMF/Yamaha FB-01 for MIDI output"
msgstr ""
#: engines/sci/detection.cpp:401
msgid ""
-"Use an IBM Music Feature card or a Yahama FB-01 FM synth module for MIDI "
+"Use an IBM Music Feature card or a Yamaha FB-01 FM synth module for MIDI "
"output"
msgstr ""
@@ -2132,8 +2132,8 @@ msgid ""
"You appear to be using a General MIDI device,\n"
"but your game only supports Roland MT32 MIDI.\n"
"We try to map the Roland MT32 instruments to\n"
-"General MIDI ones. After all it might happen\n"
-"that a few tracks will not be correctly played."
+"General MIDI ones. It is still possible that\n"
+"some tracks sound incorrect."
msgstr ""
#: engines/queen/queen.cpp:59 engines/sky/detection.cpp:44
diff --git a/po/se_SE.po b/po/se_SE.po
index a1f9c91b44..8388e55370 100644
--- a/po/se_SE.po
+++ b/po/se_SE.po
@@ -5,10 +5,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: ScummVM 1.3.0svn\n"
+"Project-Id-Version: ScummVM 1.5.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2012-06-24 18:06+0100\n"
-"PO-Revision-Date: 2011-11-27 19:00+0100\n"
+"POT-Creation-Date: 2012-07-08 12:25+0100\n"
+"PO-Revision-Date: 2012-07-08 18:03+0100\n"
"Last-Translator: Hampus Flink <hampus.flink@gmail.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@@ -81,7 +81,6 @@ msgid "Remap keys"
msgstr "Stфll in tangenter"
#: gui/gui-manager.cpp:129 base/main.cpp:307
-#, fuzzy
msgid "Toggle FullScreen"
msgstr "Fullskфrmslфge"
@@ -197,9 +196,8 @@ msgid "Platform:"
msgstr "Plattform:"
#: gui/launcher.cpp:231
-#, fuzzy
msgid "Engine"
-msgstr "Undersіk"
+msgstr "Motor"
#: gui/launcher.cpp:239 gui/options.cpp:1062 gui/options.cpp:1079
msgid "Graphics"
@@ -1139,13 +1137,13 @@ msgid "~R~eturn to Launcher"
msgstr "Хte~r~vфnd till launcher"
#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
-#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:728
+#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:735
msgid "Save game:"
msgstr "Spara spelet:"
#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
#: engines/scumm/dialogs.cpp:187 engines/cruise/menu.cpp:212
-#: engines/sci/engine/kfile.cpp:728
+#: engines/sci/engine/kfile.cpp:735
#: backends/platform/symbian/src/SymbianActions.cpp:44
#: backends/platform/wince/CEActionsPocket.cpp:43
#: backends/platform/wince/CEActionsPocket.cpp:267
@@ -1165,14 +1163,11 @@ msgstr ""
"ytterligare assistens."
#: engines/dialogs.cpp:228
-#, fuzzy, c-format
+#, c-format
msgid ""
"Gamestate save failed (%s)! Please consult the README for basic information, "
"and for instructions on how to obtain further assistance."
-msgstr ""
-"Tyvфrr stіder fіr tillfфllet inte den hфr motorn hjфlp-funktionen. Var god "
-"hфnvisa till README-filen fіr information och instruktioner fіr att fх "
-"ytterligare assistens."
+msgstr "Spar"
#: engines/dialogs.cpp:301 engines/mohawk/dialogs.cpp:109
#: engines/mohawk/dialogs.cpp:174
@@ -1233,14 +1228,13 @@ msgstr ""
"Se README-filen fіr detaljer."
#: engines/engine.cpp:426
-#, fuzzy, c-format
+#, c-format
msgid ""
"Gamestate load failed (%s)! Please consult the README for basic information, "
"and for instructions on how to obtain further assistance."
msgstr ""
-"Tyvфrr stіder fіr tillfфllet inte den hфr motorn hjфlp-funktionen. Var god "
-"hфnvisa till README-filen fіr information och instruktioner fіr att fх "
-"ytterligare assistens."
+"Kunde inte ladda spardata (%s)! Hфnvisa till README-filen fіr grundlфggande "
+"information och instruktioner fіr ytterligare assistans."
#: engines/engine.cpp:439
msgid ""
@@ -1259,84 +1253,84 @@ msgstr "Starta фndх"
#: engines/agi/detection.cpp:145 engines/dreamweb/detection.cpp:47
#: engines/sci/detection.cpp:390
msgid "Use original save/load screens"
-msgstr ""
+msgstr "Anvфnd originalskфrmar fіr spara/ladda"
#: engines/agi/detection.cpp:146 engines/dreamweb/detection.cpp:48
#: engines/sci/detection.cpp:391
msgid "Use the original save/load screens, instead of the ScummVM ones"
-msgstr ""
+msgstr "Anvфnder originalskфrmarna fіr spara/ladda istфllet fіr ScummVM:s"
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:831
msgid "Restore game:"
msgstr "Хterstфll spel:"
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:831
msgid "Restore"
msgstr "Хterstфll"
#: engines/dreamweb/detection.cpp:57
-#, fuzzy
msgid "Use bright palette mode"
-msgstr "жvre hіgra fіremхlet"
+msgstr "Anvфnd ljus palett-lфge"
#: engines/dreamweb/detection.cpp:58
msgid "Display graphics using the game's bright palette"
-msgstr ""
+msgstr "Visa grafik med spelets ljusa palett"
#: engines/sci/detection.cpp:370
msgid "EGA undithering"
msgstr "EGA anti-gitter"
#: engines/sci/detection.cpp:371
-#, fuzzy
msgid "Enable undithering in EGA games"
-msgstr "Aktiverar anti-gitter i EGA spel som stіder det"
+msgstr "Aktivera anti-gitter i EGA-spel"
#: engines/sci/detection.cpp:380
-#, fuzzy
msgid "Prefer digital sound effects"
-msgstr "Volym fіr specialeffekter"
+msgstr "Fіredra digitala ljudeffekter"
#: engines/sci/detection.cpp:381
msgid "Prefer digital sound effects instead of synthesized ones"
-msgstr ""
+msgstr "Fіredra digitala ljudeffekter istфllet fіr syntetiserade"
#: engines/sci/detection.cpp:400
-msgid "Use IMF/Yahama FB-01 for MIDI output"
-msgstr ""
+msgid "Use IMF/Yamaha FB-01 for MIDI output"
+msgstr "Anvфnd IMF/Yamaha FB-01 fіr MIDI-uppspelning"
#: engines/sci/detection.cpp:401
msgid ""
-"Use an IBM Music Feature card or a Yahama FB-01 FM synth module for MIDI "
+"Use an IBM Music Feature card or a Yamaha FB-01 FM synth module for MIDI "
"output"
msgstr ""
+"Anvфnd ett IMB Music Feature-kort eller en Yamaha FB-01 FM synthmodul fіr "
+"MIDI-uppspelning"
#: engines/sci/detection.cpp:411
msgid "Use CD audio"
-msgstr ""
+msgstr "Anvфnd CD-ljud"
#: engines/sci/detection.cpp:412
msgid "Use CD audio instead of in-game audio, if available"
-msgstr ""
+msgstr "Anvфnd CD-ljud istфllet fіr spelets ljud, om tillgфngligt"
#: engines/sci/detection.cpp:422
msgid "Use Windows cursors"
-msgstr ""
+msgstr "Anvфnd Windows muspekare"
#: engines/sci/detection.cpp:423
msgid ""
"Use the Windows cursors (smaller and monochrome) instead of the DOS ones"
msgstr ""
+"Anvфnd Windows muspekare (mindre och svartvit) istфllet fіr DOS-pekaren"
#: engines/sci/detection.cpp:433
-#, fuzzy
msgid "Use silver cursors"
-msgstr "Vanlig pekare"
+msgstr "Anvфnd silverpekare"
#: engines/sci/detection.cpp:434
msgid ""
"Use the alternate set of silver cursors, instead of the normal golden ones"
msgstr ""
+"Anvфnd de alternativa silverpekarna istфllet fіr de normala guldpekarna"
#: engines/scumm/dialogs.cpp:175
#, c-format
@@ -1454,24 +1448,23 @@ msgstr "Tal & text"
#: engines/scumm/dialogs.cpp:653
msgid "Select a Proficiency Level."
-msgstr ""
+msgstr "Vфlj en skicklighetsnivх."
#: engines/scumm/dialogs.cpp:655
msgid "Refer to your Loom(TM) manual for help."
-msgstr ""
+msgstr "Hфnvisa till din Loom(TM)-manual fіr hjфlp."
#: engines/scumm/dialogs.cpp:658
-#, fuzzy
msgid "Standard"
-msgstr "Standard (16 bpp)"
+msgstr "Standard"
#: engines/scumm/dialogs.cpp:659
msgid "Practice"
-msgstr ""
+msgstr "жvning"
#: engines/scumm/dialogs.cpp:660
msgid "Expert"
-msgstr ""
+msgstr "Expert"
#: engines/scumm/help.cpp:73
msgid "Common keyboard commands:"
@@ -2002,7 +1995,7 @@ msgid ""
"\n"
"%s"
msgstr ""
-"Kunde inte skriva spardata till file:\n"
+"Kunde inte skriva spardata till filen:\n"
"\n"
"%s"
@@ -2013,7 +2006,7 @@ msgid ""
"\n"
"%s"
msgstr ""
-"Kunde inte lфsa spardata frхn file:\n"
+"Kunde inte lфsa spardata frхn filen:\n"
"\n"
"%s"
@@ -2024,7 +2017,7 @@ msgid ""
"\n"
"%s"
msgstr ""
-"Sparade framgхngsrikt spardata i file\n"
+"Sparade framgхngsrikt spardata i filen:\n"
"\n"
"%s"
@@ -2090,61 +2083,59 @@ msgstr "Kunde inte spara spelet."
#. Malcolm makes a joke.
#: engines/kyra/detection.cpp:62
msgid "Studio audience"
-msgstr ""
+msgstr "Studiopublik"
#: engines/kyra/detection.cpp:63
msgid "Enable studio audience"
-msgstr ""
+msgstr "Aktivera studiopublik"
#. I18N: This option allows the user to skip text and cutscenes.
#: engines/kyra/detection.cpp:73
msgid "Skip support"
-msgstr ""
+msgstr "Skipp-stіd"
#: engines/kyra/detection.cpp:74
msgid "Allow text and cutscenes to be skipped"
-msgstr ""
+msgstr "Tillхter skippning av text och filmscener"
#. I18N: Helium mode makes people sound like they've inhaled Helium.
#: engines/kyra/detection.cpp:84
msgid "Helium mode"
-msgstr ""
+msgstr "Helium-lфge"
#: engines/kyra/detection.cpp:85
-#, fuzzy
msgid "Enable helium mode"
-msgstr "Aktivera Roland GS-lфge"
+msgstr "Aktivera heliumlфge"
#. I18N: When enabled, this option makes scrolling smoother when
#. changing from one screen to another.
#: engines/kyra/detection.cpp:99
msgid "Smooth scrolling"
-msgstr ""
+msgstr "Mjuk rullning"
#: engines/kyra/detection.cpp:100
msgid "Enable smooth scrolling when walking"
-msgstr ""
+msgstr "Aktivera mjuk skфrmrullning vid gхngfart"
#. I18N: When enabled, this option changes the cursor when it floats to the
#. edge of the screen to a directional arrow. The player can then click to
#. walk towards that direction.
#: engines/kyra/detection.cpp:112
-#, fuzzy
msgid "Floating cursors"
-msgstr "Vanlig pekare"
+msgstr "Flytande pekare"
#: engines/kyra/detection.cpp:113
msgid "Enable floating cursors"
-msgstr ""
+msgstr "Aktivera flytande pekare"
#. I18N: HP stands for Hit Points
#: engines/kyra/detection.cpp:127
msgid "HP bar graphs"
-msgstr ""
+msgstr "Livmфtare"
#: engines/kyra/detection.cpp:128
msgid "Enable hit point bar graphs"
-msgstr ""
+msgstr "Aktivera livmфtare"
#: engines/kyra/lol.cpp:478
msgid "Attack 1"
@@ -2199,22 +2190,22 @@ msgid ""
"You appear to be using a General MIDI device,\n"
"but your game only supports Roland MT32 MIDI.\n"
"We try to map the Roland MT32 instruments to\n"
-"General MIDI ones. After all it might happen\n"
-"that a few tracks will not be correctly played."
+"General MIDI ones. It is still possible that\n"
+"some tracks sound incorrect."
msgstr ""
-"Du verkar anvфnda en General MIDI enhet\n"
+"Du verkar anvфnda en General MIDI-enhet,\n"
"men ditt spel stіder endast Roland MT32 MIDI.\n"
-"Vi fіrsіker kartlфgga Roland MT32 instrument fіr\n"
-"General MIDI instrument. Det kan trots allt hфnda\n"
+"Vi fіrsіker kartlфgga Roland MT32-instrumenten till\n"
+"General MIDI-instrument. Det kan trots allt hфnda\n"
"att ett fхtal ljudspхr inte spelas korrekt."
#: engines/queen/queen.cpp:59 engines/sky/detection.cpp:44
msgid "Floppy intro"
-msgstr ""
+msgstr "Diskettintro"
#: engines/queen/queen.cpp:60 engines/sky/detection.cpp:45
msgid "Use the floppy version's intro (CD version only)"
-msgstr ""
+msgstr "Anvфnd diskettversionens intro (endast CD-version)"
#: engines/sky/compact.cpp:130
msgid ""
@@ -2235,7 +2226,7 @@ msgstr ""
#: engines/sword1/animation.cpp:539
#, c-format
msgid "PSX stream cutscene '%s' cannot be played in paletted mode"
-msgstr ""
+msgstr "PSX-filmscenen '%s' kan inte visas i palettlфget"
#: engines/sword1/animation.cpp:560 engines/sword2/animation.cpp:455
msgid "DXA cutscenes found but ScummVM has been built without zlib support"
@@ -2290,18 +2281,17 @@ msgid "This is the end of the Broken Sword 1 Demo"
msgstr "Hфr slutar Broken Sword 1 demon"
#: engines/sword2/animation.cpp:435
-#, fuzzy
msgid ""
"PSX cutscenes found but ScummVM has been built without RGB color support"
-msgstr "DXA filmscener hittades men ScummVM har byggts utan stіd fіr zlib"
+msgstr "PSX-filmscener hittades men ScummVM har byggts utan stіd fіr RGB-fфrg"
#: engines/sword2/sword2.cpp:79
msgid "Show object labels"
-msgstr ""
+msgstr "Visa etiketter"
#: engines/sword2/sword2.cpp:80
msgid "Show labels for objects on mouse hover"
-msgstr ""
+msgstr "Visar etiketter fіr objekten som musen pekar pх"
#: engines/parallaction/saveload.cpp:133
#, c-format
@@ -2443,9 +2433,8 @@ msgid "Keymap:"
msgstr "Tangenter:"
#: backends/keymapper/remap-dialog.cpp:66
-#, fuzzy
msgid " (Effective)"
-msgstr "(Aktiv)"
+msgstr "(Effektiv)"
#: backends/keymapper/remap-dialog.cpp:106
msgid " (Active)"
@@ -2453,7 +2442,7 @@ msgstr "(Aktiv)"
#: backends/keymapper/remap-dialog.cpp:106
msgid " (Blocked)"
-msgstr ""
+msgstr "(Blockerad)"
#: backends/keymapper/remap-dialog.cpp:119
msgid " (Global)"
@@ -2557,7 +2546,7 @@ msgstr "Touchpad-lфge inaktiverat."
#: backends/platform/maemo/maemo.cpp:205
msgid "Click Mode"
-msgstr ""
+msgstr "Klicklфge"
#: backends/platform/maemo/maemo.cpp:211
#: backends/platform/symbian/src/SymbianActions.cpp:42
@@ -2568,9 +2557,8 @@ msgid "Left Click"
msgstr "Vфnsterklick"
#: backends/platform/maemo/maemo.cpp:214
-#, fuzzy
msgid "Middle Click"
-msgstr "Mellersta vфnstra fіremхlet"
+msgstr "Mittenklick"
#: backends/platform/maemo/maemo.cpp:217
#: backends/platform/symbian/src/SymbianActions.cpp:43
diff --git a/po/uk_UA.po b/po/uk_UA.po
index cbcf7f670c..38855dcb11 100644
--- a/po/uk_UA.po
+++ b/po/uk_UA.po
@@ -7,16 +7,16 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2012-06-24 18:06+0100\n"
-"PO-Revision-Date: 2012-02-16 13:09+0200\n"
-"Last-Translator: Eugene Sandulenko\n"
+"POT-Creation-Date: 2012-07-08 12:25+0100\n"
+"PO-Revision-Date: 2012-06-29 20:19+0200\n"
+"Last-Translator: lubomyr <lubomyr31@gmail.com>\n"
"Language-Team: Ukrainian\n"
+"Language: Ukrainian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=iso-8859-5\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: Ukrainian\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%"
-"10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n"
+"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
#: gui/about.cpp:91
#, c-format
@@ -194,9 +194,8 @@ msgid "Platform:"
msgstr "Платформа:"
#: gui/launcher.cpp:231
-#, fuzzy
msgid "Engine"
-msgstr "Розглянути"
+msgstr "Движок"
#: gui/launcher.cpp:239 gui/options.cpp:1062 gui/options.cpp:1079
msgid "Graphics"
@@ -1136,13 +1135,13 @@ msgid "~R~eturn to Launcher"
msgstr "~П~овер.в головне меню"
#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
-#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:728
+#: engines/cruise/menu.cpp:212 engines/sci/engine/kfile.cpp:735
msgid "Save game:"
msgstr "Зберегти гру: "
#: engines/dialogs.cpp:115 engines/agi/saveload.cpp:803
#: engines/scumm/dialogs.cpp:187 engines/cruise/menu.cpp:212
-#: engines/sci/engine/kfile.cpp:728
+#: engines/sci/engine/kfile.cpp:735
#: backends/platform/symbian/src/SymbianActions.cpp:44
#: backends/platform/wince/CEActionsPocket.cpp:43
#: backends/platform/wince/CEActionsPocket.cpp:267
@@ -1162,14 +1161,13 @@ msgstr ""
"допомогу."
#: engines/dialogs.cpp:228
-#, fuzzy, c-format
+#, c-format
msgid ""
"Gamestate save failed (%s)! Please consult the README for basic information, "
"and for instructions on how to obtain further assistance."
msgstr ""
-"Вибачте, цей движок не підтримує довідку по іграм. Будь-ласка, дивіться файл "
-"README для основної інормації, а також інструкцій, як отримати подальшу "
-"допомогу."
+"Збереження стану гри не вдалося (%s)!. Будь-ласка, дивіться файл README для "
+"основної інормації, а також інструкцій, як отримати подальшу допомогу."
#: engines/dialogs.cpp:301 engines/mohawk/dialogs.cpp:109
#: engines/mohawk/dialogs.cpp:174
@@ -1230,14 +1228,13 @@ msgstr ""
"Дивіться файл README для подальших інструкцій."
#: engines/engine.cpp:426
-#, fuzzy, c-format
+#, c-format
msgid ""
"Gamestate load failed (%s)! Please consult the README for basic information, "
"and for instructions on how to obtain further assistance."
msgstr ""
-"Вибачте, цей движок не підтримує довідку по іграм. Будь-ласка, дивіться файл "
-"README для основної інормації, а також інструкцій, як отримати подальшу "
-"допомогу."
+"Завантаження стану гри не вдалося (%s)! . Будь-ласка, дивіться файл README "
+"для основної інормації, а також інструкцій, як отримати подальшу допомогу."
#: engines/engine.cpp:439
msgid ""
@@ -1256,84 +1253,83 @@ msgstr "Все одно запустити"
#: engines/agi/detection.cpp:145 engines/dreamweb/detection.cpp:47
#: engines/sci/detection.cpp:390
msgid "Use original save/load screens"
-msgstr ""
+msgstr "Використовувати ориг. збереження/завантаження екрани"
#: engines/agi/detection.cpp:146 engines/dreamweb/detection.cpp:48
#: engines/sci/detection.cpp:391
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr ""
+"Використовувати оригінальні збереження/завантаження екрани, замість ScummVM"
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:831
msgid "Restore game:"
msgstr "Відновити гру:"
-#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:824
+#: engines/agi/saveload.cpp:816 engines/sci/engine/kfile.cpp:831
msgid "Restore"
msgstr "Відновити"
#: engines/dreamweb/detection.cpp:57
-#, fuzzy
msgid "Use bright palette mode"
-msgstr "Верхня справа річ"
+msgstr "Використовувати яскравий режим палітри"
#: engines/dreamweb/detection.cpp:58
msgid "Display graphics using the game's bright palette"
-msgstr ""
+msgstr "Відображення графіки з використанням яскравої палітри ігр"
#: engines/sci/detection.cpp:370
msgid "EGA undithering"
msgstr "EGA без растрування"
#: engines/sci/detection.cpp:371
-#, fuzzy
msgid "Enable undithering in EGA games"
-msgstr "Вімкнути растрування в EGA іграх які це підтримують"
+msgstr "Увімкнути анти-згладжування в EGA іграх"
#: engines/sci/detection.cpp:380
-#, fuzzy
msgid "Prefer digital sound effects"
-msgstr "Гучність спеціальних звукових ефектів"
+msgstr "Надавати перевагу цифровим звуковим ефектам"
#: engines/sci/detection.cpp:381
msgid "Prefer digital sound effects instead of synthesized ones"
-msgstr ""
+msgstr "Віддавати перевагу цифровим звуковим ефектам, а не синтезованим"
#: engines/sci/detection.cpp:400
-msgid "Use IMF/Yahama FB-01 for MIDI output"
-msgstr ""
+msgid "Use IMF/Yamaha FB-01 for MIDI output"
+msgstr "Використовувати IMF/Yahama FB-01 для MIDI виходу"
#: engines/sci/detection.cpp:401
msgid ""
-"Use an IBM Music Feature card or a Yahama FB-01 FM synth module for MIDI "
+"Use an IBM Music Feature card or a Yamaha FB-01 FM synth module for MIDI "
"output"
msgstr ""
#: engines/sci/detection.cpp:411
msgid "Use CD audio"
-msgstr ""
+msgstr "Використовувати CD аудіо"
#: engines/sci/detection.cpp:412
msgid "Use CD audio instead of in-game audio, if available"
-msgstr ""
+msgstr "Використовувати CD аудіо замість у-грі аудіо, якщо такі є"
#: engines/sci/detection.cpp:422
msgid "Use Windows cursors"
-msgstr ""
+msgstr "Використовувати Windows курсори"
#: engines/sci/detection.cpp:423
msgid ""
"Use the Windows cursors (smaller and monochrome) instead of the DOS ones"
-msgstr ""
+msgstr "Використовувати Windows курсори (менших і монохромних), замість DOS"
#: engines/sci/detection.cpp:433
-#, fuzzy
msgid "Use silver cursors"
-msgstr "Звичайний курсор"
+msgstr "Використовувати срібні курсори"
#: engines/sci/detection.cpp:434
msgid ""
"Use the alternate set of silver cursors, instead of the normal golden ones"
msgstr ""
+"Використовувати альтернативний набір срібних курсорів, замість звичайних "
+"золотих"
#: engines/scumm/dialogs.cpp:175
#, c-format
@@ -2086,52 +2082,50 @@ msgstr "Не вдалося записати гру"
#. Malcolm makes a joke.
#: engines/kyra/detection.cpp:62
msgid "Studio audience"
-msgstr ""
+msgstr "Студія аудиторії"
#: engines/kyra/detection.cpp:63
msgid "Enable studio audience"
-msgstr ""
+msgstr "Увімкнути студію аудиторії"
#. I18N: This option allows the user to skip text and cutscenes.
#: engines/kyra/detection.cpp:73
msgid "Skip support"
-msgstr ""
+msgstr "Підтримувати Пропустити"
#: engines/kyra/detection.cpp:74
msgid "Allow text and cutscenes to be skipped"
-msgstr ""
+msgstr "Дозволити пропускати текст і ролики"
#. I18N: Helium mode makes people sound like they've inhaled Helium.
#: engines/kyra/detection.cpp:84
msgid "Helium mode"
-msgstr ""
+msgstr "Режим Геліум"
#: engines/kyra/detection.cpp:85
-#, fuzzy
msgid "Enable helium mode"
-msgstr "Увімкнути режим Roland GS"
+msgstr "Увімкнути режим Геліум"
#. I18N: When enabled, this option makes scrolling smoother when
#. changing from one screen to another.
#: engines/kyra/detection.cpp:99
msgid "Smooth scrolling"
-msgstr ""
+msgstr "Плавна прокрутка"
#: engines/kyra/detection.cpp:100
msgid "Enable smooth scrolling when walking"
-msgstr ""
+msgstr "Увімкнути плавну прокрутку при ходьбі"
#. I18N: When enabled, this option changes the cursor when it floats to the
#. edge of the screen to a directional arrow. The player can then click to
#. walk towards that direction.
#: engines/kyra/detection.cpp:112
-#, fuzzy
msgid "Floating cursors"
-msgstr "Звичайний курсор"
+msgstr "Плаваючі курсори"
#: engines/kyra/detection.cpp:113
msgid "Enable floating cursors"
-msgstr ""
+msgstr "Увімкнути плаваючі курсори"
#. I18N: HP stands for Hit Points
#: engines/kyra/detection.cpp:127
@@ -2195,8 +2189,8 @@ msgid ""
"You appear to be using a General MIDI device,\n"
"but your game only supports Roland MT32 MIDI.\n"
"We try to map the Roland MT32 instruments to\n"
-"General MIDI ones. After all it might happen\n"
-"that a few tracks will not be correctly played."
+"General MIDI ones. It is still possible that\n"
+"some tracks sound incorrect."
msgstr ""
"Здається, що Ви використовуєте пристрій General\n"
"MIDI, але Ваша гра підтримує тільки Roland MT32\n"
@@ -2206,11 +2200,11 @@ msgstr ""
#: engines/queen/queen.cpp:59 engines/sky/detection.cpp:44
msgid "Floppy intro"
-msgstr ""
+msgstr "Дискетне введення"
#: engines/queen/queen.cpp:60 engines/sky/detection.cpp:45
msgid "Use the floppy version's intro (CD version only)"
-msgstr ""
+msgstr "Використовувати дискетні версії введення (тільки CD версія)"
#: engines/sky/compact.cpp:130
msgid ""
@@ -2231,7 +2225,7 @@ msgstr ""
#: engines/sword1/animation.cpp:539
#, c-format
msgid "PSX stream cutscene '%s' cannot be played in paletted mode"
-msgstr ""
+msgstr " ролик PSX потоку '%s' не можуть бути відтворені у режимі палітри"
#: engines/sword1/animation.cpp:560 engines/sword2/animation.cpp:455
msgid "DXA cutscenes found but ScummVM has been built without zlib support"
@@ -2285,18 +2279,17 @@ msgid "This is the end of the Broken Sword 1 Demo"
msgstr "На цьому закінчується демо Broken Sword 1"
#: engines/sword2/animation.cpp:435
-#, fuzzy
msgid ""
"PSX cutscenes found but ScummVM has been built without RGB color support"
-msgstr "Знайдено заставки DXA, але ScummVM був побудований без підтримки zlib"
+msgstr "Знайдені PSX ролики, але ScummVM був зібраний без підтримки RGB коліру"
#: engines/sword2/sword2.cpp:79
msgid "Show object labels"
-msgstr ""
+msgstr "Показувати мітки об'єктів"
#: engines/sword2/sword2.cpp:80
msgid "Show labels for objects on mouse hover"
-msgstr ""
+msgstr "Показувати мітки для об'єктів при наведенні миші"
#: engines/parallaction/saveload.cpp:133
#, c-format
@@ -2361,7 +2354,7 @@ msgid ""
"The selected audio device '%s' was not found (e.g. might be turned off or "
"disconnected)."
msgstr ""
-"Вибраний звуковий пристрій %s не було знайдено (тобто, його може бути "
+"Вибраний звуковий пристрій '%s' не було знайдено (тобто, його може бути "
"вимкнено або не підключено)."
#: audio/mididrv.cpp:209 audio/mididrv.cpp:221 audio/mididrv.cpp:257
@@ -2375,7 +2368,7 @@ msgid ""
"The selected audio device '%s' cannot be used. See log file for more "
"information."
msgstr ""
-"Вибраний звуковий пристрій %s не може бути використаний. Дивіться файл логу "
+"Вибраний звуковий пристрій '%s' не може бути використаний. Дивіться файл логу "
"для додаткової інформації."
#: audio/mididrv.cpp:257
@@ -2384,7 +2377,7 @@ msgid ""
"The preferred audio device '%s' was not found (e.g. might be turned off or "
"disconnected)."
msgstr ""
-"Уподобаний звуковий пристрій %s не було знайдено (тобто, його може бути "
+"Уподобаний звуковий пристрій '%s' не було знайдено (тобто, його може бути "
"вимкнено або не підключено)."
#: audio/mididrv.cpp:272
@@ -2393,7 +2386,7 @@ msgid ""
"The preferred audio device '%s' cannot be used. See log file for more "
"information."
msgstr ""
-"Уподобаний звуковий пристрій %s не може бути використаний. Дивіться файл "
+"Уподобаний звуковий пристрій '%s' не може бути використаний. Дивіться файл "
"логу для додаткової інформації."
#: audio/null.h:43
@@ -2446,7 +2439,7 @@ msgstr " (Активна)"
#: backends/keymapper/remap-dialog.cpp:106
msgid " (Blocked)"
-msgstr ""
+msgstr " (Заблокований)"
#: backends/keymapper/remap-dialog.cpp:119
msgid " (Global)"
@@ -2866,11 +2859,11 @@ msgstr "Вільний огляд"
#: backends/platform/wince/CEActionsPocket.cpp:52
msgid "Zoom up"
-msgstr "Збіл. маштаб"
+msgstr "Збіл. масштаб"
#: backends/platform/wince/CEActionsPocket.cpp:53
msgid "Zoom down"
-msgstr "Змнш. маштаб"
+msgstr "Змнш. масштаб"
#: backends/platform/wince/CEActionsPocket.cpp:55
#: backends/platform/wince/CEActionsSmartphone.cpp:49
@@ -2939,7 +2932,7 @@ msgstr "Перепризначити дію 'Сховати Панель інстр.'"
msgid "You must map a key to the 'Hide toolbar' action to play this game"
msgstr ""
"Ви повинні перепризначити кнопку для дії 'Сховати Панель інстр.', щоб грати "
-"в цю гру"
+"у цю гру"
#: backends/platform/wince/wince-sdl.cpp:541
msgid "Map Zoom Up action (optional)"
diff --git a/ports.mk b/ports.mk
index 271a352596..9a20331924 100644
--- a/ports.mk
+++ b/ports.mk
@@ -160,6 +160,8 @@ osxsnap: bundle
cp $(srcdir)/doc/QuickStart ./ScummVM-snapshot/doc/QuickStart
mkdir ScummVM-snapshot/doc/cz
cp $(srcdir)/doc/cz/PrectiMe ./ScummVM-snapshot/doc/cz/PrectiMe
+ mkdir ScummVM-snapshot/doc/da
+ cp $(srcdir)/doc/da/HurtigStart ./ScummVM-snapshot/doc/da/HurtigStart
mkdir ScummVM-snapshot/doc/de
cp $(srcdir)/doc/de/Liesmich ./ScummVM-snapshot/doc/de/Liesmich
cp $(srcdir)/doc/de/Schnellstart ./ScummVM-snapshot/doc/de/Schnellstart
@@ -176,6 +178,7 @@ osxsnap: bundle
cp $(srcdir)/doc/se/Snabbstart ./ScummVM-snapshot/doc/se/Snabbstart
/Developer/Tools/SetFile -t ttro -c ttxt ./ScummVM-snapshot/*
xattr -w "com.apple.TextEncoding" "utf-8;134217984" ./ScummVM-snapshot/doc/cz/*
+ xattr -w "com.apple.TextEncoding" "utf-8;134217984" ./ScummVM-snapshot/doc/da/*
xattr -w "com.apple.TextEncoding" "utf-8;134217984" ./ScummVM-snapshot/doc/de/*
xattr -w "com.apple.TextEncoding" "utf-8;134217984" ./ScummVM-snapshot/doc/es/*
xattr -w "com.apple.TextEncoding" "utf-8;134217984" ./ScummVM-snapshot/doc/fr/*
@@ -206,6 +209,7 @@ win32dist: $(EXECUTABLE)
mkdir -p $(WIN32PATH)/graphics
mkdir -p $(WIN32PATH)/doc
mkdir -p $(WIN32PATH)/doc/cz
+ mkdir -p $(WIN32PATH)/doc/da
mkdir -p $(WIN32PATH)/doc/de
mkdir -p $(WIN32PATH)/doc/es
mkdir -p $(WIN32PATH)/doc/fr
@@ -231,6 +235,7 @@ endif
cp $(srcdir)/doc/fr/DemarrageRapide $(WIN32PATH)/doc/fr/DemarrageRapide.txt
cp $(srcdir)/doc/it/GuidaRapida $(WIN32PATH)/doc/it/GuidaRapida.txt
cp $(srcdir)/doc/no-nb/HurtigStart $(WIN32PATH)/doc/no-nb/HurtigStart.txt
+ cp $(srcdir)/doc/da/HurtigStart $(WIN32PATH)/doc/da/HurtigStart.txt
cp $(srcdir)/doc/de/Schnellstart $(WIN32PATH)/doc/de/Schnellstart.txt
cp $(srcdir)/doc/se/Snabbstart $(WIN32PATH)/doc/se/Snabbstart.txt
cp $(srcdir)/README $(WIN32PATH)/README.txt
@@ -246,6 +251,7 @@ endif
unix2dos $(WIN32PATH)/*.txt
unix2dos $(WIN32PATH)/doc/*.txt
unix2dos $(WIN32PATH)/doc/cz/*.txt
+ unix2dos $(WIN32PATH)/doc/da/*.txt
unix2dos $(WIN32PATH)/doc/de/*.txt
unix2dos $(WIN32PATH)/doc/es/*.txt
unix2dos $(WIN32PATH)/doc/fr/*.txt
@@ -287,6 +293,8 @@ endif
@cd $(srcdir)/dists/msvc9 && ../../devtools/create_project/create_project ../.. --msvc --msvc-version 9 >/dev/null && git add -f *.sln *.vcproj *.vsprops
@echo Creating MSVC10 project files...
@cd $(srcdir)/dists/msvc10 && ../../devtools/create_project/create_project ../.. --msvc --msvc-version 10 >/dev/null && git add -f *.sln *.vcxproj *.vcxproj.filters *.props
+ @echo Creating MSVC11 project files...
+ @cd $(srcdir)/dists/msvc11 && ../../devtools/create_project/create_project ../.. --msvc --msvc-version 11 >/dev/null && git add -f *.sln *.vcxproj *.vcxproj.filters *.props
@echo
@echo All is done.
@echo Now run