aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS18
-rw-r--r--audio/decoders/xa.cpp (renamed from audio/decoders/vag.cpp)111
-rw-r--r--audio/decoders/xa.h (renamed from audio/decoders/vag.h)18
-rw-r--r--audio/module.mk2
-rw-r--r--common/zlib.cpp29
-rw-r--r--common/zlib.h9
-rwxr-xr-xconfigure132
-rw-r--r--devtools/create_drascula/Makefile4
-rw-r--r--devtools/create_drascula/dists/msvc8/create_drascula.sln20
-rw-r--r--devtools/create_drascula/dists/msvc8/create_drascula.vcproj191
-rw-r--r--devtools/create_drascula/dists/msvc8_to_msvc9.bat32
-rw-r--r--devtools/create_drascula/dists/msvc9/create_drascula.sln20
-rw-r--r--devtools/create_drascula/dists/msvc9/create_drascula.vcproj192
-rw-r--r--devtools/create_drascula/dists/msvc9_to_msvc8.bat33
-rw-r--r--devtools/create_hugo/dists/msvc10/create_hugo.sln20
-rw-r--r--devtools/create_hugo/dists/msvc10/create_hugo.vcxproj113
-rw-r--r--devtools/create_hugo/dists/msvc9/create_hugo.sln20
-rw-r--r--devtools/create_hugo/dists/msvc9/create_hugo.vcproj219
-rw-r--r--devtools/create_kyradat/create_kyradat.h2
-rw-r--r--devtools/create_lure/Makefile4
-rw-r--r--devtools/create_lure/dists/msvc8/create_lure.sln20
-rw-r--r--devtools/create_lure/dists/msvc8/create_lure.vcproj222
-rw-r--r--devtools/create_lure/dists/msvc8_to_msvc9.bat32
-rw-r--r--devtools/create_lure/dists/msvc9/create_lure.sln20
-rw-r--r--devtools/create_lure/dists/msvc9/create_lure.vcproj223
-rw-r--r--devtools/create_lure/dists/msvc9_to_msvc8.bat33
-rw-r--r--devtools/create_mads/Makefile4
-rw-r--r--devtools/create_mads/dists/msvc9/create_mads.sln20
-rw-r--r--devtools/create_mads/dists/msvc9/create_mads.vcproj187
-rw-r--r--devtools/create_project/codeblocks.cpp32
-rw-r--r--devtools/create_project/codeblocks.h2
-rw-r--r--devtools/create_project/create_project.cpp179
-rw-r--r--devtools/create_project/create_project.h21
-rw-r--r--devtools/create_project/msbuild.cpp69
-rw-r--r--devtools/create_project/msbuild.h4
-rw-r--r--devtools/create_project/msvc.cpp35
-rw-r--r--devtools/create_project/msvc.h2
-rw-r--r--devtools/create_project/visualstudio.cpp53
-rw-r--r--devtools/create_project/visualstudio.h6
-rw-r--r--devtools/create_toon/dists/msvc9/create_toon.sln20
-rw-r--r--devtools/create_toon/dists/msvc9/create_toon.vcproj187
-rw-r--r--devtools/skycpt/AsciiCptCompile.sln21
-rw-r--r--devtools/skycpt/AsciiCptCompile.vcproj402
-rw-r--r--devtools/tasmrecover/dreamweb/object.asm5
-rwxr-xr-xdevtools/tasmrecover/tasm-recover52
-rw-r--r--devtools/tasmrecover/tasm/cpp.py8
-rw-r--r--dists/msvc10/create_msvc10.bat11
-rw-r--r--dists/msvc8/create_msvc8.bat11
-rw-r--r--dists/msvc9/create_msvc9.bat11
-rw-r--r--doc/de/Liesmich26
-rw-r--r--engines/agi/opcodes.cpp16
-rw-r--r--engines/agos/agos.cpp51
-rw-r--r--engines/agos/agos.h31
-rw-r--r--engines/agos/animation.cpp12
-rw-r--r--engines/agos/animation.h2
-rw-r--r--engines/agos/detection.cpp31
-rw-r--r--engines/agos/detection_tables.h126
-rw-r--r--engines/agos/feeble.cpp3
-rw-r--r--engines/agos/installshield_cab.cpp221
-rw-r--r--engines/agos/installshield_cab.h41
-rw-r--r--engines/agos/intern.h6
-rw-r--r--engines/agos/module.mk1
-rw-r--r--engines/agos/res.cpp111
-rw-r--r--engines/agos/res_snd.cpp26
-rw-r--r--engines/agos/rooms.cpp4
-rw-r--r--engines/agos/saveload.cpp8
-rw-r--r--engines/agos/string_pn.cpp2
-rw-r--r--engines/agos/subroutine.cpp22
-rw-r--r--engines/agos/verb_pn.cpp2
-rw-r--r--engines/cine/texte.cpp40
-rw-r--r--engines/cine/texte.h6
-rw-r--r--engines/composer/composer.cpp34
-rw-r--r--engines/composer/composer.h2
-rw-r--r--engines/composer/detection.cpp71
-rw-r--r--engines/composer/scripting.cpp6
-rw-r--r--engines/draci/game.cpp2
-rw-r--r--engines/draci/saveload.cpp2
-rw-r--r--engines/drascula/drascula.h3
-rw-r--r--engines/drascula/saveload.cpp109
-rw-r--r--engines/dreamweb/backdrop.cpp66
-rw-r--r--engines/dreamweb/dreamgen.cpp2352
-rw-r--r--engines/dreamweb/dreamgen.h229
-rw-r--r--engines/dreamweb/dreamweb.cpp13
-rw-r--r--engines/dreamweb/dreamweb.h2
-rw-r--r--engines/dreamweb/module.mk1
-rw-r--r--engines/dreamweb/pathfind.cpp106
-rw-r--r--engines/dreamweb/print.cpp23
-rw-r--r--engines/dreamweb/sprite.cpp104
-rw-r--r--engines/dreamweb/structs.h71
-rw-r--r--engines/dreamweb/stubs.cpp843
-rw-r--r--engines/dreamweb/stubs.h112
-rw-r--r--engines/dreamweb/use.cpp178
-rw-r--r--engines/dreamweb/vgagrafx.cpp61
-rw-r--r--engines/gob/anifile.cpp326
-rw-r--r--engines/gob/anifile.h161
-rw-r--r--engines/gob/aniobject.cpp185
-rw-r--r--engines/gob/aniobject.h99
-rw-r--r--engines/gob/console.cpp18
-rw-r--r--engines/gob/console.h1
-rw-r--r--engines/gob/dataio.cpp116
-rw-r--r--engines/gob/dataio.h15
-rw-r--r--engines/gob/decfile.cpp214
-rw-r--r--engines/gob/decfile.h111
-rw-r--r--engines/gob/detection_tables.h20
-rw-r--r--engines/gob/draw_v1.cpp4
-rw-r--r--engines/gob/game.cpp9
-rw-r--r--engines/gob/gob.cpp13
-rw-r--r--engines/gob/hotspots.cpp37
-rw-r--r--engines/gob/hotspots.h4
-rw-r--r--engines/gob/init.cpp2
-rw-r--r--engines/gob/init.h10
-rw-r--r--engines/gob/init_geisha.cpp47
-rw-r--r--engines/gob/init_v1.cpp4
-rw-r--r--engines/gob/init_v2.cpp4
-rw-r--r--engines/gob/inter.h39
-rw-r--r--engines/gob/inter_bargon.cpp6
-rw-r--r--engines/gob/inter_geisha.cpp312
-rw-r--r--engines/gob/inter_v1.cpp16
-rw-r--r--engines/gob/inter_v6.cpp1
-rw-r--r--engines/gob/minigames/geisha/diving.cpp155
-rw-r--r--engines/gob/minigames/geisha/diving.h68
-rw-r--r--engines/gob/minigames/geisha/evilfish.cpp163
-rw-r--r--engines/gob/minigames/geisha/evilfish.h86
-rw-r--r--engines/gob/minigames/geisha/penetration.cpp106
-rw-r--r--engines/gob/minigames/geisha/penetration.h61
-rw-r--r--engines/gob/module.mk10
-rw-r--r--engines/gob/palanim.cpp9
-rw-r--r--engines/gob/rxyfile.cpp82
-rw-r--r--engines/gob/rxyfile.h76
-rw-r--r--engines/gob/save/saveload.h54
-rw-r--r--engines/gob/save/saveload_geisha.cpp215
-rw-r--r--engines/gob/sound/sound.cpp8
-rw-r--r--engines/gob/util.cpp45
-rw-r--r--engines/gob/util.h9
-rw-r--r--engines/gob/videoplayer.cpp4
-rw-r--r--engines/gob/videoplayer.h2
-rw-r--r--engines/groovie/roq.cpp51
-rw-r--r--engines/groovie/roq.h11
-rw-r--r--engines/hugo/intro.cpp2
-rw-r--r--engines/hugo/object.cpp2
-rw-r--r--engines/hugo/parser.cpp2
-rw-r--r--engines/hugo/schedule.cpp8
-rw-r--r--engines/hugo/sound.cpp132
-rw-r--r--engines/hugo/sound.h12
-rw-r--r--engines/kyra/animator_mr.cpp2
-rw-r--r--engines/kyra/kyra_hof.cpp4
-rw-r--r--engines/kyra/kyra_hof.h4
-rw-r--r--engines/kyra/kyra_mr.h2
-rw-r--r--engines/kyra/sequences_mr.cpp4
-rw-r--r--engines/kyra/sound_adlib.cpp4
-rw-r--r--engines/kyra/staticres.cpp22
-rw-r--r--engines/kyra/staticres_lol.cpp12
-rw-r--r--engines/kyra/text_hof.cpp2
-rw-r--r--engines/kyra/text_mr.cpp2
-rw-r--r--engines/lastexpress/entities/francois.cpp4
-rw-r--r--engines/lure/hotspots.cpp6
-rw-r--r--engines/mohawk/cursors.cpp6
-rw-r--r--engines/mohawk/graphics.cpp42
-rw-r--r--engines/mohawk/graphics.h1
-rw-r--r--engines/mohawk/myst_stacks/channelwood.cpp10
-rw-r--r--engines/mohawk/myst_stacks/demo.cpp9
-rw-r--r--engines/mohawk/myst_stacks/dni.cpp2
-rw-r--r--engines/mohawk/myst_stacks/myst.cpp4
-rw-r--r--engines/mohawk/myst_stacks/preview.cpp10
-rw-r--r--engines/mohawk/myst_stacks/slides.cpp2
-rw-r--r--engines/parallaction/gfxbase.cpp21
-rw-r--r--engines/parallaction/walk.cpp80
-rw-r--r--engines/queen/graphics.cpp2
-rw-r--r--engines/queen/input.cpp2
-rw-r--r--engines/queen/input.h2
-rw-r--r--engines/queen/musicdata.cpp2
-rw-r--r--engines/queen/resource.cpp2
-rw-r--r--engines/queen/resource.h2
-rw-r--r--engines/queen/sound.h2
-rw-r--r--engines/saga/interface.cpp1
-rw-r--r--engines/saga/sthread.cpp17
-rw-r--r--engines/sci/detection.cpp11
-rw-r--r--engines/sci/detection_tables.h20
-rw-r--r--engines/sci/engine/kernel_tables.h6
-rw-r--r--engines/sci/engine/kgraphics.cpp18
-rw-r--r--engines/sci/engine/kstring.cpp8
-rw-r--r--engines/sci/engine/script_patches.cpp18
-rw-r--r--engines/sci/engine/workarounds.cpp2
-rw-r--r--engines/sci/graphics/cursor.cpp2
-rw-r--r--engines/sci/graphics/frameout.cpp86
-rw-r--r--engines/sci/graphics/text32.cpp238
-rw-r--r--engines/sci/graphics/text32.h71
-rw-r--r--engines/sci/module.mk1
-rw-r--r--engines/sci/resource.cpp36
-rw-r--r--engines/sci/sci.cpp4
-rw-r--r--engines/sci/sci.h2
-rw-r--r--engines/sci/sound/drivers/gm_names.h4
-rw-r--r--engines/sci/sound/midiparser_sci.cpp23
-rw-r--r--engines/sci/sound/soundcmd.cpp31
-rw-r--r--engines/sci/sound/soundcmd.h1
-rw-r--r--engines/scumm/actor.cpp4
-rw-r--r--engines/scumm/charset.cpp26
-rw-r--r--engines/scumm/charset.h3
-rw-r--r--engines/scumm/costume.cpp12
-rw-r--r--engines/scumm/cursor.cpp11
-rw-r--r--engines/scumm/detection.cpp4
-rw-r--r--engines/scumm/detection_tables.h2
-rw-r--r--engines/scumm/dialogs.cpp2
-rw-r--r--engines/scumm/gfx.cpp30
-rw-r--r--engines/scumm/he/intern_he.h1
-rw-r--r--engines/scumm/he/logic/basketball.cpp2
-rw-r--r--engines/scumm/he/resource_he.cpp34
-rw-r--r--engines/scumm/he/script_v90he.cpp2
-rw-r--r--engines/scumm/palette.cpp449
-rw-r--r--engines/scumm/resource.cpp33
-rw-r--r--engines/scumm/resource.h7
-rw-r--r--engines/scumm/room.cpp7
-rw-r--r--engines/scumm/saveload.cpp28
-rw-r--r--engines/scumm/saveload.h2
-rw-r--r--engines/scumm/script_v0.cpp2
-rw-r--r--engines/scumm/scumm.cpp6
-rw-r--r--engines/scumm/scumm.h13
-rw-r--r--engines/sky/compact.cpp2
-rw-r--r--engines/sky/compact.h2
-rw-r--r--engines/sky/debug.cpp12
-rw-r--r--engines/sky/disk.cpp4
-rw-r--r--engines/sky/sound.cpp2
-rw-r--r--engines/sword1/animation.cpp2
-rw-r--r--engines/sword1/control.cpp110
-rw-r--r--engines/sword1/control.h4
-rw-r--r--engines/sword1/detection.cpp38
-rw-r--r--engines/sword1/eventman.cpp36
-rw-r--r--engines/sword1/logic.cpp166
-rw-r--r--engines/sword1/logic.h194
-rw-r--r--engines/sword1/memman.cpp2
-rw-r--r--engines/sword1/memman.h6
-rw-r--r--engines/sword1/menu.cpp4
-rw-r--r--engines/sword1/mouse.cpp36
-rw-r--r--engines/sword1/mouse.h22
-rw-r--r--engines/sword1/music.cpp8
-rw-r--r--engines/sword1/music.h2
-rw-r--r--engines/sword1/object.h160
-rw-r--r--engines/sword1/objectman.cpp30
-rw-r--r--engines/sword1/objectman.h8
-rw-r--r--engines/sword1/resman.cpp108
-rw-r--r--engines/sword1/resman.h24
-rw-r--r--engines/sword1/router.cpp338
-rw-r--r--engines/sword1/router.h54
-rw-r--r--engines/sword1/screen.cpp78
-rw-r--r--engines/sword1/screen.h25
-rw-r--r--engines/sword1/sound.cpp97
-rw-r--r--engines/sword1/sound.h16
-rw-r--r--engines/sword1/staticres.cpp4
-rw-r--r--engines/sword1/sword1.cpp78
-rw-r--r--engines/sword1/sword1.h42
-rw-r--r--engines/sword1/sworddefs.h100
-rw-r--r--engines/sword1/text.cpp30
-rw-r--r--engines/sword1/text.h10
-rw-r--r--engines/sword2/music.cpp4
-rw-r--r--engines/sword2/sound.cpp6
-rw-r--r--engines/tinsel/sound.cpp9
-rw-r--r--engines/tinsel/tinsel.cpp6
-rw-r--r--engines/tinsel/tinsel.h6
-rw-r--r--engines/toon/anim.cpp4
-rw-r--r--engines/toon/audio.cpp6
-rw-r--r--engines/toon/picture.cpp2
-rw-r--r--engines/toon/resource.cpp2
-rw-r--r--engines/toon/script_func.cpp4
-rw-r--r--engines/toon/tools.cpp2
-rw-r--r--engines/toon/toon.cpp12
-rw-r--r--engines/tsage/blue_force/blueforce_dialogs.cpp434
-rw-r--r--engines/tsage/blue_force/blueforce_dialogs.h92
-rw-r--r--engines/tsage/blue_force/blueforce_logic.cpp645
-rw-r--r--engines/tsage/blue_force/blueforce_logic.h165
-rw-r--r--engines/tsage/blue_force/blueforce_scenes0.cpp649
-rw-r--r--engines/tsage/blue_force/blueforce_scenes0.h85
-rw-r--r--engines/tsage/blue_force/blueforce_scenes1.cpp283
-rw-r--r--engines/tsage/blue_force/blueforce_scenes1.h57
-rw-r--r--engines/tsage/blue_force/blueforce_scenes3.cpp1445
-rw-r--r--engines/tsage/blue_force/blueforce_scenes3.h250
-rw-r--r--engines/tsage/blue_force/blueforce_scenes6.cpp168
-rw-r--r--engines/tsage/blue_force/blueforce_scenes6.h70
-rw-r--r--engines/tsage/blue_force/blueforce_speakers.cpp320
-rw-r--r--engines/tsage/blue_force/blueforce_speakers.h139
-rw-r--r--engines/tsage/blue_force/blueforce_ui.cpp476
-rw-r--r--engines/tsage/blue_force/blueforce_ui.h152
-rw-r--r--engines/tsage/converse.cpp13
-rw-r--r--engines/tsage/converse.h7
-rw-r--r--engines/tsage/core.cpp391
-rw-r--r--engines/tsage/core.h73
-rw-r--r--engines/tsage/debugger.cpp56
-rw-r--r--engines/tsage/debugger.h1
-rw-r--r--engines/tsage/dialogs.cpp190
-rw-r--r--engines/tsage/dialogs.h36
-rw-r--r--engines/tsage/events.cpp64
-rw-r--r--engines/tsage/events.h27
-rw-r--r--engines/tsage/globals.cpp78
-rw-r--r--engines/tsage/globals.h78
-rw-r--r--engines/tsage/graphics.cpp23
-rw-r--r--engines/tsage/module.mk7
-rw-r--r--engines/tsage/ringworld/ringworld_dialogs.cpp222
-rw-r--r--engines/tsage/ringworld/ringworld_dialogs.h70
-rw-r--r--engines/tsage/ringworld/ringworld_logic.cpp935
-rw-r--r--engines/tsage/ringworld/ringworld_logic.h327
-rw-r--r--engines/tsage/ringworld/ringworld_scenes1.h1
-rw-r--r--engines/tsage/ringworld/ringworld_scenes10.cpp250
-rw-r--r--engines/tsage/ringworld/ringworld_scenes10.h1
-rw-r--r--engines/tsage/ringworld/ringworld_scenes2.h1
-rw-r--r--engines/tsage/ringworld/ringworld_scenes3.h1
-rw-r--r--engines/tsage/ringworld/ringworld_scenes4.h1
-rw-r--r--engines/tsage/ringworld/ringworld_scenes5.cpp6
-rw-r--r--engines/tsage/ringworld/ringworld_scenes5.h1
-rw-r--r--engines/tsage/ringworld/ringworld_scenes6.h1
-rw-r--r--engines/tsage/ringworld/ringworld_scenes8.h1
-rw-r--r--engines/tsage/ringworld/ringworld_speakers.cpp905
-rw-r--r--engines/tsage/ringworld/ringworld_speakers.h337
-rw-r--r--engines/tsage/saveload.h12
-rw-r--r--engines/tsage/scenes.cpp56
-rw-r--r--engines/tsage/scenes.h11
-rw-r--r--engines/tsage/sound.cpp13
-rw-r--r--engines/tsage/sound.h7
-rw-r--r--engines/tsage/staticres.cpp13
-rw-r--r--engines/tsage/staticres.h7
-rw-r--r--engines/tsage/tsage.cpp6
-rw-r--r--engines/tsage/tsage.h1
-rw-r--r--engines/tucker/staticres.cpp2
-rw-r--r--engines/tucker/tucker.h2
-rw-r--r--graphics/dither.cpp313
-rw-r--r--graphics/dither.h195
-rw-r--r--graphics/module.mk1
-rw-r--r--graphics/sjis.cpp79
-rw-r--r--graphics/sjis.h4
-rw-r--r--gui/themes/translations.datbin244275 -> 254203 bytes
-rw-r--r--po/cs_CZ.po5584
-rw-r--r--po/fr_FR.po5548
-rw-r--r--po/hu_HU.po5566
-rw-r--r--ports.mk2
-rw-r--r--test/cxxtest_mingw.h11
-rw-r--r--test/module.mk2
334 files changed, 24781 insertions, 17060 deletions
diff --git a/NEWS b/NEWS
index c132abff60..8811660f23 100644
--- a/NEWS
+++ b/NEWS
@@ -7,8 +7,22 @@ For a more comprehensive changelog of the latest experimental code, see:
- Added support for Blue's Birthday Adventure
- Added support for Ringworld: Revenge Of The Patriarch
+ New Ports:
+ - Added PlayStation 3 port.
+
AGI:
- - Implemented sound support for the DOS version of Winnie the Pooh in the Hundred Acre Wood.
+ - Implemented sound support for the DOS version of Winnie the Pooh in the
+ Hundred Acre Wood.
+
+ AGOS:
+ - Implemented support for loading data directly from InstallShield
+ cabinets in The Feeble Files and Simon the Sorcerer's Puzzle Pack.
+
+ Groovie:
+ - Added support for the iOS version of The 7th Guest.
+
+ Lure:
+ - Fixed crash when trying to talk and ask something at the same time.
SCUMM:
- Implemented PC Speaker support for SCUMM v5 games.
@@ -16,6 +30,8 @@ For a more comprehensive changelog of the latest experimental code, see:
better, since important notes are not interrupted anymore.
- Implemented CMS support for Loom, The Secret of Monkey Island and
Indiana Jones and the Last Crusade.
+ - Improved palette handling for the Amiga version of Indiana Jones and the
+ Fate of Atlantis.
SDL ports:
- Added support for OpenGL (GSoC Task).
diff --git a/audio/decoders/vag.cpp b/audio/decoders/xa.cpp
index 10ef69708c..818cd2df59 100644
--- a/audio/decoders/vag.cpp
+++ b/audio/decoders/xa.cpp
@@ -20,79 +20,78 @@
*
*/
-#include "audio/decoders/vag.h"
+#include "audio/decoders/xa.h"
#include "audio/audiostream.h"
#include "common/stream.h"
namespace Audio {
-class VagStream : public Audio::RewindableAudioStream {
+class XAStream : public Audio::RewindableAudioStream {
public:
- VagStream(Common::SeekableReadStream *stream, int rate);
- ~VagStream();
+ XAStream(Common::SeekableReadStream *stream, int rate, DisposeAfterUse::Flag disposeAfterUse);
+ ~XAStream();
bool isStereo() const { return false; }
- bool endOfData() const { return _stream->pos() == _stream->size(); }
+ bool endOfData() const { return _endOfData && _samplesRemaining == 0; }
int getRate() const { return _rate; }
int readBuffer(int16 *buffer, const int numSamples);
bool rewind();
private:
Common::SeekableReadStream *_stream;
+ DisposeAfterUse::Flag _disposeAfterUse;
+
+ void seekToPos(uint pos);
byte _predictor;
double _samples[28];
byte _samplesRemaining;
int _rate;
double _s1, _s2;
+ uint _loopPoint;
+ bool _endOfData;
};
-VagStream::VagStream(Common::SeekableReadStream *stream, int rate) : _stream(stream) {
+XAStream::XAStream(Common::SeekableReadStream *stream, int rate, DisposeAfterUse::Flag disposeAfterUse)
+ : _stream(stream), _disposeAfterUse(disposeAfterUse) {
_samplesRemaining = 0;
_predictor = 0;
_s1 = _s2 = 0.0;
_rate = rate;
+ _loopPoint = 0;
+ _endOfData = false;
}
-VagStream::~VagStream() {
- delete _stream;
+XAStream::~XAStream() {
+ if (_disposeAfterUse == DisposeAfterUse::YES)
+ delete _stream;
}
-static const double s_vagDataTable[5][2] =
- {
- { 0.0, 0.0 },
- { 60.0 / 64.0, 0.0 },
- { 115.0 / 64.0, -52.0 / 64.0 },
- { 98.0 / 64.0, -55.0 / 64.0 },
- { 122.0 / 64.0, -60.0 / 64.0 }
- };
+static const double s_xaDataTable[5][2] = {
+ { 0.0, 0.0 },
+ { 60.0 / 64.0, 0.0 },
+ { 115.0 / 64.0, -52.0 / 64.0 },
+ { 98.0 / 64.0, -55.0 / 64.0 },
+ { 122.0 / 64.0, -60.0 / 64.0 }
+};
-int VagStream::readBuffer(int16 *buffer, const int numSamples) {
+int XAStream::readBuffer(int16 *buffer, const int numSamples) {
int32 samplesDecoded = 0;
- if (_samplesRemaining) {
- byte i = 0;
-
- for (i = 28 - _samplesRemaining; i < 28 && samplesDecoded < numSamples; i++) {
- _samples[i] = _samples[i] + _s1 * s_vagDataTable[_predictor][0] + _s2 * s_vagDataTable[_predictor][1];
- _s2 = _s1;
- _s1 = _samples[i];
- int16 d = (int) (_samples[i] + 0.5);
- buffer[samplesDecoded] = d;
- samplesDecoded++;
- }
-
-#if 0
- assert(i == 28); // We're screwed if this fails :P
-#endif
- // This might mean the file is corrupted, or that the stream has
- // been closed.
- if (i != 28) return 0;
-
- _samplesRemaining = 0;
+ for (int i = 28 - _samplesRemaining; i < 28 && samplesDecoded < numSamples; i++) {
+ _samples[i] = _samples[i] + _s1 * s_xaDataTable[_predictor][0] + _s2 * s_xaDataTable[_predictor][1];
+ _s2 = _s1;
+ _s1 = _samples[i];
+ int16 d = (int) (_samples[i] + 0.5);
+ buffer[samplesDecoded] = d;
+ samplesDecoded++;
+ _samplesRemaining--;
}
+ if (endOfData())
+ return samplesDecoded;
+
while (samplesDecoded < numSamples) {
byte i = 0;
@@ -100,8 +99,19 @@ int VagStream::readBuffer(int16 *buffer, const int numSamples) {
byte shift = _predictor & 0xf;
_predictor >>= 4;
- if (_stream->readByte() == 7)
+ byte flags = _stream->readByte();
+ if (flags == 3) {
+ // Loop
+ seekToPos(_loopPoint);
+ continue;
+ } else if (flags == 6) {
+ // Set loop point
+ _loopPoint = _stream->pos() - 2;
+ } else if (flags == 7) {
+ // End of stream
+ _endOfData = true;
return samplesDecoded;
+ }
for (i = 0; i < 28; i += 2) {
byte d = _stream->readByte();
@@ -116,7 +126,7 @@ int VagStream::readBuffer(int16 *buffer, const int numSamples) {
}
for (i = 0; i < 28 && samplesDecoded < numSamples; i++) {
- _samples[i] = _samples[i] + _s1 * s_vagDataTable[_predictor][0] + _s2 * s_vagDataTable[_predictor][1];
+ _samples[i] = _samples[i] + _s1 * s_xaDataTable[_predictor][0] + _s2 * s_xaDataTable[_predictor][1];
_s2 = _s1;
_s1 = _samples[i];
int16 d = (int) (_samples[i] + 0.5);
@@ -124,24 +134,31 @@ int VagStream::readBuffer(int16 *buffer, const int numSamples) {
samplesDecoded++;
}
- if (i != 27)
+ if (i != 28)
_samplesRemaining = 28 - i;
+
+ if (_stream->pos() >= _stream->size())
+ _endOfData = true;
}
return samplesDecoded;
}
-bool VagStream::rewind() {
- _stream->seek(0);
+bool XAStream::rewind() {
+ seekToPos(0);
+ return true;
+}
+
+void XAStream::seekToPos(uint pos) {
+ _stream->seek(pos);
_samplesRemaining = 0;
_predictor = 0;
_s1 = _s2 = 0.0;
-
- return true;
+ _endOfData = false;
}
-RewindableAudioStream *makeVagStream(Common::SeekableReadStream *stream, int rate) {
- return new VagStream(stream, rate);
+RewindableAudioStream *makeXAStream(Common::SeekableReadStream *stream, int rate, DisposeAfterUse::Flag disposeAfterUse) {
+ return new XAStream(stream, rate, disposeAfterUse);
}
-}
+} // End of namespace Audio
diff --git a/audio/decoders/vag.h b/audio/decoders/xa.h
index b80fbdb98f..cf28d8001a 100644
--- a/audio/decoders/vag.h
+++ b/audio/decoders/xa.h
@@ -28,8 +28,10 @@
* - tinsel (PSX port of the game)
*/
-#ifndef SOUND_VAG_H
-#define SOUND_VAG_H
+#ifndef AUDIO_DECODERS_XA_H
+#define AUDIO_DECODERS_XA_H
+
+#include "common/types.h"
namespace Common {
class SeekableReadStream;
@@ -40,17 +42,19 @@ namespace Audio {
class RewindableAudioStream;
/**
- * Takes an input stream containing Vag sound data and creates
+ * Takes an input stream containing XA ADPCM sound data and creates
* an RewindableAudioStream from that.
*
- * @param stream the SeekableReadStream from which to read the ADPCM data
+ * @param stream the SeekableReadStream from which to read the XA ADPCM data
* @param rate the sampling rate
+ * @param disposeAfterUse whether to delete the stream after use.
* @return a new RewindableAudioStream, or NULL, if an error occurred
*/
-RewindableAudioStream *makeVagStream(
+RewindableAudioStream *makeXAStream(
Common::SeekableReadStream *stream,
- int rate = 11025);
+ int rate,
+ DisposeAfterUse::Flag disposeAfterUse = DisposeAfterUse::YES);
-} // End of namespace Sword1
+} // End of namespace Audio
#endif
diff --git a/audio/module.mk b/audio/module.mk
index 46cb9944e1..e3aa0aaa81 100644
--- a/audio/module.mk
+++ b/audio/module.mk
@@ -23,10 +23,10 @@ MODULE_OBJS := \
decoders/qdm2.o \
decoders/quicktime.o \
decoders/raw.o \
- decoders/vag.o \
decoders/voc.o \
decoders/vorbis.o \
decoders/wave.o \
+ decoders/xa.o \
mods/infogrames.o \
mods/maxtrax.o \
mods/module.o \
diff --git a/common/zlib.cpp b/common/zlib.cpp
index 86c618830e..70133fea30 100644
--- a/common/zlib.cpp
+++ b/common/zlib.cpp
@@ -49,6 +49,35 @@ bool uncompress(byte *dst, unsigned long *dstLen, const byte *src, unsigned long
return Z_OK == ::uncompress(dst, dstLen, src, srcLen);
}
+bool inflateZlibHeaderless(byte *dst, uint dstLen, const byte *src, uint srcLen) {
+ if (!dst || !dstLen || !src || !srcLen)
+ return false;
+
+ // Initialize zlib
+ z_stream stream;
+ stream.next_in = const_cast<byte *>(src);
+ stream.avail_in = srcLen;
+ stream.next_out = dst;
+ stream.avail_out = dstLen;
+ stream.zalloc = Z_NULL;
+ stream.zfree = Z_NULL;
+ stream.opaque = Z_NULL;
+
+ // Negative MAX_WBITS tells zlib there's no zlib header
+ int err = inflateInit2(&stream, -MAX_WBITS);
+ if (err != Z_OK)
+ return false;
+
+ err = inflate(&stream, Z_SYNC_FLUSH);
+ if (err != Z_OK && err != Z_STREAM_END) {
+ inflateEnd(&stream);
+ return false;
+ }
+
+ inflateEnd(&stream);
+ return true;
+}
+
/**
* A simple wrapper class which can be used to wrap around an arbitrary
* other SeekableReadStream and will then provide on-the-fly decompression support.
diff --git a/common/zlib.h b/common/zlib.h
index 1925034310..7af7df0da8 100644
--- a/common/zlib.h
+++ b/common/zlib.h
@@ -41,6 +41,15 @@ class WriteStream;
*/
bool uncompress(byte *dst, unsigned long *dstLen, const byte *src, unsigned long srcLen);
+/**
+ * Wrapper around zlib's inflate functions. This function will call the
+ * necessary inflate functions to uncompress data compressed with deflate
+ * but *not* with the standard zlib header.
+ *
+ * @return true on success (Z_OK or Z_STREAM_END), false otherwise
+ */
+bool inflateZlibHeaderless(byte *dst, uint dstLen, const byte *src, uint srcLen);
+
#endif
/**
diff --git a/configure b/configure
index 9c1ecebea8..617a1209ee 100755
--- a/configure
+++ b/configure
@@ -1073,12 +1073,12 @@ arm-riscos)
;;
bada)
_host_os=bada
- if test "$_debug_build" = yes; then
- _host_cpu=i686
- _host_alias=i686-mingw32
- else
- _host_cpu=arm
- _host_alias=arm-samsung-nucleuseabi
+ if test "$_debug_build" = yes; then
+ _host_cpu=i686
+ _host_alias=i686-mingw32
+ else
+ _host_cpu=arm
+ _host_alias=arm-samsung-nucleuseabi
fi
;;
caanoo)
@@ -1794,12 +1794,12 @@ case $_host_os in
_seq_midi=no
;;
bada)
- BADA_SDK_ROOT="`cygpath -m ${BADA_SDK}`"
- add_line_to_config_mk "BADA_SDK = $BADA_SDK"
- add_line_to_config_mk "BADA_SDK_ROOT = $BADA_SDK_ROOT"
+ BADA_SDK_ROOT="`cygpath -m ${BADA_SDK}`"
+ add_line_to_config_mk "BADA_SDK = $BADA_SDK"
+ add_line_to_config_mk "BADA_SDK_ROOT = $BADA_SDK_ROOT"
- # assume dependencies have been installed in cygwin's /usr/local
- CYGWIN_USR_LOCAL="`cygpath -m /usr/local`"
+ # assume dependencies have been installed in cygwin's /usr/local
+ CYGWIN_USR_LOCAL="`cygpath -m /usr/local`"
LDFLAGS="$LDFLAGS -L${CYGWIN_USR_LOCAL}/lib"
CXXFLAGS="$CXXFLAGS -I${CYGWIN_USR_LOCAL}/include"
;;
@@ -1820,6 +1820,28 @@ case $_host_os in
DEFINES="$DEFINES -DMACOSX"
LIBS="$LIBS -framework AudioUnit -framework AudioToolbox -framework Carbon -framework CoreMIDI"
add_line_to_config_mk 'MACOSX = 1'
+
+ # Now we may have MacPorts or Fink installed
+ # Which put libraries and headers in non-standard places
+ # Checking them here
+
+ # MacPorts
+ # There is no way to get the prefix, so implementing a hack here
+ macport_version=`port version 2>/dev/null`
+ if test "$?" -eq 0; then
+ macport_version="`echo "${macport_version}" | sed -ne 's/Version: \([0-9]\.[0-9]\.[0-9]\)/\1/gp'sed -ne 's/Version: \([0-9]\.[0-9]\.[0-9]\)/\1/gp'`"
+ echo_n "You seem to be running MacPorts version ${macport_version}..."
+
+ macport_prefix=`which port`
+ # strip off /bin/port from /opt/local/bin/port
+ macport_prefix=`dirname ${macport_prefix}`
+ macport_prefix=`dirname ${macport_prefix}`
+
+ echo "adding ${macport_prefix} to paths"
+
+ LDFLAGS="-L${macport_prefix}/lib $LDFLAGS"
+ CXXFLAGS="-I${macport_prefix}/include $CXXFLAGS"
+ fi
;;
dreamcast)
DEFINES="$DEFINES -D__DC__"
@@ -2030,21 +2052,21 @@ if test -n "$_host"; then
DEFINES="$DEFINES -DLINUPY"
;;
bada)
- _unix=yes
- _backend="bada"
- _port_mk="backends/platform/bada/bada.mk"
- if test "$_debug_build" = yes; then
- _arm_asm=no
- else
- _arm_asm=yes
- fi
- _taskbar=no
- _build_scalers=no
- _seq_midi=no
- _mt32emu=no
- _timidity=no
+ _unix=yes
+ _backend="bada"
+ _port_mk="backends/platform/bada/bada.mk"
+ if test "$_debug_build" = yes; then
+ _arm_asm=no
+ else
+ _arm_asm=yes
+ fi
+ _taskbar=no
+ _build_scalers=no
+ _seq_midi=no
+ _mt32emu=no
+ _timidity=no
_vkeybd=yes
- ;;
+ ;;
bfin*)
;;
caanoo)
@@ -2379,33 +2401,33 @@ case $_backend in
LDFLAGS="$LDFLAGS -Wl,-z,noexecstack"
;;
bada)
- # dirent.h not available. NONSTANDARD_PORT==ensure portdefs.h is included
- DEFINES="$DEFINES -DBADA -DDISABLE_STDIO_FILESTREAM -DNONSTANDARD_PORT"
- DEFINES="$DEFINES -DNO_STDERR_STDOUT"
+ # dirent.h not available. NONSTANDARD_PORT==ensure portdefs.h is included
+ DEFINES="$DEFINES -DBADA -DDISABLE_STDIO_FILESTREAM -DNONSTANDARD_PORT"
+ DEFINES="$DEFINES -DNO_STDERR_STDOUT"
DEFINES="$DEFINES -DDISABLE_COMMAND_LINE"
- INCLUDES="$INCLUDES "'-I$(srcdir)/backends/platform/bada '
- INCLUDES="$INCLUDES "'-I$(BADA_SDK)/include'
- INCLUDES="$INCLUDES "'-I$(BADA_SDK_ROOT)/Include'
- if test "$_debug_build" = yes; then
- # debug using with the simulator
- CXXFLAGS="$CXXFLAGS -D_DEBUG -DSHP -DBUILD_DLL -fmessage-length=0"
- else
- # created a shared library for inclusion via the eclipse build
- CXXFLAGS="$CXXFLAGS -DSHP"
- CXXFLAGS="$CXXFLAGS -fpic"
- CXXFLAGS="$CXXFLAGS -fshort-wchar"
- CXXFLAGS="$CXXFLAGS -mcpu=cortex-a8"
- CXXFLAGS="$CXXFLAGS -mfpu=vfpv3"
- CXXFLAGS="$CXXFLAGS -mfloat-abi=hard"
- CXXFLAGS="$CXXFLAGS -mlittle-endian"
- CXXFLAGS="$CXXFLAGS -mthumb-interwork"
- CXXFLAGS="$CXXFLAGS -Wno-psabi"
- CXXFLAGS="$CXXFLAGS -fno-strict-aliasing"
- CXXFLAGS="$CXXFLAGS -fno-short-enums"
- fi
- HOSTEXEPRE=lib
- HOSTEXEEXT=.a
- ;;
+ INCLUDES="$INCLUDES "'-I$(srcdir)/backends/platform/bada '
+ INCLUDES="$INCLUDES "'-I$(BADA_SDK)/include'
+ INCLUDES="$INCLUDES "'-I$(BADA_SDK_ROOT)/Include'
+ if test "$_debug_build" = yes; then
+ # debug using with the simulator
+ CXXFLAGS="$CXXFLAGS -D_DEBUG -DSHP -DBUILD_DLL -fmessage-length=0"
+ else
+ # created a shared library for inclusion via the eclipse build
+ CXXFLAGS="$CXXFLAGS -DSHP"
+ CXXFLAGS="$CXXFLAGS -fpic"
+ CXXFLAGS="$CXXFLAGS -fshort-wchar"
+ CXXFLAGS="$CXXFLAGS -mcpu=cortex-a8"
+ CXXFLAGS="$CXXFLAGS -mfpu=vfpv3"
+ CXXFLAGS="$CXXFLAGS -mfloat-abi=hard"
+ CXXFLAGS="$CXXFLAGS -mlittle-endian"
+ CXXFLAGS="$CXXFLAGS -mthumb-interwork"
+ CXXFLAGS="$CXXFLAGS -Wno-psabi"
+ CXXFLAGS="$CXXFLAGS -fno-strict-aliasing"
+ CXXFLAGS="$CXXFLAGS -fno-short-enums"
+ fi
+ HOSTEXEPRE=lib
+ HOSTEXEEXT=.a
+ ;;
dc)
INCLUDES="$INCLUDES "'-I$(srcdir)/backends/platform/dc'
INCLUDES="$INCLUDES "'-isystem $(ronindir)/include'
@@ -3263,10 +3285,10 @@ fi
case $_host_os in
bada)
- # components live in non-standard locations so just assume sane SDK
- _opengl=yes
- _opengles=yes
- ;;
+ # components live in non-standard locations so just assume sane SDK
+ _opengl=yes
+ _opengles=yes
+ ;;
esac
if test "$_opengles" = "yes" ; then
diff --git a/devtools/create_drascula/Makefile b/devtools/create_drascula/Makefile
deleted file mode 100644
index 3052436b55..0000000000
--- a/devtools/create_drascula/Makefile
+++ /dev/null
@@ -1,4 +0,0 @@
-# $Id$
-
-all:
- g++ -I../.. create_drascula.cpp -o create_drascula
diff --git a/devtools/create_drascula/dists/msvc8/create_drascula.sln b/devtools/create_drascula/dists/msvc8/create_drascula.sln
deleted file mode 100644
index dc7428bb80..0000000000
--- a/devtools/create_drascula/dists/msvc8/create_drascula.sln
+++ /dev/null
@@ -1,20 +0,0 @@
-ďťż
-Microsoft Visual Studio Solution File, Format Version 9.00
-# Visual Studio 2005
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "create_drascula", "create_drascula.vcproj", "{5F280130-349D-11DD-AE16-0800200C9A66}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Win32 = Debug|Win32
- Release|Win32 = Release|Win32
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {5F280130-349D-11DD-AE16-0800200C9A66}.Debug|Win32.ActiveCfg = Debug|Win32
- {5F280130-349D-11DD-AE16-0800200C9A66}.Debug|Win32.Build.0 = Debug|Win32
- {5F280130-349D-11DD-AE16-0800200C9A66}.Release|Win32.ActiveCfg = Release|Win32
- {5F280130-349D-11DD-AE16-0800200C9A66}.Release|Win32.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/devtools/create_drascula/dists/msvc8/create_drascula.vcproj b/devtools/create_drascula/dists/msvc8/create_drascula.vcproj
deleted file mode 100644
index 3b26261a76..0000000000
--- a/devtools/create_drascula/dists/msvc8/create_drascula.vcproj
+++ /dev/null
@@ -1,191 +0,0 @@
-<?xml version="1.0" encoding="windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8,00"
- Name="create_drascula"
- ProjectGUID="{5F280130-349D-11DD-AE16-0800200C9A66}"
- RootNamespace="create_drascula"
- Keyword="Win32Proj"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/wd4996"
- Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/create_drascula.exe"
- LinkIncremental="2"
- IgnoreDefaultLibraryNames="libc.lib;libcmt.lib"
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)/create_drascula.pdb"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/wd4996"
- Optimization="3"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/create_drascula.exe"
- LinkIncremental="1"
- IgnoreDefaultLibraryNames="libc.lib;libcmt.lib"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <File
- RelativePath="..\..\create_drascula.cpp"
- >
- </File>
- <File
- RelativePath="..\..\create_drascula.h"
- >
- </File>
- <File
- RelativePath="..\..\staticdata.h"
- >
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/devtools/create_drascula/dists/msvc8_to_msvc9.bat b/devtools/create_drascula/dists/msvc8_to_msvc9.bat
deleted file mode 100644
index 54820b34d0..0000000000
--- a/devtools/create_drascula/dists/msvc8_to_msvc9.bat
+++ /dev/null
@@ -1,32 +0,0 @@
-@echo off
-rem This batch file is used to convert MSVC8 (Visual Studio 2005) project files to MSVC9 (Visual Studio 2008) ones
-rem You need the Windows version of GNU rpl
-rem Get it here:
-rem http://gnuwin32.sourceforge.net/packages/rpl.htm
-rem Place rpl.exe from the bin folder inside the archive in the folder where
-rem this batch file resides
-
-if not exist rpl.exe goto no_rpl
-
-echo Creating MSVC9 project files from the MSVC8 ones
-copy /y msvc8\*.vcproj msvc9\
-copy /y msvc8\*.sln msvc9\
-rpl -e -q "Version=\"8.00\"" "Version=\"9.00\"" msvc9\*.vcproj
-rpl -e -q "Version=\"8,00\"" "Version=\"9,00\"" msvc9\*.vcproj
-rpl -e -q "Keyword=\"Win32Proj\"" "Keyword=\"Win32Proj\"\n\tTargetFrameworkVersion=\"131072\"" msvc9\*.vcproj
-rpl -e -q "EntryPointSymbol=\"WinMainCRTStartup\"" "EntryPointSymbol=\"WinMainCRTStartup\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"" msvc9\*.vcproj
-rpl -e -q "Format Version 9.00" "Format Version 10.00" msvc9\*.sln
-rpl -e -q "Format Version 9,00" "Format Version 10,00" msvc9\*.sln
-rpl -e -q "# Visual C++ Express 2005" "# Visual C++ Express 2008" msvc9\*.sln
-rpl -e -q "# Visual Studio 2005" "# Visual Studio 2008" msvc9\*.sln
-goto the_end
-
-:no_rpl
-echo You need the Windows version of GNU rpl
-echo Get it here:
-echo http://gnuwin32.sourceforge.net/packages/rpl.htm
-echo Place rpl.exe from the bin folder inside the archive in the folder where
-echo this batch file resides
-
-:the_end
-pause
diff --git a/devtools/create_drascula/dists/msvc9/create_drascula.sln b/devtools/create_drascula/dists/msvc9/create_drascula.sln
deleted file mode 100644
index 4a39bdbe42..0000000000
--- a/devtools/create_drascula/dists/msvc9/create_drascula.sln
+++ /dev/null
@@ -1,20 +0,0 @@
-ďťż
-Microsoft Visual Studio Solution File, Format Version 10.00
-# Visual Studio 2008
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "create_drascula", "create_drascula.vcproj", "{5F280130-349D-11DD-AE16-0800200C9A66}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Win32 = Debug|Win32
- Release|Win32 = Release|Win32
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {5F280130-349D-11DD-AE16-0800200C9A66}.Debug|Win32.ActiveCfg = Debug|Win32
- {5F280130-349D-11DD-AE16-0800200C9A66}.Debug|Win32.Build.0 = Debug|Win32
- {5F280130-349D-11DD-AE16-0800200C9A66}.Release|Win32.ActiveCfg = Release|Win32
- {5F280130-349D-11DD-AE16-0800200C9A66}.Release|Win32.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/devtools/create_drascula/dists/msvc9/create_drascula.vcproj b/devtools/create_drascula/dists/msvc9/create_drascula.vcproj
deleted file mode 100644
index f30d6a114b..0000000000
--- a/devtools/create_drascula/dists/msvc9/create_drascula.vcproj
+++ /dev/null
@@ -1,192 +0,0 @@
-<?xml version="1.0" encoding="windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9,00"
- Name="create_drascula"
- ProjectGUID="{5F280130-349D-11DD-AE16-0800200C9A66}"
- RootNamespace="create_drascula"
- Keyword="Win32Proj"
- TargetFrameworkVersion="131072"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/wd4996"
- Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/create_drascula.exe"
- LinkIncremental="2"
- IgnoreDefaultLibraryNames="libc.lib;libcmt.lib"
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)/create_drascula.pdb"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/wd4996"
- Optimization="3"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/create_drascula.exe"
- LinkIncremental="1"
- IgnoreDefaultLibraryNames="libc.lib;libcmt.lib"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <File
- RelativePath="..\..\create_drascula.cpp"
- >
- </File>
- <File
- RelativePath="..\..\create_drascula.h"
- >
- </File>
- <File
- RelativePath="..\..\staticdata.h"
- >
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/devtools/create_drascula/dists/msvc9_to_msvc8.bat b/devtools/create_drascula/dists/msvc9_to_msvc8.bat
deleted file mode 100644
index c87a524f77..0000000000
--- a/devtools/create_drascula/dists/msvc9_to_msvc8.bat
+++ /dev/null
@@ -1,33 +0,0 @@
-@echo off
-rem This batch file is used to convert MSVC9 (Visual Studio 2008) project files to MSVC8 (Visual Studio 2005) ones
-rem You need the Windows version of GNU rpl
-rem Get it here:
-rem http://gnuwin32.sourceforge.net/packages/rpl.htm
-rem Place rpl.exe from the bin folder inside the archive in the folder where
-rem this batch file resides
-
-if not exist rpl.exe goto no_rpl
-
-echo Creating MSVC8 project files from the MSVC9 ones
-copy /y msvc9\*.vcproj msvc8\
-copy /y msvc9\*.sln msvc8\
-rpl -e -q "Version=\"9.00\"" "Version=\"8.00\"" msvc8\*.vcproj
-rpl -e -q "Version=\"9,00\"" "Version=\"8,00\"" msvc8\*.vcproj
-rpl -e -q "\tTargetFrameworkVersion=\"131072\"\n" "" msvc8\*.vcproj
-rpl -e -q "\t\t\t\tRandomizedBaseAddress=\"1\"\n" "" msvc8\*.vcproj
-rpl -e -q "\t\t\t\tDataExecutionPrevention=\"0\"\n" "" msvc8\*.vcproj
-rpl -e -q "Format Version 10.00" "Format Version 9.00" msvc8\*.sln
-rpl -e -q "Format Version 10,00" "Format Version 9,00" msvc8\*.sln
-rpl -e -q "# Visual C++ Express 2008" "# Visual C++ Express 2005" msvc8\*.sln
-rpl -e -q "# Visual Studio 2008" "# Visual Studio 2005" msvc8\*.sln
-goto the_end
-
-:no_rpl
-echo You need the Windows version of GNU rpl
-echo Get it here:
-echo http://gnuwin32.sourceforge.net/packages/rpl.htm
-echo Place rpl.exe from the bin folder inside the archive in the folder where
-echo this batch file resides
-
-:the_end
-pause
diff --git a/devtools/create_hugo/dists/msvc10/create_hugo.sln b/devtools/create_hugo/dists/msvc10/create_hugo.sln
deleted file mode 100644
index a6f87198f6..0000000000
--- a/devtools/create_hugo/dists/msvc10/create_hugo.sln
+++ /dev/null
@@ -1,20 +0,0 @@
-ďťż
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "create_hugo", "create_hugo.vcxproj", "{5F280130-349D-11DD-AE16-0800200C9A66}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Win32 = Debug|Win32
- Release|Win32 = Release|Win32
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {5F280130-349D-11DD-AE16-0800200C9A66}.Debug|Win32.ActiveCfg = Debug|Win32
- {5F280130-349D-11DD-AE16-0800200C9A66}.Debug|Win32.Build.0 = Debug|Win32
- {5F280130-349D-11DD-AE16-0800200C9A66}.Release|Win32.ActiveCfg = Release|Win32
- {5F280130-349D-11DD-AE16-0800200C9A66}.Release|Win32.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/devtools/create_hugo/dists/msvc10/create_hugo.vcxproj b/devtools/create_hugo/dists/msvc10/create_hugo.vcxproj
deleted file mode 100644
index 1bc98740a0..0000000000
--- a/devtools/create_hugo/dists/msvc10/create_hugo.vcxproj
+++ /dev/null
@@ -1,113 +0,0 @@
-ďťż<?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>{5F280130-349D-11DD-AE16-0800200C9A66}</ProjectGuid>
- <RootNamespace>create_hugo</RootNamespace>
- <Keyword>Win32Proj</Keyword>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <CharacterSet>MultiByte</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <CharacterSet>MultiByte</CharacterSet>
- </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'">Debug\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <AdditionalOptions>/wd4996 %(AdditionalOptions)</AdditionalOptions>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
- <PrecompiledHeader>
- </PrecompiledHeader>
- <WarningLevel>Level3</WarningLevel>
- <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
- </ClCompile>
- <Link>
- <OutputFile>$(OutDir)create_hugo.exe</OutputFile>
- <IgnoreSpecificDefaultLibraries>libc.lib;libcmt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(OutDir)create_hugo.pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalOptions>/wd4996 %(AdditionalOptions)</AdditionalOptions>
- <Optimization>Full</Optimization>
- <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PrecompiledHeader>
- </PrecompiledHeader>
- <WarningLevel>Level3</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <Link>
- <OutputFile>$(OutDir)create_hugo.exe</OutputFile>
- <IgnoreSpecificDefaultLibraries>libc.lib;libcmt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <SubSystem>Console</SubSystem>
- <OptimizeReferences>true</OptimizeReferences>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\..\create_hugo.cpp" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="..\..\create_hugo.h" />
- <ClInclude Include="..\..\enums.h" />
- <ClInclude Include="..\..\staticdata.h" />
- <ClInclude Include="..\..\staticdisplay.h" />
- <ClInclude Include="..\..\staticengine.h" />
- <ClInclude Include="..\..\staticfont.h" />
- <ClInclude Include="..\..\staticintro.h" />
- <ClInclude Include="..\..\staticmouse.h" />
- <ClInclude Include="..\..\staticparser.h" />
- <ClInclude Include="..\..\staticutil.h" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project>
diff --git a/devtools/create_hugo/dists/msvc9/create_hugo.sln b/devtools/create_hugo/dists/msvc9/create_hugo.sln
deleted file mode 100644
index 2d86ae4f19..0000000000
--- a/devtools/create_hugo/dists/msvc9/create_hugo.sln
+++ /dev/null
@@ -1,20 +0,0 @@
-ďťż
-Microsoft Visual Studio Solution File, Format Version 10.00
-# Visual Studio 2008
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "create_hugo", "create_hugo.vcproj", "{5F280130-349D-11DD-AE16-0800200C9A66}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Win32 = Debug|Win32
- Release|Win32 = Release|Win32
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {5F280130-349D-11DD-AE16-0800200C9A66}.Debug|Win32.ActiveCfg = Debug|Win32
- {5F280130-349D-11DD-AE16-0800200C9A66}.Debug|Win32.Build.0 = Debug|Win32
- {5F280130-349D-11DD-AE16-0800200C9A66}.Release|Win32.ActiveCfg = Release|Win32
- {5F280130-349D-11DD-AE16-0800200C9A66}.Release|Win32.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/devtools/create_hugo/dists/msvc9/create_hugo.vcproj b/devtools/create_hugo/dists/msvc9/create_hugo.vcproj
deleted file mode 100644
index 473d89e43c..0000000000
--- a/devtools/create_hugo/dists/msvc9/create_hugo.vcproj
+++ /dev/null
@@ -1,219 +0,0 @@
-<?xml version="1.0" encoding="windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="create_hugo"
- ProjectGUID="{5F280130-349D-11DD-AE16-0800200C9A66}"
- RootNamespace="create_hugo"
- Keyword="Win32Proj"
- TargetFrameworkVersion="131072"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/wd4996"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\.."
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/create_hugo.exe"
- LinkIncremental="2"
- IgnoreDefaultLibraryNames="libc.lib;libcmt.lib"
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)/create_hugo.pdb"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/wd4996"
- Optimization="3"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/create_hugo.exe"
- LinkIncremental="1"
- IgnoreDefaultLibraryNames="libc.lib;libcmt.lib"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <File
- RelativePath="..\..\create_hugo.cpp"
- >
- </File>
- <File
- RelativePath="..\..\create_hugo.h"
- >
- </File>
- <File
- RelativePath="..\..\enums.h"
- >
- </File>
- <File
- RelativePath="..\..\staticdata.h"
- >
- </File>
- <File
- RelativePath="..\..\staticdisplay.h"
- >
- </File>
- <File
- RelativePath="..\..\staticengine.h"
- >
- </File>
- <File
- RelativePath="..\..\staticfont.h"
- >
- </File>
- <File
- RelativePath="..\..\staticintro.h"
- >
- </File>
- <File
- RelativePath="..\..\staticmouse.h"
- >
- </File>
- <File
- RelativePath="..\..\staticparser.h"
- >
- </File>
- <File
- RelativePath="..\..\staticutil.h"
- >
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/devtools/create_kyradat/create_kyradat.h b/devtools/create_kyradat/create_kyradat.h
index 983ba3c228..cabf65706f 100644
--- a/devtools/create_kyradat/create_kyradat.h
+++ b/devtools/create_kyradat/create_kyradat.h
@@ -277,7 +277,7 @@ enum kSpecial {
kTalkieVersion,
kDemoVersion,
kTalkieDemoVersion,
- kOldFloppy,
+ kOldFloppy
};
enum kGame {
diff --git a/devtools/create_lure/Makefile b/devtools/create_lure/Makefile
deleted file mode 100644
index 1ed33b594c..0000000000
--- a/devtools/create_lure/Makefile
+++ /dev/null
@@ -1,4 +0,0 @@
-# $Id$
-
-all:
- g++ -I../.. create_lure_dat.cpp process_actions.cpp -o create_lure
diff --git a/devtools/create_lure/dists/msvc8/create_lure.sln b/devtools/create_lure/dists/msvc8/create_lure.sln
deleted file mode 100644
index 8d74988d8c..0000000000
--- a/devtools/create_lure/dists/msvc8/create_lure.sln
+++ /dev/null
@@ -1,20 +0,0 @@
-ďťż
-Microsoft Visual Studio Solution File, Format Version 9.00
-# Visual Studio 2005
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "create_lure", "create_lure.vcproj", "{63E18A70-17D2-11DE-8C30-0800200C9A66}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Win32 = Debug|Win32
- Release|Win32 = Release|Win32
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {63E18A70-17D2-11DE-8C30-0800200C9A66}.Debug|Win32.ActiveCfg = Debug|Win32
- {63E18A70-17D2-11DE-8C30-0800200C9A66}.Debug|Win32.Build.0 = Debug|Win32
- {63E18A70-17D2-11DE-8C30-0800200C9A66}.Release|Win32.ActiveCfg = Release|Win32
- {63E18A70-17D2-11DE-8C30-0800200C9A66}.Release|Win32.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/devtools/create_lure/dists/msvc8/create_lure.vcproj b/devtools/create_lure/dists/msvc8/create_lure.vcproj
deleted file mode 100644
index 177466a29f..0000000000
--- a/devtools/create_lure/dists/msvc8/create_lure.vcproj
+++ /dev/null
@@ -1,222 +0,0 @@
-<?xml version="1.0" encoding="windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8,00"
- Name="create_lure"
- ProjectGUID="{63E18A70-17D2-11DE-8C30-0800200C9A66}"
- RootNamespace="create_lure"
- Keyword="Win32Proj"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/wd4996"
- Optimization="0"
- AdditionalIncludeDirectories="../../../../"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/create_lure.exe"
- LinkIncremental="2"
- IgnoreDefaultLibraryNames="libc.lib;libcmt.lib"
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)/create_lure.pdb"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/wd4996"
- Optimization="3"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/create_lure.exe"
- LinkIncremental="1"
- IgnoreDefaultLibraryNames="libc.lib;libcmt.lib"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="common"
- >
- <File
- RelativePath="..\..\..\..\common\hashmap.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\..\common\hashmap.h"
- >
- </File>
- <File
- RelativePath="..\..\..\..\common\memorypool.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\..\common\memorypool.h"
- >
- </File>
- <File
- RelativePath="..\..\..\..\common\scummsys.h"
- >
- </File>
- <File
- RelativePath="..\..\..\..\common\str.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\..\common\str.h"
- >
- </File>
- <File
- RelativePath="..\..\..\..\common\util.h"
- >
- </File>
- </Filter>
- <File
- RelativePath="..\..\create_lure_dat.cpp"
- >
- </File>
- <File
- RelativePath="..\..\create_lure_dat.h"
- >
- </File>
- <File
- RelativePath="..\..\process_actions.cpp"
- >
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/devtools/create_lure/dists/msvc8_to_msvc9.bat b/devtools/create_lure/dists/msvc8_to_msvc9.bat
deleted file mode 100644
index 54820b34d0..0000000000
--- a/devtools/create_lure/dists/msvc8_to_msvc9.bat
+++ /dev/null
@@ -1,32 +0,0 @@
-@echo off
-rem This batch file is used to convert MSVC8 (Visual Studio 2005) project files to MSVC9 (Visual Studio 2008) ones
-rem You need the Windows version of GNU rpl
-rem Get it here:
-rem http://gnuwin32.sourceforge.net/packages/rpl.htm
-rem Place rpl.exe from the bin folder inside the archive in the folder where
-rem this batch file resides
-
-if not exist rpl.exe goto no_rpl
-
-echo Creating MSVC9 project files from the MSVC8 ones
-copy /y msvc8\*.vcproj msvc9\
-copy /y msvc8\*.sln msvc9\
-rpl -e -q "Version=\"8.00\"" "Version=\"9.00\"" msvc9\*.vcproj
-rpl -e -q "Version=\"8,00\"" "Version=\"9,00\"" msvc9\*.vcproj
-rpl -e -q "Keyword=\"Win32Proj\"" "Keyword=\"Win32Proj\"\n\tTargetFrameworkVersion=\"131072\"" msvc9\*.vcproj
-rpl -e -q "EntryPointSymbol=\"WinMainCRTStartup\"" "EntryPointSymbol=\"WinMainCRTStartup\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"" msvc9\*.vcproj
-rpl -e -q "Format Version 9.00" "Format Version 10.00" msvc9\*.sln
-rpl -e -q "Format Version 9,00" "Format Version 10,00" msvc9\*.sln
-rpl -e -q "# Visual C++ Express 2005" "# Visual C++ Express 2008" msvc9\*.sln
-rpl -e -q "# Visual Studio 2005" "# Visual Studio 2008" msvc9\*.sln
-goto the_end
-
-:no_rpl
-echo You need the Windows version of GNU rpl
-echo Get it here:
-echo http://gnuwin32.sourceforge.net/packages/rpl.htm
-echo Place rpl.exe from the bin folder inside the archive in the folder where
-echo this batch file resides
-
-:the_end
-pause
diff --git a/devtools/create_lure/dists/msvc9/create_lure.sln b/devtools/create_lure/dists/msvc9/create_lure.sln
deleted file mode 100644
index 4f55924eea..0000000000
--- a/devtools/create_lure/dists/msvc9/create_lure.sln
+++ /dev/null
@@ -1,20 +0,0 @@
-ďťż
-Microsoft Visual Studio Solution File, Format Version 10.00
-# Visual Studio 2008
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "create_lure", "create_lure.vcproj", "{63E18A70-17D2-11DE-8C30-0800200C9A66}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Win32 = Debug|Win32
- Release|Win32 = Release|Win32
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {63E18A70-17D2-11DE-8C30-0800200C9A66}.Debug|Win32.ActiveCfg = Debug|Win32
- {63E18A70-17D2-11DE-8C30-0800200C9A66}.Debug|Win32.Build.0 = Debug|Win32
- {63E18A70-17D2-11DE-8C30-0800200C9A66}.Release|Win32.ActiveCfg = Release|Win32
- {63E18A70-17D2-11DE-8C30-0800200C9A66}.Release|Win32.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/devtools/create_lure/dists/msvc9/create_lure.vcproj b/devtools/create_lure/dists/msvc9/create_lure.vcproj
deleted file mode 100644
index a611db31fa..0000000000
--- a/devtools/create_lure/dists/msvc9/create_lure.vcproj
+++ /dev/null
@@ -1,223 +0,0 @@
-<?xml version="1.0" encoding="windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9,00"
- Name="create_lure"
- ProjectGUID="{63E18A70-17D2-11DE-8C30-0800200C9A66}"
- RootNamespace="create_lure"
- Keyword="Win32Proj"
- TargetFrameworkVersion="131072"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/wd4996"
- Optimization="0"
- AdditionalIncludeDirectories="../../../../"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/create_lure.exe"
- LinkIncremental="2"
- IgnoreDefaultLibraryNames="libc.lib;libcmt.lib"
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)/create_lure.pdb"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/wd4996"
- Optimization="3"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/create_lure.exe"
- LinkIncremental="1"
- IgnoreDefaultLibraryNames="libc.lib;libcmt.lib"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="common"
- >
- <File
- RelativePath="..\..\..\..\common\hashmap.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\..\common\hashmap.h"
- >
- </File>
- <File
- RelativePath="..\..\..\..\common\memorypool.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\..\common\memorypool.h"
- >
- </File>
- <File
- RelativePath="..\..\..\..\common\scummsys.h"
- >
- </File>
- <File
- RelativePath="..\..\..\..\common\str.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\..\common\str.h"
- >
- </File>
- <File
- RelativePath="..\..\..\..\common\util.h"
- >
- </File>
- </Filter>
- <File
- RelativePath="..\..\create_lure_dat.cpp"
- >
- </File>
- <File
- RelativePath="..\..\create_lure_dat.h"
- >
- </File>
- <File
- RelativePath="..\..\process_actions.cpp"
- >
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/devtools/create_lure/dists/msvc9_to_msvc8.bat b/devtools/create_lure/dists/msvc9_to_msvc8.bat
deleted file mode 100644
index c87a524f77..0000000000
--- a/devtools/create_lure/dists/msvc9_to_msvc8.bat
+++ /dev/null
@@ -1,33 +0,0 @@
-@echo off
-rem This batch file is used to convert MSVC9 (Visual Studio 2008) project files to MSVC8 (Visual Studio 2005) ones
-rem You need the Windows version of GNU rpl
-rem Get it here:
-rem http://gnuwin32.sourceforge.net/packages/rpl.htm
-rem Place rpl.exe from the bin folder inside the archive in the folder where
-rem this batch file resides
-
-if not exist rpl.exe goto no_rpl
-
-echo Creating MSVC8 project files from the MSVC9 ones
-copy /y msvc9\*.vcproj msvc8\
-copy /y msvc9\*.sln msvc8\
-rpl -e -q "Version=\"9.00\"" "Version=\"8.00\"" msvc8\*.vcproj
-rpl -e -q "Version=\"9,00\"" "Version=\"8,00\"" msvc8\*.vcproj
-rpl -e -q "\tTargetFrameworkVersion=\"131072\"\n" "" msvc8\*.vcproj
-rpl -e -q "\t\t\t\tRandomizedBaseAddress=\"1\"\n" "" msvc8\*.vcproj
-rpl -e -q "\t\t\t\tDataExecutionPrevention=\"0\"\n" "" msvc8\*.vcproj
-rpl -e -q "Format Version 10.00" "Format Version 9.00" msvc8\*.sln
-rpl -e -q "Format Version 10,00" "Format Version 9,00" msvc8\*.sln
-rpl -e -q "# Visual C++ Express 2008" "# Visual C++ Express 2005" msvc8\*.sln
-rpl -e -q "# Visual Studio 2008" "# Visual Studio 2005" msvc8\*.sln
-goto the_end
-
-:no_rpl
-echo You need the Windows version of GNU rpl
-echo Get it here:
-echo http://gnuwin32.sourceforge.net/packages/rpl.htm
-echo Place rpl.exe from the bin folder inside the archive in the folder where
-echo this batch file resides
-
-:the_end
-pause
diff --git a/devtools/create_mads/Makefile b/devtools/create_mads/Makefile
deleted file mode 100644
index c2776f5d17..0000000000
--- a/devtools/create_mads/Makefile
+++ /dev/null
@@ -1,4 +0,0 @@
-# $Id$
-
-all:
- g++ -I../.. main.cpp parser.cpp -o create_mads
diff --git a/devtools/create_mads/dists/msvc9/create_mads.sln b/devtools/create_mads/dists/msvc9/create_mads.sln
deleted file mode 100644
index 5ddd18cffe..0000000000
--- a/devtools/create_mads/dists/msvc9/create_mads.sln
+++ /dev/null
@@ -1,20 +0,0 @@
-ďťż
-Microsoft Visual Studio Solution File, Format Version 10.00
-# Visual C++ Express 2008
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "create_mads", "create_mads.vcproj", "{0332F6FD-D511-4AF6-ABCC-24A85F1489A4}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Win32 = Debug|Win32
- Release|Win32 = Release|Win32
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {0332F6FD-D511-4AF6-ABCC-24A85F1489A4}.Debug|Win32.ActiveCfg = Debug|Win32
- {0332F6FD-D511-4AF6-ABCC-24A85F1489A4}.Debug|Win32.Build.0 = Debug|Win32
- {0332F6FD-D511-4AF6-ABCC-24A85F1489A4}.Release|Win32.ActiveCfg = Release|Win32
- {0332F6FD-D511-4AF6-ABCC-24A85F1489A4}.Release|Win32.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/devtools/create_mads/dists/msvc9/create_mads.vcproj b/devtools/create_mads/dists/msvc9/create_mads.vcproj
deleted file mode 100644
index 1f33faa418..0000000000
--- a/devtools/create_mads/dists/msvc9/create_mads.vcproj
+++ /dev/null
@@ -1,187 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="create_mads"
- ProjectGUID="{0332F6FD-D511-4AF6-ABCC-24A85F1489A4}"
- RootNamespace="create_mads"
- Keyword="Win32Proj"
- TargetFrameworkVersion="131072"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/wd4996"
- Optimization="0"
- AdditionalIncludeDirectories="../../../../"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/create_mads.exe"
- LinkIncremental="2"
- IgnoreDefaultLibraryNames="libc.lib;libcmt.lib"
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)/create_mads.pdb"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/wd4996"
- Optimization="3"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/create_mads.exe"
- LinkIncremental="1"
- IgnoreDefaultLibraryNames="libc.lib;libcmt.lib"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <File
- RelativePath="..\..\main.cpp"
- >
- </File>
- <File
- RelativePath="..\..\parser.cpp"
- >
- </File>
- <File
- RelativePath="..\..\parser.h"
- >
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/devtools/create_project/codeblocks.cpp b/devtools/create_project/codeblocks.cpp
index e73dc11089..3458ca5a19 100644
--- a/devtools/create_project/codeblocks.cpp
+++ b/devtools/create_project/codeblocks.cpp
@@ -32,20 +32,20 @@ CodeBlocksProvider::CodeBlocksProvider(StringList &global_warnings, std::map<std
}
void CodeBlocksProvider::createWorkspace(const BuildSetup &setup) {
- std::ofstream workspace((setup.outputDir + '/' + PROJECT_NAME + ".workspace").c_str());
+ std::ofstream workspace((setup.outputDir + '/' + setup.projectName + ".workspace").c_str());
if (!workspace)
- error("Could not open \"" + setup.outputDir + '/' + PROJECT_NAME + ".workspace\" for writing");
+ error("Could not open \"" + setup.outputDir + '/' + setup.projectName + ".workspace\" for writing");
workspace << "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>\n"
"<CodeBlocks_workspace_file>\n";
- workspace << "\t<Workspace title=\"" << PROJECT_DESCRIPTION << "\">\n";
+ workspace << "\t<Workspace title=\"" << setup.projectDescription << "\">\n";
- writeReferences(workspace);
+ writeReferences(setup, workspace);
// Note we assume that the UUID map only includes UUIDs for enabled engines!
for (UUIDMap::const_iterator i = _uuidMap.begin(); i != _uuidMap.end(); ++i) {
- if (i->first == PROJECT_NAME)
+ if (i->first == setup.projectName)
continue;
workspace << "\t\t<Project filename=\"" << i->first << ".cbp\" />\n";
@@ -88,15 +88,15 @@ void CodeBlocksProvider::createProjectFile(const std::string &name, const std::s
"\t\t<Option compiler=\"gcc\" />\n"
"\t\t<Build>\n";
- if (name == PROJECT_NAME) {
+ if (name == setup.projectName) {
std::string libraries;
for (StringList::const_iterator i = setup.libraries.begin(); i != setup.libraries.end(); ++i)
libraries += processLibraryName(*i) + ".a;";
project << "\t\t\t<Target title=\"default\">\n"
- "\t\t\t\t<Option output=\"" << PROJECT_NAME << "\\" << PROJECT_NAME << "\" prefix_auto=\"1\" extension_auto=\"1\" />\n"
- "\t\t\t\t<Option object_output=\"" << PROJECT_NAME << "\" />\n"
+ "\t\t\t\t<Option output=\"" << setup.projectName << "\\" << setup.projectName << "\" prefix_auto=\"1\" extension_auto=\"1\" />\n"
+ "\t\t\t\t<Option object_output=\"" << setup.projectName << "\" />\n"
"\t\t\t\t<Option external_deps=\"" << libraries /* + list of engines engines\name\name.a */ << "\" />\n"
"\t\t\t\t<Option type=\"1\" />\n"
"\t\t\t\t<Option compiler=\"gcc\" />\n"
@@ -125,10 +125,10 @@ void CodeBlocksProvider::createProjectFile(const std::string &name, const std::s
project << "\t\t\t\t\t<Add library=\"" << processLibraryName(*i) << "\" />\n";
for (UUIDMap::const_iterator i = _uuidMap.begin(); i != _uuidMap.end(); ++i) {
- if (i->first == PROJECT_NAME)
+ if (i->first == setup.projectName)
continue;
- project << "\t\t\t\t\t<Add library=\"" << PROJECT_NAME << "\\engines\\" << i->first << "\\lib" << i->first << ".a\" />\n";
+ project << "\t\t\t\t\t<Add library=\"" << setup.projectName << "\\engines\\" << i->first << "\\lib" << i->first << ".a\" />\n";
}
project << "\t\t\t\t\t<Add directory=\"$(" << LIBS_DEFINE << ")lib\\mingw\" />\n"
@@ -139,7 +139,7 @@ void CodeBlocksProvider::createProjectFile(const std::string &name, const std::s
// Resource compiler
project << "\t\t\t\t<ResourceCompiler>\n"
"\t\t\t\t\t<Add directory=\"..\\..\\dists\" />\n"
- "\t\t\t\t\t<Add directory=\"..\\..\\..\\" << PROJECT_NAME << "\" />\n"
+ "\t\t\t\t\t<Add directory=\"..\\..\\..\\" << setup.projectName << "\" />\n"
"\t\t\t\t</ResourceCompiler>\n"
"\t\t\t</Target>\n"
"\t\t</Build>\n";
@@ -148,9 +148,9 @@ void CodeBlocksProvider::createProjectFile(const std::string &name, const std::s
} else {
project << "\t\t\t<Target title=\"default\">\n"
- "\t\t\t\t<Option output=\"" << PROJECT_NAME << "\\engines\\" << name << "\\lib" << name << "\" prefix_auto=\"1\" extension_auto=\"1\" />\n"
+ "\t\t\t\t<Option output=\"" << setup.projectName << "\\engines\\" << name << "\\lib" << name << "\" prefix_auto=\"1\" extension_auto=\"1\" />\n"
"\t\t\t\t<Option working_dir=\"\" />\n"
- "\t\t\t\t<Option object_output=\"" << PROJECT_NAME << "\" />\n"
+ "\t\t\t\t<Option object_output=\"" << setup.projectName << "\" />\n"
"\t\t\t\t<Option type=\"2\" />\n"
"\t\t\t\t<Option compiler=\"gcc\" />\n"
"\t\t\t\t<Option createDefFile=\"1\" />\n"
@@ -161,7 +161,7 @@ void CodeBlocksProvider::createProjectFile(const std::string &name, const std::s
project << "\t\t\t\t\t<Add option=\"-g\" />\n"
"\t\t\t\t\t<Add directory=\"..\\..\\engines\" />\n"
- "\t\t\t\t\t<Add directory=\"..\\..\\..\\" << PROJECT_NAME << "\" />\n";
+ "\t\t\t\t\t<Add directory=\"..\\..\\..\\" << setup.projectName << "\" />\n";
// Sword2.5 engine needs theora and vorbis includes
if (name == "sword25")
@@ -240,8 +240,8 @@ void CodeBlocksProvider::writeFileListToProject(const FileNode &dir, std::ofstre
}
}
-void CodeBlocksProvider::writeReferences(std::ofstream &output) {
- output << "\t\t<Project filename=\"" << PROJECT_NAME << ".cbp\" active=\"1\">\n";
+void CodeBlocksProvider::writeReferences(const BuildSetup &setup, std::ofstream &output) {
+ output << "\t\t<Project filename=\"" << setup.projectName << ".cbp\" active=\"1\">\n";
for (UUIDMap::const_iterator i = _uuidMap.begin(); i != _uuidMap.end(); ++i) {
if (i->first == " << PROJECT_NAME << ")
diff --git a/devtools/create_project/codeblocks.h b/devtools/create_project/codeblocks.h
index 8d35eb068e..f65604d925 100644
--- a/devtools/create_project/codeblocks.h
+++ b/devtools/create_project/codeblocks.h
@@ -43,7 +43,7 @@ protected:
void writeFileListToProject(const FileNode &dir, std::ofstream &projectFile, const int indentation,
const StringList &duplicate, const std::string &objPrefix, const std::string &filePrefix);
- void writeReferences(std::ofstream &output);
+ void writeReferences(const BuildSetup &setup, std::ofstream &output);
const char *getProjectExtension();
diff --git a/devtools/create_project/create_project.cpp b/devtools/create_project/create_project.cpp
index 0b190b3f0e..084641608a 100644
--- a/devtools/create_project/create_project.cpp
+++ b/devtools/create_project/create_project.cpp
@@ -20,6 +20,8 @@
*
*/
+//#define ENABLE_XCODE
+
// HACK to allow building with the SDL backend on MinGW
// see bug #1800764 "TOOLS: MinGW tools building broken"
#ifdef main
@@ -177,6 +179,7 @@ int main(int argc, char *argv[]) {
projectType = kProjectMSVC;
+#ifdef ENABLE_XCODE
} else if (!std::strcmp(argv[i], "--xcode")) {
if (projectType != kProjectNone) {
std::cerr << "ERROR: You cannot pass more than one project type!\n";
@@ -184,6 +187,7 @@ int main(int argc, char *argv[]) {
}
projectType = kProjectXcode;
+#endif
} else if (!std::strcmp(argv[i], "--msvc-version")) {
if (i + 1 >= argc) {
@@ -255,6 +259,8 @@ int main(int argc, char *argv[]) {
} else if (!std::strcmp(argv[i], "--installer")) {
setup.runBuildEvents = true;
setup.createInstaller = true;
+ } else if (!std::strcmp(argv[i], "--tools")) {
+ setup.devTools = true;
} else {
std::cerr << "ERROR: Unknown parameter \"" << argv[i] << "\"\n";
return -1;
@@ -323,6 +329,11 @@ int main(int argc, char *argv[]) {
return -1;
case kProjectCodeBlocks:
+ if (setup.devTools) {
+ std::cerr << "ERROR: Building tools is not supported for the CodeBlocks project type!\n";
+ return -1;
+ }
+
////////////////////////////////////////////////////////////////////////////
// Code::Blocks is using GCC behind the scenes, so we need to pass a list
// of options to enable or disable warnings
@@ -480,6 +491,11 @@ int main(int argc, char *argv[]) {
break;
case kProjectXcode:
+ if (setup.devTools) {
+ std::cerr << "ERROR: Building tools is not supported for the XCode project type!\n";
+ return -1;
+ }
+
////////////////////////////////////////////////////////////////////////////
// Xcode is also using GCC behind the scenes. See Code::Blocks comment
// for info on all warnings
@@ -506,6 +522,15 @@ int main(int argc, char *argv[]) {
break;
}
+ // Setup project name and description
+ setup.projectName = PROJECT_NAME;
+ setup.projectDescription = PROJECT_DESCRIPTION;
+
+ if (setup.devTools) {
+ setup.projectName += "-tools";
+ setup.projectDescription += "Tools";
+ }
+
provider->createProject(setup);
delete provider;
@@ -560,6 +585,9 @@ void displayHelp(const char *exe) {
" (default: false)\n"
" --installer Create NSIS installer after the build (implies --build-events)\n"
" (default: false)\n"
+ " --tools Create project files for the devtools\n"
+ " (ignores --build-events and --installer, as well as engine settings)\n"
+ " (default: false)\n"
"\n"
"Engines settings:\n"
" --list-engines list all available engines and their default state\n"
@@ -786,6 +814,18 @@ const Feature s_features[] = {
{ "langdetect", "USE_DETECTLANG", "", true, "System language detection support" } // This feature actually depends on "translation", there
// is just no current way of properly detecting this...
};
+
+const Tool s_tools[] = {
+ { "create_drascula", true},
+ { "create_hugo", true},
+ { "create_kyradat", true},
+ { "create_lure", true},
+ { "create_mads", true},
+ { "create_teenagent", true},
+ { "create_toon", true},
+ { "create_translations", true},
+ { "qtable", true}
+};
} // End of anonymous namespace
FeatureList getAllFeatures() {
@@ -832,6 +872,16 @@ bool setFeatureBuildState(const std::string &name, FeatureList &features, bool e
}
}
+ToolList getAllTools() {
+ const size_t toolCount = sizeof(s_tools) / sizeof(s_tools[0]);
+
+ ToolList tools;
+ for (size_t i = 0; i < toolCount; ++i)
+ tools.push_back(s_tools[i]);
+
+ return tools;
+}
+
namespace CreateProjectTool {
//////////////////////////////////////////////////////////////////////////
@@ -1057,63 +1107,90 @@ ProjectProvider::ProjectProvider(StringList &global_warnings, std::map<std::stri
}
void ProjectProvider::createProject(const BuildSetup &setup) {
- _uuidMap = createUUIDMap(setup);
+ if (setup.devTools) {
+ _uuidMap = createToolsUUIDMap();
- // We also need to add the UUID of the main project file.
- const std::string svmUUID = _uuidMap[PROJECT_NAME] = createUUID();
+ // We also need to add the UUID of the main project file.
+ const std::string svmUUID = _uuidMap[setup.projectName] = createUUID();
- // Create Solution/Workspace file
- createWorkspace(setup);
+ createWorkspace(setup);
- StringList in, ex;
+ StringList in, ex;
- // Create engine project files
- for (UUIDMap::const_iterator i = _uuidMap.begin(); i != _uuidMap.end(); ++i) {
- if (i->first == PROJECT_NAME)
- continue;
+ // Create tools project files
+ for (UUIDMap::const_iterator i = _uuidMap.begin(); i != _uuidMap.end(); ++i) {
+ if (i->first == setup.projectName)
+ continue;
- in.clear(); ex.clear();
- const std::string moduleDir = setup.srcDir + "/engines/" + i->first;
+ in.clear(); ex.clear();
+ const std::string moduleDir = setup.srcDir + "/devtools/" + i->first;
- createModuleList(moduleDir, setup.defines, in, ex);
- createProjectFile(i->first, i->second, setup, moduleDir, in, ex);
- }
+ createModuleList(moduleDir, setup.defines, in, ex);
+ createProjectFile(i->first, i->second, setup, moduleDir, in, ex);
+ }
+
+ // Create other misc. build files
+ createOtherBuildFiles(setup);
- // Last but not least create the main project file.
- in.clear(); ex.clear();
-
- // File list for the Project file
- createModuleList(setup.srcDir + "/backends", setup.defines, in, ex);
- createModuleList(setup.srcDir + "/backends/platform/sdl", setup.defines, in, ex);
- createModuleList(setup.srcDir + "/base", setup.defines, in, ex);
- createModuleList(setup.srcDir + "/common", setup.defines, in, ex);
- createModuleList(setup.srcDir + "/engines", setup.defines, in, ex);
- createModuleList(setup.srcDir + "/graphics", setup.defines, in, ex);
- createModuleList(setup.srcDir + "/gui", setup.defines, in, ex);
- createModuleList(setup.srcDir + "/audio", setup.defines, in, ex);
- createModuleList(setup.srcDir + "/audio/softsynth/mt32", setup.defines, in, ex);
+ } else {
+ _uuidMap = createUUIDMap(setup);
+
+ // We also need to add the UUID of the main project file.
+ const std::string svmUUID = _uuidMap[setup.projectName] = createUUID();
+
+ // Create Solution/Workspace file
+ createWorkspace(setup);
+
+ StringList in, ex;
+
+ // Create engine project files
+ for (UUIDMap::const_iterator i = _uuidMap.begin(); i != _uuidMap.end(); ++i) {
+ if (i->first == setup.projectName)
+ continue;
+
+ in.clear(); ex.clear();
+ const std::string moduleDir = setup.srcDir + "/engines/" + i->first;
+
+ createModuleList(moduleDir, setup.defines, in, ex);
+ createProjectFile(i->first, i->second, setup, moduleDir, in, ex);
+ }
+
+ // Last but not least create the main project file.
+ in.clear(); ex.clear();
+
+ // File list for the Project file
+ createModuleList(setup.srcDir + "/backends", setup.defines, in, ex);
+ createModuleList(setup.srcDir + "/backends/platform/sdl", setup.defines, in, ex);
+ createModuleList(setup.srcDir + "/base", setup.defines, in, ex);
+ createModuleList(setup.srcDir + "/common", setup.defines, in, ex);
+ createModuleList(setup.srcDir + "/engines", setup.defines, in, ex);
+ createModuleList(setup.srcDir + "/graphics", setup.defines, in, ex);
+ createModuleList(setup.srcDir + "/gui", setup.defines, in, ex);
+ createModuleList(setup.srcDir + "/audio", setup.defines, in, ex);
+ createModuleList(setup.srcDir + "/audio/softsynth/mt32", setup.defines, in, ex);
#if HAS_VIDEO_FOLDER
- createModuleList(setup.srcDir + "/video", setup.defines, in, ex);
+ createModuleList(setup.srcDir + "/video", setup.defines, in, ex);
#endif
- // Resource files
- in.push_back(setup.srcDir + "/icons/" + PROJECT_NAME + ".ico");
- in.push_back(setup.srcDir + "/dists/" + PROJECT_NAME + ".rc");
+ // Resource files
+ in.push_back(setup.srcDir + "/icons/" + setup.projectName + ".ico");
+ in.push_back(setup.srcDir + "/dists/" + setup.projectName + ".rc");
- // Various text files
- in.push_back(setup.srcDir + "/AUTHORS");
- in.push_back(setup.srcDir + "/COPYING");
- in.push_back(setup.srcDir + "/COPYING.LGPL");
- in.push_back(setup.srcDir + "/COPYRIGHT");
- in.push_back(setup.srcDir + "/NEWS");
- in.push_back(setup.srcDir + "/README");
- in.push_back(setup.srcDir + "/TODO");
+ // Various text files
+ in.push_back(setup.srcDir + "/AUTHORS");
+ in.push_back(setup.srcDir + "/COPYING");
+ in.push_back(setup.srcDir + "/COPYING.LGPL");
+ in.push_back(setup.srcDir + "/COPYRIGHT");
+ in.push_back(setup.srcDir + "/NEWS");
+ in.push_back(setup.srcDir + "/README");
+ in.push_back(setup.srcDir + "/TODO");
- // Create the main project file.
- createProjectFile(PROJECT_NAME, svmUUID, setup, setup.srcDir, in, ex);
+ // Create the main project file.
+ createProjectFile(setup.projectName, svmUUID, setup, setup.srcDir, in, ex);
- // Create other misc. build files
- createOtherBuildFiles(setup);
+ // Create other misc. build files
+ createOtherBuildFiles(setup);
+ }
}
ProjectProvider::UUIDMap ProjectProvider::createUUIDMap(const BuildSetup &setup) const {
@@ -1129,6 +1206,20 @@ ProjectProvider::UUIDMap ProjectProvider::createUUIDMap(const BuildSetup &setup)
return result;
}
+ProjectProvider::UUIDMap ProjectProvider::createToolsUUIDMap() const {
+ UUIDMap result;
+
+ ToolList tools = getAllTools();
+ for (ToolList::const_iterator i = tools.begin(); i != tools.end(); ++i) {
+ if (!i->enable)
+ continue;
+
+ result[i->name] = createUUID();
+ }
+
+ return result;
+}
+
std::string ProjectProvider::createUUID() const {
#ifdef USE_WIN32_API
UUID uuid;
diff --git a/devtools/create_project/create_project.h b/devtools/create_project/create_project.h
index 9b9e4cfd1b..55e04be4ec 100644
--- a/devtools/create_project/create_project.h
+++ b/devtools/create_project/create_project.h
@@ -137,6 +137,12 @@ struct Feature {
};
typedef std::list<Feature> FeatureList;
+struct Tool {
+ const char *name; ///< Name of the tools
+ bool enable; ///< Whether the tools is enabled or not
+};
+typedef std::list<Tool> ToolList;
+
/**
* Creates a list of all features available for MSVC.
*
@@ -179,6 +185,9 @@ bool setFeatureBuildState(const std::string &name, FeatureList &features, bool e
* It also contains the path to the project source root.
*/
struct BuildSetup {
+ std::string projectName; ///< Project name
+ std::string projectDescription; ///< Project description
+
std::string srcDir; ///< Path to the sources.
std::string filePrefix; ///< Prefix for the relative path arguments in the project files.
std::string outputDir; ///< Path where to put the MSVC project files.
@@ -189,10 +198,12 @@ struct BuildSetup {
StringList defines; ///< List of all defines for the build.
StringList libraries; ///< List of all external libraries required for the build.
+ bool devTools; ///< Generate project files for the tools
bool runBuildEvents; ///< Run build events as part of the build (generate revision number and copy engine/theme data & needed files to the build folder
bool createInstaller; ///< Create NSIS installer after the build
BuildSetup() {
+ devTools = false;
runBuildEvents = false;
createInstaller = false;
}
@@ -360,7 +371,7 @@ protected:
*
* @param output File stream to write to.
*/
- virtual void writeReferences(std::ofstream &) {};
+ virtual void writeReferences(const BuildSetup &, std::ofstream &) {};
/**
* Get the file extension for project files
@@ -402,6 +413,14 @@ protected:
UUIDMap createUUIDMap(const BuildSetup &setup) const;
/**
+ * Creates an UUID for every enabled tool of the
+ * passed build description.
+ *
+ * @return A map, which includes UUIDs for all enabled engines.
+ */
+ UUIDMap createToolsUUIDMap() const;
+
+ /**
* Creates an UUID and returns it in string representation.
*
* @return A new UUID as string.
diff --git a/devtools/create_project/msbuild.cpp b/devtools/create_project/msbuild.cpp
index bdbc0a4074..f8768ecc73 100644
--- a/devtools/create_project/msbuild.cpp
+++ b/devtools/create_project/msbuild.cpp
@@ -58,9 +58,9 @@ inline void outputConfiguration(std::ostream &project, const std::string &config
"\t\t</ProjectConfiguration>\n";
}
-inline void outputConfigurationType(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) {
project << "\t<PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='" << config << "'\" Label=\"Configuration\">\n"
- "\t\t<ConfigurationType>" << (name == PROJECT_NAME ? "Application" : "StaticLibrary") << "</ConfigurationType>\n"
+ "\t\t<ConfigurationType>" << ((name == setup.projectName || setup.devTools) ? "Application" : "StaticLibrary") << "</ConfigurationType>\n"
"\t</PropertyGroup>\n";
}
@@ -103,23 +103,23 @@ void MSBuildProvider::createProjectFile(const std::string &name, const std::stri
// Shared configuration
project << "\t<Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n";
- outputConfigurationType(project, name, "Release|Win32");
- outputConfigurationType(project, name, "Analysis|Win32");
- outputConfigurationType(project, name, "Debug|Win32");
- outputConfigurationType(project, name, "Release|x64");
- outputConfigurationType(project, name, "Analysis|x64");
- outputConfigurationType(project, name, "Debug|x64");
+ 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");
project << "\t<Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n"
"\t<ImportGroup Label=\"ExtensionSettings\">\n"
"\t</ImportGroup>\n";
- outputProperties(project, "Release|Win32", PROJECT_DESCRIPTION "_Release.props");
- outputProperties(project, "Analysis|Win32", PROJECT_DESCRIPTION "_Analysis.props");
- outputProperties(project, "Debug|Win32", PROJECT_DESCRIPTION "_Debug.props");
- outputProperties(project, "Release|x64", PROJECT_DESCRIPTION "_Release64.props");
- outputProperties(project, "Analysis|x64", PROJECT_DESCRIPTION "_Analysis64.props");
- outputProperties(project, "Debug|x64", PROJECT_DESCRIPTION "_Debug64.props");
+ outputProperties(project, "Release|Win32", setup.projectDescription + "_Release.props");
+ outputProperties(project, "Analysis|Win32", setup.projectDescription + "_Analysis.props");
+ outputProperties(project, "Debug|Win32", setup.projectDescription + "_Debug.props");
+ outputProperties(project, "Release|x64", setup.projectDescription + "_Release64.props");
+ outputProperties(project, "Analysis|x64", setup.projectDescription + "_Analysis64.props");
+ outputProperties(project, "Debug|x64", setup.projectDescription + "_Debug64.props");
project << "\t<PropertyGroup Label=\"UserMacros\" />\n";
@@ -145,8 +145,8 @@ void MSBuildProvider::createProjectFile(const std::string &name, const std::stri
addFilesToProject(moduleDir, project, includeList, excludeList, setup.filePrefix);
// Output references for the main project
- if (name == PROJECT_NAME)
- writeReferences(project);
+ if (name == setup.projectName)
+ writeReferences(setup, project);
project << "\t<Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n"
"\t<ImportGroup Label=\"ExtensionTargets\">\n"
@@ -213,11 +213,11 @@ void MSBuildProvider::outputFilter(std::ostream &filters, const FileEntries &fil
}
}
-void MSBuildProvider::writeReferences(std::ofstream &output) {
+void MSBuildProvider::writeReferences(const BuildSetup &setup, std::ofstream &output) {
output << "\t<ItemGroup>\n";
for (UUIDMap::const_iterator i = _uuidMap.begin(); i != _uuidMap.end(); ++i) {
- if (i->first == PROJECT_NAME)
+ if (i->first == setup.projectName)
continue;
output << "\t<ProjectReference Include=\"" << i->first << ".vcxproj\">\n"
@@ -235,7 +235,7 @@ void MSBuildProvider::outputProjectSettings(std::ofstream &project, const std::s
std::map<std::string, StringList>::iterator warningsIterator = _projectWarnings.find(name);
// Nothing to add here, move along!
- if (name != PROJECT_NAME && name != "sword25" && name != "tinsel" && name != "grim" && warningsIterator == _projectWarnings.end())
+ if (!setup.devTools && name != setup.projectName && name != "sword25" && name != "tinsel" && name != "grim" && warningsIterator == _projectWarnings.end())
return;
std::string warnings = "";
@@ -247,7 +247,7 @@ void MSBuildProvider::outputProjectSettings(std::ofstream &project, const std::s
"\t\t<ClCompile>\n";
// Compile configuration
- if (name == PROJECT_NAME || name == "sword25" || name == "grim") {
+ if (setup.devTools || name == setup.projectName || name == "sword25" || name == "grim") {
project << "\t\t\t<DisableLanguageExtensions>false</DisableLanguageExtensions>\n";
} else {
if (name == "tinsel" && !isRelease)
@@ -260,18 +260,18 @@ void MSBuildProvider::outputProjectSettings(std::ofstream &project, const std::s
project << "\t\t</ClCompile>\n";
// Link configuration for main project
- if (name == PROJECT_NAME) {
+ if (name == setup.projectName || setup.devTools) {
std::string libraries;
for (StringList::const_iterator i = setup.libraries.begin(); i != setup.libraries.end(); ++i)
libraries += *i + ".lib;";
project << "\t\t<Link>\n"
- "\t\t\t<OutputFile>$(OutDir)" << PROJECT_NAME << ".exe</OutputFile>\n"
+ "\t\t\t<OutputFile>$(OutDir)" << (setup.devTools ? name : setup.projectName) << ".exe</OutputFile>\n"
"\t\t\t<AdditionalDependencies>" << libraries << "%(AdditionalDependencies)</AdditionalDependencies>\n"
"\t\t</Link>\n";
- if (setup.runBuildEvents) {
+ if (!setup.devTools && setup.runBuildEvents) {
project << "\t\t<PreBuildEvent>\n"
"\t\t\t<Message>Generate revision</Message>\n"
"\t\t\t<Command>" << getPreBuildEvent() << "</Command>\n"
@@ -288,7 +288,7 @@ void MSBuildProvider::outputProjectSettings(std::ofstream &project, const std::s
project << "\t</ItemDefinitionGroup>\n";
}
-void MSBuildProvider::outputGlobalPropFile(std::ofstream &properties, int bits, const StringList &defines, const std::string &prefix, bool runBuildEvents) {
+void MSBuildProvider::outputGlobalPropFile(const BuildSetup &setup, std::ofstream &properties, int bits, const StringList &defines, const std::string &prefix, bool runBuildEvents) {
std::string warnings;
for (StringList::const_iterator i = _globalWarnings.begin(); i != _globalWarnings.end(); ++i)
@@ -306,7 +306,7 @@ void MSBuildProvider::outputGlobalPropFile(std::ofstream &properties, int bits,
"<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n"
"\t<PropertyGroup>\n"
"\t\t<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n"
- "\t\t<_PropertySheetDisplayName>" << PROJECT_DESCRIPTION << "_Global</_PropertySheetDisplayName>\n"
+ "\t\t<_PropertySheetDisplayName>" << setup.projectDescription << "_Global</_PropertySheetDisplayName>\n"
"\t\t<ExecutablePath>$(" << LIBS_DEFINE << ")\\bin;$(ExecutablePath)</ExecutablePath>\n"
"\t\t<LibraryPath>$(" << LIBS_DEFINE << ")\\lib\\" << (bits == 32 ? "x86" : "x64") << ";$(LibraryPath)</LibraryPath>\n"
"\t\t<IncludePath>$(" << LIBS_DEFINE << ")\\include;$(IncludePath)</IncludePath>\n"
@@ -319,7 +319,7 @@ void MSBuildProvider::outputGlobalPropFile(std::ofstream &properties, int bits,
"\t\t\t<DisableSpecificWarnings>" << warnings << ";%(DisableSpecificWarnings)</DisableSpecificWarnings>\n"
"\t\t\t<AdditionalIncludeDirectories>$(" << LIBS_DEFINE << ")\\include;" << prefix << ";" << prefix << "\\engines;$(TargetDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n"
"\t\t\t<PreprocessorDefinitions>" << definesList << "%(PreprocessorDefinitions)</PreprocessorDefinitions>\n"
- "\t\t\t<ExceptionHandling></ExceptionHandling>\n";
+ "\t\t\t<ExceptionHandling>" << (setup.devTools ? "Sync" : "") << "</ExceptionHandling>\n";
#if NEEDS_RTTI
properties << "\t\t\t<RuntimeTypeInfo>true</RuntimeTypeInfo>\n";
@@ -333,9 +333,12 @@ void MSBuildProvider::outputGlobalPropFile(std::ofstream &properties, int bits,
"\t\t</ClCompile>\n"
"\t\t<Link>\n"
"\t\t\t<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>\n"
- "\t\t\t<SubSystem>Console</SubSystem>\n"
- "\t\t\t<EntryPointSymbol>WinMainCRTStartup</EntryPointSymbol>\n"
- "\t\t</Link>\n"
+ "\t\t\t<SubSystem>Console</SubSystem>\n";
+
+ if (!setup.devTools)
+ properties << "\t\t\t<EntryPointSymbol>WinMainCRTStartup</EntryPointSymbol>\n";
+
+ properties << "\t\t</Link>\n"
"\t\t<ResourceCompile>\n"
"\t\t\t<AdditionalIncludeDirectories>" << prefix << ";%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n"
"\t\t</ResourceCompile>\n"
@@ -349,18 +352,18 @@ void MSBuildProvider::createBuildProp(const BuildSetup &setup, bool isRelease, b
const std::string outputType = (enableAnalysis ? "Analysis" : (isRelease ? "Release" : "Debug"));
const std::string outputBitness = (isWin32 ? "32" : "64");
- std::ofstream properties((setup.outputDir + '/' + PROJECT_DESCRIPTION "_" + outputType + (isWin32 ? "" : "64") + getPropertiesExtension()).c_str());
+ std::ofstream properties((setup.outputDir + '/' + setup.projectDescription + "_" + outputType + (isWin32 ? "" : "64") + getPropertiesExtension()).c_str());
if (!properties)
- error("Could not open \"" + setup.outputDir + '/' + PROJECT_DESCRIPTION "_" + outputType + (isWin32 ? "" : "64") + getPropertiesExtension() + "\" for writing");
+ error("Could not open \"" + setup.outputDir + '/' + setup.projectDescription + "_" + outputType + (isWin32 ? "" : "64") + getPropertiesExtension() + "\" for writing");
properties << "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
"<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n"
"\t<ImportGroup Label=\"PropertySheets\">\n"
- "\t\t<Import Project=\"" << PROJECT_DESCRIPTION << "_Global" << (isWin32 ? "" : "64") << ".props\" />\n"
+ "\t\t<Import Project=\"" << setup.projectDescription << "_Global" << (isWin32 ? "" : "64") << ".props\" />\n"
"\t</ImportGroup>\n"
"\t<PropertyGroup>\n"
"\t\t<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n"
- "\t\t<_PropertySheetDisplayName>" << PROJECT_DESCRIPTION << "_" << outputType << outputBitness << "</_PropertySheetDisplayName>\n"
+ "\t\t<_PropertySheetDisplayName>" << setup.projectDescription << "_" << outputType << outputBitness << "</_PropertySheetDisplayName>\n"
"\t\t<LinkIncremental>" << (isRelease ? "false" : "true") << "</LinkIncremental>\n"
"\t</PropertyGroup>\n"
"\t<ItemDefinitionGroup>\n"
diff --git a/devtools/create_project/msbuild.h b/devtools/create_project/msbuild.h
index 681c893d95..fa6667741a 100644
--- a/devtools/create_project/msbuild.h
+++ b/devtools/create_project/msbuild.h
@@ -40,9 +40,9 @@ protected:
void writeFileListToProject(const FileNode &dir, std::ofstream &projectFile, const int indentation,
const StringList &duplicate, const std::string &objPrefix, const std::string &filePrefix);
- void writeReferences(std::ofstream &output);
+ void writeReferences(const BuildSetup &setup, std::ofstream &output);
- void outputGlobalPropFile(std::ofstream &properties, int bits, const StringList &defines, const std::string &prefix, bool runBuildEvents);
+ void outputGlobalPropFile(const BuildSetup &setup, std::ofstream &properties, int bits, const StringList &defines, const std::string &prefix, bool runBuildEvents);
void createBuildProp(const BuildSetup &setup, bool isRelease, bool isWin32, bool enableAnalysis);
diff --git a/devtools/create_project/msvc.cpp b/devtools/create_project/msvc.cpp
index aa347b1081..96eaf643d1 100644
--- a/devtools/create_project/msvc.cpp
+++ b/devtools/create_project/msvc.cpp
@@ -36,33 +36,36 @@ MSVCProvider::MSVCProvider(StringList &global_warnings, std::map<std::string, St
}
void MSVCProvider::createWorkspace(const BuildSetup &setup) {
- UUIDMap::const_iterator svmUUID = _uuidMap.find(PROJECT_NAME);
+ UUIDMap::const_iterator svmUUID = _uuidMap.find(setup.projectName);
if (svmUUID == _uuidMap.end())
- error("No UUID for \"" PROJECT_NAME "\" project created");
+ error("No UUID for \"" + setup.projectName + "\" project created");
const std::string svmProjectUUID = svmUUID->second;
assert(!svmProjectUUID.empty());
std::string solutionUUID = createUUID();
- std::ofstream solution((setup.outputDir + '/' + PROJECT_NAME ".sln").c_str());
+ std::ofstream solution((setup.outputDir + '/' + setup.projectName + ".sln").c_str());
if (!solution)
- error("Could not open \"" + setup.outputDir + '/' + PROJECT_NAME ".sln\" for writing");
+ error("Could not open \"" + setup.outputDir + '/' + setup.projectName + ".sln\" for writing");
solution << "Microsoft Visual Studio Solution File, Format Version " << _version + 1 << ".00\n";
solution << "# Visual Studio " << getVisualStudioVersion() << "\n";
- solution << "Project(\"{" << solutionUUID << "}\") = \"" << PROJECT_NAME << "\", \"" << PROJECT_NAME << getProjectExtension() << "\", \"{" << svmProjectUUID << "}\"\n";
+ // Write main project
+ if (!setup.devTools) {
+ solution << "Project(\"{" << solutionUUID << "}\") = \"" << setup.projectName << "\", \"" << setup.projectName << getProjectExtension() << "\", \"{" << svmProjectUUID << "}\"\n";
- // Project dependencies are moved to vcxproj files in Visual Studio 2010
- if (_version < 10)
- writeReferences(solution);
+ // Project dependencies are moved to vcxproj files in Visual Studio 2010
+ if (_version < 10)
+ writeReferences(setup, solution);
- solution << "EndProject\n";
+ solution << "EndProject\n";
+ }
// Note we assume that the UUID map only includes UUIDs for enabled engines!
for (UUIDMap::const_iterator i = _uuidMap.begin(); i != _uuidMap.end(); ++i) {
- if (i->first == PROJECT_NAME)
+ if (i->first == setup.projectName)
continue;
solution << "Project(\"{" << solutionUUID << "}\") = \"" << i->first << "\", \"" << i->first << getProjectExtension() << "\", \"{" << i->second << "}\"\n"
@@ -117,16 +120,16 @@ void MSVCProvider::createOtherBuildFiles(const BuildSetup &setup) {
}
void MSVCProvider::createGlobalProp(const BuildSetup &setup) {
- std::ofstream properties((setup.outputDir + '/' + PROJECT_DESCRIPTION "_Global" + getPropertiesExtension()).c_str());
+ std::ofstream properties((setup.outputDir + '/' + setup.projectDescription + "_Global" + getPropertiesExtension()).c_str());
if (!properties)
- error("Could not open \"" + setup.outputDir + '/' + PROJECT_DESCRIPTION "_Global" + getPropertiesExtension() + "\" for writing");
+ error("Could not open \"" + setup.outputDir + '/' + setup.projectDescription + "_Global" + getPropertiesExtension() + "\" for writing");
- outputGlobalPropFile(properties, 32, setup.defines, convertPathToWin(setup.filePrefix), setup.runBuildEvents);
+ outputGlobalPropFile(setup, properties, 32, setup.defines, convertPathToWin(setup.filePrefix), setup.runBuildEvents);
properties.close();
- properties.open((setup.outputDir + '/' + PROJECT_DESCRIPTION "_Global64" + getPropertiesExtension()).c_str());
+ properties.open((setup.outputDir + '/' + setup.projectDescription + "_Global64" + getPropertiesExtension()).c_str());
if (!properties)
- error("Could not open \"" + setup.outputDir + '/' + PROJECT_DESCRIPTION "_Global64" + getPropertiesExtension() + "\" for writing");
+ error("Could not open \"" + setup.outputDir + '/' + setup.projectDescription + "_Global64" + getPropertiesExtension() + "\" for writing");
// HACK: We must disable the "nasm" feature for x64. To achieve that we must duplicate the feature list and
// recreate a define list.
@@ -140,7 +143,7 @@ void MSVCProvider::createGlobalProp(const BuildSetup &setup) {
x64Defines.push_back("WIN32");
x64Defines.push_back("SDL_BACKEND");
- outputGlobalPropFile(properties, 64, x64Defines, convertPathToWin(setup.filePrefix), setup.runBuildEvents);
+ outputGlobalPropFile(setup, properties, 64, x64Defines, convertPathToWin(setup.filePrefix), setup.runBuildEvents);
}
std::string MSVCProvider::getPreBuildEvent() const {
diff --git a/devtools/create_project/msvc.h b/devtools/create_project/msvc.h
index ead4bf949a..0a994667fa 100644
--- a/devtools/create_project/msvc.h
+++ b/devtools/create_project/msvc.h
@@ -58,7 +58,7 @@ protected:
* @param prefix File prefix, used to add additional include paths.
* @param runBuildEvents true if generating a revision number, false otherwise
*/
- virtual void outputGlobalPropFile(std::ofstream &properties, int bits, const StringList &defines, const std::string &prefix, bool runBuildEvents) = 0;
+ virtual void outputGlobalPropFile(const BuildSetup &setup, std::ofstream &properties, int bits, const StringList &defines, const std::string &prefix, bool runBuildEvents) = 0;
/**
* Generates the project properties for debug and release settings.
diff --git a/devtools/create_project/visualstudio.cpp b/devtools/create_project/visualstudio.cpp
index b4c2b46ba4..a0fd239db4 100644
--- a/devtools/create_project/visualstudio.cpp
+++ b/devtools/create_project/visualstudio.cpp
@@ -83,7 +83,7 @@ void VisualStudioProvider::createProjectFile(const std::string &name, const std:
// Check for project-specific warnings:
std::map< std::string, std::list<std::string> >::iterator warningsIterator = _projectWarnings.find(name);
- if (name == PROJECT_NAME) {
+ if (setup.devTools || name == setup.projectName) {
std::string libraries;
for (StringList::const_iterator i = setup.libraries.begin(); i != setup.libraries.end(); ++i)
@@ -115,12 +115,12 @@ void VisualStudioProvider::createProjectFile(const std::string &name, const std:
toolConfig += (name == "grim" ? "DisableLanguageExtensions=\"false\" " : "");
// Win32
- outputConfiguration(project, toolConfig, "Debug", "Win32", "");
- outputConfiguration(project, toolConfig, "Analysis", "Win32", "");
- outputConfiguration(project, toolConfig, "Release", "Win32", "");
- outputConfiguration(project, toolConfig, "Debug", "x64", "64");
- outputConfiguration(project, toolConfig, "Analysis", "x64", "64");
- outputConfiguration(project, toolConfig, "Release", "x64", "64");
+ outputConfiguration(setup, project, toolConfig, "Debug", "Win32", "");
+ outputConfiguration(setup, project, toolConfig, "Analysis", "Win32", "");
+ outputConfiguration(setup, project, toolConfig, "Release", "Win32", "");
+ outputConfiguration(setup, project, toolConfig, "Debug", "x64", "64");
+ outputConfiguration(setup, project, toolConfig, "Analysis", "x64", "64");
+ outputConfiguration(setup, project, toolConfig, "Release", "x64", "64");
}
project << "\t</Configurations>\n"
@@ -143,23 +143,23 @@ void VisualStudioProvider::createProjectFile(const std::string &name, const std:
}
void VisualStudioProvider::outputConfiguration(std::ostream &project, const BuildSetup &setup, const std::string &libraries, const std::string &config, const std::string &platform, const std::string &props, const bool isWin32) {
- project << "\t\t<Configuration Name=\"" << config << "|" << platform << "\" ConfigurationType=\"1\" InheritedPropertySheets=\".\\" << PROJECT_DESCRIPTION << "_" << config << props << ".vsprops\">\n"
+ project << "\t\t<Configuration Name=\"" << config << "|" << platform << "\" ConfigurationType=\"1\" InheritedPropertySheets=\".\\" << setup.projectDescription << "_" << config << props << ".vsprops\">\n"
"\t\t\t<Tool\tName=\"VCCLCompilerTool\" DisableLanguageExtensions=\"false\" />\n"
- "\t\t\t<Tool\tName=\"VCLinkerTool\" OutputFile=\"$(OutDir)/" << PROJECT_NAME << ".exe\"\n"
+ "\t\t\t<Tool\tName=\"VCLinkerTool\" OutputFile=\"$(OutDir)/" << setup.projectName << ".exe\"\n"
"\t\t\t\tAdditionalDependencies=\"" << libraries << "\"\n"
"\t\t\t/>\n";
outputBuildEvents(project, setup, isWin32);
project << "\t\t</Configuration>\n";
}
-void VisualStudioProvider::outputConfiguration(std::ostream &project, const std::string &toolConfig, const std::string &config, const std::string &platform, const std::string &props) {
- project << "\t\t<Configuration Name=\"" << config << "|" << platform << "\" ConfigurationType=\"4\" InheritedPropertySheets=\".\\" << PROJECT_DESCRIPTION << "_" << config << props << ".vsprops\">\n"
+void VisualStudioProvider::outputConfiguration(const BuildSetup &setup, std::ostream &project, const std::string &toolConfig, const std::string &config, const std::string &platform, const std::string &props) {
+ project << "\t\t<Configuration Name=\"" << config << "|" << platform << "\" ConfigurationType=\"4\" InheritedPropertySheets=\".\\" << setup.projectDescription << "_" << config << props << ".vsprops\">\n"
"\t\t\t<Tool Name=\"VCCLCompilerTool\" "<< toolConfig << "/>\n"
"\t\t</Configuration>\n";
}
void VisualStudioProvider::outputBuildEvents(std::ostream &project, const BuildSetup &setup, const bool isWin32) {
- if (setup.runBuildEvents) {
+ if (!setup.devTools && setup.runBuildEvents) {
project << "\t\t\t<Tool\tName=\"VCPreBuildEventTool\"\n"
"\t\t\t\tCommandLine=\"" << getPreBuildEvent() << "\"\n"
"\t\t\t/>\n"
@@ -169,11 +169,11 @@ void VisualStudioProvider::outputBuildEvents(std::ostream &project, const BuildS
}
}
-void VisualStudioProvider::writeReferences(std::ofstream &output) {
+void VisualStudioProvider::writeReferences(const BuildSetup &setup, std::ofstream &output) {
output << "\tProjectSection(ProjectDependencies) = postProject\n";
for (UUIDMap::const_iterator i = _uuidMap.begin(); i != _uuidMap.end(); ++i) {
- if (i->first == PROJECT_NAME)
+ if (i->first == setup.projectName)
continue;
output << "\t\t{" << i->second << "} = {" << i->second << "}\n";
@@ -182,7 +182,7 @@ void VisualStudioProvider::writeReferences(std::ofstream &output) {
output << "\tEndProjectSection\n";
}
-void VisualStudioProvider::outputGlobalPropFile(std::ofstream &properties, int bits, const StringList &defines, const std::string &prefix, bool runBuildEvents) {
+void VisualStudioProvider::outputGlobalPropFile(const BuildSetup &setup, std::ofstream &properties, int bits, const StringList &defines, const std::string &prefix, bool runBuildEvents) {
std::string warnings;
for (StringList::const_iterator i = _globalWarnings.begin(); i != _globalWarnings.end(); ++i)
warnings += *i + ';';
@@ -202,17 +202,17 @@ void VisualStudioProvider::outputGlobalPropFile(std::ofstream &properties, int b
"<VisualStudioPropertySheet\n"
"\tProjectType=\"Visual C++\"\n"
"\tVersion=\"8.00\"\n"
- "\tName=\"" << PROJECT_DESCRIPTION << "_Global\"\n"
+ "\tName=\"" << setup.projectDescription << "_Global\"\n"
"\tOutputDirectory=\"$(ConfigurationName)" << bits << "\"\n"
"\tIntermediateDirectory=\"$(ConfigurationName)" << bits << "/$(ProjectName)\"\n"
"\t>\n"
"\t<Tool\n"
"\t\tName=\"VCCLCompilerTool\"\n"
- "\t\tDisableLanguageExtensions=\"true\"\n"
+ "\t\tDisableLanguageExtensions=\"" << (setup.devTools ? "false" : "true") << "\"\n"
"\t\tDisableSpecificWarnings=\"" << warnings << "\"\n"
"\t\tAdditionalIncludeDirectories=\"" << prefix << ";" << prefix << "\\engines;$(" << LIBS_DEFINE << ")\\include;$(TargetDir)\"\n"
"\t\tPreprocessorDefinitions=\"" << definesList << "\"\n"
- "\t\tExceptionHandling=\"0\"\n";
+ "\t\tExceptionHandling=\"" << (setup.devTools ? "1" : "0") << "\"\n";
#if NEEDS_RTTI
properties << "\t\tRuntimeTypeInfo=\"true\"\n";
@@ -231,9 +231,12 @@ void VisualStudioProvider::outputGlobalPropFile(std::ofstream &properties, int b
"\t<Tool\n"
"\t\tName=\"VCLinkerTool\"\n"
"\t\tIgnoreDefaultLibraryNames=\"\"\n"
- "\t\tSubSystem=\"1\"\n"
- "\t\tEntryPointSymbol=\"WinMainCRTStartup\"\n"
- "\t\tAdditionalLibraryDirectories=\"$(" << LIBS_DEFINE << ")\\lib\\" << ((bits == 32) ? "x86" : "x64") << "\"\n"
+ "\t\tSubSystem=\"1\"\n";
+
+ if (!setup.devTools)
+ properties << "\t\tEntryPointSymbol=\"WinMainCRTStartup\"\n";
+
+ properties << "\t\tAdditionalLibraryDirectories=\"$(" << LIBS_DEFINE << ")\\lib\\" << ((bits == 32) ? "x86" : "x64") << "\"\n"
"\t/>\n"
"\t<Tool\n"
"\t\tName=\"VCResourceCompilerTool\"\n"
@@ -248,16 +251,16 @@ void VisualStudioProvider::createBuildProp(const BuildSetup &setup, bool isRelea
const std::string outputType = (enableAnalysis ? "Analysis" : (isRelease ? "Release" : "Debug"));
const std::string outputBitness = (isWin32 ? "32" : "64");
- std::ofstream properties((setup.outputDir + '/' + PROJECT_DESCRIPTION "_" + outputType + (isWin32 ? "" : "64") + getPropertiesExtension()).c_str());
+ std::ofstream properties((setup.outputDir + '/' + setup.projectDescription + "_" + outputType + (isWin32 ? "" : "64") + getPropertiesExtension()).c_str());
if (!properties)
- error("Could not open \"" + setup.outputDir + '/' + PROJECT_DESCRIPTION "_" + outputType + (isWin32 ? "" : "64") + getPropertiesExtension() + "\" for writing");
+ error("Could not open \"" + setup.outputDir + '/' + setup.projectDescription + "_" + outputType + (isWin32 ? "" : "64") + getPropertiesExtension() + "\" for writing");
properties << "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n"
"<VisualStudioPropertySheet\n"
"\tProjectType=\"Visual C++\"\n"
"\tVersion=\"8.00\"\n"
- "\tName=\"" << PROJECT_DESCRIPTION << "_" << outputType << outputBitness << "\"\n"
- "\tInheritedPropertySheets=\".\\" << PROJECT_DESCRIPTION << "_Global" << (isWin32 ? "" : "64") << ".vsprops\"\n"
+ "\tName=\"" << setup.projectDescription << "_" << outputType << outputBitness << "\"\n"
+ "\tInheritedPropertySheets=\".\\" << setup.projectDescription << "_Global" << (isWin32 ? "" : "64") << ".vsprops\"\n"
"\t>\n"
"\t<Tool\n"
"\t\tName=\"VCCLCompilerTool\"\n";
diff --git a/devtools/create_project/visualstudio.h b/devtools/create_project/visualstudio.h
index dad923e49c..845550139c 100644
--- a/devtools/create_project/visualstudio.h
+++ b/devtools/create_project/visualstudio.h
@@ -38,9 +38,9 @@ protected:
void writeFileListToProject(const FileNode &dir, std::ofstream &projectFile, const int indentation,
const StringList &duplicate, const std::string &objPrefix, const std::string &filePrefix);
- void writeReferences(std::ofstream &output);
+ void writeReferences(const BuildSetup &setup, std::ofstream &output);
- void outputGlobalPropFile(std::ofstream &properties, int bits, const StringList &defines, const std::string &prefix, bool runBuildEvents);
+ void outputGlobalPropFile(const BuildSetup &setup, std::ofstream &properties, int bits, const StringList &defines, const std::string &prefix, bool runBuildEvents);
void createBuildProp(const BuildSetup &setup, bool isRelease, bool isWin32, bool enableAnalysis);
@@ -49,7 +49,7 @@ protected:
int getVisualStudioVersion();
void outputConfiguration(std::ostream &project, const BuildSetup &setup, const std::string &libraries, const std::string &config, const std::string &platform, const std::string &props, const bool isWin32);
- void outputConfiguration(std::ostream &project, const std::string &toolConfig, const std::string &config, const std::string &platform, const std::string &props);
+ void outputConfiguration(const BuildSetup &setup, std::ostream &project, const std::string &toolConfig, const std::string &config, const std::string &platform, const std::string &props);
void outputBuildEvents(std::ostream &project, const BuildSetup &setup, const bool isWin32);
};
diff --git a/devtools/create_toon/dists/msvc9/create_toon.sln b/devtools/create_toon/dists/msvc9/create_toon.sln
deleted file mode 100644
index e9c3750590..0000000000
--- a/devtools/create_toon/dists/msvc9/create_toon.sln
+++ /dev/null
@@ -1,20 +0,0 @@
-ďťż
-Microsoft Visual Studio Solution File, Format Version 10.00
-# Visual Studio 2008
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "create_toon", "create_toon.vcproj", "{5F280130-349D-11DD-AE16-0800200C9A66}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Win32 = Debug|Win32
- Release|Win32 = Release|Win32
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {5F280130-349D-11DD-AE16-0800200C9A66}.Debug|Win32.ActiveCfg = Debug|Win32
- {5F280130-349D-11DD-AE16-0800200C9A66}.Debug|Win32.Build.0 = Debug|Win32
- {5F280130-349D-11DD-AE16-0800200C9A66}.Release|Win32.ActiveCfg = Release|Win32
- {5F280130-349D-11DD-AE16-0800200C9A66}.Release|Win32.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/devtools/create_toon/dists/msvc9/create_toon.vcproj b/devtools/create_toon/dists/msvc9/create_toon.vcproj
deleted file mode 100644
index f860b8b201..0000000000
--- a/devtools/create_toon/dists/msvc9/create_toon.vcproj
+++ /dev/null
@@ -1,187 +0,0 @@
-<?xml version="1.0" encoding="windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="create_toon"
- ProjectGUID="{5F280130-349D-11DD-AE16-0800200C9A66}"
- RootNamespace="create_toon"
- Keyword="Win32Proj"
- TargetFrameworkVersion="131072"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/wd4996"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\.."
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/create_toon.exe"
- LinkIncremental="2"
- IgnoreDefaultLibraryNames="libc.lib;libcmt.lib"
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)/create_toon.pdb"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/wd4996"
- Optimization="3"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/create_toon.exe"
- LinkIncremental="1"
- IgnoreDefaultLibraryNames="libc.lib;libcmt.lib"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <File
- RelativePath="..\..\create_toon.cpp"
- >
- </File>
- <File
- RelativePath="..\..\create_toon.h"
- >
- </File>
- <File
- RelativePath="..\..\staticdata.h"
- >
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/devtools/skycpt/AsciiCptCompile.sln b/devtools/skycpt/AsciiCptCompile.sln
deleted file mode 100644
index 93de755bf3..0000000000
--- a/devtools/skycpt/AsciiCptCompile.sln
+++ /dev/null
@@ -1,21 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 8.00
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AsciiCptCompile", "AsciiCptCompile.vcproj", "{BDAC73AF-42DE-45E7-95A8-C1D906AD19EF}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Global
- GlobalSection(SolutionConfiguration) = preSolution
- Debug = Debug
- Release = Release
- EndGlobalSection
- GlobalSection(ProjectConfiguration) = postSolution
- {BDAC73AF-42DE-45E7-95A8-C1D906AD19EF}.Debug.ActiveCfg = Debug|Win32
- {BDAC73AF-42DE-45E7-95A8-C1D906AD19EF}.Debug.Build.0 = Debug|Win32
- {BDAC73AF-42DE-45E7-95A8-C1D906AD19EF}.Release.ActiveCfg = Release|Win32
- {BDAC73AF-42DE-45E7-95A8-C1D906AD19EF}.Release.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- EndGlobalSection
- GlobalSection(ExtensibilityAddIns) = postSolution
- EndGlobalSection
-EndGlobal
diff --git a/devtools/skycpt/AsciiCptCompile.vcproj b/devtools/skycpt/AsciiCptCompile.vcproj
deleted file mode 100644
index e6a5def316..0000000000
--- a/devtools/skycpt/AsciiCptCompile.vcproj
+++ /dev/null
@@ -1,402 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="AsciiCptCompile"
- ProjectGUID="{BDAC73AF-42DE-45E7-95A8-C1D906AD19EF}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="5"
- UsePrecompiledHeader="3"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/AsciiCptCompile.exe"
- LinkIncremental="2"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/AsciiCptCompile.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="4"
- UsePrecompiledHeader="3"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/AsciiCptCompile.exe"
- LinkIncremental="1"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Quelldateien"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\AsciiCptCompile.cpp">
- </File>
- <File
- RelativePath=".\cptcompiler.cpp">
- </File>
- <File
- RelativePath=".\cpthelp.cpp">
- </File>
- <File
- RelativePath=".\idFinder.cpp">
- </File>
- <File
- RelativePath=".\KmpSearch.cpp">
- </File>
- <File
- RelativePath=".\stdafx.cpp">
- <FileConfiguration
- Name="Debug|Win32">
- <Tool
- Name="VCCLCompilerTool"
- UsePrecompiledHeader="1"/>
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32">
- <Tool
- Name="VCCLCompilerTool"
- UsePrecompiledHeader="1"/>
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\TextFile.cpp">
- </File>
- </Filter>
- <Filter
- Name="Headerdateien"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
- <File
- RelativePath=".\cpthelp.h">
- </File>
- <File
- RelativePath=".\KmpSearch.h">
- </File>
- <File
- RelativePath=".\stdafx.h">
- </File>
- <File
- RelativePath=".\TextFile.h">
- </File>
- </Filter>
- <Filter
- Name="Ressourcendateien"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
- <File
- RelativePath=".\asmSrc\0compact.inc">
- </File>
- <File
- RelativePath=".\asmSrc\101comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\102comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\10comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\11comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\12comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\13comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\14comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\15comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\16comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\17comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\18comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\19comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\1compact.inc">
- </File>
- <File
- RelativePath=".\asmSrc\20comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\21comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\22comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\23comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\24comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\25comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\26comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\27comp.inc">
- </File>
- <File
- RelativePath=".\288diff.txt">
- </File>
- <File
- RelativePath=".\asmSrc\28comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\29comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\2compact.inc">
- </File>
- <File
- RelativePath=".\asmSrc\30comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\31comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\32comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\33comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\34comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\36comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\37comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\38comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\39comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\3compact.inc">
- </File>
- <File
- RelativePath=".\asmSrc\40comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\41comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\42comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\44comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\45comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\46comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\47comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\48comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\4compact.inc">
- </File>
- <File
- RelativePath=".\asmSrc\5compact.inc">
- </File>
- <File
- RelativePath=".\asmSrc\65comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\66comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\67comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\68comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\69comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\70comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\71comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\72comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\73comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\74comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\75comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\76comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\77comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\78comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\79comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\80comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\81comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\82comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\85comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\90comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\91comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\92comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\93comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\94comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\95comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\96comp.inc">
- </File>
- <File
- RelativePath=".\asmSrc\9compact.inc">
- </File>
- <File
- RelativePath=".\COMPACT.TXT">
- </File>
- <File
- RelativePath=".\savedata.txt">
- </File>
- </Filter>
- <File
- RelativePath=".\ReadMe.txt">
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/devtools/tasmrecover/dreamweb/object.asm b/devtools/tasmrecover/dreamweb/object.asm
index e6f8037579..807a100052 100644
--- a/devtools/tasmrecover/dreamweb/object.asm
+++ b/devtools/tasmrecover/dreamweb/object.asm
@@ -336,11 +336,16 @@ waitexam: ;call delpointer
jz notuseinv
mov bx,offset cs:withlist1
notuseinv: call checkcoords
+
+ cmp quitrequested, 0
+ jnz stopwaiting
+
cmp examagain,0
jz norex
jmp examineagain
norex: cmp getback,0
jz waitexam
+stopwaiting:
mov pickup,0
cmp watchingtime,0
diff --git a/devtools/tasmrecover/tasm-recover b/devtools/tasmrecover/tasm-recover
index 8e37b4e851..e8921055e4 100755
--- a/devtools/tasmrecover/tasm-recover
+++ b/devtools/tasmrecover/tasm-recover
@@ -51,6 +51,7 @@ generator = cpp(context, "DreamGen", blacklist = [
'printchar',
'printdirect',
'printslow',
+ 'printmessage',
'usetimedtext',
'dumptimedtext',
'setuptimedtemp',
@@ -107,6 +108,7 @@ generator = cpp(context, "DreamGen", blacklist = [
'doblocks',
'checkifperson',
'checkiffree',
+ 'checkifex',
'getreelstart',
'findobname',
'copyname',
@@ -142,9 +144,59 @@ generator = cpp(context, "DreamGen", blacklist = [
'placesetobject',
'removesetobject',
'showallfree',
+ 'showallex',
'adjustlen',
'finishedwalking',
'checkone',
+ 'getblockofpixel',
+ 'getflagunderp',
+ 'walkandexamine',
+ 'obname',
+ 'delpointer',
+ 'showblink',
+ 'dumpblink',
+ 'dumppointer',
+ 'showpointer',
+ 'animpointer',
+ 'checkcoords',
+ 'readmouse',
+ 'readmouse1',
+ 'readmouse2',
+ 'readmouse3',
+ 'readmouse4',
+ 'waitframes',
+ 'drawflags',
+ 'addtopeoplelist',
+ 'getexpos',
+ 'paneltomap',
+ 'maptopanel',
+ 'dumpmap',
+ 'obpicture',
+ 'delthisone',
+ 'transferinv',
+ 'obicons',
+ 'compare',
+ 'pixelcheckset',
+ 'turnpathon',
+ 'turnpathoff',
+ 'turnanypathon',
+ 'turnanypathoff',
+ 'isitdescribed',
+ 'checkifset',
+ 'checkifpathison',
+ 'delsprite',
+ 'dumpeverything',
+ 'isitworn',
+ 'makeworn',
+ 'obtoinv',
+ 'showryanpage',
+ 'findallryan',
+ 'fillryan',
+ 'useroutine',
+ 'hangon',
+ 'hangonp',
+ 'findnextcolon',
+ 'usetext',
], skip_output = [
# These functions are processed but not output
'dreamweb',
diff --git a/devtools/tasmrecover/tasm/cpp.py b/devtools/tasmrecover/tasm/cpp.py
index d2b860ddf5..61edb41fb2 100644
--- a/devtools/tasmrecover/tasm/cpp.py
+++ b/devtools/tasmrecover/tasm/cpp.py
@@ -584,11 +584,17 @@ namespace %s {
data_bin = self.data_seg
data_impl = "\n\tstatic const uint8 src[] = {\n\t\t"
n = 0
+ comment = str()
for v in data_bin:
data_impl += "0x%02x, " %v
n += 1
+
+ comment += chr(v) if (v >= 0x20 and v < 0x7f and v != ord('\\')) else "."
if (n & 0xf) == 0:
- data_impl += "\n\t\t"
+ data_impl += "\n\t\t//0x%04x: %s\n\t\t" %(n - 16, comment)
+ comment = str()
+ elif (n & 0x3) == 0:
+ comment += " "
data_impl += "};\n\tds.assign(src, src + sizeof(src));\n"
self.hd.write(
"""\n#include "dreamweb/runtime.h"
diff --git a/dists/msvc10/create_msvc10.bat b/dists/msvc10/create_msvc10.bat
index f915d5d366..5616c2cc8b 100644
--- a/dists/msvc10/create_msvc10.bat
+++ b/dists/msvc10/create_msvc10.bat
@@ -8,6 +8,8 @@ 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
@@ -23,6 +25,7 @@ echo.
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
@@ -60,6 +63,13 @@ echo.
create_project ..\.. --msvc --msvc-version 10
goto done
+:tools
+echo.
+echo Creating tools project files
+echo.
+create_project ..\.. --tools --msvc --msvc-version 10
+goto done
+
:clean_check
echo.
set cleananswer=N
@@ -77,6 +87,7 @@ 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
diff --git a/dists/msvc8/create_msvc8.bat b/dists/msvc8/create_msvc8.bat
index beb2eaf0d7..2261c9bcec 100644
--- a/dists/msvc8/create_msvc8.bat
+++ b/dists/msvc8/create_msvc8.bat
@@ -8,6 +8,8 @@ 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
@@ -23,6 +25,7 @@ echo.
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
@@ -60,6 +63,13 @@ echo.
create_project ..\.. --msvc --msvc-version 8
goto done
+:tools
+echo.
+echo Creating tools project files
+echo.
+create_project ..\.. --tools --msvc --msvc-version 8
+goto done
+
:clean_check
echo.
set cleananswer=N
@@ -77,6 +87,7 @@ del /Q *.vcproj* > NUL 2>&1
del /Q *.vsprops > NUL 2>&1
del /Q *.sln* > NUL 2>&1
del /Q scummvm* > NUL 2>&1
+del /Q devtools* > NUL 2>&1
goto done
:done
diff --git a/dists/msvc9/create_msvc9.bat b/dists/msvc9/create_msvc9.bat
index 880af95312..1622cd9037 100644
--- a/dists/msvc9/create_msvc9.bat
+++ b/dists/msvc9/create_msvc9.bat
@@ -8,6 +8,8 @@ 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
@@ -23,6 +25,7 @@ echo.
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
@@ -60,6 +63,13 @@ echo.
create_project ..\.. --msvc --msvc-version 9
goto done
+:tools
+echo.
+echo Creating tools project files
+echo.
+create_project ..\.. --tools --msvc --msvc-version 9
+goto done
+
:clean_check
echo.
set cleananswer=N
@@ -77,6 +87,7 @@ del /Q *.vcproj* > NUL 2>&1
del /Q *.vsprops > NUL 2>&1
del /Q *.sln* > NUL 2>&1
del /Q scummvm* > NUL 2>&1
+del /Q devtools* > NUL 2>&1
goto done
:done
diff --git a/doc/de/Liesmich b/doc/de/Liesmich
index 88e10b51bc..02cc262f89 100644
--- a/doc/de/Liesmich
+++ b/doc/de/Liesmich
@@ -1,11 +1,6 @@
ScummVM - Liesmich-Datei
------------------------------------------------------------------------
-Dieses Dokument ist größtenteils eine Übersetzung der englischen README-Datei.
-Das Original-Dokument ist womĂśglich aktueller. Sollten Sie hier also nicht das
-finden, was Sie benĂśtigen und ein wenig Englisch kĂśnnen, sollten Sie sich die
-englische README-Datei ansehen.
-
Fßr weitere Informationen, Kompatibilitätslisten, Einzelheiten zu Spenden, die
neusten verĂśffentlichten Versionen, Fortschrittsberichte und mehr besuchen Sie
bitte die ScummVM-Website unter der Adresse: http://www.scummvm.org/
@@ -37,7 +32,7 @@ Inhaltsverzeichnis:
* 3.16 Hinweise zu Mickey's Space Adventure
* 3.17 Hinweise zu Winnie the Pooh
* 3.18 Hinweise zu Troll's Tale
- * 3.19 Hinweise zu Draci Historie
+ * 3.19 Hinweise zu Drači Historie
* 3.20 Bekannte Probleme
4.0) UnterstĂźtzte Plattformen
5.0) ScummVM verwenden
@@ -300,7 +295,7 @@ Andere Spiele:
Cruise for a Corpse [cruise]
Discworld [dw]
Discworld 2: Vermutlich vermisst [dw2]
- Draci Historie [draci]
+ Drači Historie [draci]
Drascula: The Vampire Strikes Back [drascula]
Flight of the Amazon Queen [queen]
Future Wars [fw]
@@ -831,7 +826,7 @@ notwendig ist, die Inhalte dieser Diskette in einer Abbild-Datei auszugeben und
diese „troll.img“ zu nennen, um das Spiel unter ScummVM spielen zu können.
-3.19) Hinweise zu Draci Historie:
+3.19) Hinweise zu Drači Historie:
----- ---------------------------
Es gibt vier Sprachvarianten des Spiels: Tschechisch, Deutsch, Englisch und
Polnisch. Jede von ihnen wird in einem gesonderten Archiv bereitgestellt. Die
@@ -1283,10 +1278,9 @@ zwischen SCUMM-Spielen und anderen Spielen.
Strg+d - Startet den Debugger.
Strg+f - Schneller Modus EIN/AUS
Strg+g - SEHR schneller Modus EIN/AUS
- Strg+t - Wechselt zwischen
- „Speech only“ (nur Sprachausgabe),
- „Speech and Subtitles“ (Sprachausgabe und
- Untertitel) und „Subtitles only“ (nur Untertitel).
+ Strg+t - Wechselt zwischen „Nur Sprachausgabe“,
+ „Sprachausgabe und Untertitel“ und
+ „Nur Untertitel“.
Tilde (~) - Zeigt/verbirgt Debugging-Konsole.
[ und ] - Musiklautstärke, leiser/lauter
- und + - Texttempo, langsamer/schneller
@@ -1320,7 +1314,7 @@ zwischen SCUMM-Spielen und anderen Spielen.
Strg+f - Schneller Modus EIN/AUS
p - Spielpause
- Draci Historie:
+ Drači Historie:
F5 - Zeigt globales MenĂź.
Linksklick - Laufen, untersuchen
Rechtsklick - Verwenden, reden
@@ -2306,11 +2300,11 @@ Debug-Nachrichten zu durchsuchen
* Rufen Sie „fakeroot dpkg-buildpackage -b -d“ auf.
------------------------------------------------------------------------
-Viel Glück und viel Spaß beim Spielen!
-Das ScummVM-Team.
+Viel Glück und viel Spaß beim Spielen wünscht
+das ScummVM-Team.
http://www.scummvm.org/
------------------------------------------------------------------------
(Deutscher Text basiert auf README mit SHA1 ID:
-d31bf017a9e717759f2410a8d355cf43b3418c4c)
+0e8840568bed09c8baa670f079a6fe438fffad56)
diff --git a/engines/agi/opcodes.cpp b/engines/agi/opcodes.cpp
index c2cecefc52..d1baab93e1 100644
--- a/engines/agi/opcodes.cpp
+++ b/engines/agi/opcodes.cpp
@@ -288,7 +288,7 @@ AgiInstruction insV2[] = {
{ "status.line.on", "", &cmdStatusLineOn },
{ "status.line.off", "", &cmdStatusLineOff },
{ "set.string", "ns", &cmdSetString },
- { "get.string", "ns", &cmdGetString },
+ { "get.string", "nsnnn", &cmdGetString },
{ "word.to.string", "nn", &cmdWordToString },
{ "parse", "n", &cmdParse },
{ "get.num", "nv", &cmdGetNum },
@@ -307,7 +307,7 @@ AgiInstruction insV2[] = {
{ "program.control", "", &cmdProgramControl },
{ "player.control", "", &cmdPlayerControl },
{ "obj.status.v", "v", &cmdObjStatusF },
- { "quit", "n", &cmdQuit },
+ { "quit", "n", &cmdQuit }, // 0 args for AGI version 2.089
{ "show.mem", "", &cmdShowMem },
{ "pause", "", &cmdPause },
{ "echo.line", "", &cmdEchoLine },
@@ -324,16 +324,16 @@ AgiInstruction insV2[] = {
{ "reposition.to.v", "nvv", &cmdRepositionToF },
{ "trace.on", "", &cmdTraceOn },
{ "trace.info", "nnn", &cmdTraceInfo },
- { "print.at", "snnn", &cmdPrintAt },
+ { "print.at", "snnn", &cmdPrintAt }, // 3 args for AGI versions before 2.440
{ "print.at.v", "vnnn", &cmdPrintAtV },
{ "discard.view.v", "v", &cmdDiscardView},
{ "clear.text.rect", "nnnnn", &cmdClearTextRect },
{ "set.upper.left", "nn", &cmdSetUpperLeft },
{ "set.menu", "s", &cmdSetMenu },
- { "set.menu.member", "sn", &cmdSetMenuItem },
+ { "set.menu.item", "sn", &cmdSetMenuItem },
{ "submit.menu", "", &cmdSubmitMenu },
- { "enable.member", "n", &cmdEnableItem },
- { "disable.member", "n", &cmdDisableItem },
+ { "enable.item", "n", &cmdEnableItem },
+ { "disable.item", "n", &cmdDisableItem },
{ "menu.input", "", &cmdMenuInput },
{ "show.obj.v", "v", &cmdShowObjV },
{ "open.dialogue", "", &cmdOpenDialogue },
@@ -349,12 +349,12 @@ AgiInstruction insV2[] = {
{ "hold.key", "", &cmdHoldKey },
{ "set.pri.base", "n", &cmdSetPriBase },
{ "discard.sound", "n", &cmdDiscardSound },
- { "hide.mouse", "", &cmdHideMouse },
+ { "hide.mouse", "", &cmdHideMouse }, // 1 arg for AGI version 3.002.086
{ "allow.menu", "n", &cmdAllowMenu },
{ "show.mouse", "", &cmdShowMouse },
{ "fence.mouse", "nnnn", &cmdFenceMouse },
{ "mouse.posn", "vv", &cmdMousePosn },
- { "release.key", "", &cmdReleaseKey },
+ { "release.key", "", &cmdReleaseKey }, // 2 args for at least the Amiga GR (v2.05 1989-03-09) using AGI 2.316
{ "adj.ego.move.to.xy", "", &cmdAdjEgoMoveToXY }
};
diff --git a/engines/agos/agos.cpp b/engines/agos/agos.cpp
index 97c594684c..465b6e0786 100644
--- a/engines/agos/agos.cpp
+++ b/engines/agos/agos.cpp
@@ -41,18 +41,51 @@
namespace AGOS {
static const GameSpecificSettings simon1_settings = {
+ "", // base_filename
+ "", // restore_filename
+ "", // tbl_filename
"EFFECTS", // effects_filename
"SIMON", // speech_filename
};
static const GameSpecificSettings simon2_settings = {
+ "", // base_filename
+ "", // restore_filename
+ "", // tbl_filename
"", // effects_filename
"SIMON2", // speech_filename
};
-static const GameSpecificSettings puzzlepack_settings = {
+static const GameSpecificSettings dimp_settings = {
+ "Gdimp", // base_filename
+ "", // restore_filename
+ "", // tbl_filename
"", // effects_filename
- "MUSIC", // speech_filename
+ "MUSIC", // speech_filename
+};
+
+static const GameSpecificSettings jumble_settings = {
+ "Gjumble", // base_filename
+ "", // restore_filename
+ "", // tbl_filename
+ "", // effects_filename
+ "MUSIC", // speech_filename
+};
+
+static const GameSpecificSettings puzzle_settings = {
+ "Gpuzzle", // base_filename
+ "", // restore_filename
+ "", // tbl_filename
+ "", // effects_filename
+ "MUSIC", // speech_filename
+};
+
+static const GameSpecificSettings swampy_settings = {
+ "Gswampy", // base_filename
+ "", // restore_filename
+ "", // tbl_filename
+ "", // effects_filename
+ "MUSIC", // speech_filename
};
#ifdef ENABLE_AGOS2
@@ -678,7 +711,15 @@ static const uint16 initialVideoWindows_PN[20] = {
#ifdef ENABLE_AGOS2
void AGOSEngine_PuzzlePack::setupGame() {
- gss = &puzzlepack_settings;
+ if (getGameId() == GID_DIMP) {
+ gss = &dimp_settings;
+ } else if (getGameId() == GID_JUMBLE) {
+ gss = &jumble_settings;
+ } else if (getGameId() == GID_PUZZLE) {
+ gss = &puzzle_settings;
+ } else if (getGameId() == GID_SWAMPY) {
+ gss = &swampy_settings;
+ }
_numVideoOpcodes = 85;
_vgaMemSize = 7500000;
_itemMemSize = 20000;
@@ -963,6 +1004,10 @@ void AGOSEngine::pause() {
}
Common::Error AGOSEngine::go() {
+#ifdef ENABLE_AGOS2
+ loadArchives();
+#endif
+
loadGamePcFile();
addTimeEvent(0, 1);
diff --git a/engines/agos/agos.h b/engines/agos/agos.h
index 820bc0260b..ec979abc20 100644
--- a/engines/agos/agos.h
+++ b/engines/agos/agos.h
@@ -25,6 +25,7 @@
#include "engines/engine.h"
+#include "common/archive.h"
#include "common/array.h"
#include "common/error.h"
#include "common/keyboard.h"
@@ -186,6 +187,22 @@ class Debugger;
# define _OPCODE(ver, x) { &ver::x, "" }
#endif
+class ArchiveMan : public Common::SearchSet {
+public:
+ ArchiveMan();
+
+ void enableFallback(bool val) { _fallBack = val; }
+
+#ifdef ENABLE_AGOS2
+ void registerArchive(const Common::String &filename, int priority);
+#endif
+
+ Common::SeekableReadStream *open(const Common::String &filename);
+
+private:
+ bool _fallBack;
+};
+
class AGOSEngine : public Engine {
protected:
friend class Debugger;
@@ -599,6 +616,8 @@ public:
AGOSEngine(OSystem *system, const AGOSGameDescription *gd);
virtual ~AGOSEngine();
+ ArchiveMan _archives;
+
byte *_curSfxFile;
uint32 _curSfxFileSize;
uint16 _sampleEnd, _sampleWait;
@@ -608,6 +627,10 @@ protected:
virtual uint16 readUint16Wrapper(const void *src);
virtual uint32 readUint32Wrapper(const void *src);
+#ifdef ENABLE_AGOS2
+ void loadArchives();
+#endif
+
int allocGamePcVars(Common::SeekableReadStream *in);
void createPlayer();
void allocateStringTable(int num);
@@ -792,14 +815,14 @@ protected:
void loadTextIntoMem(uint16 stringId);
uint loadTextFile(const char *filename, byte *dst);
- Common::File *openTablesFile(const char *filename);
- void closeTablesFile(Common::File *in);
+ Common::SeekableReadStream *openTablesFile(const char *filename);
+ void closeTablesFile(Common::SeekableReadStream *in);
uint loadTextFile_simon1(const char *filename, byte *dst);
- Common::File *openTablesFile_simon1(const char *filename);
+ Common::SeekableReadStream *openTablesFile_simon1(const char *filename);
uint loadTextFile_gme(const char *filename, byte *dst);
- Common::File *openTablesFile_gme(const char *filename);
+ Common::SeekableReadStream *openTablesFile_gme(const char *filename);
void invokeTimeEvent(TimeEvent *te);
bool kickoffTimeEvents();
diff --git a/engines/agos/animation.cpp b/engines/agos/animation.cpp
index d9a585bd05..d9d6b71a2a 100644
--- a/engines/agos/animation.cpp
+++ b/engines/agos/animation.cpp
@@ -137,7 +137,7 @@ void MoviePlayer::handleNextFrame() {
// Movie player for DXA movies
///////////////////////////////////////////////////////////////////////////////
-const char * MoviePlayerDXA::_sequenceList[90] = {
+const char *const MoviePlayerDXA::_sequenceList[90] = {
"agent32",
"Airlock",
"Badluck",
@@ -251,8 +251,11 @@ bool MoviePlayerDXA::load() {
}
Common::String videoName = Common::String::format("%s.dxa", baseName);
- if (!loadFile(videoName))
+ Common::SeekableReadStream *videoStream = _vm->_archives.open(videoName);
+ if (!videoStream)
error("Failed to load video file %s", videoName.c_str());
+ if (!loadStream(videoStream))
+ error("Failed to load video stream from file %s", videoName.c_str());
debug(0, "Playing video %s", videoName.c_str());
@@ -412,8 +415,11 @@ MoviePlayerSMK::MoviePlayerSMK(AGOSEngine_Feeble *vm, const char *name)
bool MoviePlayerSMK::load() {
Common::String videoName = Common::String::format("%s.smk", baseName);
- if (!loadFile(videoName))
+ Common::SeekableReadStream *videoStream = _vm->_archives.open(videoName);
+ if (!videoStream)
error("Failed to load video file %s", videoName.c_str());
+ if (!loadStream(videoStream))
+ error("Failed to load video stream from file %s", videoName.c_str());
debug(0, "Playing video %s", videoName.c_str());
diff --git a/engines/agos/animation.h b/engines/agos/animation.h
index e1d7207251..11936aa338 100644
--- a/engines/agos/animation.h
+++ b/engines/agos/animation.h
@@ -73,7 +73,7 @@ protected:
};
class MoviePlayerDXA : public MoviePlayer, Video::DXADecoder {
- static const char *_sequenceList[90];
+ static const char *const _sequenceList[90];
uint8 _sequenceNum;
public:
MoviePlayerDXA(AGOSEngine_Feeble *vm, const char *name);
diff --git a/engines/agos/detection.cpp b/engines/agos/detection.cpp
index 2be888b92a..116e66820a 100644
--- a/engines/agos/detection.cpp
+++ b/engines/agos/detection.cpp
@@ -83,7 +83,7 @@ static const PlainGameDescriptor agosGames[] = {
#include "agos/detection_tables.h"
-static const char *directoryGlobs[] = {
+static const char *const directoryGlobs[] = {
"execute", // Used by Simon1 Acorn CD
0
};
@@ -240,6 +240,22 @@ Common::Platform AGOSEngine::getPlatform() const {
}
const char *AGOSEngine::getFileName(int type) const {
+ // Required if the InstallShield cab is been used
+ if (getGameType() == GType_PP) {
+ if (type == GAME_BASEFILE)
+ return gss->base_filename;
+ }
+
+ // Required if the InstallShield cab is been used
+ if (getGameType() == GType_FF && getPlatform() == Common::kPlatformWindows) {
+ if (type == GAME_BASEFILE)
+ return gss->base_filename;
+ if (type == GAME_RESTFILE)
+ return gss->restore_filename;
+ if (type == GAME_TBLFILE)
+ return gss->tbl_filename;
+ }
+
for (int i = 0; _gameDescription->desc.filesDescriptions[i].fileType; i++) {
if (_gameDescription->desc.filesDescriptions[i].fileType == type)
return _gameDescription->desc.filesDescriptions[i].fileName;
@@ -247,4 +263,17 @@ const char *AGOSEngine::getFileName(int type) const {
return NULL;
}
+#ifdef ENABLE_AGOS2
+void AGOSEngine::loadArchives() {
+ const ADGameFileDescription *ag;
+
+ if (getFeatures() & GF_PACKED) {
+ for (ag = _gameDescription->desc.filesDescriptions; ag->fileName; ag++) {
+ if (!_archives.hasArchive(ag->fileName))
+ _archives.registerArchive(ag->fileName, ag->fileType);
+ }
+ }
+}
+#endif
+
} // End of namespace AGOS
diff --git a/engines/agos/detection_tables.h b/engines/agos/detection_tables.h
index d9f321d98e..a7a384a496 100644
--- a/engines/agos/detection_tables.h
+++ b/engines/agos/detection_tables.h
@@ -2519,6 +2519,27 @@ static const AGOSGameDescription gameDescriptions[] = {
GF_OLD_BUNDLE | GF_ZLIBCOMP | GF_TALKIE
},
+ // The Feeble Files - English Windows 2CD (with InstallShield cab)
+ {
+ {
+ "feeble",
+ "2CD",
+
+ {
+ { "data1.cab", 0, "600db08891e7a21badc8215e604cd88f", 28845430},
+ { NULL, 0, NULL, 0}
+ },
+ Common::EN_ANY,
+ Common::kPlatformWindows,
+ ADGF_NO_FLAGS,
+ GUIO_NOSUBTITLES | GUIO_NOMUSIC
+ },
+
+ GType_FF,
+ GID_FEEBLEFILES,
+ GF_OLD_BUNDLE | GF_TALKIE | GF_PACKED
+ },
+
// The Feeble Files - English Windows 2CD
{
{
@@ -2565,6 +2586,27 @@ static const AGOSGameDescription gameDescriptions[] = {
GF_OLD_BUNDLE | GF_TALKIE
},
+ // The Feeble Files - English Windows 4CD (with InstallShield cab)
+ {
+ {
+ "feeble",
+ "4CD",
+
+ {
+ { "data1.cab", 0, "65804cbc9036ac4b1275d97e0de3be2f", 28943062},
+ { NULL, 0, NULL, 0}
+ },
+ Common::EN_ANY,
+ Common::kPlatformWindows,
+ ADGF_NO_FLAGS,
+ GUIO_NOSUBTITLES | GUIO_NOMUSIC
+ },
+
+ GType_FF,
+ GID_FEEBLEFILES,
+ GF_OLD_BUNDLE | GF_TALKIE | GF_PACKED
+ },
+
// The Feeble Files - English Windows 4CD
{
{
@@ -2703,6 +2745,27 @@ static const AGOSGameDescription gameDescriptions[] = {
GF_OLD_BUNDLE | GF_TALKIE
},
+ // Simon the Sorcerer's Puzzle Pack - Demon in my Pocket (with InstallShield cab)
+ {
+ {
+ "dimp",
+ "CD",
+
+ {
+ { "data1.cab", 0, "36dd86c1d872cea81ac1de7753dd684a", 40394693},
+ { NULL, 0, NULL, 0}
+ },
+ Common::EN_ANY,
+ Common::kPlatformWindows,
+ ADGF_NO_FLAGS,
+ GUIO_NOSUBTITLES | GUIO_NOMUSIC
+ },
+
+ GType_PP,
+ GID_DIMP,
+ GF_OLD_BUNDLE | GF_TALKIE | GF_PACKED
+ },
+
// Simon the Sorcerer's Puzzle Pack - Demon in my Pocket
{
{
@@ -2724,6 +2787,27 @@ static const AGOSGameDescription gameDescriptions[] = {
GF_OLD_BUNDLE | GF_TALKIE
},
+ // Simon the Sorcerer's Puzzle Pack - Jumble (with InstallShield cab)
+ {
+ {
+ "jumble",
+ "CD",
+
+ {
+ { "data1.cab", 0, "36dd86c1d872cea81ac1de7753dd684a", 40394693},
+ { NULL, 0, NULL, 0}
+ },
+ Common::EN_ANY,
+ Common::kPlatformWindows,
+ ADGF_NO_FLAGS,
+ GUIO_NOSUBTITLES
+ },
+
+ GType_PP,
+ GID_JUMBLE,
+ GF_OLD_BUNDLE | GF_TALKIE | GF_PACKED
+ },
+
// Simon the Sorcerer's Puzzle Pack - Jumble
{
{
@@ -2745,6 +2829,27 @@ static const AGOSGameDescription gameDescriptions[] = {
GF_OLD_BUNDLE | GF_TALKIE
},
+ // Simon the Sorcerer's Puzzle Pack - NoPatience (with InstallShield cab)
+ {
+ {
+ "puzzle",
+ "CD",
+
+ {
+ { "data1.cab", 0, "36dd86c1d872cea81ac1de7753dd684a", 40394693},
+ { NULL, 0, NULL, 0}
+ },
+ Common::EN_ANY,
+ Common::kPlatformWindows,
+ ADGF_NO_FLAGS,
+ GUIO_NOSUBTITLES
+ },
+
+ GType_PP,
+ GID_PUZZLE,
+ GF_OLD_BUNDLE | GF_TALKIE | GF_PACKED
+ },
+
// Simon the Sorcerer's Puzzle Pack - NoPatience
{
{
@@ -2766,6 +2871,27 @@ static const AGOSGameDescription gameDescriptions[] = {
GF_OLD_BUNDLE | GF_TALKIE
},
+ // Simon the Sorcerer's Puzzle Pack - Swampy Adventures - English (with InstallShield cab)
+ {
+ {
+ "swampy",
+ "CD",
+
+ {
+ { "data1.cab", 0, "36dd86c1d872cea81ac1de7753dd684a", 40394693},
+ { NULL, 0, NULL, 0}
+ },
+ Common::EN_ANY,
+ Common::kPlatformWindows,
+ ADGF_NO_FLAGS,
+ GUIO_NOSUBTITLES
+ },
+
+ GType_PP,
+ GID_SWAMPY,
+ GF_OLD_BUNDLE | GF_TALKIE | GF_PACKED
+ },
+
// Simon the Sorcerer's Puzzle Pack - Swampy Adventures - English
{
{
diff --git a/engines/agos/feeble.cpp b/engines/agos/feeble.cpp
index 4c82b7e19d..e9a91e3b76 100644
--- a/engines/agos/feeble.cpp
+++ b/engines/agos/feeble.cpp
@@ -45,6 +45,9 @@ AGOSEngine_Feeble::~AGOSEngine_Feeble() {
}
static const GameSpecificSettings feeblefiles_settings = {
+ "game22", // base_filename
+ "save.999", // restore_filename
+ "tbllist", // tbl_filename
"", // effects_filename
"VOICES", // speech_filename
};
diff --git a/engines/agos/installshield_cab.cpp b/engines/agos/installshield_cab.cpp
new file mode 100644
index 0000000000..f7b49a64c5
--- /dev/null
+++ b/engines/agos/installshield_cab.cpp
@@ -0,0 +1,221 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+// The following code is based on unshield
+// Original copyright:
+
+// Copyright (c) 2003 David Eriksson <twogood@users.sourceforge.net>
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy of
+// this software and associated documentation files (the "Software"), to deal in
+// the Software without restriction, including without limitation the rights to
+// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+// of the Software, and to permit persons to whom the Software is furnished to do
+// so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+#include "agos/installshield_cab.h"
+
+#include "common/debug.h"
+#include "common/file.h"
+#include "common/memstream.h"
+#include "common/zlib.h"
+
+namespace AGOS {
+
+class InstallShieldCabinet : public Common::Archive {
+ Common::String _installShieldFilename;
+
+public:
+ InstallShieldCabinet(const Common::String &filename);
+ ~InstallShieldCabinet();
+
+ // Common::Archive API implementation
+ bool hasFile(const Common::String &name);
+ int listMembers(Common::ArchiveMemberList &list);
+ Common::ArchiveMemberPtr getMember(const Common::String &name);
+ Common::SeekableReadStream *createReadStreamForMember(const Common::String &name) const;
+
+private:
+ struct FileEntry {
+ uint32 uncompressedSize;
+ uint32 compressedSize;
+ uint32 offset;
+ uint16 flags;
+ };
+
+ typedef Common::HashMap<Common::String, FileEntry, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> FileMap;
+ FileMap _map;
+};
+
+InstallShieldCabinet::~InstallShieldCabinet() {
+ _map.clear();
+}
+
+InstallShieldCabinet::InstallShieldCabinet(const Common::String &filename) : _installShieldFilename(filename) {
+ Common::File installShieldFile;
+
+ if (!installShieldFile.open(_installShieldFilename)) {
+ warning("InstallShieldCabinet::InstallShieldCabinet(): Could not find the archive file %s", _installShieldFilename.c_str());
+ return;
+ }
+
+ // Note that we only support a limited subset of cabinet files
+ // Only single cabinet files and ones without data shared between
+ // cabinets.
+
+ // Check for the magic uint32
+ if (installShieldFile.readUint32LE() != 0x28635349) {
+ warning("InstallShieldCabinet::InstallShieldCabinet(): Magic ID doesn't match");
+ return;
+ }
+
+ uint32 version = installShieldFile.readUint32LE();
+
+ if (version != 0x01000004) {
+ warning("Unsupported CAB version %08x", version);
+ return;
+ }
+
+ /* uint32 volumeInfo = */ installShieldFile.readUint32LE();
+ uint32 cabDescriptorOffset = installShieldFile.readUint32LE();
+ /* uint32 cabDescriptorSize = */ installShieldFile.readUint32LE();
+
+ installShieldFile.seek(cabDescriptorOffset);
+
+ installShieldFile.skip(12);
+ uint32 fileTableOffset = installShieldFile.readUint32LE();
+ installShieldFile.skip(4);
+ uint32 fileTableSize = installShieldFile.readUint32LE();
+ uint32 fileTableSize2 = installShieldFile.readUint32LE();
+ uint32 directoryCount = installShieldFile.readUint32LE();
+ installShieldFile.skip(8);
+ uint32 fileCount = installShieldFile.readUint32LE();
+
+ if (fileTableSize != fileTableSize2)
+ warning("file table sizes do not match");
+
+ // We're ignoring file groups and components since we
+ // should not need them. Moving on to the files...
+
+ installShieldFile.seek(cabDescriptorOffset + fileTableOffset);
+ uint32 fileTableCount = directoryCount + fileCount;
+ uint32 *fileTableOffsets = new uint32[fileTableCount];
+ for (uint32 i = 0; i < fileTableCount; i++)
+ fileTableOffsets[i] = installShieldFile.readUint32LE();
+
+ for (uint32 i = directoryCount; i < fileCount + directoryCount; i++) {
+ installShieldFile.seek(cabDescriptorOffset + fileTableOffset + fileTableOffsets[i]);
+ uint32 nameOffset = installShieldFile.readUint32LE();
+ /* uint32 directoryIndex = */ installShieldFile.readUint32LE();
+
+ // First read in data needed by us to get at the file data
+ FileEntry entry;
+ entry.flags = installShieldFile.readUint16LE();
+ entry.uncompressedSize = installShieldFile.readUint32LE();
+ entry.compressedSize = installShieldFile.readUint32LE();
+ installShieldFile.skip(20);
+ entry.offset = installShieldFile.readUint32LE();
+
+ // Then let's get the string
+ installShieldFile.seek(cabDescriptorOffset + fileTableOffset + nameOffset);
+ Common::String fileName;
+
+ char c = installShieldFile.readByte();
+ while (c) {
+ fileName += c;
+ c = installShieldFile.readByte();
+ }
+ _map[fileName] = entry;
+ }
+
+ delete[] fileTableOffsets;
+}
+
+bool InstallShieldCabinet::hasFile(const Common::String &name) {
+ warning("hasFile: Filename %s", name.c_str());
+ return _map.contains(name);
+}
+
+int InstallShieldCabinet::listMembers(Common::ArchiveMemberList &list) {
+ for (FileMap::const_iterator it = _map.begin(); it != _map.end(); it++)
+ list.push_back(getMember(it->_key));
+
+ return _map.size();
+}
+
+Common::ArchiveMemberPtr InstallShieldCabinet::getMember(const Common::String &name) {
+ return Common::ArchiveMemberPtr(new Common::GenericArchiveMember(name, this));
+}
+
+Common::SeekableReadStream *InstallShieldCabinet::createReadStreamForMember(const Common::String &name) const {
+ if (!_map.contains(name))
+ return 0;
+
+ const FileEntry &entry = _map[name];
+
+ Common::File archiveFile;
+ archiveFile.open(_installShieldFilename);
+ archiveFile.seek(entry.offset);
+
+ if (!(entry.flags & 0x04)) {
+ // Not compressed
+ return archiveFile.readStream(entry.uncompressedSize);
+ }
+
+#ifdef USE_ZLIB
+ byte *src = (byte *)malloc(entry.compressedSize);
+ byte *dst = (byte *)malloc(entry.uncompressedSize);
+
+ archiveFile.read(src, entry.compressedSize);
+
+ bool result = Common::inflateZlibHeaderless(dst, entry.uncompressedSize, src, entry.compressedSize);
+ free(src);
+
+ if (!result) {
+ warning("failed to inflate CAB file '%s'", name.c_str());
+ free(dst);
+ return 0;
+ }
+
+ return new Common::MemoryReadStream(dst, entry.uncompressedSize, DisposeAfterUse::YES);
+#else
+ warning("zlib required to extract compressed CAB file '%s'", name.c_str());
+ return 0;
+#endif
+}
+
+Common::Archive *makeInstallShieldArchive(const Common::String &name) {
+ return new InstallShieldCabinet(name);
+}
+
+} // End of namespace AGOS
diff --git a/engines/agos/installshield_cab.h b/engines/agos/installshield_cab.h
new file mode 100644
index 0000000000..f7e8bed277
--- /dev/null
+++ b/engines/agos/installshield_cab.h
@@ -0,0 +1,41 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "common/archive.h"
+#include "common/str.h"
+
+#ifndef AGOS_INSTALLSHIELD_CAB_H
+#define AGOS_INSTALLSHIELD_CAB_H
+
+namespace AGOS {
+
+/**
+ * This factory method creates an Archive instance corresponding to the content
+ * of the InstallShield compressed file with the given name.
+ *
+ * May return 0 in case of a failure.
+ */
+Common::Archive *makeInstallShieldArchive(const Common::String &name);
+
+} // End of namespace AGOS
+
+#endif
diff --git a/engines/agos/intern.h b/engines/agos/intern.h
index 18f56be4a4..773b9c15bd 100644
--- a/engines/agos/intern.h
+++ b/engines/agos/intern.h
@@ -193,6 +193,9 @@ struct TimeEvent {
};
struct GameSpecificSettings {
+ const char *base_filename;
+ const char *restore_filename;
+ const char *tbl_filename;
const char *effects_filename;
const char *speech_filename;
};
@@ -251,7 +254,8 @@ enum GameFeatures {
GF_32COLOR = 1 << 5,
GF_EGA = 1 << 6,
GF_PLANAR = 1 << 7,
- GF_DEMO = 1 << 8
+ GF_DEMO = 1 << 8,
+ GF_PACKED = 1 << 9
};
enum GameFileTypes {
diff --git a/engines/agos/module.mk b/engines/agos/module.mk
index 7069d8005b..7ae5e17bf2 100644
--- a/engines/agos/module.mk
+++ b/engines/agos/module.mk
@@ -51,6 +51,7 @@ ifdef ENABLE_AGOS2
MODULE_OBJS += \
animation.o \
feeble.o \
+ installshield_cab.o \
oracle.o \
script_dp.o \
script_ff.o \
diff --git a/engines/agos/res.cpp b/engines/agos/res.cpp
index a71d4d8150..0baae11e89 100644
--- a/engines/agos/res.cpp
+++ b/engines/agos/res.cpp
@@ -31,11 +31,30 @@
#include "agos/agos.h"
#include "agos/intern.h"
#include "agos/sound.h"
+#include "agos/installshield_cab.h"
#include "common/zlib.h"
namespace AGOS {
+ArchiveMan::ArchiveMan() {
+ _fallBack = true;
+}
+
+#ifdef ENABLE_AGOS2
+void ArchiveMan::registerArchive(const Common::String &filename, int priority) {
+ add(filename, makeInstallShieldArchive(filename), priority);
+}
+#endif
+
+Common::SeekableReadStream *ArchiveMan::open(const Common::String &filename) {
+ if (_fallBack && SearchMan.hasFile(filename)) {
+ return SearchMan.createReadStreamForMember(filename);
+ }
+
+ return createReadStreamForMember(filename);
+}
+
#ifdef ENABLE_AGOS2
uint16 AGOSEngine_Feeble::to16Wrapper(uint value) {
return TO_LE_16(value);
@@ -150,21 +169,21 @@ int AGOSEngine::allocGamePcVars(Common::SeekableReadStream *in) {
}
void AGOSEngine_PN::loadGamePcFile() {
- Common::File in;
+ Common::SeekableReadStream *in;
if (getFileName(GAME_BASEFILE) != NULL) {
// Read dataBase
- in.open(getFileName(GAME_BASEFILE));
- if (in.isOpen() == false) {
+ in = _archives.open(getFileName(GAME_BASEFILE));
+ if (!in) {
error("loadGamePcFile: Can't load database file '%s'", getFileName(GAME_BASEFILE));
}
- _dataBaseSize = in.size();
+ _dataBaseSize = in->size();
_dataBase = (byte *)malloc(_dataBaseSize);
if (_dataBase == NULL)
error("loadGamePcFile: Out of memory for dataBase");
- in.read(_dataBase, _dataBaseSize);
- in.close();
+ in->read(_dataBase, _dataBaseSize);
+ delete in;
if (_dataBase[31] != 0)
error("Later version of system requested");
@@ -172,17 +191,17 @@ void AGOSEngine_PN::loadGamePcFile() {
if (getFileName(GAME_TEXTFILE) != NULL) {
// Read textBase
- in.open(getFileName(GAME_TEXTFILE));
- if (in.isOpen() == false) {
+ in = _archives.open(getFileName(GAME_TEXTFILE));
+ if (!in) {
error("loadGamePcFile: Can't load textbase file '%s'", getFileName(GAME_TEXTFILE));
}
- _textBaseSize = in.size();
+ _textBaseSize = in->size();
_textBase = (byte *)malloc(_textBaseSize);
if (_textBase == NULL)
error("loadGamePcFile: Out of memory for textBase");
- in.read(_textBase, _textBaseSize);
- in.close();
+ in->read(_textBase, _textBaseSize);
+ delete in;
if (_textBase[getlong(30L)] != 128)
error("Unknown compression format");
@@ -190,20 +209,20 @@ void AGOSEngine_PN::loadGamePcFile() {
}
void AGOSEngine::loadGamePcFile() {
- Common::File in;
+ Common::SeekableReadStream *in;
int fileSize;
if (getFileName(GAME_BASEFILE) != NULL) {
/* Read main gamexx file */
- in.open(getFileName(GAME_BASEFILE));
- if (in.isOpen() == false) {
+ in = _archives.open(getFileName(GAME_BASEFILE));
+ if (!in) {
error("loadGamePcFile: Can't load gamexx file '%s'", getFileName(GAME_BASEFILE));
}
if (getFeatures() & GF_CRUNCHED_GAMEPC) {
- uint srcSize = in.size();
+ uint srcSize = in->size();
byte *srcBuf = (byte *)malloc(srcSize);
- in.read(srcBuf, srcSize);
+ in->read(srcBuf, srcSize);
uint dstSize = READ_BE_UINT32(srcBuf + srcSize - 4);
byte *dstBuf = (byte *)malloc(dstSize);
@@ -214,25 +233,25 @@ void AGOSEngine::loadGamePcFile() {
readGamePcFile(&stream);
free(dstBuf);
} else {
- readGamePcFile(&in);
+ readGamePcFile(in);
}
- in.close();
+ delete in;
}
if (getFileName(GAME_TBLFILE) != NULL) {
/* Read list of TABLE resources */
- in.open(getFileName(GAME_TBLFILE));
- if (in.isOpen() == false) {
+ in = _archives.open(getFileName(GAME_TBLFILE));
+ if (!in) {
error("loadGamePcFile: Can't load table resources file '%s'", getFileName(GAME_TBLFILE));
}
- fileSize = in.size();
+ fileSize = in->size();
_tblList = (byte *)malloc(fileSize);
if (_tblList == NULL)
error("loadGamePcFile: Out of memory for strip table list");
- in.read(_tblList, fileSize);
- in.close();
+ in->read(_tblList, fileSize);
+ delete in;
/* Remember the current state */
_subroutineListOrg = _subroutineList;
@@ -242,71 +261,71 @@ void AGOSEngine::loadGamePcFile() {
if (getFileName(GAME_STRFILE) != NULL) {
/* Read list of TEXT resources */
- in.open(getFileName(GAME_STRFILE));
- if (in.isOpen() == false)
+ in = _archives.open(getFileName(GAME_STRFILE));
+ if (!in)
error("loadGamePcFile: Can't load text resources file '%s'", getFileName(GAME_STRFILE));
- fileSize = in.size();
+ fileSize = in->size();
_strippedTxtMem = (byte *)malloc(fileSize);
if (_strippedTxtMem == NULL)
error("loadGamePcFile: Out of memory for strip text list");
- in.read(_strippedTxtMem, fileSize);
- in.close();
+ in->read(_strippedTxtMem, fileSize);
+ delete in;
}
if (getFileName(GAME_STATFILE) != NULL) {
/* Read list of ROOM STATE resources */
- in.open(getFileName(GAME_STATFILE));
- if (in.isOpen() == false) {
+ in = _archives.open(getFileName(GAME_STATFILE));
+ if (!in) {
error("loadGamePcFile: Can't load state resources file '%s'", getFileName(GAME_STATFILE));
}
- _numRoomStates = in.size() / 8;
+ _numRoomStates = in->size() / 8;
_roomStates = (RoomState *)calloc(_numRoomStates, sizeof(RoomState));
if (_roomStates == NULL)
error("loadGamePcFile: Out of memory for room state list");
for (uint s = 0; s < _numRoomStates; s++) {
- uint16 num = in.readUint16BE() - (_itemArrayInited - 2);
+ uint16 num = in->readUint16BE() - (_itemArrayInited - 2);
- _roomStates[num].state = in.readUint16BE();
- _roomStates[num].classFlags = in.readUint16BE();
- _roomStates[num].roomExitStates = in.readUint16BE();
+ _roomStates[num].state = in->readUint16BE();
+ _roomStates[num].classFlags = in->readUint16BE();
+ _roomStates[num].roomExitStates = in->readUint16BE();
}
- in.close();
+ delete in;
}
if (getFileName(GAME_RMSLFILE) != NULL) {
/* Read list of ROOM ITEMS resources */
- in.open(getFileName(GAME_RMSLFILE));
- if (in.isOpen() == false) {
+ in = _archives.open(getFileName(GAME_RMSLFILE));
+ if (!in) {
error("loadGamePcFile: Can't load room resources file '%s'", getFileName(GAME_RMSLFILE));
}
- fileSize = in.size();
+ fileSize = in->size();
_roomsList = (byte *)malloc(fileSize);
if (_roomsList == NULL)
error("loadGamePcFile: Out of memory for room items list");
- in.read(_roomsList, fileSize);
- in.close();
+ in->read(_roomsList, fileSize);
+ delete in;
}
if (getFileName(GAME_XTBLFILE) != NULL) {
/* Read list of XTABLE resources */
- in.open(getFileName(GAME_XTBLFILE));
- if (in.isOpen() == false) {
+ in = _archives.open(getFileName(GAME_XTBLFILE));
+ if (!in) {
error("loadGamePcFile: Can't load xtable resources file '%s'", getFileName(GAME_XTBLFILE));
}
- fileSize = in.size();
+ fileSize = in->size();
_xtblList = (byte *)malloc(fileSize);
if (_xtblList == NULL)
error("loadGamePcFile: Out of memory for strip xtable list");
- in.read(_xtblList, fileSize);
- in.close();
+ in->read(_xtblList, fileSize);
+ delete in;
/* Remember the current state */
_xsubroutineListOrg = _subroutineList;
diff --git a/engines/agos/res_snd.cpp b/engines/agos/res_snd.cpp
index 9a04ce2d26..b5612d710d 100644
--- a/engines/agos/res_snd.cpp
+++ b/engines/agos/res_snd.cpp
@@ -413,7 +413,7 @@ bool AGOSEngine::loadVGASoundFile(uint16 id, uint8 type) {
return true;
}
-static const char *dimpSoundList[32] = {
+static const char *const dimpSoundList[32] = {
"Beep",
"Birth",
"Boiling",
@@ -450,17 +450,17 @@ static const char *dimpSoundList[32] = {
void AGOSEngine::loadSoundFile(const char* filename) {
- Common::File in;
+ Common::SeekableReadStream *in;
- in.open(filename);
- if (in.isOpen() == false)
+ in = _archives.open(filename);
+ if (!in)
error("loadSound: Can't load %s", filename);
- uint32 dstSize = in.size();
+ uint32 dstSize = in->size();
byte *dst = (byte *)malloc(dstSize);
- if (in.read(dst, dstSize) != dstSize)
+ if (in->read(dst, dstSize) != dstSize)
error("loadSound: Read failed");
- in.close();
+ delete in;
_sound->playSfxData(dst, 0, 0, 0);
}
@@ -469,21 +469,21 @@ void AGOSEngine::loadSound(uint16 sound, int16 pan, int16 vol, uint16 type) {
byte *dst;
if (getGameId() == GID_DIMP) {
- Common::File in;
+ Common::SeekableReadStream *in;
char filename[15];
assert(sound >= 1 && sound <= 32);
sprintf(filename, "%s.wav", dimpSoundList[sound - 1]);
- in.open(filename);
- if (in.isOpen() == false)
+ in = _archives.open(filename);
+ if (!in)
error("loadSound: Can't load %s", filename);
- uint32 dstSize = in.size();
+ uint32 dstSize = in->size();
dst = (byte *)malloc(dstSize);
- if (in.read(dst, dstSize) != dstSize)
+ if (in->read(dst, dstSize) != dstSize)
error("loadSound: Read failed");
- in.close();
+ delete in;
} else if (getFeatures() & GF_ZLIBCOMP) {
char filename[15];
diff --git a/engines/agos/rooms.cpp b/engines/agos/rooms.cpp
index f2629e419e..fb7b313e9c 100644
--- a/engines/agos/rooms.cpp
+++ b/engines/agos/rooms.cpp
@@ -401,9 +401,9 @@ bool AGOSEngine::loadRoomItems(uint16 room) {
filename[i] = 0;
p++;
- for (;;) {
- _roomsListPtr = p;
+ _roomsListPtr = p;
+ for (;;) {
minNum = READ_BE_UINT16(p); p += 2;
if (minNum == 0)
break;
diff --git a/engines/agos/saveload.cpp b/engines/agos/saveload.cpp
index 10830db002..6779eabdbf 100644
--- a/engines/agos/saveload.cpp
+++ b/engines/agos/saveload.cpp
@@ -1019,9 +1019,7 @@ bool AGOSEngine::loadGame(const char *filename, bool restartMode) {
if (restartMode) {
// Load restart state
- Common::File *file = new Common::File();
- file->open(filename);
- f = file;
+ f = _archives.open(filename);
} else {
f = _saveFileMan->openForLoading(filename);
}
@@ -1195,9 +1193,7 @@ bool AGOSEngine_Elvira2::loadGame(const char *filename, bool restartMode) {
if (restartMode) {
// Load restart state
- Common::File *file = new Common::File();
- file->open(filename);
- f = file;
+ f = _archives.open(filename);
} else {
f = _saveFileMan->openForLoading(filename);
}
diff --git a/engines/agos/string_pn.cpp b/engines/agos/string_pn.cpp
index 570fbc6200..ac8c263da3 100644
--- a/engines/agos/string_pn.cpp
+++ b/engines/agos/string_pn.cpp
@@ -68,7 +68,7 @@ void AGOSEngine_PN::uncomstr(char *c, uint32 x) {
*c = 0;
}
-static const char *objectNames[30] = {
+static const char *const objectNames[30] = {
"\0",
"Take \0",
"Inventory\r",
diff --git a/engines/agos/subroutine.cpp b/engines/agos/subroutine.cpp
index bd9abb16b5..10c1c1aaf9 100644
--- a/engines/agos/subroutine.cpp
+++ b/engines/agos/subroutine.cpp
@@ -258,22 +258,21 @@ void AGOSEngine::endCutscene() {
_runScriptReturn1 = true;
}
-Common::File *AGOSEngine::openTablesFile(const char *filename) {
+Common::SeekableReadStream *AGOSEngine::openTablesFile(const char *filename) {
if (getFeatures() & GF_OLD_BUNDLE)
return openTablesFile_simon1(filename);
else
return openTablesFile_gme(filename);
}
-Common::File *AGOSEngine::openTablesFile_simon1(const char *filename) {
- Common::File *fo = new Common::File();
- fo->open(filename);
- if (fo->isOpen() == false)
+Common::SeekableReadStream *AGOSEngine::openTablesFile_simon1(const char *filename) {
+ Common::SeekableReadStream *in = _archives.open(filename);
+ if (!in)
error("openTablesFile: Can't open '%s'", filename);
- return fo;
+ return in;
}
-Common::File *AGOSEngine::openTablesFile_gme(const char *filename) {
+Common::SeekableReadStream *AGOSEngine::openTablesFile_gme(const char *filename) {
uint res;
uint32 offs;
@@ -287,7 +286,7 @@ Common::File *AGOSEngine::openTablesFile_gme(const char *filename) {
bool AGOSEngine::loadTablesIntoMem(uint16 subrId) {
byte *p;
uint16 min_num, max_num, file_num;
- Common::File *in;
+ Common::SeekableReadStream *in;
char filename[30];
if (_tblList == NULL)
@@ -336,7 +335,7 @@ bool AGOSEngine::loadTablesIntoMem(uint16 subrId) {
bool AGOSEngine_Waxworks::loadTablesIntoMem(uint16 subrId) {
byte *p;
uint min_num, max_num;
- Common::File *in;
+ Common::SeekableReadStream *in;
p = _tblList;
if (p == NULL)
@@ -403,7 +402,7 @@ bool AGOSEngine::loadXTablesIntoMem(uint16 subrId) {
int i;
uint min_num, max_num;
char filename[30];
- Common::File *in;
+ Common::SeekableReadStream *in;
p = _xtblList;
if (p == NULL)
@@ -453,9 +452,8 @@ bool AGOSEngine::loadXTablesIntoMem(uint16 subrId) {
return 0;
}
-void AGOSEngine::closeTablesFile(Common::File *in) {
+void AGOSEngine::closeTablesFile(Common::SeekableReadStream *in) {
if (getFeatures() & GF_OLD_BUNDLE) {
- in->close();
delete in;
}
}
diff --git a/engines/agos/verb_pn.cpp b/engines/agos/verb_pn.cpp
index 19e8bb2d48..9dd0079b6d 100644
--- a/engines/agos/verb_pn.cpp
+++ b/engines/agos/verb_pn.cpp
@@ -258,7 +258,7 @@ void AGOSEngine_PN::hitBox9(HitArea *ha) {
iconPage();
}
-static const char *messageList[9] = {
+static const char *const messageList[9] = {
"North\r",
"East\r",
"South\r",
diff --git a/engines/cine/texte.cpp b/engines/cine/texte.cpp
index dc18d081c7..33ea569df7 100644
--- a/engines/cine/texte.cpp
+++ b/engines/cine/texte.cpp
@@ -28,13 +28,13 @@
namespace Cine {
-const char **failureMessages;
+const char *const *failureMessages;
const CommandeType *defaultActionCommand;
const CommandeType *systemMenu;
const CommandeType *confirmMenu;
-const char **otherMessages;
+const char *const *otherMessages;
const char *defaultCommandPreposition;
-const char **commandPrepositionTable;
+const char *const *commandPrepositionTable;
/**
* Loads font data from the given file.
@@ -152,7 +152,7 @@ static const CharacterEntry fontParamTable_alt[NUM_FONT_CHARS] = {
};
void initLanguage(Common::Language lang) {
- static const char *failureMessages_EN[] = {
+ static const char *const failureMessages_EN[] = {
// EXAMINE
"I don't see anything unusual.",
"There's nothing of interest here.",
@@ -195,7 +195,7 @@ void initLanguage(Common::Language lang) {
"NOACTION"
};
- static const char *commandPrepositionTable_EN[] = {
+ static const char *const commandPrepositionTable_EN[] = {
"", // EXAMINE
"", // TAKE
"", // INVENTORY
@@ -214,7 +214,7 @@ void initLanguage(Common::Language lang) {
"Save game"
};
- static const char *otherMessages_EN[] = {
+ static const char *const otherMessages_EN[] = {
"This backup doesn't exist ...",
"Could not create save file ...",
"PAUSE",
@@ -229,7 +229,7 @@ void initLanguage(Common::Language lang) {
"Absolutely Not!"
};
- static const char *failureMessages_FR[] = {
+ static const char *const failureMessages_FR[] = {
// EXAMINER
"Je ne vois rien de special.",
"Il n'y a rien d'int\x82ressant.",
@@ -272,7 +272,7 @@ void initLanguage(Common::Language lang) {
"NOACTION"
};
- static const char *commandPrepositionTable_FR[] = {
+ static const char *const commandPrepositionTable_FR[] = {
"", // EXAMINER
"", // PRENDRE
"", // INVENTAIRE
@@ -296,7 +296,7 @@ void initLanguage(Common::Language lang) {
"Surtout Pas !"
};
- static const char *otherMessages_FR[] = {
+ static const char *const otherMessages_FR[] = {
"Cette sauvegarde n'existe pas ...",
"Could not create save file ...", //
"PAUSE",
@@ -306,7 +306,7 @@ void initLanguage(Common::Language lang) {
"Veuillez entrer le Nom de la Sauvegarde ."
};
- static const char *failureMessages_ES[] = {
+ static const char *const failureMessages_ES[] = {
// EXAMINE
"No veo nada especial",
"No hay nada interesante",
@@ -349,7 +349,7 @@ void initLanguage(Common::Language lang) {
"NOACTION"
};
- static const char *commandPrepositionTable_ES[] = {
+ static const char *const commandPrepositionTable_ES[] = {
"", // EXAMINAR
"", // COGER
"", // INVENTARIO
@@ -373,7 +373,7 @@ void initLanguage(Common::Language lang) {
"Nade de nada !"
};
- static const char *otherMessages_ES[] = {
+ static const char *const otherMessages_ES[] = {
"Esta granacion no existe",
"Could not create save file ...", //
"PAUSE",
@@ -383,7 +383,7 @@ void initLanguage(Common::Language lang) {
"Teclea el nombre de la partida grabada"
};
- static const char *failureMessages_DE[] = {
+ static const char *const failureMessages_DE[] = {
// EXAMINE
"Ich sehe nichts Besonderes",
"Es gibt hier nichts Interessantes",
@@ -426,7 +426,7 @@ void initLanguage(Common::Language lang) {
"NOACTION"
};
- static const char *commandPrepositionTable_DE[] = {
+ static const char *const commandPrepositionTable_DE[] = {
"", // Prufe
"", // Nimm
"", // Bestand
@@ -450,7 +450,7 @@ void initLanguage(Common::Language lang) {
"Absolut Nicht!"
};
- static const char *otherMessages_DE[] = {
+ static const char *const otherMessages_DE[] = {
"Diese Sicherungskopie gibt es nicht",
"Could not create save file ...", //
"PAUSE",
@@ -460,7 +460,7 @@ void initLanguage(Common::Language lang) {
"Geben Sie den Namen|der Sicherungsdiskette ein"
};
- static const char *failureMessages_IT[] = {
+ static const char *const failureMessages_IT[] = {
// EXAMINE
"Non vedo nula di speciale",
"Non c'\x8a niente di interessante",
@@ -503,7 +503,7 @@ void initLanguage(Common::Language lang) {
"NOACTION"
};
- static const char *commandPrepositionTable_IT[] = {
+ static const char *const commandPrepositionTable_IT[] = {
"", // ESAMINARE
"", // PRENDERE
"", // INVENTARIO
@@ -527,7 +527,7 @@ void initLanguage(Common::Language lang) {
"Supratutto non!"
};
- static const char *otherMessages_IT[] = {
+ static const char *const otherMessages_IT[] = {
"Questo salvataggio non esiste...",
"Could not create save file ...", //
"PAUSE",
@@ -612,7 +612,7 @@ void loadErrmessDat(const char *fname) {
ptr[i] = (char *)ptr + (sizeof(char *) * 6 * 4) + 60 * i;
in.read(ptr[i], 60);
}
- failureMessages = const_cast<const char **>(ptr);
+ failureMessages = const_cast<const char *const *>(ptr);
in.close();
} else {
@@ -621,7 +621,7 @@ void loadErrmessDat(const char *fname) {
}
void freeErrmessDat() {
- free(failureMessages);
+ free(const_cast<const char **>(failureMessages));
failureMessages = 0;
}
diff --git a/engines/cine/texte.h b/engines/cine/texte.h
index f82127db98..dd4b7e06ee 100644
--- a/engines/cine/texte.h
+++ b/engines/cine/texte.h
@@ -50,13 +50,13 @@ struct TextHandler {
CharacterEntry fontParamTable[NUM_FONT_CHARS];
};
-extern const char **failureMessages;
+extern const char *const *failureMessages;
extern const CommandeType *defaultActionCommand;
extern const CommandeType *systemMenu;
extern const CommandeType *confirmMenu;
-extern const char **otherMessages;
+extern const char *const *otherMessages;
extern const char *defaultCommandPreposition;
-extern const char **commandPrepositionTable;
+extern const char *const *commandPrepositionTable;
void loadTextData(const char *filename);
void loadErrmessDat(const char *fname);
diff --git a/engines/composer/composer.cpp b/engines/composer/composer.cpp
index d9bb0cdc54..085ce815dd 100644
--- a/engines/composer/composer.cpp
+++ b/engines/composer/composer.cpp
@@ -81,8 +81,12 @@ Common::Error ComposerEngine::run() {
_directoriesToStrip = 1;
if (!_bookIni.loadFromFile("book.ini")) {
_directoriesToStrip = 0;
- if (!_bookIni.loadFromFile("programs/book.ini"))
- error("failed to find book.ini");
+ if (!_bookIni.loadFromFile("programs/book.ini")) {
+ // mac version?
+ if (!_bookIni.loadFromFile("Darby the Dragon.ini"))
+ if (!_bookIni.loadFromFile("Gregory.ini"))
+ error("failed to find book.ini");
+ }
}
uint width = 640;
@@ -97,9 +101,13 @@ Common::Error ComposerEngine::run() {
loadLibrary(0);
+ _currentTime = 0;
+ _lastTime = 0;
+
uint fps = atoi(getStringFromConfig("Common", "FPS").c_str());
uint frameTime = 1000 / fps;
uint32 lastDrawTime = 0;
+
while (!shouldQuit()) {
for (uint i = 0; i < _pendingPageChanges.size(); i++) {
if (_pendingPageChanges[i]._remove)
@@ -112,15 +120,24 @@ Common::Error ComposerEngine::run() {
_pendingPageChanges.clear();
uint32 thisTime = _system->getMillis();
+ // maintain our own internal timing, since otherwise we get
+ // confused when starved of CPU (for example when the user
+ // is dragging the scummvm window around)
+ if (thisTime > _lastTime + frameTime)
+ _currentTime += frameTime;
+ else
+ _currentTime += thisTime - _lastTime;
+ _lastTime = thisTime;
+
for (uint i = 0; i < _queuedScripts.size(); i++) {
QueuedScript &script = _queuedScripts[i];
if (!script._count)
continue;
- if (script._baseTime + script._duration > thisTime)
+ if (script._baseTime + script._duration > _currentTime)
continue;
if (script._count != 0xffffffff)
script._count--;
- script._baseTime = thisTime;
+ script._baseTime = _currentTime;
runScript(script._scriptId, i, 0, 0);
}
@@ -176,11 +193,6 @@ Common::Error ComposerEngine::run() {
onKeyDown(event.kbd.keycode);
break;
- case Common::EVENT_QUIT:
- case Common::EVENT_RTL:
- quitGame();
- break;
-
default:
break;
}
@@ -286,7 +298,7 @@ Common::String ComposerEngine::mangleFilename(Common::String filename) {
uint slashesToStrip = _directoriesToStrip;
while (slashesToStrip--) {
for (uint i = 0; i < filename.size(); i++) {
- if (filename[i] != '\\')
+ if (filename[i] != '\\' && filename[i] != ':')
continue;
filename = filename.c_str() + i + 1;
break;
@@ -295,7 +307,7 @@ Common::String ComposerEngine::mangleFilename(Common::String filename) {
Common::String outFilename;
for (uint i = 0; i < filename.size(); i++) {
- if (filename[i] == '\\')
+ if (filename[i] == '\\' || filename[i] == ':')
outFilename += '/';
else
outFilename += filename[i];
diff --git a/engines/composer/composer.h b/engines/composer/composer.h
index c0d456daaa..03e895b59e 100644
--- a/engines/composer/composer.h
+++ b/engines/composer/composer.h
@@ -140,6 +140,8 @@ private:
Audio::QueuingAudioStream *_audioStream;
uint16 _currSoundPriority;
+ uint32 _currentTime, _lastTime;
+
bool _needsUpdate;
Common::Array<Common::Rect> _dirtyRects;
Graphics::Surface _surface;
diff --git a/engines/composer/detection.cpp b/engines/composer/detection.cpp
index 8c97b6c4db..2ca00f9f53 100644
--- a/engines/composer/detection.cpp
+++ b/engines/composer/detection.cpp
@@ -74,7 +74,7 @@ static const ComposerGameDescription gameDescriptions[] = {
AD_ENTRY1("book.ini", "dbc98c566f4ac61b544443524585dccb"),
Common::EN_ANY,
Common::kPlatformWindows,
- ADGF_USEEXTRAASTITLE,
+ ADGF_USEEXTRAASTITLE | ADGF_DEMO,
Common::GUIO_NONE
},
GType_ComposerV1
@@ -84,7 +84,7 @@ static const ComposerGameDescription gameDescriptions[] = {
{
"liam",
0,
- AD_ENTRY1("install.inf", "320d2f1d4f8dd96947676ae25d6688c6"),
+ AD_ENTRY1s("book.ini", "fc9d9b9e72e7301d011b808606eaa15b", 834),
Common::EN_ANY,
Common::kPlatformWindows,
ADGF_NO_FLAGS,
@@ -101,7 +101,7 @@ static const ComposerGameDescription gameDescriptions[] = {
AD_ENTRY1("book.ini", "3dede2522bb0886c95667b082987a87f"),
Common::EN_ANY,
Common::kPlatformWindows,
- ADGF_USEEXTRAASTITLE,
+ ADGF_USEEXTRAASTITLE | ADGF_DEMO,
Common::GUIO_NONE
},
GType_ComposerV2
@@ -111,7 +111,11 @@ static const ComposerGameDescription gameDescriptions[] = {
{
"darby",
0,
- AD_ENTRY1("install.inf", "e83cc20ee18a2e138da1aadfc640dff2"),
+ {
+ {"book.ini", 0, "7e3404c559d058521fff2aebe5c427a8", 2545},
+ {"page99.rsc", 0, "49cc6b16caa1c5ec7d94a3c47eed9a02", 1286480},
+ AD_LISTEND
+ },
Common::EN_ANY,
Common::kPlatformWindows,
ADGF_NO_FLAGS,
@@ -120,6 +124,19 @@ static const ComposerGameDescription gameDescriptions[] = {
GType_ComposerV2
},
+ {
+ {
+ "darby",
+ 0,
+ AD_ENTRY1("Darby the Dragon.ini", "d81f9214936fa70d42fc578908d4bb3d"),
+ Common::EN_ANY,
+ Common::kPlatformMacintosh,
+ ADGF_NO_FLAGS,
+ Common::GUIO_NONE
+ },
+ GType_ComposerV2
+ },
+
{ // Provided by Strangerke, "CD-Rom 100% Malin" Pack
{
"darby",
@@ -137,7 +154,11 @@ static const ComposerGameDescription gameDescriptions[] = {
{
"gregory",
0,
- AD_ENTRY1("install.inf", "b7e9d6f7949d412dad0a183375069844"),
+ {
+ {"book.ini", 0, "14a562dcf361773445255af9f3e94790", 2234},
+ {"page99.rsc", 0, "01f9381162467e052dfd4c704169ef3e", 388644},
+ AD_LISTEND
+ },
Common::EN_ANY,
Common::kPlatformWindows,
ADGF_NO_FLAGS,
@@ -146,6 +167,19 @@ static const ComposerGameDescription gameDescriptions[] = {
GType_ComposerV2
},
+ {
+ {
+ "gregory",
+ 0,
+ AD_ENTRY1("Gregory.ini", "fa82f14731f28c7379c5a106df07a0d6"),
+ Common::EN_ANY,
+ Common::kPlatformMacintosh,
+ ADGF_NO_FLAGS,
+ Common::GUIO_NONE
+ },
+ GType_ComposerV2
+ },
+
{ // Provided by Strangerke, "CD-Rom 100% Malin" Pack
{
"gregory",
@@ -159,11 +193,15 @@ static const ComposerGameDescription gameDescriptions[] = {
GType_ComposerV2
},
- {
+ { // Provided by sev
{
"princess",
0,
- AD_ENTRY1s("install.inf", "f1cf45db3c4c54a0d2d89d359af8f334", 244),
+ {
+ {"book.ini", 0, "fb32572577b9a41ba299825ef1e3181e", 966},
+ {"page99.rsc", 0, "fd5ebd3b5e36c4651c50241619525355", 45418},
+ AD_LISTEND
+ },
Common::EN_ANY,
Common::kPlatformWindows,
ADGF_NO_FLAGS,
@@ -172,11 +210,15 @@ static const ComposerGameDescription gameDescriptions[] = {
GType_ComposerV2
},
- {
+ { // Provided by sev
{
"sleepingcub",
0,
- AD_ENTRY1s("install.inf", "1092e753b8692463f41b8c0b1931398e", 251),
+ {
+ {"book.ini", 0, "0d329e592387009c6387a733a3ea2235", 964},
+ {"page99.rsc", 0, "219fbd9bd2ff87c7023814405d753145", 46916},
+ AD_LISTEND
+ },
Common::EN_ANY,
Common::kPlatformWindows,
ADGF_NO_FLAGS,
@@ -192,10 +234,21 @@ static const ComposerGameDescription gameDescriptions[] = {
using namespace Composer;
+// we match from data too, to stop detection from a non-top-level directory
+const static char *directoryGlobs[] = {
+ "data",
+ "programs",
+ "princess",
+ "sleepcub",
+ 0
+};
+
class ComposerMetaEngine : public AdvancedMetaEngine {
public:
ComposerMetaEngine() : AdvancedMetaEngine(Composer::gameDescriptions, sizeof(Composer::ComposerGameDescription), composerGames) {
_singleid = "composer";
+ _maxScanDepth = 2;
+ _directoryGlobs = directoryGlobs;
}
virtual const char *getName() const {
diff --git a/engines/composer/scripting.cpp b/engines/composer/scripting.cpp
index d85bd524e0..1989919233 100644
--- a/engines/composer/scripting.cpp
+++ b/engines/composer/scripting.cpp
@@ -160,7 +160,7 @@ void ComposerEngine::setArg(uint16 arg, uint16 type, uint16 val) {
void ComposerEngine::runScript(uint16 id) {
if (!hasResource(ID_SCRP, id)) {
- warning("ignoring attempt to run script %d, because it doesn't exist", id);
+ debug(1, "ignoring attempt to run script %d, because it doesn't exist", id);
return;
}
@@ -531,7 +531,7 @@ int16 ComposerEngine::scriptFuncCall(uint16 id, int16 param1, int16 param2, int1
return 0;
case kFuncQueueScript:
debug(3, "kFuncQueueScript(%d, %d, %d)", param1, param2, param3);
- _queuedScripts[param1]._baseTime = _system->getMillis();
+ _queuedScripts[param1]._baseTime = _currentTime;
_queuedScripts[param1]._duration = 10 * param2;
_queuedScripts[param1]._count = 0xffffffff;
_queuedScripts[param1]._scriptId = param3;
@@ -642,7 +642,7 @@ int16 ComposerEngine::scriptFuncCall(uint16 id, int16 param1, int16 param2, int1
return 1;
case kFuncQueueScriptOnce:
debug(3, "kFuncQueueScriptOnce(%d, %d, %d)", param1, param2, param3);
- _queuedScripts[param1]._baseTime = _system->getMillis();
+ _queuedScripts[param1]._baseTime = _currentTime;
_queuedScripts[param1]._duration = 10 * param2;
_queuedScripts[param1]._count = 1;
_queuedScripts[param1]._scriptId = param3;
diff --git a/engines/draci/game.cpp b/engines/draci/game.cpp
index 893e321b79..c4108cc0c7 100644
--- a/engines/draci/game.cpp
+++ b/engines/draci/game.cpp
@@ -39,7 +39,7 @@
namespace Draci {
-static const char *dialoguePath = "ROZH";
+static const char *const dialoguePath = "ROZH";
static double real_to_double(byte real[6]);
diff --git a/engines/draci/saveload.cpp b/engines/draci/saveload.cpp
index 78315d1a97..b3bf0cbcd8 100644
--- a/engines/draci/saveload.cpp
+++ b/engines/draci/saveload.cpp
@@ -33,7 +33,7 @@
namespace Draci {
-static const char *draciIdentString = "DRACI";
+static const char *const draciIdentString = "DRACI";
bool readSavegameHeader(Common::InSaveFile *in, DraciSavegameHeader &header) {
char saveIdentBuffer[6];
diff --git a/engines/drascula/drascula.h b/engines/drascula/drascula.h
index 5ec4684723..6f98c50fdc 100644
--- a/engines/drascula/drascula.h
+++ b/engines/drascula/drascula.h
@@ -495,6 +495,8 @@ public:
void updateVolume(Audio::Mixer::SoundType soundType, int prevVolume);
void volumeControls();
bool saveLoadScreen();
+ void loadSaveNames();
+ void saveSaveNames();
void print_abc(const char *, int, int);
void delay(int ms);
bool confirmExit();
@@ -775,6 +777,7 @@ private:
RoomUpdate *_roomPreUpdates, *_roomUpdates;
RoomTalkAction *_roomActions;
TalkSequenceCommand *_talkSequences;
+ char _saveNames[10][23];
char **loadTexts(Common::File &in);
void freeTexts(char **ptr);
diff --git a/engines/drascula/saveload.cpp b/engines/drascula/saveload.cpp
index 664a082eb4..c8622f3c92 100644
--- a/engines/drascula/saveload.cpp
+++ b/engines/drascula/saveload.cpp
@@ -26,20 +26,26 @@
namespace Drascula {
-bool DrasculaEngine::saveLoadScreen() {
- char names[10][23];
- Common::String file;
- int n, n2, num_sav = 0, y = 27;
+/**
+ * Loads the save names from the EPA index file.
+ *
+ * TODO: We should move the save names in their respective save files and get
+ * rid of this completely. A good example is the sword1 engine, which also used
+ * to have an index file for its saves, that has been removed.
+ * sword1 contains code that converts the old index-based saves into the new
+ * format without the index file, so we could apply this idea to drascula as
+ * well.
+ */
+void DrasculaEngine::loadSaveNames() {
Common::InSaveFile *sav;
-
- clearRoom();
-
Common::String fileEpa = Common::String::format("%s.epa", _targetName.c_str());
+
+ // Create and initialize the index file, if it doesn't exist
if (!(sav = _saveFileMan->openForLoading(fileEpa))) {
Common::OutSaveFile *epa;
if (!(epa = _saveFileMan->openForSaving(fileEpa)))
error("Can't open %s file", fileEpa.c_str());
- for (n = 0; n < NUM_SAVES; n++)
+ for (int n = 0; n < NUM_SAVES; n++)
epa->writeString("*\n");
epa->finalize();
delete epa;
@@ -47,11 +53,47 @@ bool DrasculaEngine::saveLoadScreen() {
error("Can't open %s file", fileEpa.c_str());
}
}
- for (n = 0; n < NUM_SAVES; n++) {
- strncpy(names[n], sav->readLine().c_str(), 23);
- names[n][22] = '\0'; // make sure the savegame name is 0-terminated
+
+ // Load the index file
+ for (int n = 0; n < NUM_SAVES; n++) {
+ strncpy(_saveNames[n], sav->readLine().c_str(), 23);
+ _saveNames[n][22] = '\0'; // make sure the savegame name is 0-terminated
}
delete sav;
+}
+
+/**
+ * Saves the save names into the EPA index file.
+ *
+ * TODO: We should move the save names in their respective save files and get
+ * rid of this completely. A good example is the sword1 engine, which also used
+ * to have an index file for its saves, that has been removed.
+ * sword1 contains code that converts the old index-based saves into the new
+ * format without the index file, so we could apply this idea to drascula as
+ * well.
+ */
+void DrasculaEngine::saveSaveNames() {
+ Common::OutSaveFile *tsav;
+ Common::String fileEpa = Common::String::format("%s.epa", _targetName.c_str());
+
+ if (!(tsav = _saveFileMan->openForSaving(fileEpa))) {
+ error("Can't open %s file", fileEpa.c_str());
+ }
+ for (int n = 0; n < NUM_SAVES; n++) {
+ tsav->writeString(_saveNames[n]);
+ tsav->writeString("\n");
+ }
+ tsav->finalize();
+ delete tsav;
+}
+
+bool DrasculaEngine::saveLoadScreen() {
+ Common::String file;
+ int n, n2, num_sav = 0, y = 27;
+
+ clearRoom();
+
+ loadSaveNames();
loadPic("savescr.alg", bgSurface, HALF_PAL);
@@ -66,7 +108,7 @@ bool DrasculaEngine::saveLoadScreen() {
y = 27;
copyBackground();
for (n = 0; n < NUM_SAVES; n++) {
- print_abc(names[n], 116, y);
+ print_abc(_saveNames[n], 116, y);
y = y + 9;
}
print_abc(select, 117, 15);
@@ -79,33 +121,24 @@ bool DrasculaEngine::saveLoadScreen() {
delay(50);
for (n = 0; n < NUM_SAVES; n++) {
if (mouseX > 115 && mouseY > y + (9 * n) && mouseX < 115 + 175 && mouseY < y + 10 + (9 * n)) {
- strcpy(select, names[n]);
+ strcpy(select, _saveNames[n]);
if (strcmp(select, "*"))
selectionMade = 1;
else {
enterName();
- strcpy(names[n], select);
+ strcpy(_saveNames[n], select);
if (selectionMade == 1) {
file = Common::String::format("%s%02d", _targetName.c_str(), n + 1);
saveGame(file.c_str());
- Common::OutSaveFile *tsav;
- if (!(tsav = _saveFileMan->openForSaving(fileEpa))) {
- error("Can't open %s file", fileEpa.c_str());
- }
- for (n = 0; n < NUM_SAVES; n++) {
- tsav->writeString(names[n]);
- tsav->writeString("\n");
- }
- tsav->finalize();
- delete tsav;
+ saveSaveNames();
}
}
print_abc(select, 117, 15);
y = 27;
for (n2 = 0; n2 < NUM_SAVES; n2++) {
- print_abc(names[n2], 116, y);
+ print_abc(_saveNames[n2], 116, y);
y = y + 9;
}
if (selectionMade == 1) {
@@ -117,27 +150,18 @@ bool DrasculaEngine::saveLoadScreen() {
if (mouseX > 117 && mouseY > 15 && mouseX < 295 && mouseY < 24 && selectionMade == 1) {
enterName();
- strcpy(names[num_sav], select);
+ strcpy(_saveNames[num_sav], select);
print_abc(select, 117, 15);
y = 27;
for (n2 = 0; n2 < NUM_SAVES; n2++) {
- print_abc(names[n2], 116, y);
+ print_abc(_saveNames[n2], 116, y);
y = y + 9;
}
if (selectionMade == 1) {
file = Common::String::format("%s%02d", _targetName.c_str(), n + 1);
saveGame(file.c_str());
- Common::OutSaveFile *tsav;
- if (!(tsav = _saveFileMan->openForSaving(fileEpa))) {
- error("Can't open %s file", fileEpa.c_str());
- }
- for (n = 0; n < NUM_SAVES; n++) {
- tsav->writeString(names[n]);
- tsav->writeString("\n");
- }
- tsav->finalize();
- delete tsav;
+ saveSaveNames();
}
}
@@ -149,16 +173,7 @@ bool DrasculaEngine::saveLoadScreen() {
break;
} else if (mouseX > 208 && mouseY > 123 && mouseX < 282 && mouseY < 149 && selectionMade == 1) {
saveGame(file.c_str());
- Common::OutSaveFile *tsav;
- if (!(tsav = _saveFileMan->openForSaving(fileEpa))) {
- error("Can't open %s file", fileEpa.c_str());
- }
- for (n = 0; n < NUM_SAVES; n++) {
- tsav->writeString(names[n]);
- tsav->writeString("\n");
- }
- tsav->finalize();
- delete tsav;
+ saveSaveNames();
} else if (mouseX > 168 && mouseY > 154 && mouseX < 242 && mouseY < 180)
break;
else if (selectionMade == 0) {
diff --git a/engines/dreamweb/backdrop.cpp b/engines/dreamweb/backdrop.cpp
index cba1f14c5e..ffcad5b6bf 100644
--- a/engines/dreamweb/backdrop.cpp
+++ b/engines/dreamweb/backdrop.cpp
@@ -21,8 +21,6 @@
*/
#include "dreamweb/dreamweb.h"
-#include "engines/util.h"
-#include "graphics/surface.h"
namespace DreamGen {
@@ -150,10 +148,10 @@ void DreamGenContext::showallobs() {
data.word(kFramesad) = kFrames;
const Frame *frames = (const Frame *)segRef(data.word(kFrsegment)).ptr(0, 0);
- ObjData *setEntries = (ObjData *)segRef(data.word(kSetdat)).ptr(0, 128 * sizeof(ObjData));
+ SetObject *setEntries = (SetObject *)segRef(data.word(kSetdat)).ptr(0, 128 * sizeof(SetObject));
for (size_t i = 0; i < 128; ++i) {
- ObjData *setEntry = setEntries + i;
- if (getmapad(setEntry->b58) == 0)
+ SetObject *setEntry = setEntries + i;
+ if (getmapad(setEntry->mapad) == 0)
continue;
uint8 currentFrame = setEntry->b18[0];
data.word(kCurrentframe) = currentFrame;
@@ -162,7 +160,7 @@ void DreamGenContext::showallobs() {
calcfrframe();
uint16 x, y;
finalframe(&x, &y);
- setEntry->b17 = setEntry->b18[0];
+ setEntry->index = setEntry->b18[0];
if ((setEntry->type == 0) && (setEntry->priority != 5) && (setEntry->priority != 6)) {
x += data.word(kMapadx);
y += data.word(kMapady);
@@ -253,9 +251,9 @@ void DreamGenContext::showallfree() {
data.word(kDataad) = kFrframedata;
data.word(kFramesad) = kFrframes;
data.byte(kCurrentfree) = 0;
- const uint8 *mapData = segRef(data.word(kFreedat)).ptr(2, 0);
+ const DynObject *freeObjects = (const DynObject *)segRef(data.word(kFreedat)).ptr(0, 0);
for(size_t i = 0; i < 80; ++i) {
- uint8 mapad = getmapad(mapData);
+ uint8 mapad = getmapad(freeObjects[i].mapad);
if (mapad != 0) {
data.word(kCurrentframe) = 3 * data.byte(kCurrentfree);
uint8 width, height;
@@ -277,7 +275,57 @@ void DreamGenContext::showallfree() {
}
++data.byte(kCurrentfree);
- mapData += 16;
+ }
+}
+
+void DreamGenContext::drawflags() {
+ uint8 *mapFlags = segRef(data.word(kBuffers)).ptr(kMapflags, 0);
+ const uint8 *mapData = segRef(data.word(kMapdata)).ptr(kMap + data.byte(kMapy) * kMapwidth + data.byte(kMapx), 0);
+ const uint8 *backdropFlags = segRef(data.word(kBackdrop)).ptr(kFlags, 0);
+
+ for (size_t i = 0; i < 10; ++i) {
+ for (size_t j = 0; j < 11; ++j) {
+ uint8 tile = mapData[i * kMapwidth + j];
+ mapFlags[0] = backdropFlags[2 * tile + 0];
+ mapFlags[1] = backdropFlags[2 * tile + 1];
+ mapFlags[2] = tile;
+ mapFlags += 3;
+ }
+ }
+}
+
+void DreamGenContext::showallex() {
+ data.word(kListpos) = kExlist;
+ memset(segRef(data.word(kBuffers)).ptr(kExlist, 100 * 5), 0xff, 100 * 5);
+
+ data.word(kFrsegment) = data.word(kExtras);
+ data.word(kDataad) = kExframedata;
+ data.word(kFramesad) = kExframes;
+ data.byte(kCurrentex) = 0;
+ DynObject *objects = (DynObject *)segRef(data.word(kExtras)).ptr(kExdata, sizeof(DynObject));
+ for (size_t i = 0; i < 100; ++i, ++data.byte(kCurrentex)) {
+ DynObject *object = objects + i;
+ if (object->mapad[0] == 0xff)
+ continue;
+ if (object->currentLocation != data.byte(kReallocation))
+ continue;
+ if (getmapad(object->mapad) == 0)
+ continue;
+ data.word(kCurrentframe) = 3 * data.byte(kCurrentex);
+ uint8 width, height;
+ calcfrframe(&width, &height);
+ uint16 x, y;
+ finalframe(&x, &y);
+ if ((width != 0) || (height != 0)) {
+ showframe((Frame *)segRef(data.word(kFrsegment)).ptr(0, 0), x + data.word(kMapadx), y + data.word(kMapady), data.word(kCurrentframe) & 0xff, 0);
+ ObjPos *objPos = (ObjPos *)segRef(data.word(kBuffers)).ptr(data.word(kListpos), sizeof(ObjPos));
+ objPos->xMin = data.byte(kSavex);
+ objPos->yMin = data.byte(kSavey);
+ objPos->xMax = data.byte(kSavesize + 0) + data.byte(kSavex);
+ objPos->yMax = data.byte(kSavesize + 1) + data.byte(kSavey);
+ objPos->index = i;
+ data.word(kListpos) += sizeof(ObjPos);
+ }
}
}
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp
index 0ee8c50cd3..1bcb34c211 100644
--- a/engines/dreamweb/dreamgen.cpp
+++ b/engines/dreamweb/dreamgen.cpp
@@ -2032,24 +2032,6 @@ gottrainframe:
showgamereel();
}
-void DreamGenContext::addtopeoplelist() {
- STACK_CHECK;
- push(es);
- push(bx);
- push(bx);
- cl = es.byte(bx+7);
- ax = es.word(bx+3);
- bx = data.word(kListpos);
- es = data.word(kBuffers);
- es.word(bx) = ax;
- ax = pop();
- es.word(bx+2) = ax;
- es.byte(bx+4) = cl;
- bx = pop();
- es = pop();
- _add(data.word(kListpos), 5);
-}
-
void DreamGenContext::checkspeed() {
STACK_CHECK;
_cmp(data.byte(kLastweapon), -1);
@@ -2068,14 +2050,6 @@ forcenext:
_cmp(al, al);
}
-void DreamGenContext::delsprite() {
- STACK_CHECK;
- di = bx;
- cx = (32);
- al = 255;
- _stosb(cx, true);
-}
-
void DreamGenContext::checkforexit() {
STACK_CHECK;
cl = data.byte(kRyanx);
@@ -2411,30 +2385,6 @@ foundlineend:
goto lookforlinestart;
}
-void DreamGenContext::getblockofpixel() {
- STACK_CHECK;
- push(cx);
- push(es);
- push(di);
- ax = data.word(kMapxstart);
- _add(cl, al);
- ax = data.word(kMapystart);
- _add(ch, al);
- checkone();
- _and(cl, 1);
- if (!flags.z())
- goto failrain;
- di = pop();
- es = pop();
- cx = pop();
- return;
-failrain:
- di = pop();
- es = pop();
- cx = pop();
- al = 0;
-}
-
void DreamGenContext::liftnoise() {
STACK_CHECK;
_cmp(data.byte(kReallocation), 5);
@@ -2578,64 +2528,6 @@ bigroom:
_add(data.byte(kMapysize), 8);
}
-void DreamGenContext::dumpeverything() {
- STACK_CHECK;
- es = data.word(kBuffers);
- bx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40));
-dumpevery1:
- ax = es.word(bx);
- cx = es.word(bx+2);
- _cmp(ax, 0x0ffff);
- if (flags.z())
- goto finishevery1;
- _cmp(ax, es.word(bx+(40*5)));
- if (!flags.z())
- goto notskip1;
- _cmp(cx, es.word(bx+(40*5)+2));
- if (flags.z())
- goto skip1;
-notskip1:
- push(bx);
- push(es);
- push(ds);
- bl = ah;
- bh = 0;
- ah = 0;
- di = ax;
- _add(di, data.word(kMapadx));
- _add(bx, data.word(kMapady));
- multidump();
- ds = pop();
- es = pop();
- bx = pop();
-skip1:
- _add(bx, 5);
- goto dumpevery1;
-finishevery1:
- bx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40))+(40*5);
-dumpevery2:
- ax = es.word(bx);
- cx = es.word(bx+2);
- _cmp(ax, 0x0ffff);
- if (flags.z())
- return /* (finishevery2) */;
- push(bx);
- push(es);
- push(ds);
- bl = ah;
- bh = 0;
- ah = 0;
- di = ax;
- _add(di, data.word(kMapadx));
- _add(bx, data.word(kMapady));
- multidump();
- ds = pop();
- es = pop();
- bx = pop();
- _add(bx, 5);
- goto dumpevery2;
-}
-
void DreamGenContext::loadpalfromiff() {
STACK_CHECK;
dx = 2481;
@@ -2675,83 +2567,6 @@ nought:
goto palloop;
}
-void DreamGenContext::paneltomap() {
- STACK_CHECK;
- di = data.word(kMapxstart);
- _add(di, data.word(kMapadx));
- bx = data.word(kMapystart);
- _add(bx, data.word(kMapady));
- ds = data.word(kMapstore);
- si = 0;
- cl = data.byte(kMapxsize);
- ch = data.byte(kMapysize);
- multiget();
-}
-
-void DreamGenContext::maptopanel() {
- STACK_CHECK;
- di = data.word(kMapxstart);
- _add(di, data.word(kMapadx));
- bx = data.word(kMapystart);
- _add(bx, data.word(kMapady));
- ds = data.word(kMapstore);
- si = 0;
- cl = data.byte(kMapxsize);
- ch = data.byte(kMapysize);
- multiput();
-}
-
-void DreamGenContext::dumpmap() {
- STACK_CHECK;
- di = data.word(kMapxstart);
- _add(di, data.word(kMapadx));
- bx = data.word(kMapystart);
- _add(bx, data.word(kMapady));
- cl = data.byte(kMapxsize);
- ch = data.byte(kMapysize);
- multidump();
-}
-
-void DreamGenContext::pixelcheckset() {
- STACK_CHECK;
- push(ax);
- _sub(al, es.byte(bx));
- _sub(ah, es.byte(bx+1));
- push(es);
- push(bx);
- push(cx);
- push(ax);
- al = es.byte(bx+4);
- getsetad();
- al = es.byte(bx+17);
- es = data.word(kSetframes);
- bx = (0);
- ah = 0;
- cx = 6;
- _mul(cx);
- _add(bx, ax);
- ax = pop();
- push(ax);
- al = ah;
- ah = 0;
- cl = es.byte(bx);
- ch = 0;
- _mul(cx);
- cx = pop();
- ch = 0;
- _add(ax, cx);
- _add(ax, es.word(bx+2));
- bx = ax;
- _add(bx, (0+2080));
- al = es.byte(bx);
- dl = al;
- cx = pop();
- bx = pop();
- es = pop();
- ax = pop();
- _cmp(dl, 0);
-}
-
void DreamGenContext::createpanel() {
STACK_CHECK;
di = 0;
@@ -2797,99 +2612,6 @@ void DreamGenContext::createpanel2() {
showframe();
}
-void DreamGenContext::delthisone() {
- STACK_CHECK;
- push(ax);
- push(ax);
- al = ah;
- ah = 0;
- _add(ax, data.word(kMapady));
- bx = (320);
- _mul(bx);
- bx = pop();
- bh = 0;
- _add(bx, data.word(kMapadx));
- _add(ax, bx);
- di = ax;
- ax = pop();
- push(ax);
- al = ah;
- ah = 0;
- bx = 22*8;
- _mul(bx);
- bx = pop();
- bh = 0;
- _add(ax, bx);
- si = ax;
- es = data.word(kWorkspace);
- ds = data.word(kMapstore);
- dl = cl;
- dh = 0;
- ax = (320);
- _sub(ax, dx);
- _neg(dx);
- _add(dx, 22*8);
-deloneloop:
- push(cx);
- ch = 0;
- _movsb(cx, true);
- cx = pop();
- _add(di, ax);
- _add(si, dx);
- _dec(ch);
- if (!flags.z())
- goto deloneloop;
-}
-
-void DreamGenContext::transferinv() {
- STACK_CHECK;
- di = data.word(kExframepos);
- push(di);
- al = data.byte(kExpos);
- ah = 0;
- bx = ax;
- _add(ax, ax);
- _add(ax, bx);
- _inc(ax);
- cx = 6;
- _mul(cx);
- es = data.word(kExtras);
- bx = (0);
- _add(bx, ax);
- _add(di, (0+2080));
- push(bx);
- al = data.byte(kItemtotran);
- ah = 0;
- bx = ax;
- _add(ax, ax);
- _add(ax, bx);
- _inc(ax);
- cx = 6;
- _mul(cx);
- ds = data.word(kFreeframes);
- bx = (0);
- _add(bx, ax);
- si = (0+2080);
- al = ds.byte(bx);
- ah = 0;
- cl = ds.byte(bx+1);
- ch = 0;
- _add(si, ds.word(bx+2));
- dx = ds.word(bx+4);
- bx = pop();
- es.byte(bx+0) = al;
- es.byte(bx+1) = cl;
- es.word(bx+4) = dx;
- _mul(cx);
- cx = ax;
- push(cx);
- _movsb(cx, true);
- cx = pop();
- ax = pop();
- es.word(bx+2) = ax;
- _add(data.word(kExframepos), cx);
-}
-
void DreamGenContext::transfermap() {
STACK_CHECK;
di = data.word(kExframepos);
@@ -3926,26 +3648,6 @@ realcreditsearly:
data.byte(kLasthardkey) = 0;
}
-void DreamGenContext::waitframes() {
- STACK_CHECK;
- push(di);
- push(bx);
- push(es);
- push(si);
- push(ds);
- readmouse();
- showpointer();
- vsync();
- dumppointer();
- delpointer();
- ax = data.word(kMousebutton);
- ds = pop();
- si = pop();
- es = pop();
- bx = pop();
- di = pop();
-}
-
void DreamGenContext::monprint() {
STACK_CHECK;
data.byte(kKerning) = 1;
@@ -4032,51 +3734,6 @@ nottrigger2:
data.byte(kKerning) = 0;
}
-void DreamGenContext::fillryan() {
- STACK_CHECK;
- es = data.word(kBuffers);
- di = (0+(228*13)+32);
- findallryan();
- si = (0+(228*13)+32);
- al = data.byte(kRyanpage);
- ah = 0;
- cx = 20;
- _mul(cx);
- _add(si, ax);
- di = (80);
- bx = (58);
- cx = 2;
-ryanloop2:
- push(cx);
- push(di);
- push(bx);
- cx = 5;
-ryanloop1:
- push(cx);
- push(di);
- push(bx);
- ax = es.word(si);
- _add(si, 2);
- push(si);
- push(es);
- obtoinv();
- es = pop();
- si = pop();
- bx = pop();
- di = pop();
- cx = pop();
- _add(di, (44));
- if (--cx)
- goto ryanloop1;
- bx = pop();
- di = pop();
- cx = pop();
- _add(bx, (44));
- if (--cx)
- goto ryanloop2;
- showryanpage();
-}
-
void DreamGenContext::fillopen() {
STACK_CHECK;
deltextline();
@@ -4121,41 +3778,6 @@ nextopenslot:
undertextline();
}
-void DreamGenContext::findallryan() {
- STACK_CHECK;
- push(di);
- cx = 30;
- ax = 0x0ffff;
- _stosw(cx, true);
- di = pop();
- cl = 4;
- ds = data.word(kExtras);
- bx = (0+2080+30000);
- ch = 0;
-findryanloop:
- _cmp(ds.byte(bx+2), cl);
- if (!flags.z())
- goto notinryaninv;
- _cmp(ds.byte(bx+3), 255);
- if (!flags.z())
- goto notinryaninv;
- al = ds.byte(bx+4);
- ah = 0;
- push(di);
- _add(di, ax);
- _add(di, ax);
- al = ch;
- ah = 4;
- _stosw();
- di = pop();
-notinryaninv:
- _add(bx, 16);
- _inc(ch);
- _cmp(ch, (114));
- if (!flags.z())
- goto findryanloop;
-}
-
void DreamGenContext::findallopen() {
STACK_CHECK;
push(di);
@@ -4229,82 +3851,6 @@ findopen2a:
goto findopen1a;
}
-void DreamGenContext::obtoinv() {
- STACK_CHECK;
- push(bx);
- push(es);
- push(si);
- push(ax);
- push(ax);
- push(di);
- push(bx);
- ds = data.word(kIcons1);
- _sub(di, 2);
- _sub(bx, 1);
- al = 10;
- ah = 0;
- showframe();
- bx = pop();
- di = pop();
- ax = pop();
- _cmp(al, 255);
- if (flags.z())
- goto finishfill;
- push(bx);
- push(di);
- push(ax);
- ds = data.word(kExtras);
- _cmp(ah, 4);
- if (flags.z())
- goto isanextra;
- ds = data.word(kFreeframes);
-isanextra:
- cl = al;
- _add(al, al);
- _add(al, cl);
- _inc(al);
- ah = 128;
- _add(bx, 19);
- _add(di, 18);
- showframe();
- ax = pop();
- di = pop();
- bx = pop();
- push(bx);
- getanyaddir();
- isitworn();
- bx = pop();
- if (!flags.z())
- goto finishfill;
- ds = data.word(kIcons1);
- _sub(di, 3);
- _sub(bx, 2);
- al = 7;
- ah = 0;
- showframe();
-finishfill:
- ax = pop();
- si = pop();
- es = pop();
- bx = pop();
-}
-
-void DreamGenContext::isitworn() {
- STACK_CHECK;
- al = es.byte(bx+12);
- _cmp(al, 'W'-'A');
- if (!flags.z())
- return /* (notworn) */;
- al = es.byte(bx+13);
- _cmp(al, 'E'-'A');
-}
-
-void DreamGenContext::makeworn() {
- STACK_CHECK;
- es.byte(bx+12) = 'W'-'A';
- es.byte(bx+13) = 'E'-'A';
-}
-
void DreamGenContext::examineob() {
STACK_CHECK;
data.byte(kPointermode) = 0;
@@ -4351,6 +3897,9 @@ waitexam:
bx = offset_withlist1;
notuseinv:
checkcoords();
+ _cmp(data.byte(kQuitrequested), 0);
+ if (!flags.z())
+ goto stopwaiting;
_cmp(data.byte(kExamagain), 0);
if (flags.z())
goto norex;
@@ -4359,6 +3908,7 @@ norex:
_cmp(data.byte(kGetback), 0);
if (flags.z())
goto waitexam;
+stopwaiting:
data.byte(kPickup) = 0;
_cmp(data.word(kWatchingtime), 0);
if (!flags.z())
@@ -4451,30 +4001,6 @@ void DreamGenContext::openinv() {
data.byte(kCommandtype) = 255;
}
-void DreamGenContext::showryanpage() {
- STACK_CHECK;
- ds = data.word(kIcons1);
- di = (80)+167;
- bx = (58)-12;
- al = 12;
- ah = 0;
- showframe();
- al = 13;
- _add(al, data.byte(kRyanpage));
- push(ax);
- al = data.byte(kRyanpage);
- ah = 0;
- cx = 18;
- _mul(cx);
- ds = data.word(kIcons1);
- di = (80)+167;
- _add(di, ax);
- bx = (58)-12;
- ax = pop();
- ah = 0;
- showframe();
-}
-
void DreamGenContext::openob() {
STACK_CHECK;
al = data.byte(kOpenedob);
@@ -4506,28 +4032,6 @@ void DreamGenContext::openob() {
cs.word(bx) = ax;
}
-void DreamGenContext::obicons() {
- STACK_CHECK;
- al = data.byte(kCommand);
- getanyad();
- _cmp(al, 255);
- if (flags.z())
- goto cantopenit;
- ds = data.word(kIcons2);
- di = 210;
- bx = 1;
- al = 4;
- ah = 0;
- showframe();
-cantopenit:
- ds = data.word(kIcons2);
- di = 260;
- bx = 1;
- al = 1;
- ah = 0;
- showframe();
-}
-
void DreamGenContext::examicon() {
STACK_CHECK;
ds = data.word(kIcons2);
@@ -4538,38 +4042,6 @@ void DreamGenContext::examicon() {
showframe();
}
-void DreamGenContext::obpicture() {
- STACK_CHECK;
- al = data.byte(kCommand);
- ah = data.byte(kObjecttype);
- _cmp(ah, 1);
- if (flags.z())
- return /* (setframe) */;
- _cmp(ah, 4);
- if (flags.z())
- goto exframe;
- ds = data.word(kFreeframes);
- di = 160;
- bx = 68;
- cl = al;
- _add(al, al);
- _add(al, cl);
- _inc(al);
- ah = 128;
- showframe();
- return;
-exframe:
- ds = data.word(kExtras);
- di = 160;
- bx = 68;
- cl = al;
- _add(al, al);
- _add(al, cl);
- _inc(al);
- ah = 128;
- showframe();
-}
-
void DreamGenContext::describeob() {
STACK_CHECK;
getobtextstart();
@@ -4761,19 +4233,6 @@ foundmatch:
bx = pop();
}
-void DreamGenContext::findnextcolon() {
- STACK_CHECK;
-isntcolon:
- al = es.byte(si);
- _inc(si);
- _cmp(al, 0);
- if (flags.z())
- return /* (endofcolon) */;
- _cmp(al, ':');
- if (!flags.z())
- goto isntcolon;
-}
-
void DreamGenContext::inventory() {
STACK_CHECK;
_cmp(data.byte(kMandead), 1);
@@ -4822,7 +4281,7 @@ doopeninv:
data.byte(kOpenedob) = 255;
goto waitexam;
return;
-/*continuing to unbounded code: examineagain from examineob:3-66*/
+/*continuing to unbounded code: examineagain from examineob:3-69*/
examineagain:
data.byte(kInmaparea) = 0;
data.byte(kExamagain) = 0;
@@ -4865,6 +4324,9 @@ waitexam:
bx = offset_withlist1;
notuseinv:
checkcoords();
+ _cmp(data.byte(kQuitrequested), 0);
+ if (!flags.z())
+ goto stopwaiting;
_cmp(data.byte(kExamagain), 0);
if (flags.z())
goto norex;
@@ -4873,6 +4335,7 @@ norex:
_cmp(data.byte(kGetback), 0);
if (flags.z())
goto waitexam;
+stopwaiting:
data.byte(kPickup) = 0;
_cmp(data.word(kWatchingtime), 0);
if (!flags.z())
@@ -6064,24 +5527,6 @@ moretext:
goto moretext;
}
-void DreamGenContext::getexpos() {
- STACK_CHECK;
- es = data.word(kExtras);
- al = 0;
- di = (0+2080+30000);
-tryanotherex:
- _cmp(es.byte(di+2), 255);
- if (flags.z())
- goto foundnewex;
- _add(di, 16);
- _inc(al);
- _cmp(al, (114));
- if (!flags.z())
- goto tryanotherex;
-foundnewex:
- data.byte(kExpos) = al;
-}
-
void DreamGenContext::purgealocation() {
STACK_CHECK;
push(ax);
@@ -6341,133 +5786,6 @@ void DreamGenContext::drawfloor() {
es = pop();
}
-void DreamGenContext::drawflags() {
- STACK_CHECK;
- es = data.word(kBuffers);
- di = (0+(228*13)+32+60+(32*32));
- al = data.byte(kMapy);
- ah = 0;
- cx = (66);
- _mul(cx);
- bl = data.byte(kMapx);
- bh = 0;
- _add(ax, bx);
- si = (0);
- _add(si, ax);
- cx = 10;
-_tmp28:
- push(cx);
- cx = 11;
-_tmp28a:
- ds = data.word(kMapdata);
- _lodsb();
- ds = data.word(kBackdrop);
- push(si);
- push(ax);
- ah = 0;
- _add(ax, ax);
- si = (0);
- _add(si, ax);
- _movsw();
- ax = pop();
- _stosb();
- si = pop();
- if (--cx)
- goto _tmp28a;
- _add(si, (66)-11);
- cx = pop();
- if (--cx)
- goto _tmp28;
-}
-
-void DreamGenContext::showallex() {
- STACK_CHECK;
- es = data.word(kBuffers);
- bx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5));
- data.word(kListpos) = bx;
- di = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5));
- cx = 100*5;
- al = 255;
- _stosb(cx, true);
- es = data.word(kExtras);
- data.word(kFrsegment) = es;
- ax = (0);
- data.word(kDataad) = ax;
- ax = (0+2080);
- data.word(kFramesad) = ax;
- data.byte(kCurrentex) = 0;
- si = (0+2080+30000)+2;
- cx = 0;
-exloop:
- push(cx);
- push(si);
- es = data.word(kExtras);
- push(si);
- ch = 0;
- _cmp(es.byte(si), 255);
- if (flags.z())
- goto notinroom;
- al = es.byte(si-2);
- _cmp(al, data.byte(kReallocation));
- if (!flags.z())
- goto notinroom;
- getmapad();
-notinroom:
- si = pop();
- _cmp(ch, 0);
- if (flags.z())
- goto blankex;
- al = data.byte(kCurrentex);
- ah = 0;
- dx = ax;
- _add(ax, ax);
- _add(ax, dx);
- data.word(kCurrentframe) = ax;
- push(es);
- push(si);
- calcfrframe();
- es = data.word(kMapstore);
- ds = data.word(kFrsegment);
- finalframe();
- si = pop();
- es = pop();
- _cmp(cx, 0);
- if (flags.z())
- goto blankex;
- ax = data.word(kCurrentframe);
- ah = 0;
- _add(di, data.word(kMapadx));
- _add(bx, data.word(kMapady));
- showframe();
- si = data.word(kListpos);
- es = data.word(kBuffers);
- al = data.byte(kSavex);
- ah = data.byte(kSavey);
- es.word(si) = ax;
- cx = ax;
- ax = data.word(kSavesize);
- _add(al, cl);
- _add(ah, ch);
- es.word(si+2) = ax;
- ax = pop();
- cx = pop();
- push(cx);
- push(ax);
- es.byte(si+4) = cl;
- _add(si, 5);
- data.word(kListpos) = si;
-blankex:
- _inc(data.byte(kCurrentex));
- si = pop();
- cx = pop();
- _add(si, 16);
- _inc(cx);
- _cmp(cx, 100);
- if (flags.z())
- return /* (finex) */;
- goto exloop;
-}
-
void DreamGenContext::autolook() {
STACK_CHECK;
ax = data.word(kMousex);
@@ -8815,91 +8133,6 @@ douse:
useroutine();
}
-void DreamGenContext::useroutine() {
- STACK_CHECK;
- _cmp(data.byte(kReallocation), 50);
- if (flags.c())
- goto nodream7;
- _cmp(data.byte(kPointerpower), 0);
- if (!flags.z())
- goto powerok;
- return;
-powerok:
- data.byte(kPointerpower) = 0;
-nodream7:
- getanyad();
- dx = data;
- ds = dx;
- si = offset_uselist;
-checkuselist:
- push(si);
- _lodsb();
- _sub(al, 'A');
- _cmp(al, es.byte(bx+12));
- if (!flags.z())
- goto failed;
- _lodsb();
- _sub(al, 'A');
- _cmp(al, es.byte(bx+13));
- if (!flags.z())
- goto failed;
- _lodsb();
- _sub(al, 'A');
- _cmp(al, es.byte(bx+14));
- if (!flags.z())
- goto failed;
- _lodsb();
- _sub(al, 'A');
- _cmp(al, es.byte(bx+15));
- if (!flags.z())
- goto failed;
- _lodsw();
- si = pop();
- __dispatch_call(ax);
- return;
-failed:
- si = pop();
- _add(si, 6);
- _cmp(ds.byte(si), 140);
- if (!flags.z())
- goto checkuselist;
- delpointer();
- getobtextstart();
- findnextcolon();
- _cmp(al, 0);
- if (flags.z())
- goto cantuse2;
- findnextcolon();
- _cmp(al, 0);
- if (flags.z())
- goto cantuse2;
- al = es.byte(si);
- _cmp(al, 0);
- if (flags.z())
- goto cantuse2;
- usetext();
- cx = 400;
- hangonp();
- putbackobstuff();
- return;
-cantuse2:
- createpanel();
- showpanel();
- showman();
- showexit();
- obicons();
- di = 33;
- bx = 100;
- al = 63;
- dl = 241;
- printmessage();
- worktoscreenm();
- cx = 50;
- hangonp();
- putbackobstuff();
- data.byte(kCommandtype) = 255;
-}
-
void DreamGenContext::wheelsound() {
STACK_CHECK;
al = 17;
@@ -10902,23 +10135,6 @@ doselob:
useroutine();
}
-void DreamGenContext::compare() {
- STACK_CHECK;
- _sub(dl, 'A');
- _sub(dh, 'A');
- _sub(cl, 'A');
- _sub(ch, 'A');
- push(cx);
- push(dx);
- getanyaddir();
- dx = pop();
- cx = pop();
- _cmp(es.word(bx+12), cx);
- if (!flags.z())
- return /* (comparefin) */;
- _cmp(es.word(bx+14), dx);
-}
-
void DreamGenContext::findsetobject() {
STACK_CHECK;
_sub(al, 'A');
@@ -11044,26 +10260,6 @@ notfoundinside:
goto insideloop;
}
-void DreamGenContext::usetext() {
- STACK_CHECK;
- push(es);
- push(si);
- createpanel();
- showpanel();
- showman();
- showexit();
- obicons();
- si = pop();
- es = pop();
- di = 36;
- bx = 104;
- dl = 241;
- al = 0;
- ah = 0;
- printdirect();
- worktoscreenm();
-}
-
void DreamGenContext::putbackobstuff() {
STACK_CHECK;
createpanel();
@@ -15109,88 +14305,6 @@ notzeronum:
ch = 1;
}
-void DreamGenContext::walkandexamine() {
- STACK_CHECK;
- finishedwalking();
- if (!flags.z())
- return /* (noobselect) */;
- al = data.byte(kWalkexamtype);
- data.byte(kCommandtype) = al;
- al = data.byte(kWalkexamnum);
- data.byte(kCommand) = al;
- data.byte(kWalkandexam) = 0;
- _cmp(data.byte(kCommandtype), 5);
- if (flags.z())
- return /* (noobselect) */;
- examineob();
- return;
-wantstowalk:
- setwalk();
- data.byte(kReasseschanges) = 1;
- return;
-diff:
- data.byte(kCommand) = al;
- data.byte(kCommandtype) = ah;
- _cmp(data.byte(kLinepointer), 254);
- if (!flags.z())
- goto middleofwalk;
- _cmp(data.word(kWatchingtime), 0);
- if (!flags.z())
- goto middleofwalk;
- al = data.byte(kFacing);
- _cmp(al, data.byte(kTurntoface));
- if (!flags.z())
- goto middleofwalk;
- _cmp(data.byte(kCommandtype), 3);
- if (!flags.z())
- goto notblock;
- bl = data.byte(kManspath);
- _cmp(bl, data.byte(kPointerspath));
- if (!flags.z())
- goto dontcheck;
- cl = data.byte(kRyanx);
- _add(cl, 12);
- ch = data.byte(kRyany);
- _add(ch, 12);
- checkone();
- _cmp(cl, 2);
- if (flags.c())
- goto isblock;
-dontcheck:
- getflagunderp();
- _cmp(data.byte(kLastflag), 2);
- if (flags.c())
- goto isblock;
- _cmp(data.byte(kLastflag), 128);
- if (!flags.c())
- goto isblock;
- goto toofaraway;
-notblock:
- bl = data.byte(kManspath);
- _cmp(bl, data.byte(kPointerspath));
- if (!flags.z())
- goto toofaraway;
- _cmp(data.byte(kCommandtype), 3);
- if (flags.z())
- goto isblock;
- _cmp(data.byte(kCommandtype), 5);
- if (flags.z())
- goto isaperson;
- examineobtext();
- return;
-middleofwalk:
- blocknametext();
- return;
-isblock:
- blocknametext();
- return;
-isaperson:
- personnametext();
- return;
-toofaraway:
- walktotext();
-}
-
void DreamGenContext::mainscreen() {
STACK_CHECK;
data.byte(kInmaparea) = 0;
@@ -15238,43 +14352,6 @@ alreadyrun:
data.byte(kLastweapon) = 8;
}
-void DreamGenContext::checkcoords() {
- STACK_CHECK;
- _cmp(data.byte(kNewlocation), 255);
- if (flags.z())
- goto loop048;
- return;
-loop048:
- ax = cs.word(bx);
- _cmp(ax, 0x0ffff);
- if (flags.z())
- return /* (nonefound) */;
- push(bx);
- _cmp(data.word(kMousex), ax);
- if (flags.l())
- goto over045;
- ax = cs.word(bx+2);
- _cmp(data.word(kMousex), ax);
- if (!flags.l())
- goto over045;
- ax = cs.word(bx+4);
- _cmp(data.word(kMousey), ax);
- if (flags.l())
- goto over045;
- ax = cs.word(bx+6);
- _cmp(data.word(kMousey), ax);
- if (!flags.l())
- goto over045;
- ax = cs.word(bx+8);
- __dispatch_call(ax);
- ax = pop();
- return;
-over045:
- bx = pop();
- _add(bx, 10);
- goto loop048;
-}
-
void DreamGenContext::identifyob() {
STACK_CHECK;
_cmp(data.word(kWatchingtime), 0);
@@ -15338,105 +14415,6 @@ nothingund:
blank();
}
-void DreamGenContext::checkifset() {
- STACK_CHECK;
- es = data.word(kBuffers);
- bx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32))+(127*5);
- cx = 127;
-identifyset:
- _cmp(es.byte(bx+4), 255);
- if (flags.z())
- goto notasetid;
- _cmp(al, es.byte(bx));
- if (flags.c())
- goto notasetid;
- _cmp(al, es.byte(bx+2));
- if (!flags.c())
- goto notasetid;
- _cmp(ah, es.byte(bx+1));
- if (flags.c())
- goto notasetid;
- _cmp(ah, es.byte(bx+3));
- if (!flags.c())
- goto notasetid;
- pixelcheckset();
- if (flags.z())
- goto notasetid;
- isitdescribed();
- if (flags.z())
- goto notasetid;
- al = es.byte(bx+4);
- ah = 1;
- obname();
- al = 0;
- _cmp(al, 1);
- return;
-notasetid:
- _sub(bx, 5);
- _dec(cx);
- _cmp(cx, -1);
- if (!flags.z())
- goto identifyset;
-}
-
-void DreamGenContext::checkifex() {
- STACK_CHECK;
- es = data.word(kBuffers);
- bx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5))+(99*5);
- cx = 99;
-identifyex:
- _cmp(es.byte(bx+4), 255);
- if (flags.z())
- goto notanexid;
- _cmp(al, es.byte(bx));
- if (flags.c())
- goto notanexid;
- _cmp(al, es.byte(bx+2));
- if (!flags.c())
- goto notanexid;
- _cmp(ah, es.byte(bx+1));
- if (flags.c())
- goto notanexid;
- _cmp(ah, es.byte(bx+3));
- if (!flags.c())
- goto notanexid;
- al = es.byte(bx+4);
- ah = 4;
- obname();
- al = 1;
- _cmp(al, 0);
- return;
-notanexid:
- _sub(bx, 5);
- _dec(cx);
- _cmp(cx, -1);
- if (!flags.z())
- goto identifyex;
-}
-
-void DreamGenContext::isitdescribed() {
- STACK_CHECK;
- push(ax);
- push(cx);
- push(es);
- push(bx);
- al = es.byte(bx+4);
- ah = 0;
- _add(ax, ax);
- bx = ax;
- es = data.word(kSetdesc);
- _add(bx, (0));
- ax = es.word(bx);
- _add(ax, (0+(130*2)));
- bx = ax;
- dl = es.byte(bx);
- bx = pop();
- es = pop();
- cx = pop();
- ax = pop();
- _cmp(dl, 0);
-}
-
void DreamGenContext::findpathofpoint() {
STACK_CHECK;
push(ax);
@@ -15524,118 +14502,6 @@ gotfirst:
al = es.byte(bx+6);
}
-void DreamGenContext::turnpathon() {
- STACK_CHECK;
- push(ax);
- push(ax);
- cl = 255;
- ch = data.byte(kRoomnum);
- _add(ch, 100);
- findormake();
- ax = pop();
- getroomspaths();
- ax = pop();
- _cmp(al, 255);
- if (flags.z())
- return /* (nopathon) */;
- ah = 0;
- _add(ax, ax);
- _add(ax, ax);
- _add(ax, ax);
- _add(bx, ax);
- al = 255;
- es.byte(bx+6) = al;
-}
-
-void DreamGenContext::turnpathoff() {
- STACK_CHECK;
- push(ax);
- push(ax);
- cl = 0;
- ch = data.byte(kRoomnum);
- _add(ch, 100);
- findormake();
- ax = pop();
- getroomspaths();
- ax = pop();
- _cmp(al, 255);
- if (flags.z())
- return /* (nopathoff) */;
- ah = 0;
- _add(ax, ax);
- _add(ax, ax);
- _add(ax, ax);
- _add(bx, ax);
- al = 0;
- es.byte(bx+6) = al;
-}
-
-void DreamGenContext::turnanypathon() {
- STACK_CHECK;
- push(ax);
- push(ax);
- cl = 255;
- ch = ah;
- _add(ch, 100);
- findormake();
- ax = pop();
- al = ah;
- ah = 0;
- cx = 144;
- _mul(cx);
- es = data.word(kReels);
- bx = (0);
- _add(bx, ax);
- ax = pop();
- ah = 0;
- _add(ax, ax);
- _add(ax, ax);
- _add(ax, ax);
- _add(bx, ax);
- al = 255;
- es.byte(bx+6) = al;
-}
-
-void DreamGenContext::turnanypathoff() {
- STACK_CHECK;
- push(ax);
- push(ax);
- cl = 0;
- ch = ah;
- _add(ch, 100);
- findormake();
- ax = pop();
- al = ah;
- ah = 0;
- cx = 144;
- _mul(cx);
- es = data.word(kReels);
- bx = (0);
- _add(bx, ax);
- ax = pop();
- ah = 0;
- _add(ax, ax);
- _add(ax, ax);
- _add(ax, ax);
- _add(bx, ax);
- al = 0;
- es.byte(bx+6) = al;
-}
-
-void DreamGenContext::checkifpathison() {
- STACK_CHECK;
- push(ax);
- getroomspaths();
- ax = pop();
- ah = 0;
- _add(ax, ax);
- _add(ax, ax);
- _add(ax, ax);
- _add(bx, ax);
- al = es.byte(bx+6);
- _cmp(al, 255);
-}
-
void DreamGenContext::afternewroom() {
STACK_CHECK;
_cmp(data.byte(kNowinnewroom), 0);
@@ -15785,140 +14651,6 @@ void DreamGenContext::afterintroroom() {
data.byte(kNowinnewroom) = 0;
}
-void DreamGenContext::obname() {
- STACK_CHECK;
- _cmp(data.byte(kReasseschanges), 0);
- if (flags.z())
- goto notnewpath;
- data.byte(kReasseschanges) = 0;
- goto diff;
-notnewpath:
- _cmp(ah, data.byte(kCommandtype));
- if (flags.z())
- goto notdiffob;
- goto diff;
-notdiffob:
- _cmp(al, data.byte(kCommand));
- if (!flags.z())
- goto diff;
- _cmp(data.byte(kWalkandexam), 1);
- if (flags.z())
- goto walkandexamine;
- _cmp(data.word(kMousebutton), 0);
- if (flags.z())
- return /* (noobselect) */;
- _cmp(data.byte(kCommandtype), 3);
- if (!flags.z())
- goto isntblock;
- _cmp(data.byte(kLastflag), 2);
- if (flags.c())
- return /* (noobselect) */;
-isntblock:
- bl = data.byte(kManspath);
- _cmp(bl, data.byte(kPointerspath));
- if (!flags.z())
- goto wantstowalk;
- _cmp(data.byte(kCommandtype), 3);
- if (flags.z())
- goto wantstowalk;
- finishedwalking();
- if (!flags.z())
- return /* (noobselect) */;
- _cmp(data.byte(kCommandtype), 5);
- if (flags.z())
- goto wantstotalk;
- _cmp(data.word(kWatchingtime), 0);
- if (!flags.z())
- return /* (noobselect) */;
- examineob();
- return;
-wantstotalk:
- _cmp(data.word(kWatchingtime), 0);
- if (!flags.z())
- return /* (noobselect) */;
- talk();
- return;
-walkandexamine:
- finishedwalking();
- if (!flags.z())
- return /* (noobselect) */;
- al = data.byte(kWalkexamtype);
- data.byte(kCommandtype) = al;
- al = data.byte(kWalkexamnum);
- data.byte(kCommand) = al;
- data.byte(kWalkandexam) = 0;
- _cmp(data.byte(kCommandtype), 5);
- if (flags.z())
- return /* (noobselect) */;
- examineob();
- return;
-wantstowalk:
- setwalk();
- data.byte(kReasseschanges) = 1;
- return;
-diff:
- data.byte(kCommand) = al;
- data.byte(kCommandtype) = ah;
- _cmp(data.byte(kLinepointer), 254);
- if (!flags.z())
- goto middleofwalk;
- _cmp(data.word(kWatchingtime), 0);
- if (!flags.z())
- goto middleofwalk;
- al = data.byte(kFacing);
- _cmp(al, data.byte(kTurntoface));
- if (!flags.z())
- goto middleofwalk;
- _cmp(data.byte(kCommandtype), 3);
- if (!flags.z())
- goto notblock;
- bl = data.byte(kManspath);
- _cmp(bl, data.byte(kPointerspath));
- if (!flags.z())
- goto dontcheck;
- cl = data.byte(kRyanx);
- _add(cl, 12);
- ch = data.byte(kRyany);
- _add(ch, 12);
- checkone();
- _cmp(cl, 2);
- if (flags.c())
- goto isblock;
-dontcheck:
- getflagunderp();
- _cmp(data.byte(kLastflag), 2);
- if (flags.c())
- goto isblock;
- _cmp(data.byte(kLastflag), 128);
- if (!flags.c())
- goto isblock;
- goto toofaraway;
-notblock:
- bl = data.byte(kManspath);
- _cmp(bl, data.byte(kPointerspath));
- if (!flags.z())
- goto toofaraway;
- _cmp(data.byte(kCommandtype), 3);
- if (flags.z())
- goto isblock;
- _cmp(data.byte(kCommandtype), 5);
- if (flags.z())
- goto isaperson;
- examineobtext();
- return;
-middleofwalk:
- blocknametext();
- return;
-isblock:
- blocknametext();
- return;
-isaperson:
- personnametext();
- return;
-toofaraway:
- walktotext();
-}
-
void DreamGenContext::examineobtext() {
STACK_CHECK;
bl = data.byte(kCommand);
@@ -15927,26 +14659,6 @@ void DreamGenContext::examineobtext() {
commandwithob();
}
-void DreamGenContext::printmessage() {
- STACK_CHECK;
- push(dx);
- push(bx);
- push(di);
- ah = 0;
- _add(ax, ax);
- bx = ax;
- es = data.word(kCommandtext);
- ax = es.word(bx);
- _add(ax, (66*2));
- si = ax;
- di = pop();
- bx = pop();
- dx = pop();
- al = 0;
- ah = 0;
- printdirect();
-}
-
void DreamGenContext::printmessage2() {
STACK_CHECK;
push(dx);
@@ -15976,18 +14688,6 @@ searchmess:
printdirect();
}
-void DreamGenContext::getflagunderp() {
- STACK_CHECK;
- cx = data.word(kMousex);
- _sub(cx, data.word(kMapadx));
- ax = data.word(kMousey);
- _sub(ax, data.word(kMapady));
- ch = al;
- checkone();
- data.byte(kLastflag) = cl;
- data.byte(kLastflagex) = ch;
-}
-
void DreamGenContext::setwalk() {
STACK_CHECK;
_cmp(data.byte(kLinepointer), 254);
@@ -16466,63 +15166,6 @@ void DreamGenContext::zoomicon() {
showframe();
}
-void DreamGenContext::showblink() {
- STACK_CHECK;
- _cmp(data.byte(kManisoffscreen), 1);
- if (flags.z())
- return /* (finblink1) */;
- _inc(data.byte(kBlinkcount));
- _cmp(data.byte(kShadeson), 0);
- if (!flags.z())
- return /* (finblink1) */;
- _cmp(data.byte(kReallocation), 50);
- if (!flags.c())
- return /* (eyesshut) */;
- al = data.byte(kBlinkcount);
- _cmp(al, 3);
- if (!flags.z())
- return /* (finblink1) */;
- data.byte(kBlinkcount) = 0;
- al = data.byte(kBlinkframe);
- _inc(al);
- data.byte(kBlinkframe) = al;
- _cmp(al, 6);
- if (flags.c())
- goto nomorethan6;
- al = 6;
-nomorethan6:
- ah = 0;
- bx = offset_blinktab;
- _add(bx, ax);
- al = cs.byte(bx);
- ds = data.word(kIcons1);
- di = 44;
- bx = 32;
- ah = 0;
- showframe();
-}
-
-void DreamGenContext::dumpblink() {
- STACK_CHECK;
- _cmp(data.byte(kShadeson), 0);
- if (!flags.z())
- return /* (nodumpeye) */;
- _cmp(data.byte(kBlinkcount), 0);
- if (!flags.z())
- return /* (nodumpeye) */;
- al = data.byte(kBlinkframe);
- _cmp(al, 6);
- if (!flags.c())
- return /* (nodumpeye) */;
- push(ds);
- di = 44;
- bx = 32;
- cl = 16;
- ch = 12;
- multidump();
- ds = pop();
-}
-
void DreamGenContext::worktoscreenm() {
STACK_CHECK;
animpointer();
@@ -16550,53 +15193,6 @@ void DreamGenContext::allpointer() {
dumppointer();
}
-void DreamGenContext::hangonp() {
- STACK_CHECK;
- push(cx);
- _add(cx, cx);
- ax = pop();
- _add(cx, ax);
- data.word(kMaintimer) = 0;
- al = data.byte(kPointerframe);
- ah = data.byte(kPickup);
- push(ax);
- data.byte(kPointermode) = 3;
- data.byte(kPickup) = 0;
- push(cx);
- data.byte(kCommandtype) = 255;
- readmouse();
- animpointer();
- showpointer();
- vsync();
- dumppointer();
- cx = pop();
-hangloop:
- push(cx);
- delpointer();
- readmouse();
- animpointer();
- showpointer();
- vsync();
- dumppointer();
- cx = pop();
- ax = data.word(kMousebutton);
- _cmp(ax, 0);
- if (flags.z())
- goto notpressed;
- _cmp(ax, data.word(kOldbutton));
- if (!flags.z())
- goto getoutofit;
-notpressed:
- if (--cx)
- goto hangloop;
-getoutofit:
- delpointer();
- ax = pop();
- data.byte(kPointerframe) = al;
- data.byte(kPickup) = ah;
- data.byte(kPointermode) = 0;
-}
-
void DreamGenContext::hangonw() {
STACK_CHECK;
hangloopw:
@@ -16658,162 +15254,6 @@ void DreamGenContext::putunderzoom() {
multiput();
}
-void DreamGenContext::showpointer() {
- STACK_CHECK;
- showblink();
- di = data.word(kMousex);
- data.word(kOldpointerx) = di;
- bx = data.word(kMousey);
- data.word(kOldpointery) = bx;
- _cmp(data.byte(kPickup), 1);
- if (flags.z())
- goto itsanobject;
- push(bx);
- push(di);
- ds = data.word(kIcons1);
- al = data.byte(kPointerframe);
- _add(al, 20);
- ah = 0;
- _add(ax, ax);
- si = ax;
- _add(ax, ax);
- _add(si, ax);
- cx = ds.word(si);
- _cmp(cl, 12);
- if (!flags.c())
- goto notsmallx;
- cl = 12;
-notsmallx:
- _cmp(ch, 12);
- if (!flags.c())
- goto notsmally;
- ch = 12;
-notsmally:
- data.byte(kPointerxs) = cl;
- data.byte(kPointerys) = ch;
- push(ds);
- ds = data.word(kBuffers);
- si = (0+(228*13)+32+60);
- multiget();
- ds = pop();
- di = pop();
- bx = pop();
- push(di);
- push(bx);
- al = data.byte(kPointerframe);
- _add(al, 20);
- ah = 0;
- showframe();
- bx = pop();
- di = pop();
- return;
-itsanobject:
- al = data.byte(kItemframe);
- ds = data.word(kExtras);
- _cmp(data.byte(kObjecttype), 4);
- if (flags.z())
- goto itsfrominv;
- ds = data.word(kFreeframes);
-itsfrominv:
- cl = al;
- _add(al, al);
- _add(al, cl);
- _inc(al);
- ah = 0;
- push(ax);
- _add(ax, ax);
- si = ax;
- _add(ax, ax);
- _add(si, ax);
- ax = 2080;
- cx = ds.word(si);
- _cmp(cl, 12);
- if (!flags.c())
- goto notsmallx2;
- cl = 12;
-notsmallx2:
- _cmp(ch, 12);
- if (!flags.c())
- goto notsmally2;
- ch = 12;
-notsmally2:
- data.byte(kPointerxs) = cl;
- data.byte(kPointerys) = ch;
- ax = pop();
- push(di);
- push(bx);
- push(ax);
- push(bx);
- push(di);
- push(ds);
- al = cl;
- ah = 0;
- _shr(ax, 1);
- _sub(data.word(kOldpointerx), ax);
- _sub(di, ax);
- al = ch;
- _shr(ax, 1);
- _sub(data.word(kOldpointery), ax);
- _sub(bx, ax);
- ds = data.word(kBuffers);
- si = (0+(228*13)+32+60);
- multiget();
- ds = pop();
- di = pop();
- bx = pop();
- ax = pop();
- ah = 128;
- showframe();
- bx = pop();
- di = pop();
- ds = data.word(kIcons1);
- al = 3;
- ah = 128;
- showframe();
-}
-
-void DreamGenContext::delpointer() {
- STACK_CHECK;
- ax = data.word(kOldpointerx);
- _cmp(ax, 0x0ffff);
- if (flags.z())
- return /* (nevershown) */;
- data.word(kDelherex) = ax;
- ax = data.word(kOldpointery);
- data.word(kDelherey) = ax;
- cl = data.byte(kPointerxs);
- data.byte(kDelxs) = cl;
- ch = data.byte(kPointerys);
- data.byte(kDelys) = ch;
- ds = data.word(kBuffers);
- si = (0+(228*13)+32+60);
- di = data.word(kDelherex);
- bx = data.word(kDelherey);
- multiput();
-}
-
-void DreamGenContext::dumppointer() {
- STACK_CHECK;
- dumpblink();
- cl = data.byte(kDelxs);
- ch = data.byte(kDelys);
- di = data.word(kDelherex);
- bx = data.word(kDelherey);
- multidump();
- bx = data.word(kOldpointery);
- di = data.word(kOldpointerx);
- _cmp(di, data.word(kDelherex));
- if (!flags.z())
- goto difffound;
- _cmp(bx, data.word(kDelherey));
- if (flags.z())
- return /* (notboth) */;
-difffound:
- cl = data.byte(kPointerxs);
- ch = data.byte(kPointerys);
- multidump();
-}
-
void DreamGenContext::undertextline() {
STACK_CHECK;
di = data.word(kTextaddressx);
@@ -16830,152 +15270,6 @@ _tmp1:
multiget();
}
-void DreamGenContext::animpointer() {
- STACK_CHECK;
- _cmp(data.byte(kPointermode), 2);
- if (flags.z())
- goto combathand;
- _cmp(data.byte(kPointermode), 3);
- if (flags.z())
- goto mousehand;
- _cmp(data.word(kWatchingtime), 0);
- if (flags.z())
- goto notwatchpoint;
- data.byte(kPointerframe) = 11;
- return;
-notwatchpoint:
- data.byte(kPointerframe) = 0;
- _cmp(data.byte(kInmaparea), 0);
- if (flags.z())
- return /* (gothand) */;
- _cmp(data.byte(kPointerfirstpath), 0);
- if (flags.z())
- return /* (gothand) */;
- getflagunderp();
- _cmp(cl, 2);
- if (flags.c())
- return /* (gothand) */;
- _cmp(cl, 128);
- if (!flags.c())
- return /* (gothand) */;
- data.byte(kPointerframe) = 3;
- _test(cl, 4);
- if (!flags.z())
- return /* (gothand) */;
- data.byte(kPointerframe) = 4;
- _test(cl, 16);
- if (!flags.z())
- return /* (gothand) */;
- data.byte(kPointerframe) = 5;
- _test(cl, 2);
- if (!flags.z())
- return /* (gothand) */;
- data.byte(kPointerframe) = 6;
- _test(cl, 8);
- if (!flags.z())
- return /* (gothand) */;
- data.byte(kPointerframe) = 8;
- return;
-mousehand:
- _cmp(data.byte(kPointerspeed), 0);
- if (flags.z())
- goto rightspeed3;
- _dec(data.byte(kPointerspeed));
- goto finflashmouse;
-rightspeed3:
- data.byte(kPointerspeed) = 5;
- _inc(data.byte(kPointercount));
- _cmp(data.byte(kPointercount), 16);
- if (!flags.z())
- goto finflashmouse;
- data.byte(kPointercount) = 0;
-finflashmouse:
- al = data.byte(kPointercount);
- ah = 0;
- bx = offset_flashmousetab;
- _add(bx, ax);
- al = cs.byte(bx);
- data.byte(kPointerframe) = al;
- return;
-combathand:
- data.byte(kPointerframe) = 0;
- _cmp(data.byte(kReallocation), 14);
- if (!flags.z())
- return /* (notarrow) */;
- _cmp(data.byte(kCommandtype), 211);
- if (!flags.z())
- return /* (notarrow) */;
- data.byte(kPointerframe) = 5;
-}
-
-void DreamGenContext::readmouse() {
- STACK_CHECK;
- ax = data.word(kMousebutton);
- data.word(kOldbutton) = ax;
- ax = data.word(kMousex);
- data.word(kOldx) = ax;
- ax = data.word(kMousey);
- data.word(kOldy) = ax;
- mousecall();
- data.word(kMousex) = cx;
- data.word(kMousey) = dx;
- data.word(kMousebutton) = bx;
-}
-
-void DreamGenContext::readmouse1() {
- STACK_CHECK;
- ax = data.word(kMousex);
- data.word(kOldx) = ax;
- ax = data.word(kMousey);
- data.word(kOldy) = ax;
- mousecall();
- data.word(kMousex) = cx;
- data.word(kMousey) = dx;
- data.word(kMousebutton1) = bx;
-}
-
-void DreamGenContext::readmouse2() {
- STACK_CHECK;
- ax = data.word(kMousex);
- data.word(kOldx) = ax;
- ax = data.word(kMousey);
- data.word(kOldy) = ax;
- mousecall();
- data.word(kMousex) = cx;
- data.word(kMousey) = dx;
- data.word(kMousebutton2) = bx;
-}
-
-void DreamGenContext::readmouse3() {
- STACK_CHECK;
- ax = data.word(kMousex);
- data.word(kOldx) = ax;
- ax = data.word(kMousey);
- data.word(kOldy) = ax;
- mousecall();
- data.word(kMousex) = cx;
- data.word(kMousey) = dx;
- data.word(kMousebutton3) = bx;
-}
-
-void DreamGenContext::readmouse4() {
- STACK_CHECK;
- ax = data.word(kMousebutton);
- data.word(kOldbutton) = ax;
- ax = data.word(kMousex);
- data.word(kOldx) = ax;
- ax = data.word(kMousey);
- data.word(kOldy) = ax;
- mousecall();
- data.word(kMousex) = cx;
- data.word(kMousey) = dx;
- ax = data.word(kMousebutton1);
- _or(ax, data.word(kMousebutton2));
- _or(ax, data.word(kMousebutton3));
- _or(bx, ax);
- data.word(kMousebutton) = bx;
-}
-
void DreamGenContext::readkey() {
STACK_CHECK;
bx = data.word(kBufferout);
@@ -17025,16 +15319,6 @@ void DreamGenContext::randomnum2() {
ds = pop();
}
-void DreamGenContext::hangon() {
- STACK_CHECK;
-hangonloop:
- push(cx);
- vsync();
- cx = pop();
- if (--cx)
- goto hangonloop;
-}
-
void DreamGenContext::loadtraveltext() {
STACK_CHECK;
dx = 2234;
@@ -17449,571 +15733,1137 @@ void DreamGenContext::readsetdata() {
void DreamGenContext::__start() {
static const uint8 src[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x13, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x0000: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff,
+ //0x0010: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x0020: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x00, 0x00, 0x00, 0xff, 0x00,
+ //0x0030: .... .... .... ....
0xff, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x0d, 0x00, 0xb6,
+ //0x0040: ...0 .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x0050: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x0060: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x0070: .... ...h .&.. ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x0080: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x0090: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x00a0: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00,
+ //0x00b0: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x00c0: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x00d0: .... .... .... ....
0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x00e0: .. .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x00f0: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x0100: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x0110: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x0120: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x0130: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x0140: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x0150: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
+ //0x0160: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00,
+ //0x0170: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x0180: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x0190: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+ //0x01a0: .... .... .... ....
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ //0x01b0: .... .... .... ....
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ //0x01c0: .... .... .... ....
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x01d0: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x01e0: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x01f0: .... .... .... ....
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x0200: .... .... .... ....
0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2c, 0x00, 0x14, 0x00, 0x02, 0x00, 0x01, 0x01, 0x37,
+ //0x0210: .... ..., .... ...7
0x00, 0x00, 0x00, 0x32, 0x14, 0x00, 0x18, 0x16, 0x00, 0x4a, 0x00, 0x01, 0x00, 0x00, 0x18, 0x21,
+ //0x0220: ...2 .... .J.. ...!
0x0a, 0x4b, 0x00, 0x01, 0x00, 0x01, 0x01, 0x2c, 0x00, 0x1b, 0x00, 0x02, 0x00, 0x02, 0x01, 0x2c,
+ //0x0230: .K.. ..., .... ...,
0x00, 0x60, 0x00, 0x03, 0x00, 0x04, 0x01, 0x2c, 0x00, 0x76, 0x00, 0x02, 0x00, 0x05, 0x01, 0x2c,
+ //0x0240: .`.. ..., .v.. ...,
0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x16, 0x14, 0x35, 0x00, 0x03, 0x00, 0x00, 0x05, 0x16,
+ //0x0250: .... .... .5.. ....
0x14, 0x28, 0x00, 0x01, 0x00, 0x02, 0x05, 0x16, 0x14, 0x32, 0x00, 0x01, 0x00, 0x03, 0x02, 0x0b,
+ //0x0260: .(.. .... .2.. ....
0x0a, 0xc0, 0x00, 0x01, 0x00, 0x00, 0x02, 0x0b, 0x0a, 0xb6, 0x00, 0x02, 0x00, 0x01, 0x08, 0x0b,
+ //0x0270: .... .... .... ....
0x0a, 0x00, 0x00, 0x02, 0x00, 0x01, 0x17, 0x00, 0x32, 0x00, 0x00, 0x03, 0x00, 0x00, 0x1c, 0x0b,
+ //0x0280: .... .... 2... ....
0x14, 0xfa, 0x00, 0x04, 0x00, 0x00, 0x17, 0x00, 0x32, 0x2b, 0x00, 0x02, 0x00, 0x08, 0x17, 0x0b,
+ //0x0290: .... .... 2+.. ....
0x28, 0x82, 0x00, 0x02, 0x00, 0x01, 0x17, 0x16, 0x28, 0x7a, 0x00, 0x02, 0x00, 0x02, 0x17, 0x16,
+ //0x02a0: (... .... (z.. ....
0x28, 0x69, 0x00, 0x02, 0x00, 0x03, 0x17, 0x16, 0x28, 0x51, 0x00, 0x02, 0x00, 0x04, 0x17, 0x0b,
+ //0x02b0: (i.. .... (Q.. ....
0x28, 0x87, 0x00, 0x02, 0x00, 0x05, 0x17, 0x16, 0x28, 0x91, 0x00, 0x02, 0x00, 0x06, 0x04, 0x16,
+ //0x02c0: (... .... (... ....
0x1e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x2d, 0x16, 0x1e, 0xc8, 0x00, 0x00, 0x00, 0x14, 0x2d, 0x16,
+ //0x02d0: .... ..-. .... ..-.
0x1e, 0x27, 0x00, 0x02, 0x00, 0x00, 0x2d, 0x16, 0x1e, 0x19, 0x00, 0x02, 0x00, 0x00, 0x08, 0x16,
+ //0x02e0: .'.. ..-. .... ....
0x28, 0x20, 0x00, 0x02, 0x00, 0x00, 0x07, 0x0b, 0x14, 0x40, 0x00, 0x02, 0x00, 0x00, 0x16, 0x16,
+ //0x02f0: ( .. .... .@.. ....
0x14, 0x52, 0x00, 0x02, 0x00, 0x00, 0x1b, 0x0b, 0x1e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x14, 0x00,
+ //0x0300: .R.. .... .... ....
0x1e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0e, 0x21, 0x28, 0x15, 0x00, 0x01, 0x00, 0x00, 0x1d, 0x0b,
+ //0x0310: .... ...! (... ....
0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x16, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x19, 0x00,
+ //0x0320: .... .... .... ....
0x32, 0x04, 0x00, 0x02, 0x00, 0x00, 0x32, 0x16, 0x1e, 0x79, 0x00, 0x02, 0x00, 0x00, 0x32, 0x16,
+ //0x0330: 2... ..2. .y.. ..2.
0x1e, 0x00, 0x00, 0x14, 0x00, 0x00, 0x34, 0x16, 0x1e, 0xc0, 0x00, 0x02, 0x00, 0x00, 0x34, 0x16,
+ //0x0340: .... ..4. .... ..4.
0x1e, 0xe9, 0x00, 0x02, 0x00, 0x00, 0x32, 0x16, 0x28, 0x68, 0x00, 0x37, 0x00, 0x00, 0x35, 0x21,
+ //0x0350: .... ..2. (h.7 ..5!
0x00, 0x63, 0x00, 0x02, 0x00, 0x00, 0x32, 0x16, 0x28, 0x00, 0x00, 0x03, 0x00, 0x00, 0x32, 0x16,
+ //0x0360: .c.. ..2. (... ..2.
0x1e, 0xa2, 0x00, 0x02, 0x00, 0x00, 0x34, 0x16, 0x1e, 0x39, 0x00, 0x02, 0x00, 0x00, 0x34, 0x16,
+ //0x0370: .... ..4. .9.. ..4.
0x1e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x36, 0x00, 0x00, 0x48, 0x00, 0x03, 0x00, 0x00, 0x37, 0x2c,
+ //0x0380: .... ..6. .H.. ..7,
0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x0e, 0x16,
+ //0x0390: .... .... .... ....
0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x0e, 0x16, 0x00, 0x2c, 0x01, 0x01, 0x00, 0x00, 0x0a, 0x16,
+ //0x03a0: .... .... .,.. ....
0x1e, 0xae, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x16, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0b, 0x0b,
+ //0x03b0: .... .... .... ....
0x14, 0x00, 0x00, 0x32, 0x14, 0x00, 0x0b, 0x0b, 0x1e, 0x00, 0x00, 0x32, 0x14, 0x00, 0x0b, 0x16,
+ //0x03c0: ...2 .... ...2 ....
0x14, 0x00, 0x00, 0x32, 0x14, 0x00, 0x0e, 0x21, 0x28, 0x00, 0x00, 0x32, 0x14, 0x00, 0xff, 0x7c,
+ //0x03d0: ...2 ...! (..2 ...|
0xc0, 0x80, 0xc0, 0x1c, 0xc0, 0x20, 0xc0, 0x00, 0xc1, 0x10, 0xc0, 0x18, 0xc0, 0xf4, 0xc0, 0x0c,
+ //0x03e0: .... . .. .... ....
0xc0, 0x24, 0xc0, 0x28, 0xc0, 0x2c, 0xc0, 0x30, 0xc0, 0x54, 0xc0, 0x78, 0xc0, 0x50, 0xc0, 0x74,
+ //0x03f0: .$.( .,.0 .T.x .P.t
0xc0, 0x34, 0xc0, 0x38, 0xc0, 0x40, 0xc0, 0x44, 0xc0, 0x48, 0xc0, 0x3c, 0xc0, 0x14, 0xc0, 0x88,
+ //0x0400: .4.8 .@.D .H.< ....
0xc0, 0x8c, 0xc0, 0x90, 0xc0, 0x70, 0xc0, 0xfc, 0xc0, 0x6c, 0xc0, 0x58, 0xc0, 0x68, 0xc0, 0x04,
+ //0x0410: .... .p.. .l.X .h..
0xc1, 0x64, 0xc0, 0x60, 0xc0, 0x5c, 0xc0, 0x94, 0xc0, 0x04, 0xc0, 0xa4, 0xc0, 0x9c, 0xc0, 0xa0,
+ //0x0420: .d.` .... .... ....
0xc0, 0xa8, 0xc0, 0xac, 0xc0, 0x98, 0xc0, 0xb0, 0xc0, 0xb4, 0xc0, 0xc8, 0xc0, 0xcc, 0xc0, 0xd4,
+ //0x0430: .... .... .... ....
0xc0, 0xdc, 0xc0, 0xd8, 0xc0, 0x00, 0xc0, 0x08, 0xc0, 0x84, 0xc0, 0x84, 0xc0, 0x84, 0xc0, 0x84,
+ //0x0440: .... .... .... ....
0xc0, 0x00, 0x3c, 0x21, 0x47, 0x0b, 0x52, 0x16, 0x5d, 0x01, 0x2c, 0x0a, 0x10, 0x04, 0x0b, 0x1e,
+ //0x0450: ..<! G.R. ].,. ....
0x0e, 0x04, 0x16, 0x1e, 0x0e, 0x03, 0x21, 0x0a, 0x0e, 0x0a, 0x21, 0x1e, 0x0e, 0x0a, 0x16, 0x1e,
+ //0x0460: .... ..!. ..!. ....
0x18, 0x09, 0x16, 0x0a, 0x0e, 0x02, 0x21, 0x00, 0x0e, 0x02, 0x16, 0x00, 0x0e, 0x06, 0x0b, 0x1e,
+ //0x0470: .... ..!. .... ....
0x0e, 0x07, 0x0b, 0x14, 0x12, 0x07, 0x00, 0x14, 0x12, 0x07, 0x00, 0x1e, 0x12, 0x37, 0x2c, 0x00,
+ //0x0480: .... .... .... .7,.
0x0e, 0x05, 0x16, 0x1e, 0x0e, 0x08, 0x00, 0x0a, 0x12, 0x08, 0x0b, 0x0a, 0x12, 0x08, 0x16, 0x0a,
+ //0x0490: .... .... .... ....
0x12, 0x08, 0x21, 0x0a, 0x12, 0x08, 0x21, 0x14, 0x12, 0x08, 0x21, 0x1e, 0x12, 0x08, 0x21, 0x28,
+ //0x04a0: ..!. ..!. ..!. ..!(
0x12, 0x08, 0x16, 0x28, 0x12, 0x08, 0x0b, 0x28, 0x12, 0x15, 0x2c, 0x14, 0x12, 0xff, 0x2e, 0x05,
+ //0x04b0: ...( ...( ..,. ....
0x2f, 0x05, 0x33, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x46, 0x05, 0x2e, 0x05, 0x4d, 0x05,
+ //0x04c0: /.3. .... ..F. ..M.
0x5d, 0x05, 0x64, 0x05, 0x68, 0x05, 0x6c, 0x05, 0x70, 0x05, 0x7d, 0x05, 0x2e, 0x05, 0x2e, 0x05,
+ //0x04d0: ].d. h.l. p.}. ....
0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x9f, 0x05, 0x2e, 0x05, 0xb5, 0x05, 0xd4, 0x05, 0x2e, 0x05,
+ //0x04e0: .... .... .... ....
0xe1, 0x05, 0xf7, 0x05, 0x0d, 0x06, 0x26, 0x06, 0x39, 0x06, 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05,
+ //0x04f0: .... ..&. 9... ....
0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05,
+ //0x0500: .... .... .... ....
0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x49, 0x06, 0x50, 0x06, 0x75, 0x06, 0x2e, 0x05,
+ //0x0510: .... .... I.P. u...
0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x82, 0x06, 0x86, 0x06, 0x2e, 0x05, 0x8d, 0x06, 0xff, 0x0f,
+ //0x0520: .... .... .... ....
0x01, 0x01, 0xff, 0x0c, 0x05, 0x00, 0x0d, 0x15, 0x00, 0x0f, 0x23, 0x00, 0x11, 0x32, 0x00, 0x12,
+ //0x0530: .... .... ..#. .2..
0x67, 0x00, 0x13, 0x6c, 0x00, 0xff, 0x12, 0x13, 0x00, 0x13, 0x17, 0x00, 0xff, 0x0c, 0x33, 0x00,
+ //0x0540: g..l .... .... ..3.
0x0d, 0x35, 0x00, 0x0e, 0x0e, 0x00, 0x0f, 0x14, 0x00, 0x00, 0x4e, 0x00, 0xff, 0x0c, 0x77, 0x00,
+ //0x0550: .5.. .... ..N. ..w.
0x0c, 0x91, 0x00, 0xff, 0x0d, 0x10, 0x00, 0xff, 0x0d, 0x14, 0x00, 0xff, 0x0e, 0x10, 0x00, 0xff,
+ //0x0560: .... .... .... ....
0x0f, 0x04, 0x00, 0x10, 0x08, 0x00, 0x11, 0x86, 0x00, 0x12, 0x99, 0x00, 0xff, 0x0d, 0x6c, 0x00,
+ //0x0570: .... .... .... ..l.
0x0f, 0x46, 0x01, 0x0f, 0x4b, 0x01, 0x0f, 0x50, 0x01, 0x0f, 0x56, 0x01, 0x0f, 0x5c, 0x01, 0x0f,
+ //0x0580: .F.. K..P ..V. ....
0x62, 0x01, 0x12, 0x9f, 0x00, 0x12, 0xb2, 0x00, 0x93, 0xd9, 0x00, 0x54, 0xe4, 0x00, 0xff, 0x0d,
+ //0x0590: b... .... ...T ....
0x14, 0x00, 0x0d, 0x15, 0x00, 0x0f, 0x22, 0x00, 0x0d, 0x34, 0x00, 0x0d, 0x37, 0x00, 0x19, 0x39,
+ //0x05a0: .... ..". .4.. 7..9
0x00, 0x15, 0x49, 0x00, 0xff, 0x0d, 0xc4, 0x00, 0x0d, 0xea, 0x00, 0x0d, 0x9c, 0x00, 0x0e, 0x81,
+ //0x05b0: ..I. .... .... ....
0x00, 0x0d, 0x7c, 0x00, 0x0f, 0xa2, 0x00, 0x0f, 0xc8, 0x00, 0x0f, 0xef, 0x00, 0x11, 0x63, 0x00,
+ //0x05c0: ..|. .... .... ..c.
0x0c, 0x34, 0x00, 0xff, 0x0f, 0x38, 0x00, 0x10, 0x40, 0x00, 0x13, 0x16, 0x00, 0x14, 0x21, 0x00,
+ //0x05d0: .4.. .8.. @... ..!.
0xff, 0x14, 0x0b, 0x00, 0x14, 0x0f, 0x00, 0x0f, 0x1c, 0x00, 0x0d, 0x50, 0x00, 0x15, 0x52, 0x00,
+ //0x05e0: .... .... ...P ..R.
0x93, 0x57, 0x00, 0x57, 0x80, 0x00, 0xff, 0x0c, 0x0d, 0x00, 0x0e, 0x27, 0x00, 0x0c, 0x43, 0x00,
+ //0x05f0: .W.W .... ...' ..C.
0x0c, 0x4b, 0x00, 0x0c, 0x53, 0x00, 0x0c, 0x5b, 0x00, 0x0f, 0x66, 0x00, 0xff, 0x16, 0x24, 0x00,
+ //0x0600: .K.. S..[ ..f. ..$.
0x0d, 0x7d, 0x00, 0x12, 0x58, 0x00, 0x0f, 0x6b, 0x00, 0x0e, 0x7f, 0x00, 0x0e, 0x9a, 0x00, 0x93,
+ //0x0610: .}.. X..k .... ....
0xaa, 0x00, 0x57, 0xe8, 0x00, 0xff, 0x15, 0x10, 0x00, 0x15, 0x48, 0x00, 0x15, 0xcd, 0x00, 0x16,
+ //0x0620: ..W. .... ..H. ....
0x3f, 0x00, 0x97, 0x63, 0x00, 0x58, 0x9e, 0x00, 0xff, 0x0d, 0x15, 0x00, 0x0e, 0x18, 0x00, 0x93,
+ //0x0630: ?..c .X.. .... ....
0x32, 0x00, 0x57, 0x4b, 0x00, 0x18, 0x80, 0x00, 0xff, 0x53, 0x2e, 0x00, 0x10, 0xa7, 0x00, 0xff,
+ //0x0640: 2.WK .... .S.. ....
0x10, 0x13, 0x00, 0x0e, 0x24, 0x00, 0x10, 0x32, 0x00, 0x0e, 0x41, 0x00, 0x10, 0x51, 0x00, 0x0e,
+ //0x0650: .... $..2 ..A. .Q..
0x60, 0x00, 0x10, 0x72, 0x00, 0x0e, 0x81, 0x00, 0x10, 0x93, 0x00, 0x0e, 0xa2, 0x00, 0x10, 0xb1,
+ //0x0660: `..r .... .... ....
0x00, 0x0e, 0xbf, 0x00, 0xff, 0x0d, 0x30, 0x00, 0x0e, 0x29, 0x00, 0x0f, 0x4e, 0x00, 0x10, 0x5c,
+ //0x0670: .... ..0. .).. N...
0x00, 0xff, 0x10, 0x73, 0x00, 0xff, 0x15, 0x67, 0x00, 0x14, 0xc7, 0x00, 0xff, 0x11, 0x35, 0x00,
+ //0x0680: ...s ...g .... ..5.
0x11, 0x36, 0x00, 0x11, 0x37, 0x00, 0x11, 0x38, 0x00, 0x11, 0x39, 0x00, 0x11, 0x3a, 0x00, 0x11,
+ //0x0690: .6.. 7..8 ..9. .:..
0x3b, 0x00, 0x11, 0x3d, 0x00, 0x11, 0x3f, 0x00, 0x11, 0x40, 0x00, 0x11, 0x41, 0x00, 0xff, 0x9c,
+ //0x06a0: ;..= ..?. .@.. A...
0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9e, 0x9c, 0x9a, 0x9f, 0x9a, 0x9c,
+ //0x06b0: .... .... .... ....
0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9e, 0x9c, 0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d,
+ //0x06c0: .... .... .... ....
0x99, 0x9f, 0x9e, 0x9c, 0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9e, 0x9c,
+ //0x06d0: .... .... .... ....
0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9e, 0x9c, 0x9a, 0x9f, 0x9a, 0x9c,
+ //0x06e0: .... .... .... ....
0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9e, 0x9c, 0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d,
+ //0x06f0: .... .... .... ....
0x99, 0x9f, 0x9e, 0x9c, 0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9e, 0x9c,
+ //0x0700: .... .... .... ....
0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9c, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x0710: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x53, 0x30, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42,
+ //0x0720: WEB. S00. DREA MWEB
0x2e, 0x53, 0x30, 0x32, 0x00, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x2e, 0x44, 0x41, 0x54,
+ //0x0730: .S02 .INS TALL .DAT
0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x43, 0x30, 0x30, 0x00, 0x44, 0x52,
+ //0x0740: .DRE AMWE B.C0 0.DR
0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x43, 0x30, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x0750: EAMW EB.C 01.D REAM
0x57, 0x45, 0x42, 0x2e, 0x43, 0x30, 0x32, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42,
+ //0x0760: WEB. C02. DREA MWEB
0x2e, 0x56, 0x30, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x56, 0x39,
+ //0x0770: .V00 .DRE AMWE B.V9
0x39, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x30, 0x00, 0x44,
+ //0x0780: 9.DR EAMW EB.G 00.D
0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41,
+ //0x0790: REAM WEB. G01. DREA
0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x32, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45,
+ //0x07a0: MWEB .G02 .DRE AMWE
0x42, 0x2e, 0x47, 0x30, 0x38, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47,
+ //0x07b0: B.G0 8.DR EAMW EB.G
0x30, 0x33, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x37, 0x00,
+ //0x07c0: 03.D REAM WEB. G07.
0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x34, 0x00, 0x44, 0x52, 0x45,
+ //0x07d0: DREA MWEB .G04 .DRE
0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x35, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57,
+ //0x07e0: AMWE B.G0 5.DR EAMW
0x45, 0x42, 0x2e, 0x47, 0x30, 0x36, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e,
+ //0x07f0: EB.G 06.D REAM WEB.
0x47, 0x31, 0x34, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x30, 0x31,
+ //0x0800: G14. DREA MWEB .T01
0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x30, 0x32, 0x00, 0x44, 0x52,
+ //0x0810: .DRE AMWE B.T0 2.DR
0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x31, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x0820: EAMW EB.T 10.D REAM
0x57, 0x45, 0x42, 0x2e, 0x54, 0x31, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42,
+ //0x0830: WEB. T11. DREA MWEB
0x2e, 0x54, 0x31, 0x32, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x31,
+ //0x0840: .T12 .DRE AMWE B.T1
0x33, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x32, 0x30, 0x00, 0x44,
+ //0x0850: 3.DR EAMW EB.T 20.D
0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x32, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41,
+ //0x0860: REAM WEB. T21. DREA
0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x32, 0x32, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45,
+ //0x0870: MWEB .T22 .DRE AMWE
0x42, 0x2e, 0x54, 0x32, 0x33, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54,
+ //0x0880: B.T2 3.DR EAMW EB.T
0x32, 0x34, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x35, 0x30, 0x00,
+ //0x0890: 24.D REAM WEB. T50.
0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x35, 0x31, 0x00, 0x44, 0x52, 0x45,
+ //0x08a0: DREA MWEB .T51 .DRE
0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x38, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57,
+ //0x08b0: AMWE B.T8 0.DR EAMW
0x45, 0x42, 0x2e, 0x54, 0x38, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e,
+ //0x08c0: EB.T 81.D REAM WEB.
0x54, 0x38, 0x32, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x38, 0x33,
+ //0x08d0: T82. DREA MWEB .T83
0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x38, 0x34, 0x00, 0x44, 0x52,
+ //0x08e0: .DRE AMWE B.T8 4.DR
0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x56, 0x4f, 0x4c, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x08f0: EAMW EB.V OL.D REAM
0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x39, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42,
+ //0x0900: WEB. G09. DREA MWEB
0x2e, 0x47, 0x31, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x31,
+ //0x0910: .G10 .DRE AMWE B.G1
0x31, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x31, 0x32, 0x00, 0x44,
+ //0x0920: 1.DR EAMW EB.G 12.D
0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x31, 0x33, 0x00, 0x44, 0x52, 0x45, 0x41,
+ //0x0930: REAM WEB. G13. DREA
0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x31, 0x35, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45,
+ //0x0940: MWEB .G15 .DRE AMWE
0x42, 0x2e, 0x49, 0x30, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x49,
+ //0x0950: B.I0 0.DR EAMW EB.I
0x30, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x49, 0x30, 0x32, 0x00,
+ //0x0960: 01.D REAM WEB. I02.
0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x49, 0x30, 0x33, 0x00, 0x44, 0x52, 0x45,
+ //0x0970: DREA MWEB .I03 .DRE
0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x49, 0x30, 0x34, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57,
+ //0x0980: AMWE B.I0 4.DR EAMW
0x45, 0x42, 0x2e, 0x49, 0x30, 0x35, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e,
+ //0x0990: EB.I 05.D REAM WEB.
0x49, 0x30, 0x36, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x49, 0x30, 0x37,
+ //0x09a0: I06. DREA MWEB .I07
0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x50, 0x41, 0x4c, 0x00, 0x11, 0x01,
+ //0x09b0: .DRE AMWE B.PA L...
0x40, 0x01, 0x9d, 0x00, 0xc6, 0x00, 0x44, 0xc3, 0x04, 0x01, 0x2c, 0x01, 0x00, 0x00, 0x2c, 0x00,
+ //0x09c0: @... ..D. ..,. ..,.
0x80, 0xc5, 0xd2, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x2c, 0x00, 0xdc, 0xc3, 0x90, 0x00, 0xb0, 0x00,
+ //0x09d0: .... .... ,... ....
0x40, 0x00, 0x60, 0x00, 0x80, 0xc3, 0x00, 0x00, 0x32, 0x00, 0x32, 0x00, 0xc8, 0x00, 0x84, 0xc3,
+ //0x09e0: @.`. .... 2.2. ....
0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0x11, 0x01, 0x40, 0x01,
+ //0x09f0: ..@. .... .... ..@.
0x9d, 0x00, 0xc6, 0x00, 0x44, 0xc3, 0xff, 0x00, 0x26, 0x01, 0x00, 0x00, 0x18, 0x00, 0xc8, 0xc3,
+ //0x0a00: .... D... &... ....
0xf7, 0x00, 0x2d, 0x01, 0x28, 0x00, 0x38, 0x00, 0x48, 0xc3, 0x50, 0x00, 0x00, 0x01, 0x9e, 0x00,
+ //0x0a10: ..-. (.8. H.P. ....
0xca, 0x00, 0xe0, 0xc3, 0x50, 0x00, 0x2c, 0x01, 0x3a, 0x00, 0x92, 0x00, 0x98, 0xc3, 0x00, 0x00,
+ //0x0a20: .... P.,. :... ....
0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0x11, 0x01, 0x40, 0x01, 0x9d, 0x00,
+ //0x0a30: @... .... .... @...
0xc6, 0x00, 0x44, 0xc3, 0xf7, 0x00, 0x2d, 0x01, 0x28, 0x00, 0x38, 0x00, 0x48, 0xc3, 0x50, 0x00,
+ //0x0a40: ..D. ..-. (.8. H.P.
0x2c, 0x01, 0x3a, 0x00, 0x92, 0x00, 0xbc, 0xc6, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00,
+ //0x0a50: ,.:. .... ..@. ....
0xa0, 0xca, 0xff, 0xff, 0x11, 0x01, 0x40, 0x01, 0x9d, 0x00, 0xc6, 0x00, 0x7c, 0xc4, 0xf0, 0x00,
+ //0x0a60: .... ..@. .... |...
0x22, 0x01, 0x02, 0x00, 0x2c, 0x00, 0x94, 0xc4, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00,
+ //0x0a70: "... ,... ..@. ....
0xa0, 0xca, 0xff, 0xff, 0x11, 0x01, 0x40, 0x01, 0x9d, 0x00, 0xc6, 0x00, 0x7c, 0xc4, 0x00, 0x00,
+ //0x0a80: .... ..@. .... |...
0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0xee, 0x00, 0x02, 0x01, 0x04, 0x00,
+ //0x0a90: @... .... .... ....
0x2c, 0x00, 0xc8, 0xc4, 0x68, 0x00, 0x7c, 0x00, 0x04, 0x00, 0x2c, 0x00, 0xcc, 0xc4, 0x18, 0x01,
+ //0x0aa0: ,... h.|. ..,. ....
0x34, 0x01, 0x04, 0x00, 0x2c, 0x00, 0xb0, 0xc4, 0x68, 0x00, 0xd8, 0x00, 0x8a, 0x00, 0xc0, 0x00,
+ //0x0ab0: 4... ,... h... ....
0xd0, 0xc4, 0x11, 0x01, 0x40, 0x01, 0x9d, 0x00, 0xc6, 0x00, 0x7c, 0xc4, 0x00, 0x00, 0x40, 0x01,
+ //0x0ac0: .... @... ..|. ..@.
0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0x45, 0x58, 0x49, 0x54, 0x20, 0x20, 0x20, 0x20,
+ //0x0ad0: .... .... EXIT
0x20, 0x20, 0x48, 0x45, 0x4c, 0x50, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x49, 0x53, 0x54,
+ //0x0ae0: HE LP LIST
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x52, 0x45, 0x41, 0x44, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ //0x0af0: RE AD
0x4c, 0x4f, 0x47, 0x4f, 0x4e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4b, 0x45, 0x59, 0x53, 0x20, 0x20,
+ //0x0b00: LOGO N KE YS
0x20, 0x20, 0x20, 0x20, 0x01, 0x00, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x20, 0x20, 0x20,
+ //0x0b10: ..PU BLIC
0x20, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00,
+ //0x0b20: PU BLIC ...
0x42, 0x4c, 0x41, 0x43, 0x4b, 0x44, 0x52, 0x41, 0x47, 0x4f, 0x4e, 0x20, 0x52, 0x59, 0x41, 0x4e,
+ //0x0b30: BLAC KDRA GON RYAN
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x48, 0x45, 0x4e, 0x44, 0x52, 0x49,
+ //0x0b40: . ..HE NDRI
0x58, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x4f, 0x55, 0x49, 0x53, 0x20, 0x20, 0x20, 0x20, 0x20,
+ //0x0b50: X LO UIS
0x20, 0x00, 0x00, 0x00, 0x53, 0x45, 0x50, 0x54, 0x49, 0x4d, 0x55, 0x53, 0x20, 0x20, 0x20, 0x20,
+ //0x0b60: ... SEPT IMUS
0x42, 0x45, 0x43, 0x4b, 0x45, 0x54, 0x54, 0x20, 0x20, 0x20, 0x20, 0x00, 0xff, 0xff, 0x20, 0x20,
+ //0x0b70: BECK ETT . ..
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x22, 0x52, 0x4f, 0x4f,
+ //0x0b80: . "ROO
0x54, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20,
+ //0x0b90: T ."
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x4e, 0x45, 0x54, 0x57, 0xe8, 0xc4, 0x45, 0x4c,
+ //0x0ba0: . NETW ..EL
0x56, 0x41, 0x8c, 0xc6, 0x45, 0x4c, 0x56, 0x42, 0x9c, 0xc6, 0x45, 0x4c, 0x56, 0x43, 0x94, 0xc6,
+ //0x0bb0: VA.. ELVB ..EL VC..
0x45, 0x4c, 0x56, 0x45, 0x98, 0xc6, 0x45, 0x4c, 0x56, 0x46, 0xa0, 0xc6, 0x43, 0x47, 0x41, 0x54,
+ //0x0bc0: ELVE ..EL VF.. CGAT
0x30, 0xc7, 0x52, 0x45, 0x4d, 0x4f, 0xa8, 0xc6, 0x42, 0x55, 0x54, 0x41, 0x3c, 0xc7, 0x43, 0x42,
+ //0x0bd0: 0.RE MO.. BUTA <.CB
0x4f, 0x58, 0x44, 0xc7, 0x4c, 0x49, 0x54, 0x45, 0x5c, 0xc6, 0x50, 0x4c, 0x41, 0x54, 0x40, 0xc7,
+ //0x0be0: OXD. LITE ..PL AT@.
0x4c, 0x49, 0x46, 0x54, 0x7c, 0xc6, 0x57, 0x49, 0x52, 0x45, 0x84, 0xc6, 0x48, 0x4e, 0x44, 0x4c,
+ //0x0bf0: LIFT |.WI RE.. HNDL
0x88, 0xc6, 0x48, 0x41, 0x43, 0x48, 0x80, 0xc6, 0x44, 0x4f, 0x4f, 0x52, 0xb4, 0xc6, 0x43, 0x53,
+ //0x0c00: ..HA CH.. DOOR ..CS
0x48, 0x52, 0x70, 0xc6, 0x47, 0x55, 0x4e, 0x41, 0x34, 0xc7, 0x43, 0x52, 0x41, 0x41, 0x64, 0xc6,
+ //0x0c10: HRp. GUNA 4.CR AAd.
0x43, 0x52, 0x42, 0x42, 0x68, 0xc6, 0x43, 0x52, 0x43, 0x43, 0x6c, 0xc6, 0x53, 0x45, 0x41, 0x54,
+ //0x0c20: CRBB h.CR CCl. SEAT
0xf8, 0xc5, 0x4d, 0x45, 0x4e, 0x55, 0x98, 0xc7, 0x43, 0x4f, 0x4f, 0x4b, 0xac, 0xc6, 0x45, 0x4c,
+ //0x0c30: ..ME NU.. COOK ..EL
0x43, 0x41, 0x4c, 0xc6, 0x45, 0x44, 0x43, 0x41, 0x50, 0xc6, 0x44, 0x44, 0x43, 0x41, 0x54, 0xc6,
+ //0x0c40: CAL. EDCA P.DD CAT.
0x41, 0x4c, 0x54, 0x52, 0x04, 0xc6, 0x4c, 0x4f, 0x4b, 0x41, 0x3c, 0xc6, 0x4c, 0x4f, 0x4b, 0x42,
+ //0x0c50: ALTR ..LO KA<. LOKB
0x40, 0xc6, 0x45, 0x4e, 0x54, 0x41, 0x10, 0xc6, 0x45, 0x4e, 0x54, 0x42, 0x24, 0xc6, 0x45, 0x4e,
+ //0x0c60: @.EN TA.. ENTB $.EN
0x54, 0x45, 0x28, 0xc6, 0x45, 0x4e, 0x54, 0x43, 0x18, 0xc6, 0x45, 0x4e, 0x54, 0x44, 0x2c, 0xc6,
+ //0x0c70: TE(. ENTC ..EN TD,.
0x45, 0x4e, 0x54, 0x48, 0x30, 0xc6, 0x57, 0x57, 0x41, 0x54, 0xf0, 0xc5, 0x50, 0x4f, 0x4f, 0x4c,
+ //0x0c80: ENTH 0.WW AT.. POOL
0x58, 0xc6, 0x57, 0x53, 0x48, 0x44, 0xf4, 0xc5, 0x47, 0x52, 0x41, 0x46, 0x44, 0xc6, 0x54, 0x52,
+ //0x0c90: X.WS HD.. GRAF D.TR
0x41, 0x50, 0x48, 0xc6, 0x43, 0x44, 0x50, 0x45, 0x28, 0xc7, 0x44, 0x4c, 0x4f, 0x4b, 0x08, 0xc6,
+ //0x0ca0: APH. CDPE (.DL OK..
0x48, 0x4f, 0x4c, 0x45, 0x00, 0xc6, 0x44, 0x52, 0x59, 0x52, 0x0c, 0xc6, 0x48, 0x4f, 0x4c, 0x59,
+ //0x0cb0: HOLE ..DR YR.. HOLY
0xfc, 0xc5, 0x57, 0x41, 0x4c, 0x4c, 0x2c, 0xc7, 0x42, 0x4f, 0x4f, 0x4b, 0x08, 0xc8, 0x41, 0x58,
+ //0x0cc0: ..WA LL,. BOOK ..AX
0x45, 0x44, 0xb0, 0xc6, 0x53, 0x48, 0x4c, 0x44, 0x38, 0xc7, 0x42, 0x43, 0x4e, 0x59, 0xe8, 0xc5,
+ //0x0cd0: ED.. SHLD 8.BC NY..
0x4c, 0x49, 0x44, 0x43, 0xe4, 0xc5, 0x4c, 0x49, 0x44, 0x55, 0xe0, 0xc5, 0x4c, 0x49, 0x44, 0x4f,
+ //0x0ce0: LIDC ..LI DU.. LIDO
0xec, 0xc5, 0x50, 0x49, 0x50, 0x45, 0xa8, 0xc5, 0x42, 0x41, 0x4c, 0x43, 0x20, 0xc6, 0x57, 0x49,
+ //0x0cf0: ..PI PE.. BALC .WI
0x4e, 0x44, 0x1c, 0xc6, 0x50, 0x41, 0x50, 0x52, 0xb4, 0xc7, 0x55, 0x57, 0x54, 0x41, 0xa0, 0xc5,
+ //0x0d00: ND.. PAPR ..UW TA..
0x55, 0x57, 0x54, 0x42, 0xa0, 0xc5, 0x53, 0x54, 0x41, 0x54, 0xd8, 0xc7, 0x54, 0x4c, 0x49, 0x44,
+ //0x0d10: UWTB ..ST AT.. TLID
0x9c, 0xc5, 0x53, 0x4c, 0x41, 0x42, 0xd8, 0xc5, 0x43, 0x41, 0x52, 0x54, 0xdc, 0xc5, 0x46, 0x43,
+ //0x0d20: ..SL AB.. CART ..FC
0x41, 0x52, 0xac, 0xc5, 0x53, 0x4c, 0x42, 0x41, 0xc0, 0xc5, 0x53, 0x4c, 0x42, 0x42, 0xc4, 0xc5,
+ //0x0d30: AR.. SLBA ..SL BB..
0x53, 0x4c, 0x42, 0x43, 0xcc, 0xc5, 0x53, 0x4c, 0x42, 0x44, 0xc8, 0xc5, 0x53, 0x4c, 0x42, 0x45,
+ //0x0d40: SLBC ..SL BD.. SLBE
0xd0, 0xc5, 0x53, 0x4c, 0x42, 0x46, 0xd4, 0xc5, 0x50, 0x4c, 0x49, 0x4e, 0xb0, 0xc5, 0x4c, 0x41,
+ //0x0d50: ..SL BF.. PLIN ..LA
0x44, 0x44, 0xb8, 0xc5, 0x4c, 0x41, 0x44, 0x42, 0xbc, 0xc5, 0x47, 0x55, 0x4d, 0x41, 0xb4, 0xc5,
+ //0x0d60: DD.. LADB ..GU MA..
0x53, 0x51, 0x45, 0x45, 0x88, 0xc5, 0x54, 0x41, 0x50, 0x50, 0x8c, 0xc5, 0x47, 0x55, 0x49, 0x54,
+ //0x0d70: SQEE ..TA PP.. GUIT
0x90, 0xc5, 0x43, 0x4f, 0x4e, 0x54, 0x94, 0xc5, 0x42, 0x45, 0x4c, 0x4c, 0x98, 0xc5, 0x8c, 0x8c,
+ //0x0d80: ..CO NT.. BELL ....
0x8c, 0x8c, 0x30, 0x30, 0x30, 0x30, 0x00, 0x30, 0x30, 0x00, 0x9d, 0x00, 0xb2, 0x00, 0x51, 0x00,
+ //0x0d90: ..00 00.0 0... ..Q.
0x5e, 0x00, 0x58, 0xc7, 0xb3, 0x00, 0xc8, 0x00, 0x51, 0x00, 0x5e, 0x00, 0x5c, 0xc7, 0xc9, 0x00,
+ //0x0da0: ^.X. .... Q.^. ....
0xde, 0x00, 0x51, 0x00, 0x5e, 0x00, 0x60, 0xc7, 0x9d, 0x00, 0xb2, 0x00, 0x5f, 0x00, 0x70, 0x00,
+ //0x0db0: ..Q. ^.`. .... _.p.
0x64, 0xc7, 0xb3, 0x00, 0xc8, 0x00, 0x5f, 0x00, 0x70, 0x00, 0x68, 0xc7, 0xc9, 0x00, 0xde, 0x00,
+ //0x0dc0: d... .._. p.h. ....
0x5f, 0x00, 0x70, 0x00, 0x6c, 0xc7, 0x9d, 0x00, 0xb2, 0x00, 0x71, 0x00, 0x82, 0x00, 0x70, 0xc7,
+ //0x0dd0: _.p. l... ..q. ..p.
0xb3, 0x00, 0xc8, 0x00, 0x71, 0x00, 0x82, 0x00, 0x74, 0xc7, 0xc9, 0x00, 0xde, 0x00, 0x71, 0x00,
+ //0x0de0: .... q... t... ..q.
0x82, 0x00, 0x78, 0xc7, 0x9d, 0x00, 0xb2, 0x00, 0x83, 0x00, 0x91, 0x00, 0x7c, 0xc7, 0xb3, 0x00,
+ //0x0df0: ..x. .... .... |...
0xde, 0x00, 0x83, 0x00, 0x91, 0x00, 0x80, 0xc7, 0xdc, 0x00, 0xea, 0x00, 0x98, 0x00, 0xa6, 0x00,
+ //0x0e00: .... .... .... ....
0x50, 0xc7, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0xae, 0x00,
+ //0x0e10: P... @... .... ....
0xbc, 0x00, 0x84, 0x00, 0x94, 0x00, 0x50, 0xc7, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00,
+ //0x0e20: .... ..P. ..@. ....
0xa0, 0xca, 0xff, 0xff, 0x18, 0x01, 0x40, 0x01, 0xa0, 0x00, 0xc8, 0x00, 0x50, 0xc7, 0x8f, 0x00,
+ //0x0e30: .... ..@. .... P...
0x2c, 0x01, 0x06, 0x00, 0xc2, 0x00, 0xb8, 0xc7, 0x00, 0x00, 0x8f, 0x00, 0x06, 0x00, 0xc2, 0x00,
+ //0x0e40: ,... .... .... ....
0xc0, 0xc7, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0x68, 0x00,
+ //0x0e50: .... @... .... ..h.
0x80, 0x00, 0x3a, 0x00, 0x48, 0x00, 0xdc, 0xc7, 0x40, 0x00, 0x74, 0x00, 0x4c, 0x00, 0x6a, 0x00,
+ //0x0e60: ..:. H... @.t. L.j.
0xe0, 0xc7, 0x74, 0x00, 0xa8, 0x00, 0x4c, 0x00, 0x6a, 0x00, 0xe4, 0xc7, 0x40, 0x00, 0x74, 0x00,
+ //0x0e70: ..t. ..L. j... @.t.
0x6a, 0x00, 0x88, 0x00, 0xe8, 0xc7, 0x74, 0x00, 0xa8, 0x00, 0x6a, 0x00, 0x88, 0x00, 0xec, 0xc7,
+ //0x0e80: j... ..t. ..j. ....
0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0xba, 0x00, 0xca, 0x00,
+ //0x0e90: ..@. .... .... ....
0x9d, 0x00, 0xad, 0x00, 0x1c, 0xc8, 0xf3, 0x00, 0x03, 0x01, 0x83, 0x00, 0x93, 0x00, 0x18, 0xc8,
+ //0x0ea0: .... .... .... ....
0x0c, 0x01, 0x1c, 0x01, 0xa8, 0x00, 0xb8, 0x00, 0x50, 0xc7, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00,
+ //0x0eb0: .... .... P... @...
0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0x77, 0x00, 0xae, 0x00, 0x52, 0x00, 0x80, 0x00, 0x34, 0xc8,
+ //0x0ec0: .... ..w. ..R. ..4.
0x46, 0x00, 0x89, 0x00, 0x3e, 0x00, 0x6f, 0x00, 0x80, 0xc8, 0xbc, 0x00, 0xfa, 0x00, 0x44, 0x00,
+ //0x0ed0: F... >.o. .... ..D.
0x98, 0x00, 0x4c, 0xc8, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff,
+ //0x0ee0: ..L. ..@. .... ....
0xec, 0x00, 0xfc, 0x00, 0x70, 0x00, 0x80, 0x00, 0x48, 0xc8, 0xbc, 0x00, 0xfa, 0x00, 0x40, 0x00,
+ //0x0ef0: .... p... H... ..@.
0x98, 0x00, 0x58, 0xc8, 0x3e, 0x00, 0x98, 0x00, 0x38, 0x00, 0x85, 0x00, 0x74, 0xc8, 0x00, 0x00,
+ //0x0f00: ..X. >... 8... t...
0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0x77, 0x00, 0xae, 0x00, 0x52, 0x00,
+ //0x0f10: @... .... ..w. ..R.
0x80, 0x00, 0x44, 0xc8, 0x46, 0x00, 0x8b, 0x00, 0x3e, 0x00, 0x6f, 0x00, 0x50, 0xc8, 0xec, 0x00,
+ //0x0f20: ..D. F... >.o. P...
0xfc, 0x00, 0x70, 0x00, 0x80, 0x00, 0x48, 0xc8, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00,
+ //0x0f30: ..p. ..H. ..@. ....
0xa0, 0xca, 0xff, 0xff, 0xec, 0x00, 0xfc, 0x00, 0x70, 0x00, 0x80, 0x00, 0x48, 0xc8, 0xbc, 0x00,
+ //0x0f40: .... .... p... H...
0xfa, 0x00, 0x40, 0x00, 0x98, 0x00, 0x54, 0xc8, 0x3e, 0x00, 0x98, 0x00, 0x38, 0x00, 0x85, 0x00,
+ //0x0f50: ..@. ..T. >... 8...
0x74, 0xc8, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0x0d, 0x0a,
+ //0x0f60: t... @... .... ....
0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61,
+ //0x0f70: ..Dr eamw eb h as a
0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 0x0a, 0x55, 0x6e, 0x61, 0x62, 0x6c, 0x65,
+ //0x0f80: n Er ror: ..Un able
0x20, 0x74, 0x6f, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x20, 0x45, 0x78, 0x70,
+ //0x0f90: to allo cate Exp
0x61, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x2e, 0x0d, 0x0a, 0x0d,
+ //0x0fa0: ande d Me mory ....
0x0a, 0x24, 0x0d, 0x0a, 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, 0x68,
+ //0x0fb0: .$.. ..Dr eamw eb h
0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 0x0a, 0x53, 0x6f,
+ //0x0fc0: as a n Er ror: ..So
0x75, 0x6e, 0x64, 0x20, 0x42, 0x6c, 0x61, 0x73, 0x74, 0x65, 0x72, 0x20, 0x63, 0x61, 0x72, 0x64,
+ //0x0fd0: und Blas ter card
0x20, 0x6e, 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x61, 0x74, 0x20, 0x61, 0x64,
+ //0x0fe0: not fou nd a t ad
0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x32, 0x32, 0x30, 0x20, 0x48, 0x65, 0x78, 0x2e, 0x0d, 0x0a,
+ //0x0ff0: dres s 22 0 He x...
0x0d, 0x0a, 0x24, 0x0d, 0x0a, 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20,
+ //0x1000: ..$. ...D ream web
0x68, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 0x0a, 0x4f,
+ //0x1010: has an E rror :..O
0x75, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x42, 0x61, 0x73, 0x65, 0x20, 0x4d, 0x65, 0x6d, 0x6f, 0x72,
+ //0x1020: ut o f Ba se M emor
0x79, 0x2e, 0x0d, 0x0a, 0x0d, 0x0a, 0x24, 0x0d, 0x0a, 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d,
+ //0x1030: y... ..$. ...D ream
0x77, 0x65, 0x62, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72,
+ //0x1040: web has an E rror
0x3a, 0x0d, 0x0a, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x44, 0x65, 0x61, 0x6c, 0x6c, 0x6f,
+ //0x1050: :..M emor y De allo
0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x2e, 0x0d,
+ //0x1060: cati on p robl em..
0x0a, 0x0d, 0x0a, 0x24, 0x0d, 0x0a, 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62,
+ //0x1070: ...$ .... Drea mweb
0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 0x0a,
+ //0x1080: has an Erro r:..
0x41, 0x74, 0x20, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x20, 0x35, 0x39, 0x30, 0x4b, 0x20, 0x6f, 0x66,
+ //0x1090: At l east 590 K of
0x20, 0x62, 0x61, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x69, 0x73, 0x20,
+ //0x10a0: bas e me mory is
0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x2e, 0x0d, 0x0a, 0x0d, 0x0a, 0x24, 0x0d, 0x0a,
+ //0x10b0: requ ired .... .$..
0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61,
+ //0x10c0: ..Dr eamw eb h as a
0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 0x0a, 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x20,
+ //0x10d0: n Er ror: ..So und
0x42, 0x6c, 0x61, 0x73, 0x74, 0x65, 0x72, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e,
+ //0x10e0: Blas ter not foun
0x64, 0x20, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x75, 0x70, 0x74, 0x20, 0x30, 0x0d,
+ //0x10f0: d on int erup t 0.
0x0a, 0x0d, 0x0a, 0x24, 0x0d, 0x0a, 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62,
+ //0x1100: ...$ .... Drea mweb
0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 0x0a,
+ //0x1110: has an Erro r:..
0x55, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74,
+ //0x1120: Unab le t o se lect
0x20, 0x45, 0x4d, 0x4d, 0x20, 0x70, 0x61, 0x67, 0x65, 0x2e, 0x0d, 0x0a, 0x0d, 0x0a, 0x24, 0x0d,
+ //0x1130: EMM pag e... ..$.
0x0a, 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, 0x68, 0x61, 0x73, 0x20,
+ //0x1140: ...D ream web has
0x61, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 0x0a, 0x46, 0x69, 0x6c, 0x65, 0x20,
+ //0x1150: an E rror :..F ile
0x6e, 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x63, 0x0d, 0x0a, 0x0d, 0x0a, 0x24,
+ //0x1160: not foun d.c. ...$
0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, 0x6c, 0x6f, 0x6f, 0x6b, 0x73, 0x20, 0x66,
+ //0x1170: Drea mweb loo ks f
0x6f, 0x72, 0x20, 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x42, 0x6c, 0x61, 0x73, 0x74, 0x65, 0x72,
+ //0x1180: or S ound Bla ster
0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x0d,
+ //0x1190: inf orma tion in.
0x0a, 0x74, 0x68, 0x65, 0x20, 0x42, 0x4c, 0x41, 0x53, 0x54, 0x45, 0x52, 0x20, 0x65, 0x6e, 0x76,
+ //0x11a0: .the BLA STER env
0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c,
+ //0x11b0: iron ment var iabl
0x65, 0x20, 0x28, 0x69, 0x6e, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x41, 0x55, 0x54, 0x4f, 0x45,
+ //0x11c0: e (i n yo ur A UTOE
0x58, 0x45, 0x43, 0x2e, 0x42, 0x41, 0x54, 0x29, 0x0d, 0x0a, 0x0d, 0x0a, 0x49, 0x66, 0x20, 0x74,
+ //0x11d0: XEC. BAT) .... If t
0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64,
+ //0x11e0: his is n ot f ound
0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x49, 0x52, 0x51, 0x20, 0x37, 0x2c, 0x20, 0x44, 0x4d, 0x41,
+ //0x11f0: the n IR Q 7, DMA
0x20, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x20, 0x31, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x62,
+ //0x1200: cha nnel 1 a nd b
0x61, 0x73, 0x65, 0x0d, 0x0a, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x32, 0x32, 0x30,
+ //0x1210: ase. .add ress 220
0x68, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x2e, 0x0d, 0x0a,
+ //0x1220: h ar e as sume d...
0x0d, 0x0a, 0x54, 0x6f, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6f,
+ //0x1230: ..To alt er a ny o
0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x73,
+ //0x1240: r al l of the se s
0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x63, 0x61, 0x6e, 0x20,
+ //0x1250: etti ngs you can
0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x0d, 0x0a, 0x6f, 0x6e,
+ //0x1260: spec ify them ..on
0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x69, 0x6e,
+ //0x1270: the com mand lin
0x65, 0x2e, 0x20, 0x46, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x3a, 0x0d,
+ //0x1280: e. F or e xamp le:.
0x0a, 0x0d, 0x0a, 0x54, 0x79, 0x70, 0x65, 0x20, 0x20, 0x20, 0x20, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1290: ...T ype D REAM
0x57, 0x45, 0x42, 0x20, 0x49, 0x37, 0x20, 0x41, 0x32, 0x32, 0x30, 0x20, 0x44, 0x31, 0x20, 0x20,
+ //0x12a0: WEB I7 A 220 D1
0x20, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65,
+ //0x12b0: to run Dre amwe
0x62, 0x20, 0x6f, 0x6e, 0x20, 0x49, 0x52, 0x51, 0x20, 0x37, 0x2c, 0x20, 0x44, 0x4d, 0x41, 0x0d,
+ //0x12c0: b on IRQ 7, DMA.
0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ //0x12d0: .
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ //0x12e0:
0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x20, 0x31, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x62, 0x61,
+ //0x12f0: chan nel 1 an d ba
0x73, 0x65, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x32, 0x32, 0x30, 0x68, 0x0d,
+ //0x1300: se a ddre ss 2 20h.
0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45,
+ //0x1310: . DRE AMWE
0x42, 0x20, 0x49, 0x35, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ //0x1320: B I5
0x74, 0x6f, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20,
+ //0x1330: to r un D ream web
0x6f, 0x6e, 0x20, 0x49, 0x52, 0x51, 0x20, 0x35, 0x20, 0x61, 0x6e, 0x64, 0x0d, 0x0a, 0x20, 0x20,
+ //0x1340: on I RQ 5 and ..
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ //0x1350:
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x66,
+ //0x1360: def
0x61, 0x75, 0x6c, 0x74, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x6f, 0x66, 0x20,
+ //0x1370: ault add ress of
0x32, 0x32, 0x30, 0x68, 0x2c, 0x20, 0x44, 0x4d, 0x41, 0x20, 0x31, 0x0d, 0x0a, 0x0d, 0x0a, 0x24,
+ //0x1380: 220h , DM A 1. ...$
0x0d, 0x0a, 0x0d, 0x0a, 0x54, 0x72, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x44, 0x72, 0x65, 0x61,
+ //0x1390: .... Try the Drea
0x6d, 0x77, 0x65, 0x62, 0x20, 0x43, 0x44, 0x20, 0x69, 0x6e, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20,
+ //0x13a0: mweb CD in y our
0x73, 0x74, 0x65, 0x72, 0x65, 0x6f, 0x2e, 0x2e, 0x2e, 0x2e, 0x0d, 0x0a, 0x0d, 0x0a, 0x0d, 0x0a,
+ //0x13b0: ster eo.. .... ....
0x24, 0x81, 0x00, 0xb8, 0x00, 0x52, 0x00, 0x80, 0x00, 0xc0, 0xc8, 0x50, 0x00, 0x93, 0x00, 0x3e,
+ //0x13c0: $... .R.. ...P ...>
0x00, 0x6f, 0x00, 0x80, 0xc8, 0xb7, 0x00, 0xfa, 0x00, 0x3e, 0x00, 0x6f, 0x00, 0xc4, 0xc8, 0x00,
+ //0x13d0: .o.. .... .>.o ....
0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0x53, 0x50, 0x45, 0x45, 0x43,
+ //0x13e0: .@.. .... ...S PEEC
0x48, 0x52, 0x32, 0x34, 0x43, 0x30, 0x30, 0x30, 0x35, 0x2e, 0x52, 0x41, 0x57, 0x00, 0x87, 0x83,
+ //0x13f0: HR24 C000 5.RA W...
0x81, 0x82, 0x2c, 0x00, 0x46, 0x00, 0x20, 0x00, 0x2e, 0x00, 0x70, 0xc4, 0x00, 0x00, 0x32, 0x00,
+ //0x1400: ..,. F. . ..p. ..2.
0x00, 0x00, 0xb4, 0x00, 0x7c, 0xc3, 0xe2, 0x00, 0xf4, 0x00, 0x0a, 0x00, 0x1a, 0x00, 0x28, 0xc8,
+ //0x1410: .... |... .... ..(.
0xe2, 0x00, 0xf4, 0x00, 0x1a, 0x00, 0x28, 0x00, 0x2c, 0xc8, 0xf0, 0x00, 0x04, 0x01, 0x64, 0x00,
+ //0x1420: .... ..(. ,... ..d.
0x7c, 0x00, 0xcc, 0xc9, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xd4, 0xc9, 0xff, 0xff,
+ //0x1430: |... ..@. .... ....
0x2c, 0x00, 0x46, 0x00, 0x20, 0x00, 0x2e, 0x00, 0x70, 0xc4, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00,
+ //0x1440: ,.F. ... p... 2...
0xb4, 0x00, 0x7c, 0xc3, 0x12, 0x01, 0x24, 0x01, 0x0a, 0x00, 0x1a, 0x00, 0x28, 0xc8, 0x12, 0x01,
+ //0x1450: ..|. ..$. .... (...
0x24, 0x01, 0x1a, 0x00, 0x28, 0x00, 0x2c, 0xc8, 0xf0, 0x00, 0x04, 0x01, 0x64, 0x00, 0x7c, 0x00,
+ //0x1460: $... (.,. .... d.|.
0xcc, 0xc9, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xd4, 0xc9, 0xff, 0xff, 0x00, 0x21,
+ //0x1470: .... @... .... ...!
0x0a, 0x0f, 0xff, 0x00, 0x16, 0x0a, 0x0f, 0xff, 0x00, 0x16, 0x00, 0x0f, 0xff, 0x00, 0x0b, 0x00,
+ //0x1480: .... .... .... ....
0x0f, 0xff, 0x00, 0x0b, 0x0a, 0x0f, 0xff, 0x00, 0x00, 0x0a, 0x0f, 0xff, 0x01, 0x2c, 0x0a, 0x06,
+ //0x1490: .... .... .... .,..
0xff, 0x01, 0x2c, 0x00, 0x0d, 0xff, 0x02, 0x21, 0x00, 0x06, 0xff, 0x02, 0x16, 0x00, 0x05, 0xff,
+ //0x14a0: ..,. ...! .... ....
0x02, 0x16, 0x0a, 0x10, 0xff, 0x02, 0x0b, 0x0a, 0x10, 0xff, 0x03, 0x2c, 0x00, 0x0f, 0xff, 0x03,
+ //0x14b0: .... .... ..., ....
0x21, 0x0a, 0x06, 0xff, 0x03, 0x21, 0x00, 0x05, 0xff, 0x04, 0x0b, 0x1e, 0x06, 0xff, 0x04, 0x16,
+ //0x14c0: !... .!.. .... ....
0x1e, 0x05, 0xff, 0x04, 0x16, 0x14, 0x0d, 0xff, 0x0a, 0x21, 0x1e, 0x06, 0xff, 0x0a, 0x16, 0x1e,
+ //0x14d0: .... .... .!.. ....
0x06, 0xff, 0x09, 0x16, 0x0a, 0x06, 0xff, 0x09, 0x16, 0x14, 0x10, 0xff, 0x09, 0x16, 0x1e, 0x10,
+ //0x14e0: .... .... .... ....
0xff, 0x09, 0x16, 0x28, 0x10, 0xff, 0x09, 0x16, 0x32, 0x10, 0xff, 0x06, 0x0b, 0x1e, 0x06, 0xff,
+ //0x14f0: ...( .... 2... ....
0x06, 0x00, 0x0a, 0x0f, 0xff, 0x06, 0x00, 0x14, 0x0f, 0xff, 0x06, 0x0b, 0x14, 0x0f, 0xff, 0x06,
+ //0x1500: .... .... .... ....
0x16, 0x14, 0x0f, 0xff, 0x07, 0x0b, 0x14, 0x06, 0xff, 0x07, 0x00, 0x14, 0x06, 0xff, 0x07, 0x00,
+ //0x1510: .... .... .... ....
0x1e, 0x06, 0xff, 0x37, 0x2c, 0x00, 0x05, 0xff, 0x37, 0x2c, 0x0a, 0x05, 0xff, 0x05, 0x16, 0x1e,
+ //0x1520: ...7 ,... 7,.. ....
0x06, 0xff, 0x05, 0x16, 0x14, 0x0f, 0xff, 0x05, 0x16, 0x0a, 0x0f, 0xff, 0x18, 0x16, 0x00, 0x0f,
+ //0x1530: .... .... .... ....
0xff, 0x18, 0x21, 0x00, 0x0f, 0xff, 0x18, 0x2c, 0x00, 0x0f, 0xff, 0x18, 0x21, 0x0a, 0x0f, 0xff,
+ //0x1540: ..!. ..., .... !...
0x08, 0x00, 0x0a, 0x06, 0xff, 0x08, 0x0b, 0x0a, 0x06, 0xff, 0x08, 0x16, 0x0a, 0x06, 0xff, 0x08,
+ //0x1550: .... .... .... ....
0x21, 0x0a, 0x06, 0xff, 0x08, 0x21, 0x14, 0x06, 0xff, 0x08, 0x21, 0x1e, 0x06, 0xff, 0x08, 0x21,
+ //0x1560: !... .!.. ..!. ...!
0x28, 0x06, 0xff, 0x08, 0x16, 0x28, 0x06, 0xff, 0x08, 0x0b, 0x28, 0x06, 0xff, 0x0b, 0x0b, 0x14,
+ //0x1570: (... .(.. ..(. ....
0x0c, 0xff, 0x0b, 0x0b, 0x1e, 0x0c, 0xff, 0x0b, 0x16, 0x14, 0x0c, 0xff, 0x0b, 0x16, 0x1e, 0x0c,
+ //0x1580: .... .... .... ....
0xff, 0x0c, 0x16, 0x14, 0x0c, 0xff, 0x0d, 0x16, 0x14, 0x0c, 0xff, 0x0d, 0x21, 0x14, 0x0c, 0xff,
+ //0x1590: .... .... .... !...
0x0e, 0x2c, 0x14, 0x0c, 0xff, 0x0e, 0x21, 0x00, 0x0c, 0xff, 0x0e, 0x21, 0x0a, 0x0c, 0xff, 0x0e,
+ //0x15a0: .,.. ..!. ...! ....
0x21, 0x14, 0x0c, 0xff, 0x0e, 0x21, 0x1e, 0x0c, 0xff, 0x0e, 0x21, 0x28, 0x0c, 0xff, 0x0e, 0x16,
+ //0x15b0: !... .!.. ..!( ....
0x00, 0x10, 0xff, 0x13, 0x00, 0x00, 0x0c, 0xff, 0x14, 0x00, 0x14, 0x10, 0xff, 0x14, 0x00, 0x1e,
+ //0x15c0: .... .... .... ....
0x10, 0xff, 0x14, 0x0b, 0x1e, 0x10, 0xff, 0x14, 0x00, 0x28, 0x10, 0xff, 0x14, 0x0b, 0x28, 0x10,
+ //0x15d0: .... .... .(.. ..(.
0xff, 0x15, 0x0b, 0x0a, 0x0f, 0xff, 0x15, 0x0b, 0x14, 0x0f, 0xff, 0x15, 0x00, 0x14, 0x0f, 0xff,
+ //0x15e0: .... .... .... ....
0x15, 0x16, 0x14, 0x0f, 0xff, 0x15, 0x21, 0x14, 0x0f, 0xff, 0x15, 0x2c, 0x14, 0x0f, 0xff, 0x15,
+ //0x15f0: .... ..!. ..., ....
0x2c, 0x0a, 0x0f, 0xff, 0x16, 0x16, 0x0a, 0x10, 0xff, 0x16, 0x16, 0x14, 0x10, 0xff, 0x17, 0x16,
+ //0x1600: ,... .... .... ....
0x1e, 0x0d, 0xff, 0x17, 0x16, 0x28, 0x0d, 0xff, 0x17, 0x21, 0x28, 0x0d, 0xff, 0x17, 0x0b, 0x28,
+ //0x1610: .... .(.. .!(. ...(
0x0d, 0xff, 0x17, 0x00, 0x28, 0x0d, 0xff, 0x17, 0x00, 0x32, 0x0d, 0xff, 0x19, 0x0b, 0x28, 0x10,
+ //0x1620: .... (... .2.. ..(.
0xff, 0x19, 0x0b, 0x32, 0x10, 0xff, 0x19, 0x00, 0x32, 0x10, 0xff, 0x1b, 0x0b, 0x14, 0x10, 0xff,
+ //0x1630: ...2 .... 2... ....
0x1b, 0x0b, 0x1e, 0x10, 0xff, 0x1d, 0x0b, 0x0a, 0x10, 0xff, 0x2d, 0x16, 0x1e, 0x0c, 0xff, 0x2d,
+ //0x1640: .... .... ..-. ...-
0x16, 0x28, 0x0c, 0xff, 0x2d, 0x16, 0x32, 0x0c, 0xff, 0x2e, 0x16, 0x28, 0x0c, 0xff, 0x2e, 0x0b,
+ //0x1650: .(.. -.2. ...( ....
0x32, 0x0c, 0xff, 0x2e, 0x16, 0x32, 0x0c, 0xff, 0x2e, 0x21, 0x32, 0x0c, 0xff, 0x2f, 0x00, 0x00,
+ //0x1660: 2... .2.. .!2. ./..
0x0c, 0xff, 0x1a, 0x16, 0x14, 0x10, 0xff, 0x1a, 0x21, 0x0a, 0x10, 0xff, 0x1a, 0x21, 0x14, 0x10,
+ //0x1670: .... .... !... .!..
0xff, 0x1a, 0x21, 0x1e, 0x10, 0xff, 0x1a, 0x2c, 0x1e, 0x10, 0xff, 0x1a, 0x16, 0x1e, 0x10, 0xff,
+ //0x1680: ..!. ..., .... ....
0x1a, 0x0b, 0x1e, 0x10, 0xff, 0x1a, 0x0b, 0x14, 0x10, 0xff, 0x1a, 0x00, 0x14, 0x10, 0xff, 0x1a,
+ //0x1690: .... .... .... ....
0x0b, 0x28, 0x10, 0xff, 0x1a, 0x00, 0x28, 0x10, 0xff, 0x1a, 0x16, 0x28, 0x10, 0xff, 0x1a, 0x0b,
+ //0x16a0: .(.. ..(. ...( ....
0x32, 0x10, 0xff, 0x1c, 0x00, 0x1e, 0x0f, 0xff, 0x1c, 0x00, 0x14, 0x0f, 0xff, 0x1c, 0x00, 0x28,
+ //0x16b0: 2... .... .... ...(
0x0f, 0xff, 0x1c, 0x0b, 0x1e, 0x0f, 0xff, 0x1c, 0x0b, 0x14, 0x0f, 0xff, 0x1c, 0x16, 0x1e, 0x0f,
+ //0x16c0: .... .... .... ....
0xff, 0x1c, 0x16, 0x14, 0x0f, 0xff, 0xff, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x20, 0x4e, 0x41,
+ //0x16d0: .... ...O BJEC T NA
0x4d, 0x45, 0x20, 0x4f, 0x4e, 0x45, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ //0x16e0: ME O NE
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00,
+ //0x16f0: .
0x10, 0x12, 0x12, 0x11, 0x10, 0x10, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ //0x1700: .... .... .... ....
0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x1710: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36,
+ //0x1720: .... .... ..12 3456
0x37, 0x38, 0x39, 0x30, 0x2d, 0x00, 0x08, 0x00, 0x51, 0x57, 0x45, 0x52, 0x54, 0x59, 0x55, 0x49,
+ //0x1730: 7890 -... QWER TYUI
0x4f, 0x50, 0x00, 0x00, 0x0d, 0x00, 0x41, 0x53, 0x44, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4c, 0x00,
+ //0x1740: OP.. ..AS DFGH JKL.
0x00, 0x00, 0x00, 0x00, 0x5a, 0x58, 0x43, 0x56, 0x42, 0x4e, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x1750: .... ZXCV BNM. ....
0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x1760: . .. .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x1770: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x1780: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x1790: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x3a, 0x00, 0x00, 0x00,
+ //0x17a0: .... .... ...D :...
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x17b0: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x17c0: .... .... ...D REAM
0x57, 0x45, 0x42, 0x20, 0x44, 0x41, 0x54, 0x41, 0x20, 0x46, 0x49, 0x4c, 0x45, 0x20, 0x43, 0x4f,
+ //0x17d0: WEB DATA FIL E CO
0x50, 0x59, 0x52, 0x49, 0x47, 0x48, 0x54, 0x20, 0x31, 0x39, 0x39, 0x32, 0x20, 0x43, 0x52, 0x45,
+ //0x17e0: PYRI GHT 1992 CRE
0x41, 0x54, 0x49, 0x56, 0x45, 0x20, 0x52, 0x45, 0x41, 0x4c, 0x49, 0x54, 0x59, 0x00, 0x00, 0x00,
+ //0x17f0: ATIV E RE ALIT Y...
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x1800: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x1810: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1820: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x30, 0x00, 0x05, 0xff, 0x21, 0x0a, 0xff, 0xff, 0xff, 0x00,
+ //0x1830: WEB. R00. ..!. ....
0x01, 0x06, 0x02, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1840: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x31, 0x00, 0x01, 0xff, 0x2c, 0x0a, 0xff, 0xff, 0xff, 0x00,
+ //0x1850: WEB. R01. ..,. ....
0x07, 0x02, 0xff, 0xff, 0xff, 0xff, 0x06, 0xff, 0xff, 0xff, 0x01, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1860: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x32, 0x00, 0x02, 0xff, 0x21, 0x00, 0xff, 0xff, 0xff, 0x00,
+ //0x1870: WEB. R02. ..!. ....
0x01, 0x00, 0xff, 0xff, 0x01, 0xff, 0x03, 0xff, 0xff, 0xff, 0x02, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1880: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x33, 0x00, 0x05, 0xff, 0x21, 0x0a, 0xff, 0xff, 0xff, 0x00,
+ //0x1890: WEB. R03. ..!. ....
0x02, 0x02, 0x00, 0x02, 0x04, 0xff, 0x00, 0xff, 0xff, 0xff, 0x03, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x18a0: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x34, 0x00, 0x17, 0xff, 0x0b, 0x1e, 0xff, 0xff, 0xff, 0x00,
+ //0x18b0: WEB. R04. .... ....
0x01, 0x04, 0x00, 0x05, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x04, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x18c0: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x35, 0x00, 0x05, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00,
+ //0x18d0: WEB. R05. .... ....
0x01, 0x02, 0x00, 0x04, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x05, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x18e0: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x36, 0x00, 0x05, 0xff, 0x0b, 0x1e, 0xff, 0xff, 0xff, 0x00,
+ //0x18f0: WEB. R06. .... ....
0x01, 0x00, 0x00, 0x01, 0x02, 0xff, 0x00, 0xff, 0xff, 0xff, 0x06, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1900: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x37, 0x00, 0xff, 0xff, 0x00, 0x14, 0xff, 0xff, 0xff, 0x00,
+ //0x1910: WEB. R07. .... ....
0x02, 0x02, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x07, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1920: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x38, 0x00, 0x08, 0xff, 0x00, 0x0a, 0xff, 0xff, 0xff, 0x00,
+ //0x1930: WEB. R08. .... ....
0x01, 0x02, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0b, 0x28, 0x00, 0x08, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1940: .... .... (..D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x39, 0x00, 0x09, 0xff, 0x16, 0x0a, 0xff, 0xff, 0xff, 0x00,
+ //0x1950: WEB. R09. .... ....
0x04, 0x06, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x09, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1960: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x30, 0x00, 0x0a, 0xff, 0x21, 0x1e, 0xff, 0xff, 0xff, 0x00,
+ //0x1970: WEB. R10. ..!. ....
0x02, 0x00, 0xff, 0xff, 0x02, 0x02, 0x04, 0x16, 0x1e, 0xff, 0x0a, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1980: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x31, 0x00, 0x0b, 0xff, 0x0b, 0x14, 0xff, 0xff, 0xff, 0x00,
+ //0x1990: WEB. R11. .... ....
0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0b, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x19a0: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x32, 0x00, 0x0c, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00,
+ //0x19b0: WEB. R12. .... ....
0x01, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x19c0: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x33, 0x00, 0x0c, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00,
+ //0x19d0: WEB. R13. .... ....
0x01, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0d, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x19e0: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x34, 0x00, 0x0e, 0xff, 0x2c, 0x14, 0xff, 0xff, 0xff, 0x00,
+ //0x19f0: WEB. R14. ..,. ....
0x00, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x1a00: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x1a10: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x1a20: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x1a30: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x1a40: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x1a50: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x1a60: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x1a70: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1a80: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x39, 0x00, 0x13, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00,
+ //0x1a90: WEB. R19. .... ....
0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x13, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1aa0: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x30, 0x00, 0x16, 0xff, 0x00, 0x14, 0xff, 0xff, 0xff, 0x00,
+ //0x1ab0: WEB. R20. .... ....
0x01, 0x04, 0x02, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x14, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1ac0: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x31, 0x00, 0x05, 0xff, 0x0b, 0x0a, 0xff, 0xff, 0xff, 0x00,
+ //0x1ad0: WEB. R21. .... ....
0x01, 0x04, 0x02, 0x0f, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0x15, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1ae0: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x32, 0x00, 0x16, 0xff, 0x16, 0x0a, 0xff, 0xff, 0xff, 0x00,
+ //0x1af0: WEB. R22. .... ....
0x00, 0x04, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1b00: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x33, 0x00, 0x17, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00,
+ //0x1b10: WEB. R23. .... ....
0x01, 0x04, 0x02, 0x0f, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0x17, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1b20: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x34, 0x00, 0x05, 0xff, 0x2c, 0x00, 0xff, 0xff, 0xff, 0x00,
+ //0x1b30: WEB. R24. ..,. ....
0x01, 0x06, 0x02, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x18, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1b40: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x35, 0x00, 0x16, 0xff, 0x0b, 0x28, 0xff, 0xff, 0xff, 0x00,
+ //0x1b50: WEB. R25. ...( ....
0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x19, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1b60: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x36, 0x00, 0x09, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00,
+ //0x1b70: WEB. R26. .... ....
0x04, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1a, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1b80: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x37, 0x00, 0x16, 0xff, 0x0b, 0x14, 0xff, 0xff, 0xff, 0x00,
+ //0x1b90: WEB. R27. .... ....
0x00, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1b, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1ba0: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x38, 0x00, 0x05, 0xff, 0x0b, 0x1e, 0xff, 0xff, 0xff, 0x00,
+ //0x1bb0: WEB. R28. .... ....
0x00, 0x00, 0xff, 0xff, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1c, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1bc0: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x39, 0x00, 0x16, 0xff, 0x0b, 0x0a, 0xff, 0xff, 0xff, 0x00,
+ //0x1bd0: WEB. R29. .... ....
0x00, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1d, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1be0: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x35, 0x00, 0x05, 0xff, 0x16, 0x0a, 0xff, 0xff, 0xff, 0x00,
+ //0x1bf0: WEB. R05. .... ....
0x01, 0x04, 0x01, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x05, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1c00: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x34, 0x00, 0x17, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00,
+ //0x1c10: WEB. R04. .... ....
0x01, 0x04, 0x02, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1c20: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x30, 0x00, 0x0a, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00,
+ //0x1c30: WEB. R10. .... ....
0x03, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1c40: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x32, 0x00, 0x0c, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00,
+ //0x1c50: WEB. R12. .... ....
0x00, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1c60: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x33, 0x00, 0x05, 0xff, 0x2c, 0x00, 0xff, 0xff, 0xff, 0x00,
+ //0x1c70: WEB. R03. ..,. ....
0x01, 0x06, 0x02, 0xff, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1c80: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x34, 0x00, 0x05, 0xff, 0x16, 0x00, 0xff, 0xff, 0xff, 0x00,
+ //0x1c90: WEB. R24. .... ....
0x03, 0x06, 0x00, 0xff, 0xff, 0xff, 0xff, 0x21, 0x00, 0x03, 0x18, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1ca0: .... ...! ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x32, 0x00, 0x16, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00,
+ //0x1cb0: WEB. R22. .... ....
0x01, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1cc0: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x32, 0x00, 0x16, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00,
+ //0x1cd0: WEB. R22. .... ....
0x00, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1ce0: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x31, 0x00, 0x0b, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00,
+ //0x1cf0: WEB. R11. .... ....
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0b, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1d00: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x38, 0x00, 0x05, 0xff, 0x0b, 0x14, 0xff, 0xff, 0xff, 0x00,
+ //0x1d10: WEB. R28. .... ....
0x00, 0x06, 0xff, 0xff, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1c, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1d20: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x31, 0x00, 0x05, 0xff, 0x0b, 0x0a, 0xff, 0xff, 0xff, 0x00,
+ //0x1d30: WEB. R21. .... ....
0x01, 0x04, 0x02, 0x0f, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0x15, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1d40: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x36, 0x00, 0x09, 0xff, 0x00, 0x28, 0xff, 0xff, 0xff, 0x00,
+ //0x1d50: WEB. R26. ...( ....
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1a, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1d60: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x39, 0x00, 0x13, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00,
+ //0x1d70: WEB. R19. .... ....
0x02, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x13, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1d80: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x38, 0x00, 0x08, 0xff, 0x0b, 0x28, 0xff, 0xff, 0xff, 0x00,
+ //0x1d90: WEB. R08. ...( ....
0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x08, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1da0: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x31, 0x00, 0x01, 0xff, 0x2c, 0x0a, 0xff, 0xff, 0xff, 0x00,
+ //0x1db0: WEB. R01. ..,. ....
0x03, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1dc0: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x34, 0x35, 0x00, 0x23, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00,
+ //0x1dd0: WEB. R45. #... ....
0x00, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2d, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1de0: .... .... ..-D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x34, 0x36, 0x00, 0x23, 0xff, 0x16, 0x28, 0xff, 0xff, 0xff, 0x00,
+ //0x1df0: WEB. R46. #..( ....
0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2e, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1e00: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x34, 0x37, 0x00, 0x23, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00,
+ //0x1e10: WEB. R47. #... ....
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1e20: .... .... ../D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x34, 0x35, 0x00, 0x23, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00,
+ //0x1e30: WEB. R45. #... ....
0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2d, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1e40: .... .... ..-D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x34, 0x36, 0x00, 0x23, 0xff, 0x16, 0x32, 0xff, 0xff, 0xff, 0x00,
+ //0x1e50: WEB. R46. #..2 ....
0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2e, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1e60: .... .... ...D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x35, 0x30, 0x00, 0x23, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00,
+ //0x1e70: WEB. R50. #... ....
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x32, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1e80: .... .... ..2D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x35, 0x31, 0x00, 0x23, 0xff, 0x0b, 0x1e, 0xff, 0xff, 0xff, 0x00,
+ //0x1e90: WEB. R51. #... ....
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1ea0: .... .... ..3D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x35, 0x32, 0x00, 0x23, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00,
+ //0x1eb0: WEB. R52. #... ....
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x34, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1ec0: .... .... ..4D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x35, 0x33, 0x00, 0x23, 0xff, 0x21, 0x00, 0xff, 0xff, 0xff, 0x00,
+ //0x1ed0: WEB. R53. #.!. ....
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x35, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1ee0: .... .... ..5D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x35, 0x34, 0x00, 0x23, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00,
+ //0x1ef0: WEB. R54. #... ....
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x36, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x1f00: .... .... ..6D REAM
0x57, 0x45, 0x42, 0x2e, 0x52, 0x35, 0x35, 0x00, 0x0e, 0xff, 0x2c, 0x00, 0xff, 0xff, 0xff, 0x00,
+ //0x1f10: WEB. R55. ..,. ....
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x1f20: .... .... ..7. ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x1f30: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00,
+ //0x1f40: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x02, 0x04,
+ //0x1f50: .... .... .... ....
0x01, 0x0a, 0x09, 0x08, 0x06, 0x0b, 0x04, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x1f60: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x1f70: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x1f80: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x1f90: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x1fa0: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x1fb0: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x1fc0: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x1fd0: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
+ //0x1fe0: .... .... .... ....
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ //0x1ff0: .... .... .... ....
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ //0x2000: .... .... .... ....
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ //0x2010: .... .... .... ....
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ //0x2020: .... .... .... ....
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ //0x2030: .... .... .... ....
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ //0x2040: .... .... .... ....
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ //0x2050: .... .... .... ....
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ //0x2060: .... .... .... ....
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ //0x2070: .... .... .... ....
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ //0x2080: .... .... .... ....
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ //0x2090: .... .... .... ....
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ //0x20a0: .... .... .... ....
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ //0x20b0: .... .... .... ....
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ //0x20c0: .... .... .... ....
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ //0x20d0: .... .... .... ....
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ //0x20e0: .... .... .... ....
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ //0x20f0: .... .... .... ....
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ //0x2100: .... .... .... ....
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ //0x2110: .... .... .... ....
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ //0x2120: .... .... .... ....
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ //0x2130: .... .... .... ....
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ //0x2140: .... .... .... ....
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ //0x2150: .... .... .... ....
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ //0x2160: .... .... .... ....
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ //0x2170: .... .... .... ....
0xff, 0xff, 0xff, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ //0x2180: .... .... .... ....
0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ //0x2190: .... .... .... ....
0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ //0x21a0: .... .... .... ....
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ //0x21b0: .... .... .... ....
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ //0x21c0: .... .... .... ....
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ //0x21d0: .... .... .... ....
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01,
+ //0x21e0: .... .... .... ....
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57,
+ //0x21f0: .... .... ..DR EAMW
0x45, 0x42, 0x2e, 0x44, 0x30, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e,
+ //0x2200: EB.D 00.D REAM WEB.
0x44, 0x30, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x44, 0x30, 0x32,
+ //0x2210: D01. DREA MWEB .D02
0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x44, 0x30, 0x33, 0x00, 0x44, 0x52,
+ //0x2220: .DRE AMWE B.D0 3.DR
0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x44, 0x30, 0x34, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d,
+ //0x2230: EAMW EB.D 04.D REAM
0x57, 0x45, 0x42, 0x2e, 0x44, 0x30, 0x35, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42,
+ //0x2240: WEB. D05. DREA MWEB
0x2e, 0x44, 0x30, 0x36, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x44, 0x45,
+ //0x2250: .D06 .DRE AMWE B.DE
0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x2260: M... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x2270: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x2280: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x2290: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x22a0: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x22b0: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x22c0: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x22d0: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x22e0: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x22f0: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x2300: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x2310: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x2320: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x2330: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x2340: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x2350: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, };
ds.assign(src, src + sizeof(src));
dreamweb();
@@ -18085,9 +16935,7 @@ void DreamGenContext::__dispatch_call(uint16 addr) {
case addr_copper: copper(); break;
case addr_sparky: sparky(); break;
case addr_train: train(); break;
- case addr_addtopeoplelist: addtopeoplelist(); break;
case addr_checkspeed: checkspeed(); break;
- case addr_delsprite: delsprite(); break;
case addr_mainman: mainman(); break;
case addr_checkforexit: checkforexit(); break;
case addr_adjustdown: adjustdown(); break;
@@ -18097,7 +16945,6 @@ void DreamGenContext::__dispatch_call(uint16 addr) {
case addr_reminders: reminders(); break;
case addr_initrain: initrain(); break;
case addr_splitintolines: splitintolines(); break;
- case addr_getblockofpixel: getblockofpixel(); break;
case addr_backobject: backobject(); break;
case addr_liftnoise: liftnoise(); break;
case addr_random: random(); break;
@@ -18107,20 +16954,13 @@ void DreamGenContext::__dispatch_call(uint16 addr) {
case addr_soundonreels: soundonreels(); break;
case addr_reconstruct: reconstruct(); break;
case addr_deleverything: deleverything(); break;
- case addr_dumpeverything: dumpeverything(); break;
case addr_showpcx: showpcx(); break;
case addr_loadpalfromiff: loadpalfromiff(); break;
case addr_setmode: setmode(); break;
- case addr_paneltomap: paneltomap(); break;
- case addr_maptopanel: maptopanel(); break;
- case addr_dumpmap: dumpmap(); break;
- case addr_pixelcheckset: pixelcheckset(); break;
case addr_createpanel: createpanel(); break;
case addr_createpanel2: createpanel2(); break;
case addr_vsync: vsync(); break;
case addr_doshake: doshake(); break;
- case addr_delthisone: delthisone(); break;
- case addr_transferinv: transferinv(); break;
case addr_transfermap: transfermap(); break;
case addr_fadedos: fadedos(); break;
case addr_dofade: dofade(); break;
@@ -18167,31 +17007,21 @@ void DreamGenContext::__dispatch_call(uint16 addr) {
case addr_mode640x480: mode640x480(); break;
case addr_set16colpalette: set16colpalette(); break;
case addr_realcredits: realcredits(); break;
- case addr_waitframes: waitframes(); break;
case addr_monprint: monprint(); break;
- case addr_fillryan: fillryan(); break;
case addr_fillopen: fillopen(); break;
- case addr_findallryan: findallryan(); break;
case addr_findallopen: findallopen(); break;
- case addr_obtoinv: obtoinv(); break;
- case addr_isitworn: isitworn(); break;
- case addr_makeworn: makeworn(); break;
case addr_examineob: examineob(); break;
case addr_makemainscreen: makemainscreen(); break;
case addr_getbackfromob: getbackfromob(); break;
case addr_incryanpage: incryanpage(); break;
case addr_openinv: openinv(); break;
- case addr_showryanpage: showryanpage(); break;
case addr_openob: openob(); break;
- case addr_obicons: obicons(); break;
case addr_examicon: examicon(); break;
- case addr_obpicture: obpicture(); break;
case addr_describeob: describeob(); break;
case addr_additionaltext: additionaltext(); break;
case addr_obsthatdothings: obsthatdothings(); break;
case addr_getobtextstart: getobtextstart(); break;
case addr_searchforsame: searchforsame(); break;
- case addr_findnextcolon: findnextcolon(); break;
case addr_inventory: inventory(); break;
case addr_setpickup: setpickup(); break;
case addr_examinventory: examinventory(); break;
@@ -18226,7 +17056,6 @@ void DreamGenContext::__dispatch_call(uint16 addr) {
case addr_pickupconts: pickupconts(); break;
case addr_transfercontoex: transfercontoex(); break;
case addr_transfertext: transfertext(); break;
- case addr_getexpos: getexpos(); break;
case addr_purgealocation: purgealocation(); break;
case addr_emergencypurge: emergencypurge(); break;
case addr_purgeanitem: purgeanitem(); break;
@@ -18235,8 +17064,6 @@ void DreamGenContext::__dispatch_call(uint16 addr) {
case addr_deleteextext: deleteextext(); break;
case addr_blockget: blockget(); break;
case addr_drawfloor: drawfloor(); break;
- case addr_drawflags: drawflags(); break;
- case addr_showallex: showallex(); break;
case addr_autolook: autolook(); break;
case addr_look: look(); break;
case addr_dolook: dolook(); break;
@@ -18306,7 +17133,6 @@ void DreamGenContext::__dispatch_call(uint16 addr) {
case addr_printcurs: printcurs(); break;
case addr_delcurs: delcurs(); break;
case addr_useobject: useobject(); break;
- case addr_useroutine: useroutine(); break;
case addr_wheelsound: wheelsound(); break;
case addr_runtap: runtap(); break;
case addr_playguitar: playguitar(); break;
@@ -18385,12 +17211,10 @@ void DreamGenContext::__dispatch_call(uint16 addr) {
case addr_useelvdoor: useelvdoor(); break;
case addr_withwhat: withwhat(); break;
case addr_selectob: selectob(); break;
- case addr_compare: compare(); break;
case addr_findsetobject: findsetobject(); break;
case addr_findexobject: findexobject(); break;
case addr_isryanholding: isryanholding(); break;
case addr_checkinside: checkinside(); break;
- case addr_usetext: usetext(); break;
case addr_putbackobstuff: putbackobstuff(); break;
case addr_showpuztext: showpuztext(); break;
case addr_findpuztext: findpuztext(); break;
@@ -18562,27 +17386,15 @@ void DreamGenContext::__dispatch_call(uint16 addr) {
case addr_convnum: convnum(); break;
case addr_mainscreen: mainscreen(); break;
case addr_madmanrun: madmanrun(); break;
- case addr_checkcoords: checkcoords(); break;
case addr_identifyob: identifyob(); break;
- case addr_checkifset: checkifset(); break;
- case addr_checkifex: checkifex(); break;
- case addr_isitdescribed: isitdescribed(); break;
case addr_findpathofpoint: findpathofpoint(); break;
case addr_findfirstpath: findfirstpath(); break;
- case addr_turnpathon: turnpathon(); break;
- case addr_turnpathoff: turnpathoff(); break;
- case addr_turnanypathon: turnanypathon(); break;
- case addr_turnanypathoff: turnanypathoff(); break;
- case addr_checkifpathison: checkifpathison(); break;
case addr_afternewroom: afternewroom(); break;
case addr_atmospheres: atmospheres(); break;
case addr_walkintoroom: walkintoroom(); break;
case addr_afterintroroom: afterintroroom(); break;
- case addr_obname: obname(); break;
case addr_examineobtext: examineobtext(); break;
- case addr_printmessage: printmessage(); break;
case addr_printmessage2: printmessage2(); break;
- case addr_getflagunderp: getflagunderp(); break;
case addr_setwalk: setwalk(); break;
case addr_bresenhams: bresenhams(); break;
case addr_workoutframes: workoutframes(); break;
@@ -18597,33 +17409,20 @@ void DreamGenContext::__dispatch_call(uint16 addr) {
case addr_showwatch: showwatch(); break;
case addr_gettime: gettime(); break;
case addr_zoomicon: zoomicon(); break;
- case addr_showblink: showblink(); break;
- case addr_dumpblink: dumpblink(); break;
case addr_worktoscreenm: worktoscreenm(); break;
case addr_blank: blank(); break;
case addr_allpointer: allpointer(); break;
- case addr_hangonp: hangonp(); break;
case addr_hangonw: hangonw(); break;
case addr_hangoncurs: hangoncurs(); break;
case addr_getunderzoom: getunderzoom(); break;
case addr_dumpzoom: dumpzoom(); break;
case addr_putunderzoom: putunderzoom(); break;
- case addr_showpointer: showpointer(); break;
- case addr_delpointer: delpointer(); break;
- case addr_dumppointer: dumppointer(); break;
case addr_undertextline: undertextline(); break;
- case addr_animpointer: animpointer(); break;
case addr_setmouse: setmouse(); break;
- case addr_readmouse: readmouse(); break;
case addr_mousecall: mousecall(); break;
- case addr_readmouse1: readmouse1(); break;
- case addr_readmouse2: readmouse2(); break;
- case addr_readmouse3: readmouse3(); break;
- case addr_readmouse4: readmouse4(); break;
case addr_readkey: readkey(); break;
case addr_randomnum1: randomnum1(); break;
case addr_randomnum2: randomnum2(); break;
- case addr_hangon: hangon(); break;
case addr_loadtraveltext: loadtraveltext(); break;
case addr_loadintotemp: loadintotemp(); break;
case addr_loadintotemp2: loadintotemp2(); break;
@@ -18659,7 +17458,6 @@ void DreamGenContext::__dispatch_call(uint16 addr) {
case addr_setkeyboardint: setkeyboardint(); break;
case addr_resetkeyboard: resetkeyboard(); break;
case addr_keyboardread: keyboardread(); break;
- case addr_walkandexamine: walkandexamine(); break;
case addr_doload: doload(); break;
case addr_generalerror: generalerror(); break;
default: ::error("invalid call to %04x dispatched", (uint16)ax);
diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h
index 7ed079c00e..026b412b55 100644
--- a/engines/dreamweb/dreamgen.h
+++ b/engines/dreamweb/dreamgen.h
@@ -74,33 +74,20 @@ public:
static const uint16 addr_loadintotemp2 = 0xcb1c;
static const uint16 addr_loadintotemp = 0xcb18;
static const uint16 addr_loadtraveltext = 0xcb14;
- static const uint16 addr_hangon = 0xcb10;
static const uint16 addr_randomnum2 = 0xcb08;
static const uint16 addr_randomnum1 = 0xcb04;
static const uint16 addr_readkey = 0xcafc;
- static const uint16 addr_readmouse4 = 0xcaf8;
- static const uint16 addr_readmouse3 = 0xcaf4;
- static const uint16 addr_readmouse2 = 0xcaf0;
- static const uint16 addr_readmouse1 = 0xcaec;
static const uint16 addr_mousecall = 0xcae8;
- static const uint16 addr_readmouse = 0xcae4;
static const uint16 addr_setmouse = 0xcae0;
- static const uint16 addr_animpointer = 0xcadc;
static const uint16 addr_undertextline = 0xcad0;
- static const uint16 addr_dumppointer = 0xcacc;
- static const uint16 addr_delpointer = 0xcac8;
- static const uint16 addr_showpointer = 0xcac4;
static const uint16 addr_putunderzoom = 0xcabc;
static const uint16 addr_dumpzoom = 0xcab8;
static const uint16 addr_getunderzoom = 0xcab4;
static const uint16 addr_hangoncurs = 0xcab0;
static const uint16 addr_hangonw = 0xcaac;
- static const uint16 addr_hangonp = 0xcaa8;
static const uint16 addr_allpointer = 0xcaa4;
static const uint16 addr_blank = 0xcaa0;
static const uint16 addr_worktoscreenm = 0xca9c;
- static const uint16 addr_dumpblink = 0xca98;
- static const uint16 addr_showblink = 0xca94;
static const uint16 addr_zoomicon = 0xca90;
static const uint16 addr_gettime = 0xca8c;
static const uint16 addr_showwatch = 0xca88;
@@ -115,30 +102,17 @@ public:
static const uint16 addr_workoutframes = 0xca54;
static const uint16 addr_bresenhams = 0xca50;
static const uint16 addr_setwalk = 0xca44;
- static const uint16 addr_getflagunderp = 0xca40;
static const uint16 addr_printmessage2 = 0xca30;
- static const uint16 addr_printmessage = 0xca2c;
static const uint16 addr_examineobtext = 0xca20;
- static const uint16 addr_obname = 0xca18;
static const uint16 addr_afterintroroom = 0xca14;
static const uint16 addr_walkintoroom = 0xca10;
static const uint16 addr_atmospheres = 0xca0c;
static const uint16 addr_afternewroom = 0xca08;
- static const uint16 addr_checkifpathison = 0xca04;
- static const uint16 addr_turnanypathoff = 0xca00;
- static const uint16 addr_turnanypathon = 0xc9fc;
- static const uint16 addr_turnpathoff = 0xc9f8;
- static const uint16 addr_turnpathon = 0xc9f4;
static const uint16 addr_findfirstpath = 0xc9f0;
static const uint16 addr_findpathofpoint = 0xc9ec;
- static const uint16 addr_isitdescribed = 0xc9e8;
- static const uint16 addr_checkifex = 0xc9e0;
- static const uint16 addr_checkifset = 0xc9dc;
static const uint16 addr_identifyob = 0xc9d4;
- static const uint16 addr_checkcoords = 0xc9d0;
static const uint16 addr_madmanrun = 0xc9cc;
static const uint16 addr_mainscreen = 0xc9c8;
- static const uint16 addr_walkandexamine = 0xcbb8;
static const uint16 addr_convnum = 0xc9c4;
static const uint16 addr_showword = 0xc9c0;
static const uint16 addr_twodigitnum = 0xc9bc;
@@ -195,7 +169,7 @@ public:
static const uint16 addr_createname = 0xc8cc;
static const uint16 addr_loadspeech = 0xc8c8;
static const uint16 addr_loadold = 0xc8c4;
- static const uint16 addr_doload = 0xcbbc;
+ static const uint16 addr_doload = 0xcbb8;
static const uint16 addr_newgame = 0xc8c0;
static const uint16 addr_showdecisions = 0xc8bc;
static const uint16 addr_decide = 0xc8b8;
@@ -211,7 +185,7 @@ public:
static const uint16 addr_oldtonames = 0xc88c;
static const uint16 addr_namestoold = 0xc888;
static const uint16 addr_error = 0xc884;
- static const uint16 addr_generalerror = 0xcbc0;
+ static const uint16 addr_generalerror = 0xcbbc;
static const uint16 addr_dosreturn = 0xc880;
static const uint16 addr_shownames = 0xc87c;
static const uint16 addr_showslots = 0xc878;
@@ -309,12 +283,10 @@ public:
static const uint16 addr_findpuztext = 0xc6e0;
static const uint16 addr_showpuztext = 0xc6dc;
static const uint16 addr_putbackobstuff = 0xc6d8;
- static const uint16 addr_usetext = 0xc6d4;
static const uint16 addr_checkinside = 0xc6d0;
static const uint16 addr_isryanholding = 0xc6cc;
static const uint16 addr_findexobject = 0xc6c8;
static const uint16 addr_findsetobject = 0xc6c4;
- static const uint16 addr_compare = 0xc6c0;
static const uint16 addr_selectob = 0xc6bc;
static const uint16 addr_withwhat = 0xc6b8;
static const uint16 addr_useelvdoor = 0xc6b4;
@@ -393,7 +365,6 @@ public:
static const uint16 addr_playguitar = 0xc590;
static const uint16 addr_runtap = 0xc58c;
static const uint16 addr_wheelsound = 0xc588;
- static const uint16 addr_useroutine = 0xc584;
static const uint16 addr_useobject = 0xc580;
static const uint16 addr_delcurs = 0xc57c;
static const uint16 addr_printcurs = 0xc578;
@@ -463,8 +434,6 @@ public:
static const uint16 addr_dolook = 0xc474;
static const uint16 addr_look = 0xc470;
static const uint16 addr_autolook = 0xc46c;
- static const uint16 addr_showallex = 0xc450;
- static const uint16 addr_drawflags = 0xc43c;
static const uint16 addr_drawfloor = 0xc428;
static const uint16 addr_blockget = 0xc424;
static const uint16 addr_deleteextext = 0xc420;
@@ -473,7 +442,6 @@ public:
static const uint16 addr_purgeanitem = 0xc414;
static const uint16 addr_emergencypurge = 0xc410;
static const uint16 addr_purgealocation = 0xc40c;
- static const uint16 addr_getexpos = 0xc408;
static const uint16 addr_transfertext = 0xc404;
static const uint16 addr_transfercontoex = 0xc400;
static const uint16 addr_pickupconts = 0xc3fc;
@@ -508,31 +476,21 @@ public:
static const uint16 addr_examinventory = 0xc384;
static const uint16 addr_setpickup = 0xc380;
static const uint16 addr_inventory = 0xc37c;
- static const uint16 addr_findnextcolon = 0xc378;
static const uint16 addr_searchforsame = 0xc374;
static const uint16 addr_getobtextstart = 0xc370;
static const uint16 addr_obsthatdothings = 0xc36c;
static const uint16 addr_additionaltext = 0xc368;
static const uint16 addr_describeob = 0xc364;
- static const uint16 addr_obpicture = 0xc360;
static const uint16 addr_examicon = 0xc35c;
- static const uint16 addr_obicons = 0xc358;
static const uint16 addr_openob = 0xc354;
- static const uint16 addr_showryanpage = 0xc350;
static const uint16 addr_openinv = 0xc34c;
static const uint16 addr_incryanpage = 0xc348;
static const uint16 addr_getbackfromob = 0xc344;
static const uint16 addr_makemainscreen = 0xc340;
static const uint16 addr_examineob = 0xc33c;
- static const uint16 addr_makeworn = 0xc338;
- static const uint16 addr_isitworn = 0xc334;
- static const uint16 addr_obtoinv = 0xc330;
static const uint16 addr_findallopen = 0xc32c;
- static const uint16 addr_findallryan = 0xc328;
static const uint16 addr_fillopen = 0xc324;
- static const uint16 addr_fillryan = 0xc320;
static const uint16 addr_monprint = 0xc314;
- static const uint16 addr_waitframes = 0xc308;
static const uint16 addr_realcredits = 0xc2f8;
static const uint16 addr_set16colpalette = 0xc2f4;
static const uint16 addr_mode640x480 = 0xc2f0;
@@ -579,20 +537,13 @@ public:
static const uint16 addr_dofade = 0xc24c;
static const uint16 addr_fadedos = 0xc248;
static const uint16 addr_transfermap = 0xc244;
- static const uint16 addr_transferinv = 0xc240;
- static const uint16 addr_delthisone = 0xc214;
static const uint16 addr_doshake = 0xc20c;
static const uint16 addr_vsync = 0xc208;
static const uint16 addr_createpanel2 = 0xc200;
static const uint16 addr_createpanel = 0xc1fc;
- static const uint16 addr_pixelcheckset = 0xc1f8;
- static const uint16 addr_dumpmap = 0xc1f4;
- static const uint16 addr_maptopanel = 0xc1f0;
- static const uint16 addr_paneltomap = 0xc1ec;
static const uint16 addr_setmode = 0xc1dc;
static const uint16 addr_loadpalfromiff = 0xc1d8;
static const uint16 addr_showpcx = 0xc1cc;
- static const uint16 addr_dumpeverything = 0xc1c4;
static const uint16 addr_deleverything = 0xc1c0;
static const uint16 addr_reconstruct = 0xc1ac;
static const uint16 addr_soundonreels = 0xc1a8;
@@ -602,7 +553,6 @@ public:
static const uint16 addr_random = 0xc17c;
static const uint16 addr_liftnoise = 0xc178;
static const uint16 addr_backobject = 0xc170;
- static const uint16 addr_getblockofpixel = 0xc168;
static const uint16 addr_splitintolines = 0xc164;
static const uint16 addr_initrain = 0xc160;
static const uint16 addr_reminders = 0xc15c;
@@ -612,9 +562,7 @@ public:
static const uint16 addr_adjustdown = 0xc14c;
static const uint16 addr_checkforexit = 0xc148;
static const uint16 addr_mainman = 0xc138;
- static const uint16 addr_delsprite = 0xc11c;
static const uint16 addr_checkspeed = 0xc110;
- static const uint16 addr_addtopeoplelist = 0xc108;
static const uint16 addr_train = 0xc104;
static const uint16 addr_sparky = 0xc100;
static const uint16 addr_copper = 0xc0fc;
@@ -683,23 +631,21 @@ public:
static const uint16 offset_savelist = 0x0f44;
static const uint16 offset_mainlist = 0x1402;
static const uint16 offset_gameerror8 = 0x113f;
- static const uint16 offset_blinktab = 0x1700;
+ static const uint16 offset_gameerror5 = 0x1074;
static const uint16 offset_error2patch = 0x0ff6;
static const uint16 offset_openchangesize = 0x0a1c;
static const uint16 offset_keys = 0x0b14;
static const uint16 offset_mainlist2 = 0x1440;
- static const uint16 offset_uselist = 0x0ba8;
static const uint16 offset_gameerror2 = 0x0fb2;
static const uint16 offset_loadlist = 0x0ef0;
static const uint16 offset_gameerror6 = 0x10be;
- static const uint16 offset_flashmousetab = 0x1707;
static const uint16 offset_speechfile = 0x13f1;
static const uint16 offset_atmospherelist = 0x147e;
static const uint16 offset_gameerror4 = 0x1037;
static const uint16 offset_gameerror1 = 0x0f6e;
static const uint16 offset_examlist = 0x09be;
static const uint16 offset_gameinfo = 0x1170;
- static const uint16 offset_decidelist = 0x13c1;
+ static const uint16 offset_opslist = 0x0ec6;
static const uint16 offset_invlist1 = 0x09fc;
static const uint16 offset_money2poke = 0x0d97;
static const uint16 offset_talklist = 0x0a64;
@@ -715,14 +661,13 @@ public:
static const uint16 offset_error6patch = 0x10fe;
static const uint16 offset_keybuffer = 0x1718;
static const uint16 offset_speechfilename = 0x13eb;
- static const uint16 offset_folderlist = 0x0e34;
static const uint16 offset_rootdir = 0x0b8c;
static const uint16 offset_gameerror3 = 0x1003;
static const uint16 offset_rainlocations = 0x0459;
static const uint16 offset_diarylist = 0x0e9c;
- static const uint16 offset_opslist = 0x0ec6;
+ static const uint16 offset_decidelist = 0x13c1;
static const uint16 offset_symbollist = 0x0e5e;
- static const uint16 offset_gameerror5 = 0x1074;
+ static const uint16 offset_folderlist = 0x0e34;
static const uint16 offset_facelist = 0x0451;
static const uint16 offset_operand1 = 0x0b7e;
static const uint16 offset_keypadlist = 0x0d9a;
@@ -1308,7 +1253,6 @@ public:
void uselighter();
void showmenu();
void usepoolreader();
- void showgroup();
void startdmablock();
void useopenbox();
void clearbuffers();
@@ -1316,18 +1260,19 @@ public:
void neterror();
void storeit();
//void lockeddoorway();
- void isitworn();
+ //void isitworn();
//void putundertimed();
- void dumpmap();
+ //void dumpmap();
//void multidump();
void channel0only();
void worktoscreenm();
+ //void obicons();
void removeemm();
//void frameoutbh();
void getobtextstart();
void loadfolder();
void decide();
- void dumppointer();
+ //void dumppointer();
void reelsonscreen();
void getridofreels();
void readkey();
@@ -1340,7 +1285,7 @@ public:
void bresenhams();
void getbackfromops();
//void frameoutv();
- void opensarters();
+ void showbyte();
void screenupdate();
//void addlength();
void wornerror();
@@ -1349,16 +1294,16 @@ public:
//void commandonly();
void titles();
void deallocatemem();
- void checkforemm();
+ void mainscreen();
void watchreel();
void showfolder();
- void turnanypathoff();
+ //void turnanypathoff();
void openfilefromc();
void gettime();
//void clearwork();
void loadtraveltext();
//void worktoscreen();
- void getexpos();
+ //void getexpos();
void fadedos();
//void fillspace();
void selectlocation();
@@ -1375,13 +1320,13 @@ public:
void usecashcard();
void usewall();
void opentomb();
- //void findobname();
//void makename();
void buttonfour();
- void animpointer();
+ void restoreall();
//void lockmon();
//void dochange();
void getanyaddir();
+ //void dumpblink();
void showsaveops();
void intromonks1();
void resetlocation();
@@ -1389,7 +1334,7 @@ public:
void showdiscops();
void advisor();
void additionaltext();
- //void kernchars();
+ //void compare();
void othersmoker();
void dofade();
//void setuptimedtemp();
@@ -1421,7 +1366,7 @@ public:
void loadintotemp();
void loadintroroom();
void saveseg();
- void showblink();
+ //void showblink();
void mousecall();
void train();
void watchcount();
@@ -1433,10 +1378,10 @@ public:
void showdiary();
void purgealocation();
//void updatepeople();
- void addtopeoplelist();
+ //void addtopeoplelist();
void hangoncurs();
- void sparkydrip();
- void compare();
+ //void getblockofpixel();
+ //void kernchars();
void printcurs();
//void convertkey();
void outofopen();
@@ -1445,7 +1390,7 @@ public:
void dircom();
//void liftsprite();
void dumpkeypad();
- void dumpzoom();
+ void showsymbol();
void endgameseq();
//void cancelch0();
void setbotleft();
@@ -1453,8 +1398,9 @@ public:
//void cancelch1();
void loadold();
void loadtempcharset();
- void showbyte();
void useslab();
+ void dumpzoom();
+ //void aboutturn();
void usealtar();
void createpanel2();
void turnonpower();
@@ -1477,21 +1423,20 @@ public:
void selectslot2();
void runtap();
//void domix();
- void priesttext();
- void paneltomap();
- void obname();
+ //void paneltomap();
+ //void obname();
void getridoftemp3();
void getridoftemp2();
void usebalcony();
void runendseq();
void dumpdiarykeys();
void disablesoundint();
- void checkifset();
- void showallex();
+ void priesttext();
+ //void showallex();
void openpoolboss();
void buttontwo();
//void usetimedtext();
- void delsprite();
+ //void delsprite();
//void getroomspaths();
//void dumptextline();
void fadescreendownhalf();
@@ -1499,7 +1444,7 @@ public:
void candles1();
void lookininterface();
void manasleep();
- void isitdescribed();
+ //void isitdescribed();
void hotelbell();
void loadspeech();
void interupttest();
@@ -1516,7 +1461,7 @@ public:
void getfreead();
void showarrows();
void walkintoroom();
- void getridoftemptext();
+ void usehatch();
void printoutermon();
void setuppit();
void showpcx();
@@ -1524,7 +1469,7 @@ public:
void checkspeed();
//void printchar();
void showkeypad();
- void obtoinv();
+ //void obtoinv();
//void getroomdata();
void removeobfrominv();
void usecoveredbox();
@@ -1541,7 +1486,7 @@ public:
void usetempcharset();
void discops();
//void printdirect();
- void delthisone();
+ //void delthisone();
//void makebackob();
void middlepanel();
void dumpwatch();
@@ -1558,14 +1503,14 @@ public:
void wearwatch();
void runintroseq();
//void doblocks();
- void restoreall();
- void allpalette();
+ void opensarters();
+ //void delpointer();
void attendant();
void nextsymbol();
void monks2text();
void clearpalette();
void cantdrop();
- void maptopanel();
+ //void maptopanel();
//void calcmapad();
void getridofall();
void copper();
@@ -1578,7 +1523,7 @@ public:
void drinker();
void nextcolon();
void placefreeobject();
- void delpointer();
+ void allpalette();
//void loopchannel0();
void initrain();
void showleftpage();
@@ -1588,7 +1533,7 @@ public:
void vsync();
//void finishedwalking();
void findinvpos();
- void usetext();
+ void dumpmenu();
void hangonpq();
void liftnoise();
void workoutframes();
@@ -1604,18 +1549,18 @@ public:
void showouterpad();
void getkeyandlogo();
void selectob();
- void checkcoords();
- void dumpmenu();
+ //void checkcoords();
+ //void usetext();
void chewy();
void accesslighton();
- void dosreturn();
+ void useplinth();
//void adjustlen();
//void quickquit();
- void showpointer();
+ //void showpointer();
void usecooker();
void loadmenu();
- //void aboutturn();
- void checkifpathison();
+ void checkforemm();
+ //void checkifpathison();
//void finalframe();
void receptionist();
void selectslot();
@@ -1632,9 +1577,9 @@ public:
void errormessage3();
//void deletetaken();
void putundermenu();
- void checkifex();
+ void intromonks2();
void intromagic2();
- void mainscreen();
+ void intromagic3();
void edeninbath();
void intromagic1();
void showdiarypage();
@@ -1647,13 +1592,13 @@ public:
void playchannel0();
void usemon();
void steady();
- void pixelcheckset();
+ //void pixelcheckset();
void reexfrominv();
void examinventory();
void talk();
void usedryer();
- void dumpeverything();
- void usehatch();
+ //void dumpeverything();
+ //void readmouse2();
//void zoom();
void outofinv();
void viewfolder();
@@ -1662,10 +1607,10 @@ public:
//void readabyte();
//void showframe();
void random();
- void obicons();
+ void mainman();
void mansatstill();
void channel1only();
- void playguitar();
+ void checkbasemem();
void lastfolder();
void transfermap();
//void showreelframe();
@@ -1678,36 +1623,38 @@ public:
void purgeanitem();
void madman();
void createpanel();
- void turnpathon();
+ //void turnpathon();
void enablesoundint();
void madmanstelly();
void constant();
void loadroomssample();
- void getblockofpixel();
+ void sparkydrip();
void paltostartpal();
void bossman();
void getridofpit();
void convnum();
+ //void checkifset();
void nothelderror();
//void readheader();
void getsetad();
void textformonk();
void reconstruct();
void soldier1();
+ //void animpointer();
void getundercentre();
void checkforexit();
void loadseg();
void makeheader();
void setkeyboardint();
void priest();
- void readmouse();
+ //void readmouse();
void powerlighton();
void savefilewrite();
void printmessage2();
//void showallfree();
void loadnews();
void rollem();
- void makeworn();
+ //void makeworn();
void examineobtext();
void startup();
void savegame();
@@ -1717,11 +1664,11 @@ public:
void describeob();
void deleteexframe();
void folderexit();
- void useplinth();
+ void dosreturn();
void wheelsound();
void actualsave();
void autolook();
- void checkbasemem();
+ void playguitar();
void transfertext();
void searchforsame();
void showmainops();
@@ -1761,7 +1708,7 @@ public:
void initialinv();
void quitsymbol();
//void modifychar();
- void hangon();
+ //void initman();
void settopright();
void findsetobject();
void singlekey();
@@ -1791,15 +1738,16 @@ public:
void dropobject();
void isitright();
void reexfromopen();
- void fillryan();
+ //void fillryan();
void drawitall();
void usestereo();
void showcurrentfile();
+ //void turnpathoff();
//void copyname();
void look();
void setmouse();
//void checkone();
- void transferinv();
+ //void transferinv();
void candles2();
void pickupob();
void error();
@@ -1812,7 +1760,7 @@ public:
void usetrainer();
//void allocatework();
void addtopresslist();
- void walkandexamine();
+ //void walkandexamine();
void dmaend();
//void quickquit2();
void twodigitnum();
@@ -1843,7 +1791,7 @@ public:
void louischair();
void saveems();
void locationpic();
- void getflagunderp();
+ //void getflagunderp();
void dolook();
void opentvdoor();
void triggermessage();
@@ -1859,17 +1807,17 @@ public:
void gates();
void newgame();
void showwatch();
- void turnanypathon();
+ //void turnanypathon();
void restorereels();
void setwalk();
- void useroutine();
+ //void useroutine();
void zoomicon();
//void findlen();
void findpathofpoint();
void issetobonmap();
void getdestinfo();
void drunk();
- void dumpblink();
+ void getridoftemptext();
void setuptimeduse();
void grafittidoor();
void input();
@@ -1879,12 +1827,11 @@ public:
void read();
void fadescreenups();
//void checkdest();
- //void initman();
+ //void hangon();
void loadpalfromiff();
//void facerightway();
void startup1();
void hotelcontrol();
- void showsymbol();
void mugger();
void atmospheres();
void out22c();
@@ -1893,7 +1840,7 @@ public:
void settopleft();
void searchforstring();
//void clearsprites();
- void obpicture();
+ //void obpicture();
void selectopenob();
//void widedoor();
void security();
@@ -1902,12 +1849,12 @@ public:
void soundonreels();
void usegun();
void autoappear();
- void findnextcolon();
- void readmouse4();
+ //void findnextcolon();
+ //void readmouse4();
void openryan();
- void readmouse1();
- void readmouse3();
- void readmouse2();
+ void callhotellift();
+ void showman();
+ void usefullcart();
void newplace();
//void movemap();
void loadsample();
@@ -1932,7 +1879,7 @@ public:
void searchforfiles();
void monkspeaking();
void fadecalculation();
- void waitframes();
+ //void waitframes();
void clearrest();
//void getreelframeax();
void barwoman();
@@ -1943,13 +1890,13 @@ public:
void keeper();
void afternewroom();
void getexad();
- void aide();
void openforsave();
void closefile();
void delcurs();
void randomaccess();
void splitintolines();
- void intromagic3();
+ //void checkifex();
+ //void findobname();
void initialmoncols();
void checkforshake();
void usebuttona();
@@ -1972,28 +1919,27 @@ public:
void usecontrol();
void buttonseven();
void redrawmainscrn();
- void turnpathoff();
- void findallryan();
+ void showgroup();
+ //void findallryan();
//void channel0tran();
void buttonpress();
//void parseblaster();
- void callhotellift();
+ //void readmouse1();
void makemainscreen();
- void intromonks2();
void usewinch();
void setbotright();
- void showman();
+ //void readmouse3();
void showfirstuse();
void setupemm();
- void usefullcart();
+ void aide();
//void getmapad();
void getlocation();
void geteitherad();
//void placesetobject();
- void drawflags();
+ //void drawflags();
void zoomonoff();
void updatesymboltop();
- void showryanpage();
+ //void showryanpage();
void printlogo();
void allpointer();
void showseconduse();
@@ -2008,7 +1954,7 @@ public:
void parser();
void hangonw();
void intro();
- void hangonp();
+ //void hangonp();
void fadescreendowns();
void openhoteldoor2();
void getridoftempsp();
@@ -2036,7 +1982,7 @@ public:
void loadsecondsample();
void transfercontoex();
//void multiput();
- void printmessage();
+ //void printmessage();
void businessman();
void switchryanoff();
//void commandwithob();
@@ -2049,7 +1995,6 @@ public:
void accesslightoff();
void usehole();
void useobject();
- void mainman();
void volumeadjust();
//void checkiffree();
};
diff --git a/engines/dreamweb/dreamweb.cpp b/engines/dreamweb/dreamweb.cpp
index 19d1d84a51..0e43f18db6 100644
--- a/engines/dreamweb/dreamweb.cpp
+++ b/engines/dreamweb/dreamweb.cpp
@@ -303,7 +303,7 @@ void DreamWebEngine::keyPressed(uint16 ascii) {
keybuf[in] = ascii;
}
-void DreamWebEngine::mouseCall() {
+void DreamWebEngine::mouseCall(uint16 *x, uint16 *y, uint16 *state) {
processEvents();
Common::EventManager *eventMan = _system->getEventManager();
Common::Point pos = eventMan->getMousePos();
@@ -315,13 +315,12 @@ void DreamWebEngine::mouseCall() {
pos.y = 15;
if (pos.y > 184)
pos.y = 184;
- _context.cx = pos.x;
- _context.dx = pos.y;
+ *x = pos.x;
+ *y = pos.y;
- unsigned state = eventMan->getButtonState();
- _context.bx = state == _oldMouseState? 0: state;
- _oldMouseState = state;
- _context.flags._c = false;
+ unsigned newState = eventMan->getButtonState();
+ *state = (newState == _oldMouseState? 0 : newState);
+ _oldMouseState = newState;
}
void DreamWebEngine::fadeDos() {
diff --git a/engines/dreamweb/dreamweb.h b/engines/dreamweb/dreamweb.h
index a7de64a350..97f6007f9d 100644
--- a/engines/dreamweb/dreamweb.h
+++ b/engines/dreamweb/dreamweb.h
@@ -82,7 +82,7 @@ public:
uint32 skipBytes(uint32 bytes);
void closeFile();
- void mouseCall(); //fill mouse pos and button state
+ void mouseCall(uint16 *x, uint16 *y, uint16 *state); //fill mouse pos and button state
void processEvents();
void setPalette();
void fadeDos();
diff --git a/engines/dreamweb/module.mk b/engines/dreamweb/module.mk
index bdacbe79f3..8cacbdc91e 100644
--- a/engines/dreamweb/module.mk
+++ b/engines/dreamweb/module.mk
@@ -11,6 +11,7 @@ MODULE_OBJS := \
saveload.o \
sprite.o \
stubs.o \
+ use.o \
vgagrafx.o
# This module can be built as a plugin
diff --git a/engines/dreamweb/pathfind.cpp b/engines/dreamweb/pathfind.cpp
index 2579105c6f..d6ef7f48be 100644
--- a/engines/dreamweb/pathfind.cpp
+++ b/engines/dreamweb/pathfind.cpp
@@ -21,50 +21,69 @@
*/
#include "dreamweb/dreamweb.h"
-#include "engines/util.h"
-#include "graphics/surface.h"
-#include "common/config-manager.h"
namespace DreamGen {
-void DreamGenContext::turnpathonCPP(uint8 param) {
- al = param;
- push(es);
- push(bx);
- turnpathon();
- bx = pop();
- es = pop();
+void DreamGenContext::turnpathon() {
+ turnpathon(al);
}
-void DreamGenContext::turnpathoffCPP(uint8 param) {
- al = param;
- push(es);
- push(bx);
- turnpathoff();
- bx = pop();
- es = pop();
+void DreamGenContext::turnpathon(uint8 param) {
+ findormake(param, 0xff, data.byte(kRoomnum) + 100);
+ PathNode *roomsPaths = getroomspaths()->nodes;
+ if (param == 0xff)
+ return;
+ roomsPaths[param].on = 0xff;
+}
+
+void DreamGenContext::turnpathoff() {
+ turnpathoff(al);
}
-void DreamGenContext::getroomspaths() {
- es = data.word(kReels);
- bx = data.byte(kRoomnum) * 144;
+void DreamGenContext::turnpathoff(uint8 param) {
+ findormake(param, 0x00, data.byte(kRoomnum) + 100);
+ PathNode *roomsPaths = getroomspaths()->nodes;
+ if (param == 0xff)
+ return;
+ roomsPaths[param].on = 0x00;
+}
+
+void DreamGenContext::turnanypathon(uint8 param, uint8 room) {
+ findormake(param, 0xff, room + 100);
+ PathNode *paths = (PathNode *)segRef(data.word(kReels)).ptr(kPathdata + 144 * room, 0);
+ paths[param].on = 0xff;
+}
+
+
+void DreamGenContext::turnanypathon() {
+ turnanypathon(al, ah);
}
-uint8 *DreamGenContext::getroomspathsCPP() {
+void DreamGenContext::turnanypathoff(uint8 param, uint8 room) {
+ findormake(param, 0x00, room + 100);
+ PathNode *paths = (PathNode *)segRef(data.word(kReels)).ptr(kPathdata + 144 * room, 0);
+ paths[param].on = 0x00;
+}
+
+void DreamGenContext::turnanypathoff() {
+ turnanypathoff(al, ah);
+}
+
+RoomPaths *DreamGenContext::getroomspaths() {
void *result = segRef(data.word(kReels)).ptr(data.byte(kRoomnum) * 144, 144);
- return (uint8 *)result;
+ return (RoomPaths *)result;
}
void DreamGenContext::autosetwalk() {
al = data.byte(kManspath);
if (data.byte(kFinaldest) == al)
return;
- const uint8 *roomsPaths = getroomspathsCPP();
+ const RoomPaths *roomsPaths = getroomspaths();
checkdest(roomsPaths);
- data.word(kLinestartx) = roomsPaths[data.byte(kManspath) * 8 + 0] - 12;
- data.word(kLinestarty) = roomsPaths[data.byte(kManspath) * 8 + 1] - 12;
- data.word(kLineendx) = roomsPaths[data.byte(kDestination) * 8 + 0] - 12;
- data.word(kLineendy) = roomsPaths[data.byte(kDestination) * 8 + 1] - 12;
+ data.word(kLinestartx) = roomsPaths->nodes[data.byte(kManspath)].x - 12;
+ data.word(kLinestarty) = roomsPaths->nodes[data.byte(kManspath)].y - 12;
+ data.word(kLineendx) = roomsPaths->nodes[data.byte(kDestination)].x - 12;
+ data.word(kLineendy) = roomsPaths->nodes[data.byte(kDestination)].y - 12;
bresenhams();
if (data.byte(kLinedirection) != 0) {
data.byte(kLinepointer) = data.byte(kLinelength) - 1;
@@ -74,32 +93,41 @@ void DreamGenContext::autosetwalk() {
data.byte(kLinepointer) = 0;
}
-void DreamGenContext::checkdest(const uint8 *roomsPaths) {
- const uint8 *p = roomsPaths + 12 * 8;
+void DreamGenContext::checkdest(const RoomPaths *roomsPaths) {
+ const PathSegment *segments = roomsPaths->segments;
ah = data.byte(kManspath) << 4;
al = data.byte(kDestination);
uint8 destination = data.byte(kDestination);
for (size_t i = 0; i < 24; ++i) {
- dh = p[0] & 0xf0;
- dl = p[0] & 0x0f;
+ dh = segments[i].b0 & 0xf0;
+ dl = segments[i].b0 & 0x0f;
if (ax == dx) {
- data.byte(kDestination) = p[1] & 0x0f;
+ data.byte(kDestination) = segments[i].b1 & 0x0f;
return;
}
- dl = (p[0] & 0xf0) >> 4;
- dh = (p[0] & 0x0f) << 4;
+ dl = (segments[i].b0 & 0xf0) >> 4;
+ dh = (segments[i].b0 & 0x0f) << 4;
if (ax == dx) {
- destination = p[1] & 0x0f;
+ destination = segments[i].b1 & 0x0f;
}
- p += 2;
}
data.byte(kDestination) = destination;
}
void DreamGenContext::findxyfrompath() {
- const uint8 *roomsPaths = getroomspathsCPP();
- data.byte(kRyanx) = roomsPaths[data.byte(kManspath) * 8 + 0] - 12;
- data.byte(kRyany) = roomsPaths[data.byte(kManspath) * 8 + 1] - 12;
+ const PathNode *roomsPaths = getroomspaths()->nodes;
+ data.byte(kRyanx) = roomsPaths[data.byte(kManspath)].x - 12;
+ data.byte(kRyany) = roomsPaths[data.byte(kManspath)].y - 12;
+}
+
+void DreamGenContext::checkifpathison() {
+ flags._z = checkifpathison(al);
+}
+
+bool DreamGenContext::checkifpathison(uint8 index) {
+ RoomPaths *roomsPaths = getroomspaths();
+ uint8 pathOn = roomsPaths->nodes[index].on;
+ return pathOn == 0xff;
}
} /*namespace dreamgen */
diff --git a/engines/dreamweb/print.cpp b/engines/dreamweb/print.cpp
index 26084c35d1..edaf8ee1eb 100644
--- a/engines/dreamweb/print.cpp
+++ b/engines/dreamweb/print.cpp
@@ -21,8 +21,6 @@
*/
#include "dreamweb/dreamweb.h"
-#include "engines/util.h"
-#include "graphics/surface.h"
namespace DreamGen {
@@ -112,10 +110,12 @@ uint8 DreamGenContext::printslow(const uint8 *string, uint16 x, uint16 y, uint8
printboth(charSet, &offset2, y, c1, c2);
data.word(kCharshift) = 0;
for (int i=0; i<2; ++i) {
- waitframes();
- if (ax == 0)
+ uint16 mouseState = waitframes();
+ if (data.byte(kQuitrequested))
+ return 0;
+ if (mouseState == 0)
continue;
- if (ax != data.word(kOldbutton)) {
+ if (mouseState != data.word(kOldbutton)) {
return 1;
}
}
@@ -138,6 +138,10 @@ void DreamGenContext::printdirect() {
bx = y;
}
+void DreamGenContext::printdirect(const uint8* string, uint16 x, uint16 y, uint8 maxWidth, bool centered) {
+ printdirect(&string, x, &y, maxWidth, centered);
+}
+
void DreamGenContext::printdirect(const uint8** string, uint16 x, uint16 *y, uint8 maxWidth, bool centered) {
data.word(kLastxpos) = x;
const Frame *charSet = (const Frame *)segRef(data.word(kCurrentset)).ptr(0, 0);
@@ -216,8 +220,13 @@ uint8 DreamGenContext::kernchars(uint8 firstChar, uint8 secondChar, uint8 width)
return width;
}
-void DreamGenContext::kernchars() {
- cl = kernchars(al, ah, cl);
+uint16 DreamGenContext::waitframes() {
+ readmouse();
+ showpointer();
+ vsync();
+ dumppointer();
+ delpointer();
+ return data.word(kMousebutton);
}
} /*namespace dreamgen */
diff --git a/engines/dreamweb/sprite.cpp b/engines/dreamweb/sprite.cpp
index e9a40d7f8c..864bba1d8c 100644
--- a/engines/dreamweb/sprite.cpp
+++ b/engines/dreamweb/sprite.cpp
@@ -21,8 +21,6 @@
*/
#include "dreamweb/dreamweb.h"
-#include "engines/util.h"
-#include "graphics/surface.h"
namespace DreamGen {
@@ -90,17 +88,6 @@ Sprite *DreamGenContext::makesprite(uint8 x, uint8 y, uint16 updateCallback, uin
return sprite;
}
-void DreamGenContext::makesprite() { // NB: returns new sprite in es:bx
- Sprite *sprite = makesprite(si & 0xff, si >> 8, cx, dx, di);
-
- // Recover es:bx from sprite
- es = data.word(kBuffers);
- bx = kSpritetable;
- Sprite *sprites = (Sprite *)es.ptr(bx, sizeof(Sprite) * 16);
- bx += sizeof(Sprite) * (sprite - sprites);
- //
-}
-
void DreamGenContext::spriteupdate() {
Sprite *sprites = spritetable();
sprites[0].hidden = data.byte(kRyanon);
@@ -267,7 +254,7 @@ void DreamGenContext::backobject() {
}
void DreamGenContext::backobject(Sprite *sprite) {
- ObjData *objData = (ObjData *)segRef(data.word(kSetdat)).ptr(sprite->objData(), 0);
+ SetObject *objData = (SetObject *)segRef(data.word(kSetdat)).ptr(sprite->objData(), 0);
if (sprite->delay != 0) {
--sprite->delay;
@@ -291,23 +278,23 @@ void DreamGenContext::backobject(Sprite *sprite) {
steady(sprite, objData);
}
-void DreamGenContext::constant(Sprite *sprite, ObjData *objData) {
+void DreamGenContext::constant(Sprite *sprite, SetObject *objData) {
++sprite->frame;
if (objData->b18[sprite->frame] == 255) {
sprite->frame = 0;
}
uint8 b18 = objData->b18[sprite->frame];
- objData->b17 = b18;
+ objData->index = b18;
sprite->b15 = b18;
}
-void DreamGenContext::random(Sprite *sprite, ObjData *objData) {
+void DreamGenContext::random(Sprite *sprite, SetObject *objData) {
randomnum1();
uint16 r = ax;
sprite->b15 = objData->b18[r&7];
}
-void DreamGenContext::doorway(Sprite *sprite, ObjData *objData) {
+void DreamGenContext::doorway(Sprite *sprite, SetObject *objData) {
data.byte(kDoorcheck1) = -24;
data.byte(kDoorcheck2) = 10;
data.byte(kDoorcheck3) = -30;
@@ -315,7 +302,7 @@ void DreamGenContext::doorway(Sprite *sprite, ObjData *objData) {
dodoor(sprite, objData);
}
-void DreamGenContext::widedoor(Sprite *sprite, ObjData *objData) {
+void DreamGenContext::widedoor(Sprite *sprite, SetObject *objData) {
data.byte(kDoorcheck1) = -24;
data.byte(kDoorcheck2) = 24;
data.byte(kDoorcheck3) = -30;
@@ -325,11 +312,11 @@ void DreamGenContext::widedoor(Sprite *sprite, ObjData *objData) {
void DreamGenContext::dodoor() {
Sprite *sprite = (Sprite *)es.ptr(bx, sizeof(Sprite));
- ObjData *objData = (ObjData *)ds.ptr(di, 0);
+ SetObject *objData = (SetObject *)ds.ptr(di, 0);
dodoor(sprite, objData);
}
-void DreamGenContext::dodoor(Sprite *sprite, ObjData *objData) {
+void DreamGenContext::dodoor(Sprite *sprite, SetObject *objData) {
uint8 ryanx = data.byte(kRyanx);
uint8 ryany = data.byte(kRyany);
if (ryanx < sprite->x) {
@@ -361,7 +348,7 @@ void DreamGenContext::dodoor(Sprite *sprite, ObjData *objData) {
if (objData->b18[sprite->frame] == 255) {
--sprite->frame;
}
- sprite->b15 = objData->b17 = objData->b18[sprite->frame];
+ sprite->b15 = objData->index = objData->b18[sprite->frame];
data.byte(kThroughdoor) = 1;
return;
shutdoor:
@@ -375,18 +362,18 @@ shutdoor:
if (sprite->frame != 0) {
--sprite->frame;
}
- sprite->b15 = objData->b17 = objData->b18[sprite->frame];
+ sprite->b15 = objData->index = objData->b18[sprite->frame];
if (sprite->frame == 5) //nearly
data.byte(kThroughdoor) = 0;
}
-void DreamGenContext::steady(Sprite *sprite, ObjData *objData) {
+void DreamGenContext::steady(Sprite *sprite, SetObject *objData) {
uint8 b18 = objData->b18[0];
- objData->b17 = b18;
+ objData->index = b18;
sprite->b15 = b18;
}
-void DreamGenContext::lockeddoorway(Sprite *sprite, ObjData *objData) {
+void DreamGenContext::lockeddoorway(Sprite *sprite, SetObject *objData) {
if (data.byte(kRyanx) < sprite->x) {
if (sprite->x - data.byte(kRyanx) > 24)
goto shutdoor2;
@@ -414,7 +401,7 @@ void DreamGenContext::lockeddoorway(Sprite *sprite, ObjData *objData) {
}
if (sprite->frame == 6) {
- turnpathonCPP(data.byte(kDoorpath));
+ turnpathon(data.byte(kDoorpath));
}
if ((data.byte(kThroughdoor) == 1) && (sprite->frame == 0)) {
@@ -426,7 +413,7 @@ void DreamGenContext::lockeddoorway(Sprite *sprite, ObjData *objData) {
--sprite->frame;
}
- sprite->b15 = objData->b17 = objData->b18[sprite->frame];
+ sprite->b15 = objData->index = objData->b18[sprite->frame];
if (sprite->frame == 5)
data.byte(kThroughdoor) = 1;
return;
@@ -442,18 +429,18 @@ shutdoor2:
}
data.byte(kThroughdoor) = 0;
- sprite->b15 = objData->b17 = objData->b18[sprite->frame];
+ sprite->b15 = objData->index = objData->b18[sprite->frame];
if (sprite->frame == 0) {
- turnpathoffCPP(data.byte(kDoorpath));
+ turnpathoff(data.byte(kDoorpath));
data.byte(kLockstatus) = 1;
}
}
-void DreamGenContext::liftsprite(Sprite *sprite, ObjData *objData) {
+void DreamGenContext::liftsprite(Sprite *sprite, SetObject *objData) {
uint8 liftFlag = data.byte(kLiftflag);
if (liftFlag == 0) { //liftclosed
- turnpathoffCPP(data.byte(kLiftpath));
+ turnpathoff(data.byte(kLiftpath));
if (data.byte(kCounttoopen) != 0) {
_dec(data.byte(kCounttoopen));
@@ -461,10 +448,10 @@ void DreamGenContext::liftsprite(Sprite *sprite, ObjData *objData) {
data.byte(kLiftflag) = 3;
}
sprite->frame = 0;
- sprite->b15 = objData->b17 = objData->b18[sprite->frame];
+ sprite->b15 = objData->index = objData->b18[sprite->frame];
}
else if (liftFlag == 1) { //liftopen
- turnpathonCPP(data.byte(kLiftpath));
+ turnpathon(data.byte(kLiftpath));
if (data.byte(kCounttoclose) != 0) {
_dec(data.byte(kCounttoclose));
@@ -472,7 +459,7 @@ void DreamGenContext::liftsprite(Sprite *sprite, ObjData *objData) {
data.byte(kLiftflag) = 2;
}
sprite->frame = 12;
- sprite->b15 = objData->b17 = objData->b18[sprite->frame];
+ sprite->b15 = objData->index = objData->b18[sprite->frame];
}
else if (liftFlag == 3) { //openlift
if (sprite->frame == 12) {
@@ -484,7 +471,7 @@ void DreamGenContext::liftsprite(Sprite *sprite, ObjData *objData) {
al = 2;
liftnoise();
}
- sprite->b15 = objData->b17 = objData->b18[sprite->frame];
+ sprite->b15 = objData->index = objData->b18[sprite->frame];
} else { //closeLift
assert(liftFlag == 2);
if (sprite->frame == 0) {
@@ -496,13 +483,13 @@ void DreamGenContext::liftsprite(Sprite *sprite, ObjData *objData) {
al = 3;
liftnoise();
}
- sprite->b15 = objData->b17 = objData->b18[sprite->frame];
+ sprite->b15 = objData->index = objData->b18[sprite->frame];
}
}
void DreamGenContext::facerightway() {
- uint8 *paths = getroomspathsCPP();
- uint8 dir = paths[8 * data.byte(kManspath) + 7];
+ PathNode *paths = getroomspaths()->nodes;
+ uint8 dir = paths[data.byte(kManspath)].dir;
data.byte(kTurntoface) = dir;
data.byte(kLeavedirection) = dir;
}
@@ -549,16 +536,16 @@ void DreamGenContext::showreelframe(Reel *reel) {
}
void DreamGenContext::showgamereel() {
- uint16 reelpointer = es.word(bx+3);
+ showgamereel((ReelRoutine *)es.ptr(bx, sizeof(ReelRoutine)));
+}
+
+void DreamGenContext::showgamereel(ReelRoutine *routine) {
+ uint16 reelpointer = routine->reelPointer();
if (reelpointer >= 512)
return;
data.word(kReelpointer) = reelpointer;
- push(es);
- push(bx);
plotreel();
- bx = pop();
- es = pop();
- es.word(bx+3) = data.word(kReelpointer);
+ routine->setReelPointer(data.word(kReelpointer));
}
const Frame *DreamGenContext::getreelframeax(uint16 frame) {
@@ -889,5 +876,32 @@ void DreamGenContext::checkone(uint8 x, uint8 y, uint8 *flag, uint8 *flagEx, uin
*type = tileData[2];
}
+void DreamGenContext::getblockofpixel() {
+ al = getblockofpixel(cl, ch);
+}
+
+uint8 DreamGenContext::getblockofpixel(uint8 x, uint8 y) {
+ uint8 flag, flagEx, type, flagX, flagY;
+ checkone(x + data.word(kMapxstart), y + data.word(kMapystart), &flag, &flagEx, &type, &flagX, &flagY);
+ if (flag & 1)
+ return 0;
+ else
+ return type;
+}
+
+void DreamGenContext::addtopeoplelist() {
+ addtopeoplelist((ReelRoutine *)es.ptr(bx, sizeof(ReelRoutine)));
+}
+
+void DreamGenContext::addtopeoplelist(ReelRoutine *routine) {
+ uint16 routinePointer = (const uint8 *)routine - cs.ptr(0, 0);
+
+ People *people = (People *)segRef(data.word(kBuffers)).ptr(data.word(kListpos), sizeof(People));
+ people->setReelPointer(routine->reelPointer());
+ people->setRoutinePointer(routinePointer);
+ people->b4 = routine->b7;
+ data.word(kListpos) += sizeof(People);
+}
+
} /*namespace dreamgen */
diff --git a/engines/dreamweb/structs.h b/engines/dreamweb/structs.h
index 7e77bdf0e9..0d7bbb6cbf 100644
--- a/engines/dreamweb/structs.h
+++ b/engines/dreamweb/structs.h
@@ -54,7 +54,23 @@ struct Sprite {
uint8 hidden;
};
-struct ObjData {
+struct RectWithCallback {
+ uint16 _xMin, _xMax;
+ uint16 _yMin, _yMax;
+ uint16 _callback;
+
+ uint16 xMin() const { return READ_LE_UINT16(&_xMin); }
+ uint16 xMax() const { return READ_LE_UINT16(&_xMax); }
+ uint16 yMin() const { return READ_LE_UINT16(&_yMin); }
+ uint16 yMax() const { return READ_LE_UINT16(&_yMax); }
+ uint16 callback() const { return READ_LE_UINT16(&_callback); }
+
+ bool contains(uint16 x, uint16 y) const {
+ return (x >= xMin()) && (x < xMax()) && (y >= yMin()) && (y < yMax());
+ }
+};
+
+struct SetObject {
uint8 b0;
uint8 b1;
uint8 b2;
@@ -69,7 +85,7 @@ struct ObjData {
uint8 b11;
uint8 name[4];
uint8 b16;
- uint8 b17;
+ uint8 index;
uint8 b18[13]; // NB: Don't know the size yet
uint8 b31;
uint8 b32;
@@ -98,27 +114,20 @@ struct ObjData {
uint8 b55;
uint8 b56;
uint8 b57;
- uint8 b58[5];
+ uint8 mapad[5];
uint8 b63;
};
-struct FreeObject {
- uint8 b0;
- uint8 b1;
- uint8 b2;
- uint8 b3;
- uint8 b4;
- uint8 b5;
- uint8 b6;
+struct DynObject {
+ uint8 currentLocation;
+ uint8 index;
+ uint8 mapad[5];
uint8 b7;
uint8 b8;
uint8 b9;
uint8 b10;
- uint8 b11;
- uint8 b12;
- uint8 b13;
- uint8 b14;
- uint8 b15;
+ uint8 initialLocation;
+ uint8 id[4];
};
struct ObjPos {
@@ -155,6 +164,8 @@ struct ReelRoutine {
uint8 mapY;
uint8 b3;
uint8 b4;
+ uint16 reelPointer() const { return READ_LE_UINT16(&b3); }
+ void setReelPointer(uint16 v) { WRITE_LE_UINT16(&b3, v); }
uint8 b5;
uint8 b6;
uint8 b7;
@@ -163,12 +174,12 @@ struct ReelRoutine {
struct People {
uint8 b0;
uint8 b1;
- uint16 w0() const { return READ_LE_UINT16(&b0); }
- void setW0(uint16 v) { WRITE_LE_UINT16(&b0, v); }
+ uint16 reelPointer() const { return READ_LE_UINT16(&b0); }
+ void setReelPointer(uint16 v) { WRITE_LE_UINT16(&b0, v); }
uint8 b2;
uint8 b3;
- uint16 w2() const { return READ_LE_UINT16(&b2); }
- void setW2(uint16 v) { WRITE_LE_UINT16(&b2, v); }
+ uint16 routinePointer() const { return READ_LE_UINT16(&b2); }
+ void setRoutinePointer(uint16 v) { WRITE_LE_UINT16(&b2, v); }
uint8 b4;
};
@@ -217,4 +228,24 @@ struct Change {
uint8 type;
};
+struct PathNode {
+ uint8 x;
+ uint8 y;
+ uint8 b2;
+ uint8 b3;
+ uint8 b4;
+ uint8 b5;
+ uint8 on;
+ uint8 dir;
+};
+
+struct PathSegment {
+ uint8 b0;
+ uint8 b1;
+};
+
+struct RoomPaths {
+ PathNode nodes[12];
+ PathSegment segments[24];
+};
diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp
index f0938ea30b..600df65b40 100644
--- a/engines/dreamweb/stubs.cpp
+++ b/engines/dreamweb/stubs.cpp
@@ -22,7 +22,6 @@
#include "dreamweb/dreamweb.h"
#include "engines/util.h"
-#include "graphics/surface.h"
#include "common/config-manager.h"
namespace DreamGen {
@@ -145,8 +144,7 @@ void DreamGenContext::dreamweb() {
// "endofgame"
clearbeforeload();
fadescreendowns();
- cx = 200;
- hangon();
+ hangon(200);
endgame();
quickquit2();
return;
@@ -186,8 +184,7 @@ void DreamGenContext::dreamweb() {
clearbeforeload();
showgun();
fadescreendown();
- cx = 100;
- hangon();
+ hangon(100);
}
}
@@ -285,7 +282,63 @@ void DreamGenContext::dontloadseg() {
}
void DreamGenContext::mousecall() {
- engine->mouseCall();
+ uint16 x, y, state;
+ engine->mouseCall(&x, &y, &state);
+ cx = x;
+ dx = y;
+ bx = state;
+}
+
+void DreamGenContext::readmouse() {
+ data.word(kOldbutton) = data.word(kMousebutton);
+ data.word(kOldx) = data.word(kMousex);
+ data.word(kOldy) = data.word(kMousey);
+ uint16 x, y, state;
+ engine->mouseCall(&x, &y, &state);
+ data.word(kMousex) = x;
+ data.word(kMousey) = y;
+ data.word(kMousebutton) = state;
+}
+
+void DreamGenContext::readmouse1() {
+ data.word(kOldx) = data.word(kMousex);
+ data.word(kOldy) = data.word(kMousey);
+ uint16 x, y, state;
+ engine->mouseCall(&x, &y, &state);
+ data.word(kMousex) = x;
+ data.word(kMousey) = y;
+ data.word(kMousebutton1) = state;
+}
+
+void DreamGenContext::readmouse2() {
+ data.word(kOldx) = data.word(kMousex);
+ data.word(kOldy) = data.word(kMousey);
+ uint16 x, y, state;
+ engine->mouseCall(&x, &y, &state);
+ data.word(kMousex) = x;
+ data.word(kMousey) = y;
+ data.word(kMousebutton2) = state;
+}
+
+void DreamGenContext::readmouse3() {
+ data.word(kOldx) = data.word(kMousex);
+ data.word(kOldy) = data.word(kMousey);
+ uint16 x, y, state;
+ engine->mouseCall(&x, &y, &state);
+ data.word(kMousex) = x;
+ data.word(kMousey) = y;
+ data.word(kMousebutton3) = state;
+}
+
+void DreamGenContext::readmouse4() {
+ data.word(kOldbutton) = data.word(kMousebutton);
+ data.word(kOldx) = data.word(kMousex);
+ data.word(kOldy) = data.word(kMousey);
+ uint16 x, y, state;
+ engine->mouseCall(&x, &y, &state);
+ data.word(kMousex) = x;
+ data.word(kMousey) = y;
+ data.word(kMousebutton) = state | data.word(kMousebutton1) | data.word(kMousebutton2) | data.word(kMousebutton3);
}
void DreamGenContext::setmouse() {
@@ -667,7 +720,7 @@ void DreamGenContext::cancelch1() {
engine->stopSound(1);
}
-void DreamGenContext::makebackob(ObjData *objData) {
+void DreamGenContext::makebackob(SetObject *objData) {
if (data.byte(kNewobs) == 0)
return;
uint8 priority = objData->priority;
@@ -675,8 +728,8 @@ void DreamGenContext::makebackob(ObjData *objData) {
Sprite *sprite = makesprite(data.word(kObjectx), data.word(kObjecty), addr_backobject, data.word(kSetframes), 0);
uint16 objDataOffset = (uint8 *)objData - segRef(data.word(kSetdat)).ptr(0, 0);
- assert(objDataOffset % sizeof(ObjData) == 0);
- assert(objDataOffset < 128 * sizeof(ObjData));
+ assert(objDataOffset % sizeof(SetObject) == 0);
+ assert(objDataOffset < 128 * sizeof(SetObject));
sprite->setObjData(objDataOffset);
if (priority == 255)
priority = 0;
@@ -691,10 +744,6 @@ void DreamGenContext::getroomdata() {
bx = kRoomdata + sizeof(Room) * al;
}
-void DreamGenContext::getroomdata(uint8 roomIndex) {
- getroomdata(roomIndex);
-}
-
void DreamGenContext::startloading() {
const Room *room = (Room *)cs.ptr(bx, sizeof(Room));
startloading(room);
@@ -883,7 +932,11 @@ void DreamGenContext::plotreel() {
showreelframe(reel);
++reel;
}
+ push(es);
+ push(bx);
soundonreels();
+ bx = pop();
+ es = pop();
}
void DreamGenContext::crosshair() {
@@ -929,7 +982,7 @@ bool DreamGenContext::checkifperson(uint8 x, uint8 y) {
for (size_t i = 0; i < 12; ++i, ++people) {
if (people->b4 == 255)
continue;
- data.word(kReelpointer) = people->w0();
+ data.word(kReelpointer) = people->reelPointer();
Reel *reel = getreelstart();
if (reel->frame() == 0xffff)
++reel;
@@ -946,10 +999,8 @@ bool DreamGenContext::checkifperson(uint8 x, uint8 y) {
continue;
if (y >= ymax)
continue;
- data.word(kPersondata) = people->w2();
- al = people->b4;
- ah = 5;
- obname();
+ data.word(kPersondata) = people->routinePointer();
+ obname(people->b4, 5);
return true;
}
return false;
@@ -973,9 +1024,31 @@ bool DreamGenContext::checkiffree(uint8 x, uint8 y) {
continue;
if (y >= objPos->yMax)
continue;
- al = objPos->index;
- ah = 2;
- obname();
+ obname(objPos->index, 2);
+ return true;
+ }
+ return false;
+}
+
+void DreamGenContext::checkifex() {
+ flags._z = not checkifex(al, ah);
+}
+
+bool DreamGenContext::checkifex(uint8 x, uint8 y) {
+ const ObjPos *exList = (const ObjPos *)segRef(data.word(kBuffers)).ptr(kExlist, 100 * sizeof(ObjPos));
+ for (size_t i = 0; i < 100; ++i) {
+ const ObjPos *objPos = exList + 99 - i;
+ if (objPos->index == 0xff)
+ continue;
+ if (x < objPos->xMin)
+ continue;
+ if (x >= objPos->xMax)
+ continue;
+ if (y < objPos->yMin)
+ continue;
+ if (y >= objPos->yMax)
+ continue;
+ obname(objPos->index, 4);
return true;
}
return false;
@@ -1029,19 +1102,14 @@ void DreamGenContext::commandwithob(uint8 command, uint8 type, uint8 index) {
uint16 commandText = kTextstart + segRef(data.word(kCommandtext)).word(command * 2);
uint8 textLen = data.byte(kTextlen);
{
- uint16 y = data.word(kTextaddressy);
const uint8 *string = segRef(data.word(kCommandtext)).ptr(commandText, 0);
- printdirect(&string, data.word(kTextaddressx), &y, textLen, (bool)(textLen & 1));
+ printdirect(string, data.word(kTextaddressx), data.word(kTextaddressy), textLen, (bool)(textLen & 1));
}
copyname(type, index, commandLine);
uint16 x = data.word(kLastxpos);
if (command != 0)
x += 5;
- {
- uint16 y = data.word(kTextaddressy);
- const uint8 *string = commandLine;
- printdirect(&string, x, &y, textLen, (bool)(textLen & 1));
- }
+ printdirect(commandLine, x, data.word(kTextaddressy), textLen, (bool)(textLen & 1));
data.byte(kNewtextline) = 1;
}
@@ -1097,12 +1165,51 @@ void DreamGenContext::setallchanges() {
}
}
-FreeObject *DreamGenContext::getfreead(uint8 index) {
- return (FreeObject *)segRef(data.word(kFreedat)).ptr(0, 0) + index;
+DynObject *DreamGenContext::getfreead(uint8 index) {
+ return (DynObject *)segRef(data.word(kFreedat)).ptr(0, 0) + index;
+}
+
+DynObject *DreamGenContext::getexad(uint8 index) {
+ return (DynObject *)segRef(data.word(kExtras)).ptr(kExdata, 0) + index;
}
-ObjData *DreamGenContext::getsetad(uint8 index) {
- return (ObjData *)segRef(data.word(kSetdat)).ptr(0, 0) + index;
+DynObject *DreamGenContext::geteitheradCPP() {
+ if (data.byte(kObjecttype) == 4)
+ return getexad(data.byte(kItemframe));
+ else
+ return getfreead(data.byte(kItemframe));
+}
+
+void *DreamGenContext::getanyad(uint8 *value1, uint8 *value2) {
+ if (data.byte(kObjecttype) == 4) {
+ DynObject *exObject = getexad(data.byte(kCommand));
+ *value1 = exObject->b7;
+ *value2 = exObject->b8;
+ return exObject;
+ } else if (data.byte(kObjecttype) == 2) {
+ DynObject *freeObject = getfreead(data.byte(kCommand));
+ *value1 = freeObject->b7;
+ *value2 = freeObject->b8;
+ return freeObject;
+ } else {
+ SetObject *setObject = getsetad(data.byte(kCommand));
+ *value1 = setObject->b4;
+ *value2 = setObject->priority;
+ return setObject;
+ }
+}
+
+void *DreamGenContext::getanyaddir(uint8 index, uint8 flag) {
+ if (flag == 4)
+ return getexad(index);
+ else if (flag == 2)
+ return getfreead(index);
+ else
+ return getsetad(index);
+}
+
+SetObject *DreamGenContext::getsetad(uint8 index) {
+ return (SetObject *)segRef(data.word(kSetdat)).ptr(0, 0) + index;
}
void DreamGenContext::dochange() {
@@ -1111,11 +1218,11 @@ void DreamGenContext::dochange() {
void DreamGenContext::dochange(uint8 index, uint8 value, uint8 type) {
if (type == 0) { //object
- getsetad(index)->b58[0] = value;
+ getsetad(index)->mapad[0] = value;
} else if (type == 1) { //freeobject
- FreeObject *freeObject = getfreead(index);
- if (freeObject->b2 == 0xff)
- freeObject->b2 = value;
+ DynObject *freeObject = getfreead(index);
+ if (freeObject->mapad[0] == 0xff)
+ freeObject->mapad[0] = value;
} else { //path
bx = kPathdata + (type - 100) * 144 + index * 8;
es = data.word(kReels);
@@ -1124,26 +1231,38 @@ void DreamGenContext::dochange(uint8 index, uint8 value, uint8 type) {
}
void DreamGenContext::deletetaken() {
- ds = data.word(kExtras);
- si = kExdata;
- FreeObject *freeObjects = (FreeObject *)segRef(data.word(kFreedat)).ptr(0, 0);
+ const DynObject *extraObjects = (const DynObject *)segRef(data.word(kExtras)).ptr(kExdata, 0);
+ DynObject *freeObjects = (DynObject *)segRef(data.word(kFreedat)).ptr(0, 0);
for(size_t i = 0; i < kNumexobjects; ++i) {
- uint8 location = ds.byte(si+11);
+ uint8 location = extraObjects[i].initialLocation;
if (location == data.byte(kReallocation)) {
- uint8 index = ds.byte(si+1);
- freeObjects[index].b2 = 254;
+ uint8 index = extraObjects[i].index;
+ freeObjects[index].mapad[0] = 0xfe;
}
- si += 16;
}
}
+void DreamGenContext::getexpos() {
+ es = data.word(kExtras);
+ const DynObject *objects = (const DynObject *)segRef(data.word(kExtras)).ptr(kExdata, sizeof(DynObject));
+ for (size_t i = 0; i < kNumexobjects; ++i) {
+ if (objects[i].mapad[0] == 0xff) {
+ data.byte(kExpos) = i;
+ di = kExdata + i * sizeof(DynObject);
+ return;
+ }
+ }
+ data.byte(kExpos) = kNumexobjects;
+ di = kExdata + kNumexobjects * sizeof(DynObject);
+}
+
void DreamGenContext::placesetobject() {
placesetobject(al);
}
void DreamGenContext::placesetobject(uint8 index) {
findormake(index, 0, 0);
- getsetad(index)->b58[0] = 0;
+ getsetad(index)->mapad[0] = 0;
}
void DreamGenContext::removesetobject() {
@@ -1152,7 +1271,7 @@ void DreamGenContext::removesetobject() {
void DreamGenContext::removesetobject(uint8 index) {
findormake(index, 0xff, 0);
- getsetad(index)->b58[0] = 0xff;
+ getsetad(index)->mapad[0] = 0xff;
}
void DreamGenContext::finishedwalking() {
@@ -1163,6 +1282,459 @@ bool DreamGenContext::finishedwalkingCPP() {
return (data.byte(kLinepointer) == 254) && (data.byte(kFacing) == data.byte(kTurntoface));
}
+void DreamGenContext::getflagunderp() {
+ uint8 flag, flagEx;
+ getflagunderp(&flag, &flagEx);
+ cl = flag;
+ ch = flagEx;
+}
+
+void DreamGenContext::getflagunderp(uint8 *flag, uint8 *flagEx) {
+ uint8 type, flagX, flagY;
+ checkone(data.word(kMousex) - data.word(kMapadx), data.word(kMousey) - data.word(kMapady), flag, flagEx, &type, &flagX, &flagY);
+ cl = data.byte(kLastflag) = *flag;
+ ch = data.byte(kLastflagex) = *flagEx;
+}
+
+void DreamGenContext::walkandexamine() {
+ if (! finishedwalkingCPP())
+ return;
+ data.byte(kCommandtype) = data.byte(kWalkexamtype);
+ data.byte(kCommand) = data.byte(kWalkexamnum);
+ data.byte(kWalkandexam) = 0;
+ if (data.byte(kCommandtype) != 5)
+ examineob();
+}
+
+void DreamGenContext::obname() {
+ obname(al, ah);
+}
+
+void DreamGenContext::obname(uint8 command, uint8 commandType) {
+ if (data.byte(kReasseschanges) == 0) {
+ if ((commandType == data.byte(kCommandtype)) && (command == data.byte(kCommand))) {
+ if (data.byte(kWalkandexam) == 1) {
+ walkandexamine();
+ return;
+ } else if (data.word(kMousebutton) == 0)
+ return;
+ else if ((data.byte(kCommandtype) == 3) && (data.byte(kLastflag) < 2))
+ return;
+ else if ((data.byte(kManspath) != data.byte(kPointerspath)) || (data.byte(kCommandtype) == 3)) {
+ setwalk();
+ data.byte(kReasseschanges) = 1;
+ return;
+ } else if (! finishedwalkingCPP())
+ return;
+ else if (data.byte(kCommandtype) == 5) {
+ if (data.word(kWatchingtime) == 0)
+ talk();
+ return;
+ } else {
+ if (data.word(kWatchingtime) == 0)
+ examineob();
+ return;
+ }
+ }
+ } else
+ data.byte(kReasseschanges) = 0;
+
+ data.byte(kCommand) = command;
+ data.byte(kCommandtype) = commandType;
+ if ((data.byte(kLinepointer) != 254) || (data.word(kWatchingtime) != 0) || (data.byte(kFacing) != data.byte(kTurntoface))) {
+ blocknametext();
+ return;
+ } else if (data.byte(kCommandtype) != 3) {
+ if (data.byte(kManspath) != data.byte(kPointerspath)) {
+ walktotext();
+ return;
+ } else if (data.byte(kCommandtype) == 3) {
+ blocknametext();
+ return;
+ } else if (data.byte(kCommandtype) == 5) {
+ personnametext();
+ return;
+ } else {
+ examineobtext();
+ return;
+ }
+ }
+ if (data.byte(kManspath) == data.byte(kPointerspath)) {
+ uint8 flag, flagEx, type, flagX, flagY;
+ checkone(data.byte(kRyanx) + 12, data.byte(kRyany) + 12, &flag, &flagEx, &type, &flagX, &flagY);
+ if (flag < 2) {
+ blocknametext();
+ return;
+ }
+ }
+
+ getflagunderp();
+ if (data.byte(kLastflag) < 2) {
+ blocknametext();
+ return;
+ } else if (data.byte(kLastflag) >= 128) {
+ blocknametext();
+ return;
+ } else {
+ walktotext();
+ return;
+ }
+}
+
+void DreamGenContext::delpointer() {
+ if (data.word(kOldpointerx) == 0xffff)
+ return;
+ data.word(kDelherex) = data.word(kOldpointerx);
+ data.word(kDelherey) = data.word(kOldpointery);
+ data.byte(kDelxs) = data.byte(kPointerxs);
+ data.byte(kDelys) = data.byte(kPointerys);
+ multiput(segRef(data.word(kBuffers)).ptr(kPointerback, 0), data.word(kDelherex), data.word(kDelherey), data.byte(kPointerxs), data.byte(kPointerys));
+}
+
+void DreamGenContext::showblink() {
+ if (data.byte(kManisoffscreen) == 1)
+ return;
+ ++data.byte(kBlinkcount);
+ if (data.byte(kShadeson) != 0)
+ return;
+ if (data.byte(kReallocation) >= 50) // eyesshut
+ return;
+ if (data.byte(kBlinkcount) != 3)
+ return;
+ data.byte(kBlinkcount) = 0;
+ uint8 blinkFrame = data.byte(kBlinkframe);
+ ++blinkFrame; // Implicit %256
+ data.byte(kBlinkframe) = blinkFrame;
+ if (blinkFrame > 6)
+ blinkFrame = 6;
+ static const uint8 blinkTab[] = { 16,18,18,17,16,16,16 };
+ uint8 width, height;
+ showframe((Frame *)segRef(data.word(kIcons1)).ptr(0, 0), 44, 32, blinkTab[blinkFrame], 0, &width, &height);
+}
+
+void DreamGenContext::dumpblink() {
+ if (data.byte(kShadeson) != 0)
+ return;
+ if (data.byte(kBlinkcount) != 0)
+ return;
+ if (data.byte(kBlinkframe) >= 6)
+ return;
+ multidump(44, 32, 16, 12);
+}
+
+void DreamGenContext::dumppointer() {
+ dumpblink();
+ multidump(data.word(kDelherex), data.word(kDelherey), data.byte(kDelxs), data.byte(kDelys));
+ if ((data.word(kOldpointerx) != data.word(kDelherex)) || (data.word(kOldpointery) != data.word(kDelherey)))
+ multidump(data.word(kOldpointerx), data.word(kOldpointery), data.byte(kPointerxs), data.byte(kPointerys));
+}
+
+void DreamGenContext::checkcoords() {
+ checkcoords((const RectWithCallback *)cs.ptr(bx, 0));
+}
+
+void DreamGenContext::checkcoords(const RectWithCallback *rectWithCallbacks) {
+ if (data.byte(kNewlocation) != 0xff)
+ return;
+
+ const RectWithCallback *rectWithCallback = rectWithCallbacks;
+ while (rectWithCallback->xMin() != 0xffff) {
+ if (rectWithCallback->contains(data.word(kMousex), data.word(kMousey))) {
+ uint16 callback = rectWithCallback->callback();
+
+ // common
+ if(callback == addr_blank)
+ blank();
+ else if(callback == addr_getbackfromob)
+ getbackfromob();
+ else if(callback == addr_incryanpage)
+ incryanpage();
+ else if(callback == addr_getback1)
+ getback1();
+ else if(callback == addr_quitkey)
+ quitkey();
+ else if(callback == addr_dosreturn)
+ dosreturn();
+ else if(callback == addr_getbacktoops)
+ getbacktoops();
+ else if(callback == addr_selectslot)
+ selectslot();
+ // examlist
+ else if(callback == addr_useobject)
+ useobject();
+ else if(callback == addr_selectopenob)
+ selectopenob();
+ else if(callback == addr_setpickup)
+ setpickup();
+ else if(callback == addr_examinventory)
+ examinventory();
+ // invlist1
+ else if(callback == addr_dropobject)
+ dropobject();
+ else if(callback == addr_useopened)
+ useopened();
+ else if(callback == addr_setpickup)
+ setpickup();
+ else if(callback == addr_intoinv)
+ intoinv();
+ // withlist1
+ else if(callback == addr_selectob)
+ selectob();
+ // talklist
+ else if(callback == addr_moretalk)
+ moretalk();
+ // quitlist
+ // destlist
+ else if(callback == addr_nextdest)
+ nextdest();
+ else if(callback == addr_lastdest)
+ lastdest();
+ else if(callback == addr_lookatplace)
+ lookatplace();
+ else if(callback == addr_destselect)
+ destselect();
+ // keypadlist
+ else if(callback == addr_buttonone)
+ buttonone();
+ else if(callback == addr_buttontwo)
+ buttontwo();
+ else if(callback == addr_buttonthree)
+ buttonthree();
+ else if(callback == addr_buttonfour)
+ buttonfour();
+ else if(callback == addr_buttonfive)
+ buttonfive();
+ else if(callback == addr_buttonsix)
+ buttonsix();
+ else if(callback == addr_buttonseven)
+ buttonseven();
+ else if(callback == addr_buttoneight)
+ buttoneight();
+ else if(callback == addr_buttonnine)
+ buttonnine();
+ else if(callback == addr_buttonnought)
+ buttonnought();
+ else if(callback == addr_buttonenter)
+ buttonenter();
+ // menulist
+ // folderlist
+ else if(callback == addr_nextfolder)
+ nextfolder();
+ else if(callback == addr_lastfolder)
+ lastfolder();
+ // symbollist
+ else if(callback == addr_quitsymbol)
+ quitsymbol();
+ else if(callback == addr_settopleft)
+ settopleft();
+ else if(callback == addr_settopright)
+ settopright();
+ else if(callback == addr_setbotleft)
+ setbotleft();
+ else if(callback == addr_setbotright)
+ setbotright();
+ // diarylist
+ else if(callback == addr_diarykeyn)
+ diarykeyn();
+ else if(callback == addr_diarykeyp)
+ diarykeyp();
+ else if(callback == addr_quitkey)
+ quitkey();
+ // opslist
+ else if(callback == addr_getbackfromops)
+ getbackfromops();
+ else if(callback == addr_discops)
+ discops();
+ // discopslist
+ else if(callback == addr_loadgame)
+ loadgame();
+ else if(callback == addr_savegame)
+ savegame();
+ // mainlist, mainlist2
+ else if(callback == addr_look)
+ look();
+ else if(callback == addr_inventory)
+ inventory();
+ else if(callback == addr_zoomonoff)
+ zoomonoff();
+ else if(callback == addr_saveload)
+ saveload();
+ else if(callback == addr_madmanrun)
+ madmanrun();
+ else if(callback == addr_identifyob)
+ identifyob();
+ // decidelist
+ else if(callback == addr_newgame)
+ newgame();
+ else if(callback == addr_loadold)
+ loadold();
+ // loadlist
+ else if(callback == addr_actualload)
+ actualload();
+ // savelist
+ else if(callback == addr_actualsave)
+ actualsave();
+ else {
+ debug("__dispatch_call remaining in checkcoords! %d", (int)callback);
+ __dispatch_call(callback);
+ }
+ return;
+ }
+ ++rectWithCallback;
+ }
+}
+
+void DreamGenContext::showpointer() {
+ showblink();
+ const Frame *icons1 = ((const Frame *)segRef(data.word(kIcons1)).ptr(0, 0));
+ uint16 x = data.word(kMousex);
+ data.word(kOldpointerx) = data.word(kMousex);
+ uint16 y = data.word(kMousey);
+ data.word(kOldpointery) = data.word(kMousey);
+ if (data.byte(kPickup) == 1) {
+ const Frame *frames;
+ if (data.byte(kObjecttype) != 4)
+ frames = (const Frame *)segRef(data.word(kFreeframes)).ptr(0, 0);
+ else
+ frames = (const Frame *)segRef(data.word(kExtras)).ptr(0, 0);
+ const Frame *frame = frames + (3 * data.byte(kItemframe) + 1);
+ uint8 width = frame->width;
+ uint8 height = frame->height;
+ if (width < 12)
+ width = 12;
+ if (height < 12)
+ height = 12;
+ data.byte(kPointerxs) = width;
+ data.byte(kPointerys) = height;
+ uint16 xMin = (x >= width / 2) ? x - width / 2 : 0;
+ uint16 yMin = (y >= height / 2) ? y - height / 2 : 0;
+ data.word(kOldpointerx) = xMin;
+ data.word(kOldpointery) = yMin;
+ multiget(segRef(data.word(kBuffers)).ptr(kPointerback, 0), xMin, yMin, width, height);
+ showframe(frames, x, y, 3 * data.byte(kItemframe) + 1, 128);
+ showframe(icons1, x, y, 3, 128);
+ } else {
+ const Frame *frame = icons1 + (data.byte(kPointerframe) + 20);
+ uint8 width = frame->width;
+ uint8 height = frame->height;
+ if (width < 12)
+ width = 12;
+ if (height < 12)
+ height = 12;
+ data.byte(kPointerxs) = width;
+ data.byte(kPointerys) = height;
+ multiget(segRef(data.word(kBuffers)).ptr(kPointerback, 0), x, y, width, height);
+ showframe(icons1, x, y, data.byte(kPointerframe) + 20, 0);
+ }
+}
+
+void DreamGenContext::animpointer() {
+
+ if (data.byte(kPointermode) == 2) {
+ data.byte(kPointerframe) = 0;
+ if ((data.byte(kReallocation) == 14) && (data.byte(kCommandtype) == 211))
+ data.byte(kPointerframe) = 5;
+ return;
+ } else if (data.byte(kPointermode) == 3) {
+ if (data.byte(kPointerspeed) != 0) {
+ --data.byte(kPointerspeed);
+ } else {
+ data.byte(kPointerspeed) = 5;
+ ++data.byte(kPointercount);
+ if (data.byte(kPointercount) == 16)
+ data.byte(kPointercount) = 0;
+ }
+ static const uint8 flashMouseTab[] = { 1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2 };
+ data.byte(kPointerframe) = flashMouseTab[data.byte(kPointercount)];
+ return;
+ }
+ if (data.word(kWatchingtime) != 0) {
+ data.byte(kPointerframe) = 11;
+ return;
+ }
+ data.byte(kPointerframe) = 0;
+ if (data.byte(kInmaparea) == 0)
+ return;
+ if (data.byte(kPointerfirstpath) == 0)
+ return;
+ uint8 flag, flagEx;
+ getflagunderp(&flag, &flagEx);
+ if (flag < 2)
+ return;
+ if (flag >= 128)
+ return;
+ if (flag & 4) {
+ data.byte(kPointerframe) = 3;
+ return;
+ }
+ if (flag & 16) {
+ data.byte(kPointerframe) = 4;
+ return;
+ }
+ if (flag & 2) {
+ data.byte(kPointerframe) = 5;
+ return;
+ }
+ if (flag & 8) {
+ data.byte(kPointerframe) = 6;
+ return;
+ }
+ data.byte(kPointerframe) = 8;
+}
+
+void DreamGenContext::printmessage() {
+ printmessage(di, bx, al, dl, (bool)(dl & 1));
+}
+
+void DreamGenContext::printmessage(uint16 x, uint16 y, uint8 index, uint8 maxWidth, bool centered) {
+ uint16 offset = kTextstart + segRef(data.word(kCommandtext)).word(index * 2);
+ const uint8 *string = segRef(data.word(kCommandtext)).ptr(offset, 0);
+ printdirect(&string, x, &y, maxWidth, centered);
+}
+
+void DreamGenContext::obpicture() {
+ if (data.byte(kObjecttype) == 1)
+ return;
+ Frame *frames;
+ if (data.byte(kObjecttype) == 4)
+ frames = (Frame *)segRef(data.word(kExtras)).ptr(0, 0);
+ else
+ frames = (Frame *)segRef(data.word(kFreeframes)).ptr(0, 0);
+ uint8 frame = 3 * data.byte(kCommand) + 1;
+ showframe(frames, 160, 68, frame, 0x80);
+}
+
+void DreamGenContext::obicons() {
+ uint8 value1, value2;
+ getanyad(&value1, &value2);
+ if (value1 == 0xff) {
+ showframe((Frame *)segRef(data.word(kIcons2)).ptr(0, 0), 260, 1, 1, 0);
+ } else {
+ showframe((Frame *)segRef(data.word(kIcons2)).ptr(0, 0), 210, 1, 4, 0);
+ }
+}
+
+void DreamGenContext::compare() {
+ char id[4] = { cl, ch, dl, dh };
+ flags._z = compare(al, ah, id);
+}
+
+bool DreamGenContext::compare(uint8 index, uint8 flag, const char id[4]) {
+ void *ptr = getanyaddir(index, flag);
+ const char *objId = (const char *)(((const uint8 *)ptr) + 12); // whether it is a DynObject or a SetObject
+ for (size_t i = 0; i < 4; ++i) {
+ if(id[i] != objId[i] + 'A')
+ return false;
+ }
+ return true;
+}
+
+bool DreamGenContext::isitdescribed(const ObjPos *pos) {
+ uint16 offset = segRef(data.word(kSetdesc)).word(kSettextdat + pos->index * 2);
+ uint8 result = segRef(data.word(kSetdesc)).byte(kSettext + offset);
+ return result != 0;
+}
+
bool DreamGenContext::isCD() {
// The original sources has two codepaths depending if the game is 'if cd' or not
// This is a hack to guess which version to use with the assumption that if we have a cd version
@@ -1170,5 +1742,186 @@ bool DreamGenContext::isCD() {
// Maybe detect the version during game id?
return (data.byte(kSpeechloaded) == 1);
}
+
+void DreamGenContext::checkifset() {
+ flags._z = !checkifset(al, ah);
+}
+
+bool DreamGenContext::checkifset(uint8 x, uint8 y) {
+ const ObjPos *setList = (const ObjPos *)segRef(data.word(kBuffers)).ptr(kSetlist, sizeof(ObjPos) * 128);
+ for (size_t i = 0; i < 128; ++i) {
+ const ObjPos *pos = setList + 127 - i;
+ if (pos->index == 0xff)
+ continue;
+ if (x < pos->xMin)
+ continue;
+ if (x >= pos->xMax)
+ continue;
+ if (y < pos->yMin)
+ continue;
+ if (y >= pos->yMax)
+ continue;
+ if (! pixelcheckset(pos, x, y))
+ continue;
+ if (! isitdescribed(pos))
+ continue;
+ obname(pos->index, 1);
+ return true;
+ }
+ return false;
+}
+
+void DreamGenContext::isitworn() {
+ flags._z = isitworn((const DynObject *)es.ptr(bx, sizeof(DynObject)));
+}
+
+bool DreamGenContext::isitworn(const DynObject *object) {
+ return (object->id[0] == 'W'-'A') && (object->id[1] == 'E'-'A');
+}
+
+void DreamGenContext::makeworn() {
+ makeworn((DynObject *)es.ptr(bx, sizeof(DynObject)));
+}
+
+void DreamGenContext::makeworn(DynObject *object) {
+ object->id[0] = 'W'-'A';
+ object->id[1] = 'E'-'A';
+}
+
+void DreamGenContext::obtoinv() {
+ obtoinv(al, ah, di, bx);
+}
+
+void DreamGenContext::obtoinv(uint8 index, uint8 flag, uint16 x, uint16 y) {
+ Frame *icons1 = (Frame *)segRef(data.word(kIcons1)).ptr(0, 0);
+ showframe(icons1, x - 2, y - 1, 10, 0);
+ if (index == 0xff)
+ return;
+
+ Frame *extras = (Frame *)segRef(data.word(kExtras)).ptr(0, 0);
+ Frame *frees = (Frame *)segRef(data.word(kFreeframes)).ptr(0, 0);
+ Frame *frames = (flag == 4) ? extras : frees;
+ showframe(frames, x + 18, y + 19, 3 * index + 1, 128);
+ const DynObject *object = (const DynObject *)getanyaddir(index, flag);
+ bool worn = isitworn(object);
+ if (worn)
+ showframe(icons1, x - 3, y - 2, 7, 0);
+}
+
+void DreamGenContext::showryanpage() {
+ Frame *icons1 = (Frame *)segRef(data.word(kIcons1)).ptr(0, 0);
+ showframe(icons1, kInventx + 167, kInventy - 12, 12, 0);
+ showframe(icons1, kInventx + 167 + 18 * data.byte(kRyanpage), kInventy - 12, 13 + data.byte(kRyanpage), 0);
+}
+
+void DreamGenContext::findallryan() {
+ findallryan(es.ptr(di, 60));
+}
+
+void DreamGenContext::findallryan(uint8 *inv) {
+ memset(inv, 0xff, 60);
+ for (size_t i = 0; i < kNumexobjects; ++i) {
+ DynObject *extra = getexad(i);
+ if (extra->mapad[0] != 4)
+ continue;
+ if (extra->mapad[1] != 0xff)
+ continue;
+ uint8 slot = extra->mapad[2];
+ assert(slot < 30);
+ inv[2 * slot + 0] = i;
+ inv[2 * slot + 1] = 4;
+ }
+}
+
+void DreamGenContext::fillryan() {
+ uint8 *inv = segRef(data.word(kBuffers)).ptr(kRyaninvlist, 60);
+ findallryan(inv);
+ inv += data.byte(kRyanpage) * 2 * 10;
+ for (size_t i = 0; i < 2; ++i) {
+ for (size_t j = 0; j < 5; ++j) {
+ uint8 objIndex = *inv++;
+ uint8 objType = *inv++;
+ obtoinv(objIndex, objType, kInventx + j * kItempicsize, kInventy + i * kItempicsize);
+ }
+ }
+ showryanpage();
+}
+
+void DreamGenContext::hangon() {
+ hangon(cx);
+}
+
+void DreamGenContext::hangon(uint16 frameCount) {
+ while (frameCount) {
+ vsync();
+ --frameCount;
+ if (data.byte(kQuitrequested))
+ break;
+ }
+}
+
+void DreamGenContext::hangonp() {
+ hangonp(cx);
+}
+
+void DreamGenContext::hangonp(uint16 count) {
+ data.word(kMaintimer) = 0;
+ uint8 pointerFrame = data.byte(kPointerframe);
+ uint8 pickup = data.byte(kPickup);
+ data.byte(kPointermode) = 3;
+ data.byte(kPickup) = 0;
+ data.byte(kCommandtype) = 255;
+ readmouse();
+ animpointer();
+ showpointer();
+ vsync();
+ dumppointer();
+ for (size_t i = 0; i < count * 3; ++i) {
+ delpointer();
+ readmouse();
+ animpointer();
+ showpointer();
+ vsync();
+ dumppointer();
+ if (data.byte(kQuitrequested))
+ break;
+ if (data.word(kMousebutton) == 0)
+ continue;
+ if (data.word(kMousebutton) != data.word(kOldbutton))
+ break;
+ }
+
+ delpointer();
+ data.byte(kPointerframe) = pointerFrame;
+ data.byte(kPickup) = pickup;
+ data.byte(kPointermode) = 0;
+}
+
+void DreamGenContext::findnextcolon() {
+ uint8 *initialString = es.ptr(si, 0);
+ uint8 *string = initialString;
+ al = findnextcolon(&string);
+ si += (string - initialString);
+}
+
+uint8 DreamGenContext::findnextcolon(uint8 **string) {
+ uint8 c;
+ do {
+ c = **string;
+ ++(*string);
+ } while ((c != 0) && (c != ':'));
+ return c;
+}
+
+uint8 *DreamGenContext::getobtextstartCPP() {
+ push(es);
+ push(si);
+ getobtextstart();
+ uint8 *result = es.ptr(si, 0);
+ si = pop();
+ es = pop();
+ return result;
+}
+
} /*namespace dreamgen */
diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h
index 9d5550be5b..ab272744e0 100644
--- a/engines/dreamweb/stubs.h
+++ b/engines/dreamweb/stubs.h
@@ -25,7 +25,7 @@
void clearwork();
void multidump();
void multidump(uint16 x, uint16 y, uint8 width, uint8 height);
- void frameoutv(uint8 *dst, const uint8 *src, uint16 pitch, uint16 width, uint16 height, uint16 x, uint16 y);
+ void frameoutv(uint8 *dst, const uint8 *src, uint16 pitch, uint16 width, uint16 height, int16 x, int16 y);
void frameoutnm(uint8 *dst, const uint8 *src, uint16 pitch, uint16 width, uint16 height, uint16 x, uint16 y);
void frameoutbh(uint8 *dst, const uint8 *src, uint16 pitch, uint16 width, uint16 height, uint16 x, uint16 y);
void frameoutfx(uint8 *dst, const uint8 *src, uint16 pitch, uint16 width, uint16 height, uint16 x, uint16 y);
@@ -47,6 +47,9 @@
void printchar(const Frame* charSet, uint16 *x, uint16 y, uint8 c, uint8 nextChar, uint8 *width, uint8 *height);
void printdirect();
void printdirect(const uint8** string, uint16 x, uint16 *y, uint8 maxWidth, bool centered);
+ void printdirect(const uint8* string, uint16 x, uint16 y, uint8 maxWidth, bool centered);
+ void printmessage(uint16 x, uint16 y, uint8 index, uint8 maxWidth, bool centered);
+ void printmessage();
void usetimedtext();
void dumptimedtext();
void setuptimedtemp();
@@ -58,10 +61,8 @@
void dumptextline();
void getnumber();
uint8 getnumber(const Frame *charSet, const uint8 *string, uint16 maxWidth, bool centered, uint16 *offset);
- void kernchars();
uint8 kernchars(uint8 firstChar, uint8 secondChar, uint8 width);
void getroomdata();
- void getroomdata(uint8 roomIndex);
void readheader();
void fillspace();
void startloading();
@@ -76,7 +77,6 @@
void multiput();
void eraseoldobs();
void clearsprites();
- void makesprite();
Sprite *makesprite(uint8 x, uint8 y, uint16 updateCallback, uint16 frameData, uint16 somethingInDi);
void spriteupdate();
void initman();
@@ -84,29 +84,35 @@
void facerightway();
void walking(Sprite *sprite);
void autosetwalk();
- void checkdest(const uint8 *roomsPaths);
+ void checkdest(const RoomPaths *roomsPaths);
void aboutturn(Sprite *sprite);
void backobject(Sprite *sprite);
- void constant(Sprite *sprite, ObjData *objData);
- void steady(Sprite *sprite, ObjData *objData);
- void random(Sprite *sprite, ObjData *objData);
+ void constant(Sprite *sprite, SetObject *objData);
+ void steady(Sprite *sprite, SetObject *objData);
+ void random(Sprite *sprite, SetObject *objData);
void dodoor();
- void dodoor(Sprite *sprite, ObjData *objData);
- void doorway(Sprite *sprite, ObjData *objData);
- void widedoor(Sprite *sprite, ObjData *objData);
- void lockeddoorway(Sprite *sprite, ObjData *objData);
- void liftsprite(Sprite *sprite, ObjData *objData);
+ void dodoor(Sprite *sprite, SetObject *objData);
+ void doorway(Sprite *sprite, SetObject *objData);
+ void widedoor(Sprite *sprite, SetObject *objData);
+ void lockeddoorway(Sprite *sprite, SetObject *objData);
+ void liftsprite(Sprite *sprite, SetObject *objData);
void findsource();
Frame *findsourceCPP();
void showgamereel();
+ void showgamereel(ReelRoutine *routine);
void showreelframe();
void showreelframe(Reel *reel);
const Frame *getreelframeax(uint16 frame);
- void turnpathonCPP(uint8 param);
- void turnpathoffCPP(uint8 param);
- void getroomspaths();
- uint8 *getroomspathsCPP();
- void makebackob(ObjData *objData);
+ void turnpathon(uint8 param);
+ void turnpathoff(uint8 param);
+ void turnpathon();
+ void turnpathoff();
+ void turnanypathon(uint8 param, uint8 room);
+ void turnanypathoff(uint8 param, uint8 room);
+ void turnanypathon();
+ void turnanypathoff();
+ RoomPaths *getroomspaths();
+ void makebackob(SetObject *objData);
void modifychar();
void lockmon();
void cancelch0();
@@ -125,6 +131,8 @@
bool checkifperson(uint8 x, uint8 y);
void checkiffree();
bool checkiffree(uint8 x, uint8 y);
+ void checkifex();
+ bool checkifex(uint8 x, uint8 y);
const uint8 *findobname(uint8 type, uint8 index);
void copyname();
void copyname(uint8 type, uint8 index, uint8 *dst);
@@ -155,8 +163,12 @@
void findxyfrompath();
void findormake();
void findormake(uint8 index, uint8 value, uint8 type);
- FreeObject *getfreead(uint8 index);
- ObjData *getsetad(uint8 index);
+ DynObject *getfreead(uint8 index);
+ DynObject *getexad(uint8 index);
+ DynObject *geteitheradCPP();
+ SetObject *getsetad(uint8 index);
+ void *getanyad(uint8 *value1, uint8 *value2);
+ void *getanyaddir(uint8 index, uint8 flag);
void setallchanges();
void dochange();
void dochange(uint8 index, uint8 value, uint8 type);
@@ -167,8 +179,68 @@
void removesetobject();
void removesetobject(uint8 index);
void showallfree();
+ void showallex();
bool finishedwalkingCPP();
void finishedwalking();
void checkone();
void checkone(uint8 x, uint8 y, uint8 *flag, uint8 *flagEx, uint8 *type, uint8 *flagX, uint8 *flagY);
+ void getflagunderp();
+ void getflagunderp(uint8 *flag, uint8 *flagEx);
+ void walkandexamine();
+ void obname();
+ void obname(uint8 command, uint8 commandType);
+ void delpointer();
+ void showblink();
+ void dumpblink();
+ void dumppointer();
+ void showpointer();
+ void animpointer();
+ void checkcoords();
+ void checkcoords(const RectWithCallback *rectWithCallbacks);
+ void readmouse();
+ void readmouse1();
+ void readmouse2();
+ void readmouse3();
+ void readmouse4();
+ uint16 waitframes();
+ void drawflags();
+ void addtopeoplelist();
+ void addtopeoplelist(ReelRoutine *routine);
+ void getexpos();
+ void paneltomap();
+ void maptopanel();
+ void dumpmap();
+ void obpicture();
+ void transferinv();
+ void obicons();
+ void compare();
+ bool compare(uint8 index, uint8 flag, const char id[4]);
+ bool pixelcheckset(const ObjPos *pos, uint8 x, uint8 y);
+ bool isitdescribed(const ObjPos *objPos);
+ void checkifset();
+ bool checkifset(uint8 x, uint8 y);
+ void checkifpathison();
+ bool checkifpathison(uint8 index);
+ void isitworn();
+ bool isitworn(const DynObject *object);
+ void makeworn();
+ void makeworn(DynObject *object);
+ void obtoinv();
+ void obtoinv(uint8 index, uint8 flag, uint16 x, uint16 y);
+ void showryanpage();
+ void findallryan();
+ void findallryan(uint8 *inv);
+ void fillryan();
+ void useroutine();
+ void hangon();
+ void hangon(uint16 frameCount);
+ void hangonp();
+ void hangonp(uint16 count);
+ uint8 findnextcolon(uint8 **string);
+ void findnextcolon();
+ uint8 *getobtextstartCPP();
+ void usetext(const uint8 *string);
+ void usetext();
+ void getblockofpixel();
+ uint8 getblockofpixel(uint8 x, uint8 y);
diff --git a/engines/dreamweb/use.cpp b/engines/dreamweb/use.cpp
new file mode 100644
index 0000000000..d6648b556e
--- /dev/null
+++ b/engines/dreamweb/use.cpp
@@ -0,0 +1,178 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "dreamweb/dreamweb.h"
+
+namespace DreamGen {
+
+
+typedef void (DreamGenContext::*UseCallback)(void);
+
+struct UseListEntry {
+ uint8 id[5]; // 0-terminal because it is easier syntatically to initialize the array
+ UseCallback callback;
+};
+
+void DreamGenContext::useroutine() {
+
+ static const UseListEntry kUseList[] = {
+ { "NETW", &DreamGenContext::usemon },
+ { "ELVA", &DreamGenContext::useelevator1 },
+ { "ELVB", &DreamGenContext::useelevator2 },
+ { "ELVC", &DreamGenContext::useelevator3 },
+ { "ELVE", &DreamGenContext::useelevator4 },
+ { "ELVF", &DreamGenContext::useelevator5 },
+ { "CGAT", &DreamGenContext::usechurchgate },
+ { "REMO", &DreamGenContext::usestereo },
+ { "BUTA", &DreamGenContext::usebuttona },
+ { "CBOX", &DreamGenContext::usewinch },
+ { "LITE", &DreamGenContext::uselighter },
+ { "PLAT", &DreamGenContext::useplate },
+ { "LIFT", &DreamGenContext::usecontrol },
+ { "WIRE", &DreamGenContext::usewire },
+ { "HNDL", &DreamGenContext::usehandle },
+ { "HACH", &DreamGenContext::usehatch },
+ { "DOOR", &DreamGenContext::useelvdoor },
+ { "CSHR", &DreamGenContext::usecashcard },
+ { "GUNA", &DreamGenContext::usegun },
+ { "CRAA", &DreamGenContext::usecardreader1 },
+ { "CRBB", &DreamGenContext::usecardreader2 },
+ { "CRCC", &DreamGenContext::usecardreader3 },
+ { "SEAT", &DreamGenContext::sitdowninbar },
+ { "MENU", &DreamGenContext::usemenu },
+ { "COOK", &DreamGenContext::usecooker },
+ { "ELCA", &DreamGenContext::callhotellift },
+ { "EDCA", &DreamGenContext::calledenslift },
+ { "DDCA", &DreamGenContext::calledensdlift },
+ { "ALTR", &DreamGenContext::usealtar },
+ { "LOKA", &DreamGenContext::openhoteldoor },
+ { "LOKB", &DreamGenContext::openhoteldoor2 },
+ { "ENTA", &DreamGenContext::openlouis },
+ { "ENTB", &DreamGenContext::openryan },
+ { "ENTE", &DreamGenContext::openpoolboss },
+ { "ENTC", &DreamGenContext::openyourneighbour },
+ { "ENTD", &DreamGenContext::openeden },
+ { "ENTH", &DreamGenContext::opensarters },
+ { "WWAT", &DreamGenContext::wearwatch },
+ { "POOL", &DreamGenContext::usepoolreader },
+ { "WSHD", &DreamGenContext::wearshades },
+ { "GRAF", &DreamGenContext::grafittidoor },
+ { "TRAP", &DreamGenContext::trapdoor },
+ { "CDPE", &DreamGenContext::edenscdplayer },
+ { "DLOK", &DreamGenContext::opentvdoor },
+ { "HOLE", &DreamGenContext::usehole },
+ { "DRYR", &DreamGenContext::usedryer },
+ { "HOLY", &DreamGenContext::usechurchhole },
+ { "WALL", &DreamGenContext::usewall },
+ { "BOOK", &DreamGenContext::usediary },
+ { "AXED", &DreamGenContext::useaxe },
+ { "SHLD", &DreamGenContext::useshield },
+ { "BCNY", &DreamGenContext::userailing },
+ { "LIDC", &DreamGenContext::usecoveredbox },
+ { "LIDU", &DreamGenContext::useclearbox },
+ { "LIDO", &DreamGenContext::useopenbox },
+ { "PIPE", &DreamGenContext::usepipe },
+ { "BALC", &DreamGenContext::usebalcony },
+ { "WIND", &DreamGenContext::usewindow },
+ { "PAPR", &DreamGenContext::viewfolder },
+ { "UWTA", &DreamGenContext::usetrainer },
+ { "UWTB", &DreamGenContext::usetrainer },
+ { "STAT", &DreamGenContext::entersymbol },
+ { "TLID", &DreamGenContext::opentomb },
+ { "SLAB", &DreamGenContext::useslab },
+ { "CART", &DreamGenContext::usecart },
+ { "FCAR", &DreamGenContext::usefullcart },
+ { "SLBA", &DreamGenContext::slabdoora },
+ { "SLBB", &DreamGenContext::slabdoorb },
+ { "SLBC", &DreamGenContext::slabdoorc },
+ { "SLBD", &DreamGenContext::slabdoord },
+ { "SLBE", &DreamGenContext::slabdoore },
+ { "SLBF", &DreamGenContext::slabdoorf },
+ { "PLIN", &DreamGenContext::useplinth },
+ { "LADD", &DreamGenContext::useladder },
+ { "LADB", &DreamGenContext::useladderb },
+ { "GUMA", &DreamGenContext::chewy },
+ { "SQEE", &DreamGenContext::wheelsound },
+ { "TAPP", &DreamGenContext::runtap },
+ { "GUIT", &DreamGenContext::playguitar },
+ { "CONT", &DreamGenContext::hotelcontrol },
+ { "BELL", &DreamGenContext::hotelbell },
+ };
+
+ if (data.byte(kReallocation) >= 50) {
+ if (data.byte(kPointerpower) == 0)
+ return;
+ data.byte(kPointerpower) = 0;
+ }
+
+ getanyad();
+ const uint8 *id = es.ptr(bx + 12, 4);
+
+ for (size_t i = 0; i < sizeof(kUseList)/sizeof(UseListEntry); ++i) {
+ const UseListEntry &entry = kUseList[i];
+ if (('A' + id[0] == entry.id[0]) && ('A' + id[1] == entry.id[1]) && ('A' + id[2] == entry.id[2]) && ('A' + id[3] == entry.id[3])) {
+ (this->*entry.callback)();
+ return;
+ }
+ }
+
+ delpointer();
+ uint8 *obText = getobtextstartCPP();
+ if (findnextcolon(&obText) != 0) {
+ if (findnextcolon(&obText) != 0) {
+ if (*obText != 0) {
+ usetext(obText);
+ hangonp(400);
+ putbackobstuff();
+ return;
+ }
+ }
+ }
+
+ createpanel();
+ showpanel();
+ showman();
+ showexit();
+ obicons();
+ printmessage(33, 100, 63, 241, true);
+ worktoscreenm();
+ hangonp(50);
+ putbackobstuff();
+ data.byte(kCommandtype) = 255;
+}
+
+void DreamGenContext::usetext() {
+ usetext(es.ptr(si, 0));
+}
+
+void DreamGenContext::usetext(const uint8 *string) {
+ createpanel();
+ showpanel();
+ showman();
+ showexit();
+ obicons();
+ printdirect(string, 36, 104, 241, true);
+ worktoscreenm();
+}
+
+} /*namespace dreamgen */
+
diff --git a/engines/dreamweb/vgagrafx.cpp b/engines/dreamweb/vgagrafx.cpp
index 3c92640768..53db811313 100644
--- a/engines/dreamweb/vgagrafx.cpp
+++ b/engines/dreamweb/vgagrafx.cpp
@@ -43,6 +43,8 @@ void DreamGenContext::multiget() {
}
void DreamGenContext::multiget(uint8 *dst, uint16 x, uint16 y, uint8 w, uint8 h) {
+ assert(x < 320);
+ assert(y < 200);
const uint8 *src = workspace() + x + y * kScreenwidth;
if (y + h > 200)
h = 200 - y;
@@ -64,6 +66,8 @@ void DreamGenContext::multiput() {
}
void DreamGenContext::multiput(const uint8 *src, uint16 x, uint16 y, uint8 w, uint8 h) {
+ assert(x < 320);
+ assert(y < 200);
uint8 *dst = workspace() + x + y * kScreenwidth;
if (y + h > 200)
h = 200 - y;
@@ -150,11 +154,10 @@ void DreamGenContext::frameoutfx(uint8 *dst, const uint8 *src, uint16 pitch, uin
void DreamGenContext::doshake() {
uint8 &counter = data.byte(kShakecounter);
- _cmp(counter, 48);
- if (flags.z())
+ if (counter == 48)
return;
- _add(counter, 1);
+ ++counter;
static const int shakeTable[] = {
0, -2, 3, -2, 0, 2, 4, -1,
1, -3, 3, 2, 0, -2, 3, -2,
@@ -282,11 +285,23 @@ void DreamGenContext::showpcx() {
pcxFile.close();
}
-void DreamGenContext::frameoutv(uint8 *dst, const uint8 *src, uint16 pitch, uint16 width, uint16 height, uint16 x, uint16 y) {
+void DreamGenContext::frameoutv(uint8 *dst, const uint8 *src, uint16 pitch, uint16 width, uint16 height, int16 x, int16 y) {
// NB : These resilience checks were not in the original engine, but did they result in undefined behaviour
// or was something broken during porting to C++?
assert(pitch == 320);
+ if(x < 0) {
+ assert(width >= -x);
+ width -= -x;
+ src += -x;
+ x = 0;
+ }
+ if(y < 0) {
+ assert(height >= -y);
+ height -= -y;
+ src += (-y) * width;
+ y = 0;
+ }
if(x >= 320)
return;
if(y >= 200)
@@ -411,5 +426,43 @@ void DreamGenContext::zoom() {
data.byte(kDidzoom) = 1;
}
+void DreamGenContext::paneltomap() {
+ multiget(segRef(data.word(kMapstore)).ptr(0, 0), data.word(kMapxstart) + data.word(kMapadx), data.word(kMapystart) + data.word(kMapady), data.byte(kMapxsize), data.byte(kMapysize));
+}
+
+void DreamGenContext::maptopanel() {
+ multiput(segRef(data.word(kMapstore)).ptr(0, 0), data.word(kMapxstart) + data.word(kMapadx), data.word(kMapystart) + data.word(kMapady), data.byte(kMapxsize), data.byte(kMapysize));
+}
+
+void DreamGenContext::dumpmap() {
+ multidump(data.word(kMapxstart) + data.word(kMapadx), data.word(kMapystart) + data.word(kMapady), data.byte(kMapxsize), data.byte(kMapysize));
+}
+
+void DreamGenContext::transferinv() {
+ const Frame *freeFrames = (const Frame *)segRef(data.word(kFreeframes)).ptr(kFrframedata, 0);
+ const Frame *freeFrame = freeFrames + (3 * data.byte(kItemtotran) + 1);
+ Frame *exFrames = (Frame *)segRef(data.word(kExtras)).ptr(kExframedata, 0);
+ Frame *exFrame = exFrames + (3 * data.byte(kExpos) + 1);
+ exFrame->width = freeFrame->width;
+ exFrame->height = freeFrame->height;
+ exFrame->x = freeFrame->x;
+ exFrame->y = freeFrame->y;
+ uint16 byteCount = freeFrame->width * freeFrame->height;
+ const uint8 *src = segRef(data.word(kFreeframes)).ptr(kFrframes + freeFrame->ptr(), byteCount);
+ uint8 *dst = segRef(data.word(kExtras)).ptr(kExframes + data.word(kExframepos), byteCount);
+ memcpy(dst, src, byteCount);
+ exFrame->setPtr(data.word(kExframepos));
+ data.word(kExframepos) += byteCount;
+}
+
+bool DreamGenContext::pixelcheckset(const ObjPos *pos, uint8 x, uint8 y) {
+ x -= pos->xMin;
+ y -= pos->yMin;
+ SetObject *setObject = getsetad(pos->index);
+ Frame *frame = (Frame *)segRef(data.word(kSetframes)).ptr(kFramedata, 0) + setObject->index;
+ const uint8 *ptr = segRef(data.word(kSetframes)).ptr(kFrames, 0) + frame->ptr() + y * frame->width + x;
+ return *ptr != 0;
+}
+
} /*namespace dreamgen */
diff --git a/engines/gob/anifile.cpp b/engines/gob/anifile.cpp
new file mode 100644
index 0000000000..1a905f1083
--- /dev/null
+++ b/engines/gob/anifile.cpp
@@ -0,0 +1,326 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "common/stream.h"
+#include "common/substream.h"
+
+#include "gob/gob.h"
+#include "gob/util.h"
+#include "gob/dataio.h"
+#include "gob/surface.h"
+#include "gob/video.h"
+#include "gob/anifile.h"
+
+namespace Gob {
+
+ANIFile::Layer::Layer() : surface(0), coordinates(0) {
+}
+
+ANIFile::Layer::~Layer() {
+ delete coordinates;
+ delete surface;
+}
+
+
+ANIFile::ANIFile(GobEngine *vm, const Common::String &fileName,
+ uint16 width, uint8 bpp) : _vm(vm),
+ _width(width), _bpp(bpp), _hasPadding(false) {
+
+ Common::SeekableReadStream *ani = _vm->_dataIO->getFile(fileName);
+ if (ani) {
+ Common::SeekableSubReadStreamEndian sub(ani, 0, ani->size(), false, DisposeAfterUse::YES);
+
+ load(sub, fileName);
+ return;
+ }
+
+ // File doesn't exist, try to open the big-endian'd alternate file
+ Common::String alternateFileName = fileName;
+ alternateFileName.setChar('_', 0);
+
+ ani = _vm->_dataIO->getFile(alternateFileName);
+ if (ani) {
+ Common::SeekableSubReadStreamEndian sub(ani, 0, ani->size(), true, DisposeAfterUse::YES);
+
+ // The big endian version pads a few fields to even size
+ _hasPadding = true;
+
+ load(sub, fileName);
+ return;
+ }
+
+ warning("ANIFile::ANIFile(): No such file \"%s\"", fileName.c_str());
+}
+
+ANIFile::~ANIFile() {
+}
+
+void ANIFile::load(Common::SeekableSubReadStreamEndian &ani, const Common::String &fileName) {
+ ani.skip(2); // Unused
+
+ uint16 animationCount = ani.readUint16();
+ uint16 layerCount = ani.readUint16();
+
+ if (layerCount < 1)
+ warning("ANIFile::load(): Less than one layer (%d) in file \"%s\"",
+ layerCount, fileName.c_str());
+
+ // Load the layers
+ if (layerCount > 0) {
+ ani.skip(13); // The first layer is ignored?
+ if (_hasPadding)
+ ani.skip(1);
+
+ _layers.resize(layerCount - 1);
+ for (LayerArray::iterator l = _layers.begin(); l != _layers.end(); ++l)
+ loadLayer(*l, ani);
+ }
+
+ _maxWidth = 0;
+ _maxHeight = 0;
+
+ // Load the animations
+ _animations.resize(animationCount);
+ _frames.resize(animationCount);
+
+ for (uint16 animation = 0; animation < animationCount; animation++) {
+ loadAnimation(_animations[animation], _frames[animation], ani);
+
+ _maxWidth = MAX<uint16>(_maxWidth , _animations[animation].width);
+ _maxHeight = MAX<uint16>(_maxHeight, _animations[animation].height);
+ }
+}
+
+void ANIFile::loadAnimation(Animation &animation, FrameArray &frames,
+ Common::SeekableSubReadStreamEndian &ani) {
+
+ // Animation properties
+
+ animation.name = Util::readString(ani, 13);
+ if (_hasPadding)
+ ani.skip(1);
+
+ ani.skip(13); // The name a second time?!?
+ if (_hasPadding)
+ ani.skip(1);
+
+ ani.skip(2); // Unknown
+
+ animation.x = (int16) ani.readUint16();
+ animation.y = (int16) ani.readUint16();
+ animation.deltaX = (int16) ani.readUint16();
+ animation.deltaY = (int16) ani.readUint16();
+
+ animation.transp = ani.readByte() != 0;
+
+ if (_hasPadding)
+ ani.skip(1);
+
+ uint16 frameCount = ani.readUint16();
+
+ // Load the frames
+
+ frames.resize(MAX<uint16>(1, frameCount));
+ loadFrames(frames, ani);
+
+ animation.frameCount = frames.size();
+
+ animation.width = 0;
+ animation.height = 0;
+
+ // Calculate the areas of each frame
+
+ animation.frameAreas.resize(animation.frameCount);
+ for (uint16 i = 0; i < animation.frameCount; i++) {
+ const ChunkList &frame = frames[i];
+ FrameArea &area = animation.frameAreas[i];
+
+ area.left = area.top = 0x7FFF;
+ area.right = area.bottom = -0x7FFF;
+
+ for (ChunkList::const_iterator c = frame.begin(); c != frame.end(); c++) {
+ const Layer *layer;
+ const RXYFile::Coordinates *coords;
+
+ if (!getPart(c->layer, c->part, layer, coords))
+ continue;
+
+ const uint16 width = coords->right - coords->left + 1;
+ const uint16 height = coords->bottom - coords->top + 1;
+
+ const uint16 l = c->x;
+ const uint16 t = c->y;
+ const uint16 r = l + width - 1;
+ const uint16 b = t + height - 1;
+
+ area.left = MIN<int16>(area.left , l);
+ area.top = MIN<int16>(area.top , t);
+ area.right = MAX<int16>(area.right , r);
+ area.bottom = MAX<int16>(area.bottom, b);
+ }
+
+ if ((area.left <= area.right) && (area.top <= area.bottom)) {
+ animation.width = MAX<uint16>(animation.width , area.right - area.left + 1);
+ animation.height = MAX<uint16>(animation.height, area.bottom - area.top + 1);
+ }
+ }
+}
+
+void ANIFile::loadFrames(FrameArray &frames, Common::SeekableSubReadStreamEndian &ani) {
+ uint32 curFrame = 0;
+
+ bool end = false;
+ while (!end) {
+ frames[curFrame].push_back(AnimationChunk());
+ AnimationChunk &chunk = frames[curFrame].back();
+
+ uint8 layerFlags = ani.readByte();
+
+ // Chunk properties
+ chunk.layer = (layerFlags & 0x0F) - 1;
+ chunk.part = ani.readByte();
+ chunk.x = (int8) ani.readByte();
+ chunk.y = (int8) ani.readByte();
+
+ // X multiplier/offset
+ int16 xOff = ((layerFlags & 0xC0) >> 6) << 7;
+ if (chunk.x >= 0)
+ chunk.x += xOff;
+ else
+ chunk.x -= xOff;
+
+ // Y multiplier/offset
+ int16 yOff = ((layerFlags & 0x30) >> 4) << 7;
+ if (chunk.y >= 0)
+ chunk.y += yOff;
+ else
+ chunk.y -= yOff;
+
+ uint8 multiPart = ani.readByte();
+ if (multiPart == 0xFF) // No more frames in this animation
+ end = true;
+ else if (multiPart != 0x01) // No more chunks in this frame
+ curFrame++;
+
+ // Shouldn't happen, but just to be safe
+ if (curFrame >= frames.size())
+ frames.resize(curFrame + 1);
+
+ if (_hasPadding)
+ ani.skip(1);
+
+ if (ani.eos() || ani.err())
+ error("ANIFile::loadFrames(): Read error");
+ }
+}
+
+void ANIFile::loadLayer(Layer &layer, Common::SeekableSubReadStreamEndian &ani) {
+ Common::String file = Util::readString(ani, 13);
+ if (_hasPadding)
+ ani.skip(1);
+
+ if (file.empty())
+ return;
+
+ Common::String fileRXY = Util::setExtension(file, ".RXY");
+ Common::String fileCMP = Util::setExtension(file, ".CMP");
+ if (!_vm->_dataIO->hasFile(fileRXY) || !_vm->_dataIO->hasFile(fileCMP))
+ return;
+
+ loadLayer(layer, fileRXY, fileCMP);
+}
+
+void ANIFile::loadLayer(Layer &layer, const Common::String &fileRXY,
+ const Common::String &fileCMP) {
+
+ Common::SeekableReadStream *dataRXY = _vm->_dataIO->getFile(fileRXY);
+ if (!dataRXY)
+ return;
+
+ layer.coordinates = new RXYFile(*dataRXY);
+ layer.surface = new Surface(_width, layer.coordinates->getHeight(), _bpp);
+
+ _vm->_video->drawPackedSprite(fileCMP.c_str(), *layer.surface);
+}
+
+uint16 ANIFile::getAnimationCount() const {
+ return _animations.size();
+}
+
+void ANIFile::getMaxSize(uint16 &width, uint16 &height) const {
+ width = _maxWidth;
+ height = _maxHeight;
+}
+
+const ANIFile::Animation &ANIFile::getAnimationInfo(uint16 animation) const {
+ assert(animation < _animations.size());
+
+ return _animations[animation];
+}
+
+bool ANIFile::getPart(uint16 layer, uint16 part,
+ const Layer *&l, const RXYFile::Coordinates *&c) const {
+
+ if (layer >= _layers.size())
+ return false;
+
+ l = &_layers[layer];
+ if (!l->surface || !l->coordinates)
+ return false;
+
+ if (part >= l->coordinates->size())
+ return false;
+
+ c = &(*l->coordinates)[part];
+ if (c->left == 0xFFFF)
+ return false;
+
+ return true;
+}
+
+void ANIFile::draw(Surface &dest, uint16 animation, uint16 frame, int16 x, int16 y) const {
+ if (animation >= _animations.size())
+ return;
+
+ const Animation &anim = _animations[animation];
+ if (frame >= anim.frameCount)
+ return;
+
+ const ChunkList &chunks = _frames[animation][frame];
+
+ for (ChunkList::const_iterator c = chunks.begin(); c != chunks.end(); ++c)
+ drawLayer(dest, c->layer, c->part, x + c->x, y + c->y, anim.transp ? 0 : -1);
+}
+
+void ANIFile::drawLayer(Surface &dest, uint16 layer, uint16 part,
+ int16 x, int16 y, int32 transp) const {
+
+ const Layer *l;
+ const RXYFile::Coordinates *c;
+
+ if (!getPart(layer, part, l, c))
+ return;
+
+ dest.blit(*l->surface, c->left, c->top, c->right, c->bottom, x, y, transp);
+}
+
+} // End of namespace Gob
diff --git a/engines/gob/anifile.h b/engines/gob/anifile.h
new file mode 100644
index 0000000000..1e10da6ff4
--- /dev/null
+++ b/engines/gob/anifile.h
@@ -0,0 +1,161 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef GOB_ANIFILE_H
+#define GOB_ANIFILE_H
+
+#include "common/system.h"
+#include "common/str.h"
+#include "common/array.h"
+#include "common/list.h"
+
+#include "gob/rxyfile.h"
+
+namespace Common {
+ class SeekableSubReadStreamEndian;
+}
+
+namespace Gob {
+
+class GobEngine;
+class Surface;
+
+/** An ANI file, describing an animation.
+ *
+ * Used in hardcoded "actiony" parts of gob games.
+ * The principle is similar to an Anim in Scenery (see scenery.cpp), but
+ * instead of referencing indices in the sprites array, ANIs reference sprites
+ * directly by filename.
+ */
+class ANIFile {
+public:
+ /** The relative area a frame sprite occupies. */
+ struct FrameArea {
+ int16 left;
+ int16 top;
+ int16 right;
+ int16 bottom;
+ };
+
+ /** An animation within an ANI file. */
+ struct Animation {
+ Common::String name; ///< The name of the animation.
+
+ uint16 frameCount; ///< The number of frames in this animation.
+
+ int16 x; ///< The default x position for this animation.
+ int16 y; ///< The default y position for this animation.
+ bool transp; ///< Should the animation frames be drawn with transparency?
+
+ int16 deltaX; ///< # of pixels to advance in X direction after each cycle.
+ int16 deltaY; ///< # of pixels to advance in Y direction after each cycle.
+
+ /** The relative area each frame sprite occupies. */
+ Common::Array<FrameArea> frameAreas;
+
+ uint16 width; ///< The maximum width of this animation's frames.
+ uint16 height; ///< The maximum height of this animation's frames.
+ };
+
+
+ ANIFile(GobEngine *vm, const Common::String &fileName,
+ uint16 width = 320, uint8 bpp = 1);
+ ~ANIFile();
+
+ /** Return the number of animations in this ANI file. */
+ uint16 getAnimationCount() const;
+
+ /** Return the maximum size of all animation frames. */
+ void getMaxSize(uint16 &width, uint16 &height) const;
+
+ /** Get this animation's properties. */
+ const Animation &getAnimationInfo(uint16 animation) const;
+
+ /** Draw an animation frame. */
+ void draw(Surface &dest, uint16 animation, uint16 frame, int16 x, int16 y) const;
+
+private:
+ /** A sprite layer. */
+ struct Layer {
+ Surface *surface; ///< The surface containing the layer sprite.
+ RXYFile *coordinates; ///< The coordinates describing the layer sprite parts.
+
+ Layer();
+ ~Layer();
+ };
+
+ typedef Common::Array<Layer> LayerArray;
+ typedef Common::Array<Animation> AnimationArray;
+
+ /** A "chunk" of an animation frame. */
+ struct AnimationChunk {
+ int16 x; ///< The relative x offset of this chunk.
+ int16 y; ///< The relative y offset of this chunk.
+
+ uint16 layer; ///< The layer the chunk's sprite is on.
+ uint16 part; ///< The layer part the chunk's sprite is.
+ };
+
+ typedef Common::List<AnimationChunk> ChunkList;
+ typedef Common::Array<ChunkList> FrameArray;
+ typedef Common::Array<FrameArray> AnimationFrameArray;
+
+
+ GobEngine *_vm;
+
+ uint16 _width; ///< The width of a sprite layer.
+ uint8 _bpp; ///< Number of bytes per pixel in a sprite layer.
+
+ byte _hasPadding;
+
+ LayerArray _layers; ///< The animation sprite layers.
+ AnimationArray _animations; ///< The animations.
+ AnimationFrameArray _frames; ///< The animation frames.
+
+ uint16 _maxWidth;
+ uint16 _maxHeight;
+
+
+ // Loading helpers
+
+ void load(Common::SeekableSubReadStreamEndian &ani, const Common::String &fileName);
+
+ void loadLayer(Layer &layer, Common::SeekableSubReadStreamEndian &ani);
+ void loadLayer(Layer &layer, const Common::String &fileRXY,
+ const Common::String &fileCMP);
+
+ void loadAnimation(Animation &animation, FrameArray &frames,
+ Common::SeekableSubReadStreamEndian &ani);
+ void loadFrames(FrameArray &frames, Common::SeekableSubReadStreamEndian &ani);
+
+ // Drawing helpers
+
+ bool getPart(uint16 layer, uint16 part,
+ const Layer *&l, const RXYFile::Coordinates *&c) const;
+
+ void drawLayer(Surface &dest, uint16 layer, uint16 part,
+ int16 x, int16 y, int32 transp) const;
+};
+
+} // End of namespace Gob
+
+#endif // GOB_ANIFILE_H
diff --git a/engines/gob/aniobject.cpp b/engines/gob/aniobject.cpp
new file mode 100644
index 0000000000..c6a9234eb9
--- /dev/null
+++ b/engines/gob/aniobject.cpp
@@ -0,0 +1,185 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "gob/surface.h"
+#include "gob/anifile.h"
+#include "gob/aniobject.h"
+
+namespace Gob {
+
+ANIObject::ANIObject(const ANIFile &ani) : _ani(&ani), _visible(false),
+ _x(0), _y(0), _background(0), _drawn(false) {
+
+ setAnimation(0);
+ setPosition();
+}
+
+ANIObject::~ANIObject() {
+ delete _background;
+}
+
+void ANIObject::setVisible(bool visible) {
+ _visible = visible;
+}
+
+bool ANIObject::isVisible() const {
+ return _visible;
+}
+
+void ANIObject::setAnimation(uint16 animation) {
+ _animation = animation;
+ _frame = 0;
+}
+
+void ANIObject::setPosition() {
+ if (_animation >= _ani->getAnimationCount())
+ return;
+
+ const ANIFile::Animation &animation = _ani->getAnimationInfo(_animation);
+
+ _x = animation.x;
+ _y = animation.y;
+}
+
+void ANIObject::setPosition(int16 x, int16 y) {
+ _x = x;
+ _y = y;
+}
+
+void ANIObject::getPosition(int16 &x, int16 &y) const {
+ x = _x;
+ y = _y;
+}
+
+void ANIObject::getFramePosition(int16 &x, int16 &y) const {
+ if (_animation >= _ani->getAnimationCount())
+ return;
+
+ const ANIFile::Animation &animation = _ani->getAnimationInfo(_animation);
+ if (_frame >= animation.frameCount)
+ return;
+
+ x = _x + animation.frameAreas[_frame].left;
+ y = _y + animation.frameAreas[_frame].top;
+}
+
+void ANIObject::getFrameSize(int16 &width, int16 &height) const {
+ if (_animation >= _ani->getAnimationCount())
+ return;
+
+ const ANIFile::Animation &animation = _ani->getAnimationInfo(_animation);
+ if (_frame >= animation.frameCount)
+ return;
+
+ width = animation.frameAreas[_frame].right - animation.frameAreas[_frame].left + 1;
+ height = animation.frameAreas[_frame].bottom - animation.frameAreas[_frame].top + 1;
+}
+
+void ANIObject::draw(Surface &dest, int16 &left, int16 &top,
+ int16 &right, int16 &bottom) {
+
+ if (!_visible)
+ return;
+
+ if (!_background) {
+ uint16 width, height;
+
+ _ani->getMaxSize(width, height);
+
+ _background = new Surface(width, height, dest.getBPP());
+ }
+
+ const ANIFile::Animation &animation = _ani->getAnimationInfo(_animation);
+ if (_frame >= animation.frameCount)
+ return;
+
+ const ANIFile::FrameArea &area = animation.frameAreas[_frame];
+
+ _backgroundLeft = CLIP<int16>(area.left + _x, 0, dest.getWidth () - 1);
+ _backgroundTop = CLIP<int16>(area.top + _y, 0, dest.getHeight() - 1);
+ _backgroundRight = CLIP<int16>(area.right + _x, 0, dest.getWidth () - 1);
+ _backgroundBottom = CLIP<int16>(area.bottom + _y, 0, dest.getHeight() - 1);
+
+ _background->blit(dest, _backgroundLeft , _backgroundTop,
+ _backgroundRight, _backgroundBottom, 0, 0);
+
+ _ani->draw(dest, _animation, _frame, _x, _y);
+
+ _drawn = true;
+
+ left = _backgroundLeft;
+ top = _backgroundTop;
+ right = _backgroundRight;
+ bottom = _backgroundBottom;
+}
+
+void ANIObject::clear(Surface &dest, int16 &left, int16 &top,
+ int16 &right, int16 &bottom) {
+
+ if (!_drawn)
+ return;
+
+ const int16 bgRight = _backgroundRight - _backgroundLeft;
+ const int16 bgBottom = _backgroundBottom - _backgroundTop;
+
+ dest.blit(*_background, 0, 0, bgRight, bgBottom, _backgroundLeft, _backgroundTop);
+
+ _drawn = false;
+
+ left = _backgroundLeft;
+ top = _backgroundTop;
+ right = _backgroundRight;
+ bottom = _backgroundBottom;
+}
+
+void ANIObject::advance() {
+ if (_animation >= _ani->getAnimationCount())
+ return;
+
+ const ANIFile::Animation &animation = _ani->getAnimationInfo(_animation);
+
+ _frame = (_frame + 1) % animation.frameCount;
+
+ if (_frame == 0) {
+ _x += animation.deltaX;
+ _y += animation.deltaY;
+ }
+}
+
+uint16 ANIObject::getAnimation() const {
+ return _animation;
+}
+
+uint16 ANIObject::getFrame() const {
+ return _frame;
+}
+
+bool ANIObject::lastFrame() const {
+ if (_animation >= _ani->getAnimationCount())
+ return true;
+
+ const ANIFile::Animation &animation = _ani->getAnimationInfo(_animation);
+
+ return (_frame + 1) >= animation.frameCount;
+}
+
+} // End of namespace Gob
diff --git a/engines/gob/aniobject.h b/engines/gob/aniobject.h
new file mode 100644
index 0000000000..357c2a9bcc
--- /dev/null
+++ b/engines/gob/aniobject.h
@@ -0,0 +1,99 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef GOB_ANIOBJECT_H
+#define GOB_ANIOBJECT_H
+
+#include "common/system.h"
+
+namespace Gob {
+
+class ANIFile;
+class Surface;
+
+/** An ANI object, controlling an animation within an ANI file. */
+class ANIObject {
+public:
+ ANIObject(const ANIFile &ani);
+ virtual ~ANIObject();
+
+ /** Make the object visible/invisible. */
+ void setVisible(bool visible);
+
+ /** Is the object currently visible? */
+ bool isVisible() const;
+
+ /** Set the current position to the animation's default. */
+ void setPosition();
+ /** Set the current position. */
+ void setPosition(int16 x, int16 y);
+
+ /** Return the current position. */
+ void getPosition(int16 &x, int16 &y) const;
+
+ /** Return the current frame position. */
+ void getFramePosition(int16 &x, int16 &y) const;
+ /** Return the current frame size. */
+ void getFrameSize(int16 &width, int16 &height) const;
+
+ /** Set the animation number. */
+ void setAnimation(uint16 animation);
+
+ /** Return the current animation number. */
+ uint16 getAnimation() const;
+ /** Return the current frame number. */
+ uint16 getFrame() const;
+
+ /** Is this the last frame within this animation cycle? */
+ bool lastFrame() const;
+
+ /** Draw the current frame onto the surface and return the affected rectangle. */
+ void draw(Surface &dest, int16 &left, int16 &top, int16 &right, int16 &bottom);
+ /** Draw the current frame from the surface and return the affected rectangle. */
+ void clear(Surface &dest, int16 &left , int16 &top, int16 &right, int16 &bottom);
+
+ /** Advance the animation to the next frame. */
+ virtual void advance();
+
+private:
+ const ANIFile *_ani; ///< The managed ANI file.
+
+ uint16 _animation; ///< The current animation number
+ uint16 _frame; ///< The current frame.
+
+ bool _visible; ///< Is the object currently visible?
+
+ int16 _x; ///< The current X position.
+ int16 _y; ///< The current Y position.
+
+ Surface *_background; ///< The saved background.
+ bool _drawn; ///< Was the animation drawn?
+
+ int16 _backgroundLeft; ///< The left position of the saved background.
+ int16 _backgroundTop; ///< The top of the saved background.
+ int16 _backgroundRight; ///< The right position of the saved background.
+ int16 _backgroundBottom; ///< The bottom position of the saved background.
+};
+
+} // End of namespace Gob
+
+#endif // GOB_ANIOBJECT_H
diff --git a/engines/gob/console.cpp b/engines/gob/console.cpp
index b8aed37727..e7296fb81b 100644
--- a/engines/gob/console.cpp
+++ b/engines/gob/console.cpp
@@ -29,6 +29,7 @@ namespace Gob {
GobConsole::GobConsole(GobEngine *vm) : GUI::Debugger(), _vm(vm) {
DCmd_Register("varSize", WRAP_METHOD(GobConsole, cmd_varSize));
+ DCmd_Register("dumpVars", WRAP_METHOD(GobConsole, cmd_dumpVars));
DCmd_Register("var8", WRAP_METHOD(GobConsole, cmd_var8));
DCmd_Register("var16", WRAP_METHOD(GobConsole, cmd_var16));
DCmd_Register("var32", WRAP_METHOD(GobConsole, cmd_var32));
@@ -44,6 +45,23 @@ bool GobConsole::cmd_varSize(int argc, const char **argv) {
return true;
}
+bool GobConsole::cmd_dumpVars(int argc, const char **argv) {
+ if (!_vm->_inter->_variables)
+ return true;
+
+ Common::DumpFile file;
+
+ if (!file.open("variables.dmp"))
+ return true;
+
+ file.write(_vm->_inter->_variables->getAddressOff8(0), _vm->_inter->_variables->getSize());
+
+ file.flush();
+ file.close();
+
+ return true;
+}
+
bool GobConsole::cmd_var8(int argc, const char **argv) {
if (argc == 1) {
DebugPrintf("Usage: var8 <var offset> (<value>)\n");
diff --git a/engines/gob/console.h b/engines/gob/console.h
index b9f9b81d0e..b9c3f5ed70 100644
--- a/engines/gob/console.h
+++ b/engines/gob/console.h
@@ -38,6 +38,7 @@ private:
GobEngine *_vm;
bool cmd_varSize(int argc, const char **argv);
+ bool cmd_dumpVars(int argc, const char **argv);
bool cmd_var8(int argc, const char **argv);
bool cmd_var16(int argc, const char **argv);
bool cmd_var32(int argc, const char **argv);
diff --git a/engines/gob/dataio.cpp b/engines/gob/dataio.cpp
index a576cf9487..1633a1edb7 100644
--- a/engines/gob/dataio.cpp
+++ b/engines/gob/dataio.cpp
@@ -32,11 +32,11 @@
namespace Gob {
-DataIO::File::File() : size(0), offset(0), packed(false), archive(0) {
+DataIO::File::File() : size(0), offset(0), compression(0), archive(0) {
}
-DataIO::File::File(const Common::String &n, uint32 s, uint32 o, bool p, Archive &a) :
- name(n), size(s), offset(o), packed(p), archive(&a) {
+DataIO::File::File(const Common::String &n, uint32 s, uint32 o, uint8 c, Archive &a) :
+ name(n), size(s), offset(o), compression(c), archive(&a) {
}
@@ -71,26 +71,92 @@ void DataIO::getArchiveInfo(Common::Array<ArchiveInfo> &info) const {
}
}
-byte *DataIO::unpack(const byte *src, uint32 srcSize, int32 &size) {
- size = READ_LE_UINT32(src);
+uint32 DataIO::getSizeChunks(Common::SeekableReadStream &src) {
+ uint32 size = 0;
- byte *data = new byte[size];
+ uint32 chunkSize = 2, realSize;
+ while (chunkSize != 0xFFFF) {
+ src.skip(chunkSize - 2);
+
+ chunkSize = src.readUint16LE();
+ realSize = src.readUint16LE();
+
+ assert(chunkSize >= 4);
+
+ size += realSize;
+ }
+
+ assert(!src.eos());
+
+ src.seek(0);
+
+ return size;
+}
+
+byte *DataIO::unpack(Common::SeekableReadStream &src, int32 &size, uint8 compression, bool useMalloc) {
+ assert((compression == 1) || (compression == 2));
+
+ if (compression == 1)
+ size = src.readUint32LE();
+ else if (compression == 2)
+ size = getSizeChunks(src);
+
+ assert(size > 0);
+
+ byte *data = 0;
+ if (useMalloc)
+ data = (byte *) malloc(size);
+ else
+ data = new byte[size];
+
+ if (compression == 1)
+ unpackChunk(src, data, size);
+ else if (compression == 2)
+ unpackChunks(src, data, size);
- Common::MemoryReadStream srcStream(src + 4, srcSize - 4);
- unpack(srcStream, data, size);
return data;
}
-Common::SeekableReadStream *DataIO::unpack(Common::SeekableReadStream &src) {
- uint32 size = src.readUint32LE();
+byte *DataIO::unpack(const byte *src, uint32 srcSize, int32 &size, uint8 compression) {
+ Common::MemoryReadStream srcStream(src, srcSize);
- byte *data = (byte *) malloc(size);
+ return unpack(srcStream, size, compression, false);
+}
+
+Common::SeekableReadStream *DataIO::unpack(Common::SeekableReadStream &src, uint8 compression) {
+ int32 size;
+
+ byte *data = unpack(src, size, compression, true);
+ if (!data)
+ return 0;
- unpack(src, data, size);
return new Common::MemoryReadStream(data, size, DisposeAfterUse::YES);
}
-void DataIO::unpack(Common::SeekableReadStream &src, byte *dest, uint32 size) {
+void DataIO::unpackChunks(Common::SeekableReadStream &src, byte *dest, uint32 size) {
+ uint32 chunkSize = 0, realSize;
+ while (chunkSize != 0xFFFF) {
+ uint32 pos = src.pos();
+
+ chunkSize = src.readUint16LE();
+ realSize = src.readUint16LE();
+
+ assert(chunkSize >= 4);
+ assert(size >= realSize);
+
+ src.skip(2);
+
+ unpackChunk(src, dest, realSize);
+
+ if (chunkSize != 0xFFFF)
+ src.seek(pos + chunkSize + 2);
+
+ size -= realSize;
+ dest += realSize;
+ }
+}
+
+void DataIO::unpackChunk(Common::SeekableReadStream &src, byte *dest, uint32 size) {
byte *tmpBuf = new byte[4114];
assert(tmpBuf);
@@ -194,9 +260,9 @@ DataIO::Archive *DataIO::openArchive(const Common::String &name) {
archive->file.read(fileName, 13);
fileName[13] = '\0';
- file.size = archive->file.readUint32LE();
- file.offset = archive->file.readUint32LE();
- file.packed = archive->file.readByte() != 0;
+ file.size = archive->file.readUint32LE();
+ file.offset = archive->file.readUint32LE();
+ file.compression = archive->file.readByte() != 0;
// Replacing cyrillic characters
Util::replaceChar(fileName, (char) 0x85, 'E');
@@ -209,8 +275,8 @@ DataIO::Archive *DataIO::openArchive(const Common::String &name) {
// Geisha use 0ot files, which are compressed TOT files without the packed byte set.
if (file.name.hasSuffix(".0OT")) {
- file.name.setChar(file.name.size() - 3, 'T');
- file.packed = true;
+ file.name.setChar('T', file.name.size() - 3);
+ file.compression = 2;
}
file.archive = archive;
@@ -254,7 +320,7 @@ int32 DataIO::fileSize(const Common::String &name) {
// Try to find the file in the archives
File *file = findFile(name);
if (file) {
- if (!file->packed)
+ if (file->compression == 0)
return file->size;
// Sanity checks
@@ -264,6 +330,10 @@ int32 DataIO::fileSize(const Common::String &name) {
// Read the full, unpacked size
file->archive->file.seek(file->offset);
+
+ if (file->compression == 2)
+ file->archive->file.skip(4);
+
return file->archive->file.readUint32LE();
}
@@ -346,10 +416,10 @@ Common::SeekableReadStream *DataIO::getFile(File &file) {
Common::SeekableReadStream *rawData =
new Common::SafeSubReadStream(&file.archive->file, file.offset, file.offset + file.size);
- if (!file.packed)
+ if (file.compression == 0)
return rawData;
- Common::SeekableReadStream *unpackedData = unpack(*rawData);
+ Common::SeekableReadStream *unpackedData = unpack(*rawData, file.compression);
delete rawData;
@@ -374,10 +444,10 @@ byte *DataIO::getFile(File &file, int32 &size) {
return 0;
}
- if (!file.packed)
+ if (file.compression == 0)
return rawData;
- byte *unpackedData = unpack(rawData, file.size, size);
+ byte *unpackedData = unpack(rawData, file.size, size, file.compression);
delete[] rawData;
diff --git a/engines/gob/dataio.h b/engines/gob/dataio.h
index d95f001097..adf0786389 100644
--- a/engines/gob/dataio.h
+++ b/engines/gob/dataio.h
@@ -58,8 +58,8 @@ public:
Common::SeekableReadStream *getFile(const Common::String &name);
byte *getFile(const Common::String &name, int32 &size);
- static byte *unpack(const byte *src, uint32 srcSize, int32 &size);
- static Common::SeekableReadStream *unpack(Common::SeekableReadStream &src);
+ static byte *unpack(const byte *src, uint32 srcSize, int32 &size, uint8 compression = 1);
+ static Common::SeekableReadStream *unpack(Common::SeekableReadStream &src, uint8 compression = 1);
private:
static const int kMaxArchives = 8;
@@ -70,12 +70,12 @@ private:
Common::String name;
uint32 size;
uint32 offset;
- bool packed;
+ uint8 compression;
Archive *archive;
File();
- File(const Common::String &n, uint32 s, uint32 o, bool p, Archive &a);
+ File(const Common::String &n, uint32 s, uint32 o, uint8 c, Archive &a);
};
typedef Common::HashMap<Common::String, File, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> FileMap;
@@ -99,7 +99,12 @@ private:
Common::SeekableReadStream *getFile(File &file);
byte *getFile(File &file, int32 &size);
- static void unpack(Common::SeekableReadStream &src, byte *dest, uint32 size);
+ static byte *unpack(Common::SeekableReadStream &src, int32 &size, uint8 compression, bool useMalloc);
+
+ static uint32 getSizeChunks(Common::SeekableReadStream &src);
+
+ static void unpackChunks(Common::SeekableReadStream &src, byte *dest, uint32 size);
+ static void unpackChunk (Common::SeekableReadStream &src, byte *dest, uint32 size);
};
} // End of namespace Gob
diff --git a/engines/gob/decfile.cpp b/engines/gob/decfile.cpp
new file mode 100644
index 0000000000..f5910f0654
--- /dev/null
+++ b/engines/gob/decfile.cpp
@@ -0,0 +1,214 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "common/str.h"
+#include "common/stream.h"
+#include "common/substream.h"
+
+#include "gob/gob.h"
+#include "gob/util.h"
+#include "gob/dataio.h"
+#include "gob/surface.h"
+#include "gob/video.h"
+#include "gob/rxyfile.h"
+#include "gob/decfile.h"
+
+namespace Gob {
+
+DECFile::Layer::Layer() : surface(0), coordinates(0) {
+}
+
+DECFile::Layer::~Layer() {
+ delete coordinates;
+ delete surface;
+}
+
+
+DECFile::DECFile(GobEngine *vm, const Common::String &fileName,
+ uint16 width, uint16 height, uint8 bpp) : _vm(vm),
+ _width(width), _height(height), _bpp(bpp), _hasPadding(false) {
+
+ _backdrop = new Surface(_width, _height, _bpp);
+
+ Common::SeekableReadStream *dec = _vm->_dataIO->getFile(fileName);
+ if (dec) {
+ Common::SeekableSubReadStreamEndian sub(dec, 0, dec->size(), false, DisposeAfterUse::YES);
+
+ load(sub, fileName);
+ return;
+ }
+
+ // File doesn't exist, try to open the big-endian'd alternate file
+ Common::String alternateFileName = fileName;
+ alternateFileName.setChar('_', 0);
+
+ dec = _vm->_dataIO->getFile(alternateFileName);
+ if (dec) {
+ Common::SeekableSubReadStreamEndian sub(dec, 0, dec->size(), true, DisposeAfterUse::YES);
+
+ // The big endian version pads a few fields to even size
+ _hasPadding = true;
+
+ load(sub, fileName);
+ return;
+ }
+
+ warning("DECFile::DECFile(): No such file \"%s\"", fileName.c_str());
+}
+
+DECFile::~DECFile() {
+ delete _backdrop;
+}
+
+void DECFile::load(Common::SeekableSubReadStreamEndian &dec, const Common::String &fileName) {
+ dec.skip(2); // Unused
+
+ int16 backdropCount = dec.readUint16();
+ int16 layerCount = dec.readUint16();
+
+ // Sanity checks
+ if (backdropCount > 1)
+ warning("DECFile::load(): More than one backdrop (%d) in file \"%s\"",
+ backdropCount, fileName.c_str());
+ if (layerCount < 1)
+ warning("DECFile::load(): Less than one layer (%d) in file \"%s\"",
+ layerCount, fileName.c_str());
+
+ // Load the backdrop
+ if (backdropCount > 0) {
+ loadBackdrop(dec);
+
+ // We only support one backdrop, skip the rest
+ dec.skip((backdropCount - 1) * (13 + (_hasPadding ? 1 : 0)));
+ }
+
+ // Load the layers
+ _layers.resize(MAX(0, layerCount - 1));
+ for (LayerArray::iterator l = _layers.begin(); l != _layers.end(); ++l)
+ loadLayer(*l, dec);
+
+ // Load the backdrop parts
+ if (backdropCount > 0)
+ loadParts(dec);
+}
+
+void DECFile::loadBackdrop(Common::SeekableSubReadStreamEndian &dec) {
+ // Interestingly, DEC files reference "FOO.LBM" instead of "FOO.CMP"
+ Common::String file = Util::setExtension(Util::readString(dec, 13), ".CMP");
+ if (_hasPadding)
+ dec.skip(1);
+
+ if (file.empty() || !_vm->_dataIO->hasFile(file))
+ return;
+
+ _vm->_video->drawPackedSprite(file.c_str(), *_backdrop);
+}
+
+void DECFile::loadLayer(Layer &layer, Common::SeekableSubReadStreamEndian &dec) {
+ Common::String file = Util::readString(dec, 13);
+ if (_hasPadding)
+ dec.skip(1);
+
+ if (file.empty())
+ return;
+
+ Common::String fileRXY = Util::setExtension(file, ".RXY");
+ Common::String fileCMP = Util::setExtension(file, ".CMP");
+ if (!_vm->_dataIO->hasFile(fileRXY) || !_vm->_dataIO->hasFile(fileCMP))
+ return;
+
+ loadLayer(layer, fileRXY, fileCMP);
+}
+
+void DECFile::loadLayer(Layer &layer, const Common::String &fileRXY,
+ const Common::String &fileCMP) {
+
+ Common::SeekableReadStream *dataRXY = _vm->_dataIO->getFile(fileRXY);
+ if (!dataRXY)
+ return;
+
+ layer.coordinates = new RXYFile(*dataRXY);
+ layer.surface = new Surface(_width, layer.coordinates->getHeight(), _bpp);
+
+ _vm->_video->drawPackedSprite(fileCMP.c_str(), *layer.surface);
+}
+
+void DECFile::loadParts(Common::SeekableSubReadStreamEndian &dec) {
+ dec.skip(13); // Name
+ if (_hasPadding)
+ dec.skip(1);
+
+ dec.skip(13); // File?
+ if (_hasPadding)
+ dec.skip(1);
+
+ uint16 partCount = dec.readUint16();
+
+ _parts.resize(partCount);
+ for (PartArray::iterator p = _parts.begin(); p != _parts.end(); ++p)
+ loadPart(*p, dec);
+}
+
+void DECFile::loadPart(Part &part, Common::SeekableSubReadStreamEndian &dec) {
+ part.layer = dec.readByte() - 1;
+ part.part = dec.readByte();
+
+ dec.skip(1); // Unknown
+
+ part.x = dec.readUint16();
+ part.y = dec.readUint16();
+
+ part.transp = dec.readByte() != 0;
+}
+
+void DECFile::draw(Surface &dest) const {
+ drawBackdrop(dest);
+
+ for (PartArray::const_iterator p = _parts.begin(); p != _parts.end(); ++p)
+ drawLayer(dest, p->layer, p->part, p->x, p->y, p->transp ? 0 : -1);
+}
+
+void DECFile::drawBackdrop(Surface &dest) const {
+ dest.blit(*_backdrop);
+}
+
+void DECFile::drawLayer(Surface &dest, uint16 layer, uint16 part,
+ uint16 x, uint16 y, int32 transp) const {
+
+ if (layer >= _layers.size())
+ return;
+
+ const Layer &l = _layers[layer];
+ if (!l.surface || !l.coordinates)
+ return;
+
+ if (part >= l.coordinates->size())
+ return;
+
+ const RXYFile::Coordinates &c = (*l.coordinates)[part];
+ if (c.left == 0xFFFF)
+ return;
+
+ dest.blit(*l.surface, c.left, c.top, c.right, c.bottom, x, y, transp);
+}
+
+} // End of namespace Gob
diff --git a/engines/gob/decfile.h b/engines/gob/decfile.h
new file mode 100644
index 0000000000..31d90180d3
--- /dev/null
+++ b/engines/gob/decfile.h
@@ -0,0 +1,111 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef GOB_DECFILE_H
+#define GOB_DECFILE_H
+
+#include "common/system.h"
+
+namespace Common {
+ class String;
+ class SeekableSubReadStreamEndian;
+}
+
+namespace Gob {
+
+class GobEngine;
+class Surface;
+class RXYFile;
+
+/** A DEC file, describing a "decal" (background).
+ *
+ * Used in hardcoded "actiony" parts of gob games.
+ * The principle is similar to a Static in Scenery (see scenery.cpp), but
+ * instead of referencing indices in the sprites array, DECs reference sprites
+ * directly by filename.
+ */
+class DECFile {
+public:
+ DECFile(GobEngine *vm, const Common::String &fileName,
+ uint16 width, uint16 height, uint8 bpp = 1);
+ ~DECFile();
+
+ /** Draw the background, including all default layer parts. */
+ void draw(Surface &dest) const;
+
+ /** Explicitly draw the backdrop. */
+ void drawBackdrop(Surface &dest) const;
+
+ /** Explicitly draw a layer part. */
+ void drawLayer(Surface &dest, uint16 layer, uint16 part,
+ uint16 x, uint16 y, int32 transp = -1) const;
+
+private:
+ struct Layer {
+ Surface *surface; ///< The surface containing the layer sprite.
+ RXYFile *coordinates; ///< The coordinates describing the layer sprite parts.
+
+ Layer();
+ ~Layer();
+ };
+
+ struct Part {
+ uint8 layer;
+ uint8 part;
+
+ uint16 x;
+ uint16 y;
+ bool transp;
+ };
+
+ typedef Common::Array<Layer> LayerArray;
+ typedef Common::Array<Part> PartArray;
+
+ GobEngine *_vm;
+
+ uint16 _width;
+ uint16 _height;
+ uint8 _bpp;
+
+ byte _hasPadding;
+
+ Surface *_backdrop;
+
+ LayerArray _layers;
+ PartArray _parts;
+
+
+ void load(Common::SeekableSubReadStreamEndian &dec, const Common::String &fileName);
+
+ void loadBackdrop(Common::SeekableSubReadStreamEndian &dec);
+
+ void loadLayer(Layer &layer, Common::SeekableSubReadStreamEndian &dec);
+ void loadLayer(Layer &layer, const Common::String &fileRXY,
+ const Common::String &fileCMP);
+
+ void loadParts(Common::SeekableSubReadStreamEndian &dec);
+ void loadPart(Part &part, Common::SeekableSubReadStreamEndian &dec);
+};
+
+} // End of namespace Gob
+
+#endif // GOB_DECFILE_H
diff --git a/engines/gob/detection_tables.h b/engines/gob/detection_tables.h
index 1c9811fe9e..9c13b4f7b8 100644
--- a/engines/gob/detection_tables.h
+++ b/engines/gob/detection_tables.h
@@ -2496,7 +2496,7 @@ static const GOBGameDescription gameDescriptions[] = {
GUIO_NOSUBTITLES | GUIO_NOSPEECH
},
kGameTypeGeisha,
- kFeaturesNone,
+ kFeaturesEGA | kFeaturesAdLib,
"disk1.stk", "intro.tot", 0
},
{
@@ -2510,7 +2510,21 @@ static const GOBGameDescription gameDescriptions[] = {
GUIO_NOSUBTITLES | GUIO_NOSPEECH
},
kGameTypeGeisha,
- kFeaturesNone,
+ kFeaturesEGA | kFeaturesAdLib,
+ "disk1.stk", "intro.tot", 0
+ },
+ {
+ {
+ "geisha",
+ "",
+ AD_ENTRY1s("disk1.stk", "e5892f00917c62423e93f5fd9920cf47", 208120),
+ UNK_LANG,
+ kPlatformAmiga,
+ ADGF_NO_FLAGS,
+ GUIO_NOSUBTITLES | GUIO_NOSPEECH
+ },
+ kGameTypeGeisha,
+ kFeaturesEGA,
"disk1.stk", "intro.tot", 0
},
{
@@ -5154,7 +5168,7 @@ static const GOBGameDescription fallbackDescs[] = {
GUIO_NOSUBTITLES | GUIO_NOSPEECH
},
kGameTypeGeisha,
- kFeaturesNone,
+ kFeaturesEGA,
"disk1.stk", "intro.tot", 0
},
{ //22
diff --git a/engines/gob/draw_v1.cpp b/engines/gob/draw_v1.cpp
index 3873a99d5f..064c74958a 100644
--- a/engines/gob/draw_v1.cpp
+++ b/engines/gob/draw_v1.cpp
@@ -44,8 +44,8 @@ void Draw_v1::initScreen() {
_backSurface = _vm->_video->initSurfDesc(320, 200);
_frontSurface = _vm->_global->_primarySurfDesc;
- _cursorSprites = _vm->_video->initSurfDesc(32, 16, 2);
- _scummvmCursor = _vm->_video->initSurfDesc(16, 16, SCUMMVM_CURSOR);
+ _cursorSprites = _vm->_video->initSurfDesc(_cursorWidth * 2, _cursorHeight, 2);
+ _scummvmCursor = _vm->_video->initSurfDesc(_cursorWidth , _cursorHeight, SCUMMVM_CURSOR);
}
void Draw_v1::closeScreen() {
diff --git a/engines/gob/game.cpp b/engines/gob/game.cpp
index 926027e15d..502a440005 100644
--- a/engines/gob/game.cpp
+++ b/engines/gob/game.cpp
@@ -492,9 +492,6 @@ void Game::prepareStart() {
_vm->_draw->_noInvalidated = true;
_vm->_draw->_applyPal = false;
_vm->_draw->_paletteCleared = false;
- _vm->_draw->_cursorWidth = 16;
- _vm->_draw->_cursorHeight = 16;
- _vm->_draw->_transparentCursor = 1;
for (int i = 0; i < 40; i++) {
_vm->_draw->_cursorAnimLow[i] = -1;
@@ -586,7 +583,11 @@ void Game::playTot(int16 function) {
WRITE_VAR(13, _vm->_global->_useMouse);
WRITE_VAR(14, _vm->_global->_soundFlags);
WRITE_VAR(15, _vm->_global->_fakeVideoMode);
- WRITE_VAR(16, _vm->_global->_language);
+
+ if (_vm->getGameType() == kGameTypeGeisha)
+ WRITE_VAR(57, _vm->_global->_language);
+ else
+ WRITE_VAR(16, _vm->_global->_language);
// WORKAROUND: Inca2 seems to depend on that variable to be cleared
if (_vm->getGameType() == kGameTypeInca2)
diff --git a/engines/gob/gob.cpp b/engines/gob/gob.cpp
index ea7e329480..51a117b7ec 100644
--- a/engines/gob/gob.cpp
+++ b/engines/gob/gob.cpp
@@ -402,7 +402,6 @@ bool GobEngine::initGameParts() {
_game = new Game(this);
switch (_gameType) {
- case kGameTypeGeisha:
case kGameTypeGob1:
_init = new Init_v1(this);
_video = new Video_v1(this);
@@ -414,6 +413,18 @@ bool GobEngine::initGameParts() {
_scenery = new Scenery_v1(this);
break;
+ case kGameTypeGeisha:
+ _init = new Init_Geisha(this);
+ _video = new Video_v1(this);
+ _inter = new Inter_Geisha(this);
+ _mult = new Mult_v1(this);
+ _draw = new Draw_v1(this);
+ _map = new Map_v1(this);
+ _goblin = new Goblin_v1(this);
+ _scenery = new Scenery_v1(this);
+ _saveLoad = new SaveLoad_Geisha(this, _targetName.c_str());
+ break;
+
case kGameTypeFascination:
_init = new Init_Fascination(this);
_video = new Video_v2(this);
diff --git a/engines/gob/hotspots.cpp b/engines/gob/hotspots.cpp
index f3647af76e..5e0af847de 100644
--- a/engines/gob/hotspots.cpp
+++ b/engines/gob/hotspots.cpp
@@ -202,6 +202,8 @@ Hotspots::Hotspots(GobEngine *vm) : _vm(vm) {
_currentKey = 0;
_currentIndex = 0;
_currentId = 0;
+ _currentX = 0;
+ _currentY = 0;
}
Hotspots::~Hotspots() {
@@ -385,6 +387,8 @@ void Hotspots::push(uint8 all, bool force) {
backup.key = _currentKey;
backup.id = _currentId;
backup.index = _currentIndex;
+ backup.x = _currentX;
+ backup.y = _currentY;
backup.hotspots = new Hotspot[size];
@@ -415,6 +419,8 @@ void Hotspots::push(uint8 all, bool force) {
_currentKey = 0;
_currentId = 0;
_currentIndex = 0;
+ _currentX = 0;
+ _currentY = 0;
_stack.push(backup);
}
@@ -445,6 +451,8 @@ void Hotspots::pop() {
_currentKey = backup.key;
_currentId = backup.id;
_currentIndex = backup.index;
+ _currentX = backup.x;
+ _currentY = backup.y;
delete[] backup.hotspots;
}
@@ -498,6 +506,9 @@ void Hotspots::enter(uint16 index) {
(spot.getState() == (kStateFilled | kStateType2)))
WRITE_VAR(17, -(spot.id & 0x0FFF));
+ _currentX = _vm->_global->_inter_mouseX;
+ _currentY = _vm->_global->_inter_mouseY;
+
if (spot.funcEnter != 0)
call(spot.funcEnter);
}
@@ -649,9 +660,22 @@ bool Hotspots::checkHotspotChanged() {
// Get the current hotspot
key = checkMouse(kTypeMove, id, index);
- if (key == _currentKey)
- // Nothing changed => nothing to do
+ uint16 mouseX = _vm->_global->_inter_mouseX;
+ uint16 mouseY = _vm->_global->_inter_mouseY;
+
+ if (key == _currentKey) {
+ // Still the same hotspot, just update the mouse position
+
+ _currentX = mouseX;
+ _currentY = mouseY;
return false;
+ }
+
+ // In Geisha, no move hotspot changes should occur when
+ // we didn't actually move the mouse
+ if (_vm->getGameType() == kGameTypeGeisha)
+ if ((mouseX == _currentX) && (mouseY == _currentY))
+ return false;
// Leave the old area
if (isValid(_currentKey, _currentId,_currentIndex))
@@ -660,6 +684,8 @@ bool Hotspots::checkHotspotChanged() {
_currentKey = key;
_currentId = id;
_currentIndex = index;
+ _currentX = mouseX;
+ _currentY = mouseY;
// Enter the new one
if (isValid(key, id, index))
@@ -775,7 +801,8 @@ uint16 Hotspots::check(uint8 handleMouse, int16 delay, uint16 &id, uint16 &index
_vm->_draw->blitCursor();
- if ((key != _currentKey) && (_vm->getGameType() != kGameTypeFascination))
+ if ((key != _currentKey) && (_vm->getGameType() != kGameTypeFascination) &&
+ (_vm->getGameType() != kGameTypeGeisha))
// If the hotspot changed, leave the old one
// Code not present in Fascination executables
leave(_currentIndex);
@@ -1348,12 +1375,12 @@ void Hotspots::evaluateNew(uint16 i, uint16 *ids, InputDesc *inputs,
inputs[inputCount].str = 0;
if ((type >= kTypeInput2NoLeave) && (type <= kTypeInput3Leave)) {
- uint16 length = _vm->_game->_script->readUint16();
+ inputs[inputCount].length = _vm->_game->_script->readUint16();
inputs[inputCount].str =
(const char *)(_vm->_game->_script->getData() + _vm->_game->_script->pos());
- _vm->_game->_script->skip(length);
+ _vm->_game->_script->skip(inputs[inputCount].length);
}
if (left == 0xFFFF) {
diff --git a/engines/gob/hotspots.h b/engines/gob/hotspots.h
index 8d26ad224e..b348f9cd70 100644
--- a/engines/gob/hotspots.h
+++ b/engines/gob/hotspots.h
@@ -158,6 +158,8 @@ private:
uint32 key;
uint32 id;
uint32 index;
+ uint16 x;
+ uint16 y;
};
struct InputDesc {
@@ -178,6 +180,8 @@ private:
uint16 _currentKey;
uint16 _currentIndex;
uint16 _currentId;
+ uint16 _currentX;
+ uint16 _currentY;
/** Add a hotspot, returning the new index. */
uint16 add(const Hotspot &hotspot);
diff --git a/engines/gob/init.cpp b/engines/gob/init.cpp
index 90c2a1602a..a61261f355 100644
--- a/engines/gob/init.cpp
+++ b/engines/gob/init.cpp
@@ -40,7 +40,7 @@
namespace Gob {
-const char *Init::_fontNames[] = { "jeulet1.let", "jeulet2.let", "jeucar1.let", "jeumath.let" };
+const char *const Init::_fontNames[] = { "jeulet1.let", "jeulet2.let", "jeucar1.let", "jeumath.let" };
Init::Init(GobEngine *vm) : _vm(vm) {
_palDesc = 0;
diff --git a/engines/gob/init.h b/engines/gob/init.h
index 1cb2904099..ac460fd654 100644
--- a/engines/gob/init.h
+++ b/engines/gob/init.h
@@ -41,7 +41,7 @@ public:
protected:
Video::PalDesc *_palDesc;
- static const char *_fontNames[4];
+ static const char *const _fontNames[4];
GobEngine *_vm;
void cleanup();
@@ -56,6 +56,14 @@ public:
void initVideo();
};
+class Init_Geisha : public Init_v1 {
+public:
+ Init_Geisha(GobEngine *vm);
+ ~Init_Geisha();
+
+ void initVideo();
+};
+
class Init_v2 : public Init_v1 {
public:
Init_v2(GobEngine *vm);
diff --git a/engines/gob/init_geisha.cpp b/engines/gob/init_geisha.cpp
new file mode 100644
index 0000000000..01081a5af6
--- /dev/null
+++ b/engines/gob/init_geisha.cpp
@@ -0,0 +1,47 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "common/endian.h"
+
+#include "gob/gob.h"
+#include "gob/init.h"
+#include "gob/global.h"
+#include "gob/draw.h"
+#include "gob/video.h"
+
+namespace Gob {
+
+Init_Geisha::Init_Geisha(GobEngine *vm) : Init_v1(vm) {
+}
+
+Init_Geisha::~Init_Geisha() {
+}
+
+void Init_Geisha::initVideo() {
+ Init_v1::initVideo();
+
+ _vm->_draw->_cursorWidth = 16;
+ _vm->_draw->_cursorHeight = 23;
+ _vm->_draw->_transparentCursor = 1;
+}
+
+} // End of namespace Gob
diff --git a/engines/gob/init_v1.cpp b/engines/gob/init_v1.cpp
index 6772a13eb0..25d521aca6 100644
--- a/engines/gob/init_v1.cpp
+++ b/engines/gob/init_v1.cpp
@@ -52,6 +52,10 @@ void Init_v1::initVideo() {
_vm->_global->_pPaletteDesc->unused2 = _vm->_global->_unusedPalette2;
_vm->_video->initSurfDesc(320, 200, PRIMARY_SURFACE);
+
+ _vm->_draw->_cursorWidth = 16;
+ _vm->_draw->_cursorHeight = 16;
+ _vm->_draw->_transparentCursor = 1;
}
} // End of namespace Gob
diff --git a/engines/gob/init_v2.cpp b/engines/gob/init_v2.cpp
index f10d586a34..1289d561ea 100644
--- a/engines/gob/init_v2.cpp
+++ b/engines/gob/init_v2.cpp
@@ -62,6 +62,10 @@ void Init_v2::initVideo() {
_vm->_global->_pPaletteDesc->unused2 = _vm->_global->_unusedPalette2;
_vm->_video->initSurfDesc(_vm->_video->_surfWidth, _vm->_video->_surfHeight, PRIMARY_SURFACE);
+
+ _vm->_draw->_cursorWidth = 16;
+ _vm->_draw->_cursorHeight = 16;
+ _vm->_draw->_transparentCursor = 1;
}
} // End of namespace Gob
diff --git a/engines/gob/inter.h b/engines/gob/inter.h
index b1689e8d9e..6fd4dc2187 100644
--- a/engines/gob/inter.h
+++ b/engines/gob/inter.h
@@ -33,6 +33,11 @@
namespace Gob {
+namespace Geisha {
+ class Diving;
+ class Penetration;
+}
+
// This is to help devices with small memory (PDA, smartphones, ...)
// to save a bit of memory used by opcode names in the Gob engine.
#ifndef REDUCE_MEMORY_USAGE
@@ -334,6 +339,40 @@ protected:
void manipulateMap(int16 xPos, int16 yPos, int16 item);
};
+class Inter_Geisha : public Inter_v1 {
+public:
+ Inter_Geisha(GobEngine *vm);
+ virtual ~Inter_Geisha();
+
+protected:
+ virtual void setupOpcodesDraw();
+ virtual void setupOpcodesFunc();
+ virtual void setupOpcodesGob();
+
+ void oGeisha_loadCursor(OpFuncParams &params);
+ void oGeisha_loadTot(OpFuncParams &params);
+ void oGeisha_goblinFunc(OpFuncParams &params);
+ void oGeisha_loadSound(OpFuncParams &params);
+ void oGeisha_checkData(OpFuncParams &params);
+ void oGeisha_readData(OpFuncParams &params);
+ void oGeisha_writeData(OpFuncParams &params);
+
+ void oGeisha_gamePenetration(OpGobParams &params);
+ void oGeisha_gameDiving(OpGobParams &params);
+ void oGeisha_loadTitleMusic(OpGobParams &params);
+ void oGeisha_playMusic(OpGobParams &params);
+ void oGeisha_stopMusic(OpGobParams &params);
+
+ void oGeisha_caress1(OpGobParams &params);
+ void oGeisha_caress2(OpGobParams &params);
+
+ int16 loadSound(int16 slot);
+
+private:
+ Geisha::Diving *_diving;
+ Geisha::Penetration *_penetration;
+};
+
class Inter_v2 : public Inter_v1 {
public:
Inter_v2(GobEngine *vm);
diff --git a/engines/gob/inter_bargon.cpp b/engines/gob/inter_bargon.cpp
index c2e6a2e912..134203fa9d 100644
--- a/engines/gob/inter_bargon.cpp
+++ b/engines/gob/inter_bargon.cpp
@@ -120,7 +120,7 @@ void Inter_Bargon::oBargon_intro2(OpGobParams &params) {
SurfacePtr surface;
SoundDesc samples[4];
int16 comp[5] = { 0, 1, 2, 3, -1 };
- static const char *sndFiles[] = {"1INTROII.snd", "2INTROII.snd", "1INTRO3.snd", "2INTRO3.snd"};
+ static const char *const sndFiles[] = {"1INTROII.snd", "2INTROII.snd", "1INTRO3.snd", "2INTRO3.snd"};
surface = _vm->_video->initSurfDesc(320, 200);
_vm->_video->drawPackedSprite("2ille.ims", *surface);
@@ -169,8 +169,8 @@ void Inter_Bargon::oBargon_intro3(OpGobParams &params) {
SoundDesc samples[2];
int16 comp[3] = { 0, 1, -1 };
byte *palettes[4];
- static const char *sndFiles[] = {"1INTROIV.snd", "2INTROIV.snd"};
- static const char *palFiles[] = {"2ou2.clt", "2ou3.clt", "2ou4.clt", "2ou5.clt"};
+ static const char *const sndFiles[] = {"1INTROIV.snd", "2INTROIV.snd"};
+ static const char *const palFiles[] = {"2ou2.clt", "2ou3.clt", "2ou4.clt", "2ou5.clt"};
int32 size;
diff --git a/engines/gob/inter_geisha.cpp b/engines/gob/inter_geisha.cpp
new file mode 100644
index 0000000000..c5b91a484b
--- /dev/null
+++ b/engines/gob/inter_geisha.cpp
@@ -0,0 +1,312 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "common/endian.h"
+#include "common/str.h"
+#include "common/translation.h"
+
+#include "gui/message.h"
+
+#include "gob/gob.h"
+#include "gob/inter.h"
+#include "gob/dataio.h"
+#include "gob/script.h"
+#include "gob/resources.h"
+#include "gob/game.h"
+#include "gob/draw.h"
+#include "gob/video.h"
+#include "gob/save/saveload.h"
+#include "gob/sound/sound.h"
+#include "gob/sound/sounddesc.h"
+
+#include "gob/minigames/geisha/diving.h"
+#include "gob/minigames/geisha/penetration.h"
+
+namespace Gob {
+
+#define OPCODEVER Inter_Geisha
+#define OPCODEDRAW(i, x) _opcodesDraw[i]._OPCODEDRAW(OPCODEVER, x)
+#define OPCODEFUNC(i, x) _opcodesFunc[i]._OPCODEFUNC(OPCODEVER, x)
+#define OPCODEGOB(i, x) _opcodesGob[i]._OPCODEGOB(OPCODEVER, x)
+
+Inter_Geisha::Inter_Geisha(GobEngine *vm) : Inter_v1(vm),
+ _diving(0), _penetration(0) {
+
+ _diving = new Geisha::Diving(vm);
+ _penetration = new Geisha::Penetration(vm);
+}
+
+Inter_Geisha::~Inter_Geisha() {
+ delete _penetration;
+ delete _diving;
+}
+
+void Inter_Geisha::setupOpcodesDraw() {
+ Inter_v1::setupOpcodesDraw();
+}
+
+void Inter_Geisha::setupOpcodesFunc() {
+ Inter_v1::setupOpcodesFunc();
+
+ OPCODEFUNC(0x03, oGeisha_loadCursor);
+ OPCODEFUNC(0x12, oGeisha_loadTot);
+ OPCODEFUNC(0x25, oGeisha_goblinFunc);
+ OPCODEFUNC(0x3A, oGeisha_loadSound);
+ OPCODEFUNC(0x3F, oGeisha_checkData);
+ OPCODEFUNC(0x4D, oGeisha_readData);
+ OPCODEFUNC(0x4E, oGeisha_writeData);
+
+ OPCODEGOB(0, oGeisha_gamePenetration);
+ OPCODEGOB(1, oGeisha_gameDiving);
+ OPCODEGOB(2, oGeisha_loadTitleMusic);
+ OPCODEGOB(3, oGeisha_playMusic);
+ OPCODEGOB(4, oGeisha_stopMusic);
+ OPCODEGOB(6, oGeisha_caress1);
+ OPCODEGOB(7, oGeisha_caress2);
+}
+
+void Inter_Geisha::setupOpcodesGob() {
+}
+
+void Inter_Geisha::oGeisha_loadCursor(OpFuncParams &params) {
+ if (_vm->_game->_script->peekByte(1) & 0x80)
+ warning("Geisha Stub: oGeisha_loadCursor: script[1] & 0x80");
+
+ o1_loadCursor(params);
+}
+
+struct TOTTransition {
+ const char *to;
+ const char *from;
+ int32 offset;
+};
+
+static const TOTTransition kTOTTransitions[] = {
+ {"chambre.tot", "photo.tot" , 1801},
+ {"mo.tot" , "chambre.tot", 13580},
+ {"chambre.tot", "mo.tot" , 564},
+ {"hard.tot" , "chambre.tot", 13917},
+ {"carte.tot" , "hard.tot" , 17926},
+ {"chambre.tot", "carte.tot" , 14609},
+ {"chambre.tot", "mo.tot" , 3658},
+ {"streap.tot" , "chambre.tot", 14652},
+ {"bonsai.tot" , "porte.tot" , 2858},
+ {"lit.tot" , "napa.tot" , 3380},
+ {"oko.tot" , "chambre.tot", 14146},
+ {"chambre.tot", "oko.tot" , 2334}
+};
+
+void Inter_Geisha::oGeisha_loadTot(OpFuncParams &params) {
+ o1_loadTot(params);
+
+ // WORKAROUND: Geisha often displays text while it loads a new TOT.
+ // Back in the days, this took long enough so that the text
+ // could be read. Since this isn't the case anymore, we'll
+ // wait for the user to press a key or click the mouse.
+ bool needWait = false;
+
+ for (int i = 0; i < ARRAYSIZE(kTOTTransitions); i++)
+ if ((_vm->_game->_script->pos() == kTOTTransitions[i].offset) &&
+ (_vm->_game->_totToLoad == kTOTTransitions[i].to) &&
+ (_vm->_game->_curTotFile == kTOTTransitions[i].from)) {
+
+ needWait = true;
+ break;
+ }
+
+ if (needWait)
+ while (!_vm->_util->keyPressed())
+ _vm->_util->longDelay(1);
+}
+
+void Inter_Geisha::oGeisha_loadSound(OpFuncParams &params) {
+ loadSound(-1);
+}
+
+void Inter_Geisha::oGeisha_goblinFunc(OpFuncParams &params) {
+ OpGobParams gobParams;
+ int16 cmd;
+
+ cmd = _vm->_game->_script->readInt16();
+
+ gobParams.paramCount = _vm->_game->_script->readInt16();
+ gobParams.extraData = cmd;
+
+ executeOpcodeGob(cmd, gobParams);
+}
+
+int16 Inter_Geisha::loadSound(int16 slot) {
+ const char *sndFile = _vm->_game->_script->evalString();
+
+ if (slot == -1)
+ slot = _vm->_game->_script->readValExpr();
+
+ SoundDesc *sample = _vm->_sound->sampleGetBySlot(slot);
+ if (!sample)
+ return 0;
+
+ int32 dataSize;
+ byte *dataPtr = _vm->_dataIO->getFile(sndFile, dataSize);
+ if (!dataPtr)
+ return 0;
+
+ if (!sample->load(SOUND_SND, dataPtr, dataSize)) {
+ delete[] dataPtr;
+ return 0;
+ }
+
+ return 0;
+}
+
+void Inter_Geisha::oGeisha_checkData(OpFuncParams &params) {
+ Common::String file = _vm->_game->_script->evalString();
+ int16 varOff = _vm->_game->_script->readVarIndex();
+
+ file.toLowercase();
+ if (file.hasSuffix(".0ot"))
+ file.setChar('t', file.size() - 3);
+
+ bool exists = false;
+
+ SaveLoad::SaveMode mode = _vm->_saveLoad->getSaveMode(file.c_str());
+ if (mode == SaveLoad::kSaveModeNone) {
+
+ exists = _vm->_dataIO->hasFile(file);
+ if (!exists)
+ warning("File \"%s\" not found", file.c_str());
+
+ } else if (mode == SaveLoad::kSaveModeSave)
+ exists = _vm->_saveLoad->getSize(file.c_str()) >= 0;
+ else if (mode == SaveLoad::kSaveModeExists)
+ exists = true;
+
+ WRITE_VAR_OFFSET(varOff, exists ? 50 : (uint32)-1);
+}
+
+void Inter_Geisha::oGeisha_readData(OpFuncParams &params) {
+ const char *file = _vm->_game->_script->evalString();
+
+ uint16 dataVar = _vm->_game->_script->readVarIndex();
+
+ debugC(2, kDebugFileIO, "Read from file \"%s\" (%d)", file, dataVar);
+
+ WRITE_VAR(1, 1);
+
+ SaveLoad::SaveMode mode = _vm->_saveLoad->getSaveMode(file);
+ if (mode == SaveLoad::kSaveModeSave) {
+
+ if (!_vm->_saveLoad->load(file, dataVar, 0, 0)) {
+
+ GUI::MessageDialog dialog(_("Failed to load game state from file."));
+ dialog.runModal();
+
+ } else
+ WRITE_VAR(1, 0);
+
+ return;
+
+ } else if (mode == SaveLoad::kSaveModeIgnore) {
+ WRITE_VAR(1, 0);
+ return;
+ }
+
+ warning("Attempted to read from file \"%s\"", file);
+}
+
+void Inter_Geisha::oGeisha_writeData(OpFuncParams &params) {
+ const char *file = _vm->_game->_script->evalString();
+
+ int16 dataVar = _vm->_game->_script->readVarIndex();
+ int32 size = _vm->_game->_script->readValExpr();
+
+ debugC(2, kDebugFileIO, "Write to file \"%s\" (%d, %d bytes)", file, dataVar, size);
+
+ WRITE_VAR(1, 1);
+
+ SaveLoad::SaveMode mode = _vm->_saveLoad->getSaveMode(file);
+ if (mode == SaveLoad::kSaveModeSave) {
+
+ if (!_vm->_saveLoad->save(file, dataVar, size, 0)) {
+
+ GUI::MessageDialog dialog(_("Failed to save game state to file."));
+ dialog.runModal();
+
+ } else
+ WRITE_VAR(1, 0);
+
+ } else if (mode == SaveLoad::kSaveModeIgnore) {
+ WRITE_VAR(1, 0);
+ return;
+ } else if (mode == SaveLoad::kSaveModeNone)
+ warning("Attempted to write to file \"%s\"", file);
+
+ WRITE_VAR(1, 0);
+}
+
+void Inter_Geisha::oGeisha_gamePenetration(OpGobParams &params) {
+ uint16 var1 = _vm->_game->_script->readUint16();
+ uint16 var2 = _vm->_game->_script->readUint16();
+ uint16 var3 = _vm->_game->_script->readUint16();
+ uint16 resultVar = _vm->_game->_script->readUint16();
+
+ bool result = _penetration->play(var1, var2, var3);
+
+ WRITE_VAR_UINT32(resultVar, result ? 1 : 0);
+}
+
+void Inter_Geisha::oGeisha_gameDiving(OpGobParams &params) {
+ uint16 playerCount = _vm->_game->_script->readUint16();
+ uint16 hasPearlLocation = _vm->_game->_script->readUint16();
+ uint16 resultVar = _vm->_game->_script->readUint16();
+
+ bool result = _diving->play(playerCount, hasPearlLocation);
+
+ WRITE_VAR_UINT32(resultVar, result ? 1 : 0);
+}
+
+void Inter_Geisha::oGeisha_loadTitleMusic(OpGobParams &params) {
+ _vm->_sound->adlibLoadTBR("geisha.tbr");
+ _vm->_sound->adlibLoadMDY("geisha.mdy");
+}
+
+void Inter_Geisha::oGeisha_playMusic(OpGobParams &params) {
+ // TODO: The MDYPlayer is still broken!
+ warning("Geisha Stub: oGeisha_playMusic");
+ // _vm->_sound->adlibPlay();
+}
+
+void Inter_Geisha::oGeisha_stopMusic(OpGobParams &params) {
+ _vm->_sound->adlibStop();
+ _vm->_sound->adlibUnload();
+}
+
+void Inter_Geisha::oGeisha_caress1(OpGobParams &params) {
+ if (_vm->_draw->_spritesArray[0])
+ _vm->_video->drawPackedSprite("hp1.cmp", *_vm->_draw->_spritesArray[0]);
+}
+
+void Inter_Geisha::oGeisha_caress2(OpGobParams &params) {
+ if (_vm->_draw->_spritesArray[1])
+ _vm->_video->drawPackedSprite("hpsc1.cmp", *_vm->_draw->_spritesArray[1]);
+}
+
+} // End of namespace Gob
diff --git a/engines/gob/inter_v1.cpp b/engines/gob/inter_v1.cpp
index 47b0beaf63..0eb8be1a03 100644
--- a/engines/gob/inter_v1.cpp
+++ b/engines/gob/inter_v1.cpp
@@ -658,6 +658,20 @@ void Inter_v1::o1_callSub(OpFuncParams &params) {
return;
}
+ // A cheat to get around the stupid mastermind puzzle in Geisha,
+ // while we're still testing it
+ if ((_vm->getGameType() == kGameTypeGeisha) && (offset == 12934) &&
+ _vm->isCurrentTot("hard.tot") && _vm->_inter->_variables) {
+
+ uint32 digit1 = READ_VARO_UINT32(0x768);
+ uint32 digit2 = READ_VARO_UINT32(0x76C);
+ uint32 digit3 = READ_VARO_UINT32(0x770);
+ uint32 digit4 = READ_VARO_UINT32(0x774);
+ uint32 digit5 = READ_VARO_UINT32(0x778);
+
+ warning("Mastermind solution: %d %d %d %d %d", digit1, digit2, digit3, digit4, digit5);
+ }
+
// Skipping the copy protection screen in Gobliiins
if (!_vm->_copyProtection && (_vm->getGameType() == kGameTypeGob1) && (offset == 3905) &&
_vm->isCurrentTot(_vm->_startTot)) {
@@ -1094,6 +1108,8 @@ void Inter_v1::o1_palLoad(OpFuncParams &params) {
_vm->_draw->_vgaPalette[i].green = _vm->_game->_script->readByte();
_vm->_draw->_vgaPalette[i].blue = _vm->_game->_script->readByte();
}
+
+ memcpy(_vm->_draw->_vgaSmallPalette, _vm->_draw->_vgaPalette, 16 * 3);
break;
case 53:
diff --git a/engines/gob/inter_v6.cpp b/engines/gob/inter_v6.cpp
index 589328dfdb..505993ee4d 100644
--- a/engines/gob/inter_v6.cpp
+++ b/engines/gob/inter_v6.cpp
@@ -21,7 +21,6 @@
*/
#include "common/str.h"
-#include "graphics/dither.h"
#include "gob/gob.h"
#include "gob/inter.h"
diff --git a/engines/gob/minigames/geisha/diving.cpp b/engines/gob/minigames/geisha/diving.cpp
new file mode 100644
index 0000000000..0d216abf43
--- /dev/null
+++ b/engines/gob/minigames/geisha/diving.cpp
@@ -0,0 +1,155 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "common/list.h"
+
+#include "gob/global.h"
+#include "gob/util.h"
+#include "gob/draw.h"
+#include "gob/video.h"
+#include "gob/decfile.h"
+#include "gob/anifile.h"
+
+#include "gob/minigames/geisha/evilfish.h"
+#include "gob/minigames/geisha/diving.h"
+
+namespace Gob {
+
+namespace Geisha {
+
+Diving::Diving(GobEngine *vm) : _vm(vm), _background(0),
+ _objects(0), _gui(0), _oko(0), _lungs(0), _heart(0) {
+
+}
+
+Diving::~Diving() {
+ deinit();
+}
+
+bool Diving::play(uint16 playerCount, bool hasPearlLocation) {
+ init();
+ initScreen();
+
+ _vm->_draw->blitInvalidated();
+ _vm->_video->retrace();
+
+ EvilFish shark(*_objects, 320, 0, 14, 8, 9, 3);
+
+ Common::List<ANIObject *> objects;
+
+ objects.push_back(_water);
+ objects.push_back(&shark);
+
+ shark.enter(EvilFish::kDirectionLeft, 90);
+
+ while (!_vm->_util->keyPressed() && !_vm->shouldQuit()) {
+ int16 left, top, right, bottom;
+
+ // Clear the previous animation frames
+ for (Common::List<ANIObject *>::iterator o = objects.reverse_begin();
+ o != objects.end(); --o) {
+
+ (*o)->clear(*_vm->_draw->_backSurface, left, top, right, bottom);
+ _vm->_draw->dirtiedRect(_vm->_draw->_backSurface, left, top, right, bottom);
+ }
+
+ // Draw the current animation frames
+ for (Common::List<ANIObject *>::iterator o = objects.begin();
+ o != objects.end(); ++o) {
+
+ (*o)->draw(*_vm->_draw->_backSurface, left, top, right, bottom);
+ _vm->_draw->dirtiedRect(_vm->_draw->_backSurface, left, top, right, bottom);
+
+ (*o)->advance();
+ }
+
+ _vm->_draw->blitInvalidated();
+
+ _vm->_util->waitEndFrame();
+ _vm->_util->processInput();
+ }
+
+ deinit();
+ return true;
+}
+
+void Diving::init() {
+ _background = new DECFile(_vm, "tperle.dec" , 320, 200);
+ _objects = new ANIFile(_vm, "tperle.ani" , 320);
+ _gui = new ANIFile(_vm, "tperlcpt.ani", 320);
+ _oko = new ANIFile(_vm, "tplonge.ani" , 320);
+
+ _water = new ANIObject(*_objects);
+ _lungs = new ANIObject(*_gui);
+ _heart = new ANIObject(*_gui);
+
+ _water->setAnimation(7);
+ _water->setPosition();
+ _water->setVisible(true);
+
+ _lungs->setAnimation(0);
+ _lungs->setPosition();
+ _lungs->setVisible(true);
+
+ _heart->setAnimation(1);
+ _heart->setPosition();
+ _heart->setVisible(true);
+}
+
+void Diving::deinit() {
+ delete _heart;
+ delete _lungs;
+ delete _water;
+
+ delete _oko;
+ delete _gui;
+ delete _objects;
+ delete _background;
+
+ _water = 0;
+ _heart = 0;
+ _lungs = 0;
+
+ _oko = 0;
+ _gui = 0;
+ _objects = 0;
+ _background = 0;
+}
+
+void Diving::initScreen() {
+ _vm->_util->setFrameRate(15);
+
+ _vm->_video->setFullPalette(_vm->_global->_pPaletteDesc);
+
+ _vm->_draw->_backSurface->clear();
+ _background->draw(*_vm->_draw->_backSurface);
+
+ int16 left, top, right, bottom;
+ _lungs->draw(*_vm->_draw->_backSurface, left, top, right, bottom);
+ _heart->draw(*_vm->_draw->_backSurface, left, top, right, bottom);
+
+ _vm->_draw->dirtiedRect(_vm->_draw->_backSurface, 0, 0, 319, 199);
+}
+
+} // End of namespace Geisha
+
+} // End of namespace Gob
diff --git a/engines/gob/minigames/geisha/diving.h b/engines/gob/minigames/geisha/diving.h
new file mode 100644
index 0000000000..238a1ad75b
--- /dev/null
+++ b/engines/gob/minigames/geisha/diving.h
@@ -0,0 +1,68 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef GOB_MINIGAMES_GEISHA_DIVING_H
+#define GOB_MINIGAMES_GEISHA_DIVING_H
+
+#include "common/system.h"
+
+namespace Gob {
+
+class GobEngine;
+class DECFile;
+class ANIFile;
+class ANIObject;
+
+namespace Geisha {
+
+/** Geisha's "Diving" minigame. */
+class Diving {
+public:
+ Diving(GobEngine *vm);
+ ~Diving();
+
+ bool play(uint16 playerCount, bool hasPearlLocation);
+
+private:
+ GobEngine *_vm;
+
+ DECFile *_background;
+ ANIFile *_objects;
+ ANIFile *_gui;
+ ANIFile *_oko;
+
+ ANIObject *_water;
+ ANIObject *_lungs;
+ ANIObject *_heart;
+
+
+ void init();
+ void deinit();
+
+ void initScreen();
+};
+
+} // End of namespace Geisha
+
+} // End of namespace Gob
+
+#endif // GOB_MINIGAMES_GEISHA_DIVING_H
diff --git a/engines/gob/minigames/geisha/evilfish.cpp b/engines/gob/minigames/geisha/evilfish.cpp
new file mode 100644
index 0000000000..e2672d75c8
--- /dev/null
+++ b/engines/gob/minigames/geisha/evilfish.cpp
@@ -0,0 +1,163 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "gob/minigames/geisha/evilfish.h"
+
+namespace Gob {
+
+namespace Geisha {
+
+EvilFish::EvilFish(const ANIFile &ani, uint16 screenWidth,
+ uint16 animSwimLeft, uint16 animSwimRight,
+ uint16 animTurnLeft, uint16 animTurnRight, uint16 animDie) :
+ ANIObject(ani), _screenWidth(screenWidth),
+ _animSwimLeft(animSwimLeft), _animSwimRight(animSwimRight),
+ _animTurnLeft(animTurnLeft), _animTurnRight(animTurnRight), _animDie(animDie),
+ _shouldLeave(false), _state(kStateNone) {
+
+}
+
+EvilFish::~EvilFish() {
+}
+
+bool EvilFish::isIn(int16 x, int16 y) const {
+ int16 frameX, frameY, frameWidth, frameHeight;
+ getFramePosition(frameX, frameY);
+ getFrameSize(frameWidth, frameHeight);
+
+ if ((x < frameX) || (y < frameY))
+ return false;
+ if ((x > (frameX + frameWidth)) || (y > (frameY + frameHeight)))
+ return false;
+
+ return true;
+}
+
+void EvilFish::enter(Direction from, int16 y) {
+ _shouldLeave = false;
+
+ bool left = from == kDirectionLeft;
+
+ setAnimation(left ? _animSwimLeft : _animSwimRight);
+
+ int16 width, height;
+ getFrameSize(width, height);
+
+ setPosition(left ? -width : _screenWidth, y);
+ setVisible(true);
+
+ _state = left ? kStateSwimLeft : kStateSwimRight;
+}
+
+void EvilFish::leave() {
+ if (_state == kStateNone)
+ return;
+
+ _shouldLeave = true;
+}
+
+void EvilFish::die() {
+ if ((_state == kStateNone) || (_state == kStateDie))
+ return;
+
+ int16 x, y;
+ getFramePosition(x, y);
+
+ setAnimation(_animDie);
+ setPosition(x, y);
+
+ _state = kStateDie;
+}
+
+void EvilFish::advance() {
+ if (_state == kStateNone)
+ return;
+
+ bool wasLastFrame = lastFrame();
+
+ ANIObject::advance();
+
+ int16 x, y, width, height;
+ getFramePosition(x, y);
+ getFrameSize(width, height);
+
+ switch (_state) {
+ case kStateNone:
+ break;
+
+ case kStateSwimLeft:
+ if (!_shouldLeave && (x >= _screenWidth - width)) {
+ setAnimation(_animTurnRight);
+ setPosition(x, y);
+ _state = kStateTurnRight;
+ }
+
+ if (_shouldLeave && (x >= _screenWidth)) {
+ setVisible(false);
+
+ _shouldLeave = false;
+ _state = kStateNone;
+ }
+ break;
+
+ case kStateSwimRight:
+ if (!_shouldLeave && (x <= 0)) {
+ setAnimation(_animTurnLeft);
+ setPosition(x, y);
+ _state = kStateTurnLeft;
+ }
+
+ if (_shouldLeave && (x < -width)) {
+ setVisible(false);
+
+ _shouldLeave = false;
+ _state = kStateNone;
+ }
+ break;
+
+ case kStateTurnLeft:
+ if (wasLastFrame) {
+ setAnimation(_animSwimLeft);
+ _state = kStateSwimLeft;
+ }
+ break;
+
+ case kStateTurnRight:
+ if (wasLastFrame) {
+ setAnimation(_animSwimRight);
+ _state = kStateSwimRight;
+ }
+ break;
+
+ case kStateDie:
+ if (wasLastFrame) {
+ setVisible(false);
+
+ _state = kStateNone;
+ }
+ break;
+ }
+}
+
+} // End of namespace Geisha
+
+} // End of namespace Gob
diff --git a/engines/gob/minigames/geisha/evilfish.h b/engines/gob/minigames/geisha/evilfish.h
new file mode 100644
index 0000000000..9144cefb4b
--- /dev/null
+++ b/engines/gob/minigames/geisha/evilfish.h
@@ -0,0 +1,86 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef GOB_MINIGAMES_GEISHA_EVILFISH_H
+#define GOB_MINIGAMES_GEISHA_EVILFISH_H
+
+#include "gob/aniobject.h"
+
+namespace Gob {
+
+namespace Geisha {
+
+/** An "evil" fish in Geisha's "Diving" minigame. */
+class EvilFish : public ANIObject {
+public:
+ enum Direction {
+ kDirectionLeft,
+ kDirectionRight
+ };
+
+ EvilFish(const ANIFile &ani, uint16 screenWidth,
+ uint16 animSwimLeft, uint16 animSwimRight,
+ uint16 animTurnLeft, uint16 animTurnRight, uint16 animDie);
+ ~EvilFish();
+
+ /** Are there coordinates within the fish's sprite? */
+ bool isIn(int16 x, int16 y) const;
+
+ /** Enter from this direction / screen edge. */
+ void enter(Direction from, int16 y);
+ /** Leave the screen in the current direction. */
+ void leave();
+
+ /** Kill the fish. */
+ void die();
+
+ /** Advance the animation to the next frame. */
+ void advance();
+
+private:
+ enum State {
+ kStateNone,
+ kStateSwimLeft,
+ kStateSwimRight,
+ kStateTurnLeft,
+ kStateTurnRight,
+ kStateDie
+ };
+
+ uint16 _screenWidth;
+
+ uint16 _animSwimLeft;
+ uint16 _animSwimRight;
+ uint16 _animTurnLeft;
+ uint16 _animTurnRight;
+ uint16 _animDie;
+
+ bool _shouldLeave;
+
+ State _state;
+};
+
+} // End of namespace Geisha
+
+} // End of namespace Gob
+
+#endif // GOB_MINIGAMES_GEISHA_EVILFISH_H
diff --git a/engines/gob/minigames/geisha/penetration.cpp b/engines/gob/minigames/geisha/penetration.cpp
new file mode 100644
index 0000000000..4334cae21a
--- /dev/null
+++ b/engines/gob/minigames/geisha/penetration.cpp
@@ -0,0 +1,106 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "gob/global.h"
+#include "gob/util.h"
+#include "gob/draw.h"
+#include "gob/video.h"
+#include "gob/decfile.h"
+#include "gob/anifile.h"
+
+#include "gob/minigames/geisha/penetration.h"
+
+namespace Gob {
+
+namespace Geisha {
+
+static byte kPalette[48] = {
+ 0x16, 0x16, 0x16,
+ 0x12, 0x14, 0x16,
+ 0x34, 0x00, 0x25,
+ 0x1D, 0x1F, 0x22,
+ 0x24, 0x27, 0x2A,
+ 0x2C, 0x0D, 0x22,
+ 0x2B, 0x2E, 0x32,
+ 0x12, 0x09, 0x20,
+ 0x3D, 0x3F, 0x00,
+ 0x3F, 0x3F, 0x3F,
+ 0x00, 0x00, 0x00,
+ 0x15, 0x15, 0x3F,
+ 0x25, 0x22, 0x2F,
+ 0x1A, 0x14, 0x28,
+ 0x3F, 0x00, 0x00,
+ 0x15, 0x3F, 0x15
+};
+
+Penetration::Penetration(GobEngine *vm) : _vm(vm), _background(0), _objects(0) {
+ _background = new Surface(320, 200, 1);
+}
+
+Penetration::~Penetration() {
+ deinit();
+
+ delete _background;
+}
+
+bool Penetration::play(uint16 var1, uint16 var2, uint16 var3) {
+ init();
+ initScreen();
+
+ _vm->_draw->blitInvalidated();
+ _vm->_video->retrace();
+ while (!_vm->_util->keyPressed() && !_vm->shouldQuit())
+ _vm->_util->longDelay(1);
+
+ deinit();
+ return true;
+}
+
+void Penetration::init() {
+ _background->clear();
+
+ _vm->_video->drawPackedSprite("hyprmef2.cmp", *_background);
+
+ _objects = new ANIFile(_vm, "tcite.ani", 320);
+}
+
+void Penetration::deinit() {
+ delete _objects;
+
+ _objects = 0;
+}
+
+void Penetration::initScreen() {
+ _vm->_util->setFrameRate(15);
+
+ memcpy(_vm->_draw->_vgaPalette , kPalette, 48);
+ memcpy(_vm->_draw->_vgaSmallPalette, kPalette, 48);
+
+ _vm->_video->setFullPalette(_vm->_global->_pPaletteDesc);
+
+ _vm->_draw->_backSurface->blit(*_background);
+ _vm->_draw->dirtiedRect(_vm->_draw->_backSurface, 0, 0, 319, 199);
+}
+
+} // End of namespace Geisha
+
+} // End of namespace Gob
diff --git a/engines/gob/minigames/geisha/penetration.h b/engines/gob/minigames/geisha/penetration.h
new file mode 100644
index 0000000000..c346a7bf5a
--- /dev/null
+++ b/engines/gob/minigames/geisha/penetration.h
@@ -0,0 +1,61 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef GOB_MINIGAMES_GEISHA_PENETRATION_H
+#define GOB_MINIGAMES_GEISHA_PENETRATION_H
+
+#include "common/system.h"
+
+namespace Gob {
+
+class GobEngine;
+class Surface;
+class ANIFile;
+
+namespace Geisha {
+
+/** Geisha's "Penetration" minigame. */
+class Penetration {
+public:
+ Penetration(GobEngine *vm);
+ ~Penetration();
+
+ bool play(uint16 var1, uint16 var2, uint16 var3);
+
+private:
+ GobEngine *_vm;
+
+ Surface *_background;
+ ANIFile *_objects;
+
+
+ void init();
+ void deinit();
+
+ void initScreen();
+};
+
+} // End of namespace Geisha
+
+} // End of namespace Gob
+
+#endif // GOB_MINIGAMES_GEISHA_PENETRATION_H
diff --git a/engines/gob/module.mk b/engines/gob/module.mk
index cdad1e6c46..bf040c5428 100644
--- a/engines/gob/module.mk
+++ b/engines/gob/module.mk
@@ -1,10 +1,13 @@
MODULE := engines/gob
MODULE_OBJS := \
+ anifile.o \
+ aniobject.o \
console.o \
dataio.o \
databases.o \
dbase.o \
+ decfile.o \
detection.o \
draw.o \
draw_v1.o \
@@ -25,6 +28,7 @@ MODULE_OBJS := \
iniconfig.o \
init.o \
init_v1.o \
+ init_geisha.o \
init_v2.o \
init_fascin.o \
init_v3.o \
@@ -33,6 +37,7 @@ MODULE_OBJS := \
init_v7.o \
inter.o \
inter_v1.o \
+ inter_geisha.o \
inter_v2.o \
inter_bargon.o \
inter_fascin.o \
@@ -51,6 +56,7 @@ MODULE_OBJS := \
mult_v2.o \
palanim.o \
resources.o \
+ rxyfile.o \
scenery.o \
scenery_v1.o \
scenery_v2.o \
@@ -67,6 +73,9 @@ MODULE_OBJS := \
demos/demoplayer.o \
demos/scnplayer.o \
demos/batplayer.o \
+ minigames/geisha/evilfish.o \
+ minigames/geisha/diving.o \
+ minigames/geisha/penetration.o \
save/savefile.o \
save/savehandler.o \
save/saveload.o \
@@ -75,6 +84,7 @@ MODULE_OBJS := \
save/saveload_v4.o \
save/saveload_v6.o \
save/saveload_v7.o \
+ save/saveload_geisha.o \
save/saveload_fascin.o \
save/saveload_inca2.o \
save/saveload_playtoons.o \
diff --git a/engines/gob/palanim.cpp b/engines/gob/palanim.cpp
index 42aeaf63eb..8a5327c3f1 100644
--- a/engines/gob/palanim.cpp
+++ b/engines/gob/palanim.cpp
@@ -79,9 +79,6 @@ bool PalAnim::fadeStep(int16 oper) {
byte newGreen;
byte newBlue;
- if (_vm->_global->_colorCount != 256)
- error("PalAnim::fadeStep(): Only 256 color mode is supported");
-
if (oper == 0) {
if (_vm->_global->_setAllPalette) {
if (_vm->_global->_inVM != 0)
@@ -134,12 +131,6 @@ void PalAnim::fade(Video::PalDesc *palDesc, int16 fadeV, int16 allColors) {
_fadeValue = (fadeV < 0) ? -fadeV : 2;
- if (_vm->_global->_colorCount < 256) {
- if (palDesc)
- _vm->_video->setFullPalette(palDesc);
- return;
- }
-
if (!_vm->_global->_setAllPalette) {
if (!palDesc) {
for (i = 0; i < 16; i++) {
diff --git a/engines/gob/rxyfile.cpp b/engines/gob/rxyfile.cpp
new file mode 100644
index 0000000000..5311eece0f
--- /dev/null
+++ b/engines/gob/rxyfile.cpp
@@ -0,0 +1,82 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "common/stream.h"
+
+#include "gob/rxyfile.h"
+
+namespace Gob {
+
+RXYFile::RXYFile(Common::SeekableReadStream &rxy) : _width(0), _height(0) {
+ load(rxy);
+}
+
+RXYFile::~RXYFile() {
+}
+
+uint RXYFile::size() const {
+ return _coords.size();
+}
+
+uint16 RXYFile::getWidth() const {
+ return _width;
+}
+
+uint16 RXYFile::getHeight() const {
+ return _height;
+}
+
+uint16 RXYFile::getRealCount() const {
+ return _realCount;
+}
+
+const RXYFile::Coordinates &RXYFile::operator[](uint i) const {
+ assert(i < _coords.size());
+
+ return _coords[i];
+}
+
+void RXYFile::load(Common::SeekableReadStream &rxy) {
+ if (rxy.size() < 2)
+ return;
+
+ rxy.seek(0);
+
+ _realCount = rxy.readUint16LE();
+
+ uint16 count = (rxy.size() - 2) / 8;
+
+ _coords.resize(count);
+ for (CoordArray::iterator c = _coords.begin(); c != _coords.end(); ++c) {
+ c->left = rxy.readUint16LE();
+ c->right = rxy.readUint16LE();
+ c->top = rxy.readUint16LE();
+ c->bottom = rxy.readUint16LE();
+
+ if (c->left != 0xFFFF) {
+ _width = MAX<uint16>(_width , c->right + 1);
+ _height = MAX<uint16>(_height, c->bottom + 1);
+ }
+ }
+}
+
+} // End of namespace Gob
diff --git a/engines/gob/rxyfile.h b/engines/gob/rxyfile.h
new file mode 100644
index 0000000000..828f8b73c7
--- /dev/null
+++ b/engines/gob/rxyfile.h
@@ -0,0 +1,76 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef GOB_RXYFILE_H
+#define GOB_RXYFILE_H
+
+#include "common/system.h"
+#include "common/array.h"
+
+namespace Common {
+ class SeekableReadStream;
+}
+
+namespace Gob {
+
+/** A RXY file, containing relative sprite coordinates.
+ *
+ * Used in hardcoded "actiony" parts of gob games.
+ */
+class RXYFile {
+public:
+ struct Coordinates {
+ uint16 left;
+ uint16 top;
+ uint16 right;
+ uint16 bottom;
+ };
+
+ RXYFile(Common::SeekableReadStream &rxy);
+ ~RXYFile();
+
+ uint size() const;
+
+ uint16 getWidth () const;
+ uint16 getHeight() const;
+
+ uint16 getRealCount() const;
+
+ const Coordinates &operator[](uint i) const;
+
+private:
+ typedef Common::Array<Coordinates> CoordArray;
+
+ CoordArray _coords;
+
+ uint16 _realCount;
+
+ uint16 _width;
+ uint16 _height;
+
+
+ void load(Common::SeekableReadStream &rxy);
+};
+
+} // End of namespace Gob
+
+#endif // GOB_RXYFILE_H
diff --git a/engines/gob/save/saveload.h b/engines/gob/save/saveload.h
index 4d51a5b51c..66b3482bac 100644
--- a/engines/gob/save/saveload.h
+++ b/engines/gob/save/saveload.h
@@ -71,6 +71,60 @@ protected:
virtual const char *getDescription(const char *fileName) const;
};
+/** Save/Load class for Geisha. */
+class SaveLoad_Geisha : public SaveLoad {
+public:
+ SaveLoad_Geisha(GobEngine *vm, const char *targetName);
+ virtual ~SaveLoad_Geisha();
+
+ SaveMode getSaveMode(const char *fileName) const;
+
+protected:
+ static const uint32 kSlotCount = 7;
+ static const uint32 kSlotSize = 44;
+
+ static const uint32 kSaveFileSize = kSlotCount * kSlotSize;
+
+ struct SaveFile {
+ const char *sourceName;
+ SaveMode mode;
+ SaveHandler *handler;
+ const char *description;
+ };
+
+ /** Handles the save slots. */
+ class GameHandler : public SaveHandler {
+ public:
+ GameHandler(GobEngine *vm, const Common::String &target);
+ ~GameHandler();
+
+ int32 getSize();
+ bool load(int16 dataVar, int32 size, int32 offset);
+ bool save(int16 dataVar, int32 size, int32 offset);
+
+ private:
+ /** Slot file construction. */
+ class File : public SlotFileIndexed {
+ public:
+ File(GobEngine *vm, const Common::String &base);
+ ~File();
+
+ int getSlot(int32 offset) const;
+ int getSlotRemainder(int32 offset) const;
+ };
+
+ File _file;
+ };
+
+ static SaveFile _saveFiles[];
+
+ SaveHandler *getHandler(const char *fileName) const;
+ const char *getDescription(const char *fileName) const;
+
+ const SaveFile *getSaveFile(const char *fileName) const;
+ SaveFile *getSaveFile(const char *fileName);
+};
+
/** Save/Load class for Gobliins 2, Ween: The Prophecy and Bargon Attack. */
class SaveLoad_v2 : public SaveLoad {
public:
diff --git a/engines/gob/save/saveload_geisha.cpp b/engines/gob/save/saveload_geisha.cpp
new file mode 100644
index 0000000000..3414c12dda
--- /dev/null
+++ b/engines/gob/save/saveload_geisha.cpp
@@ -0,0 +1,215 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "gob/save/saveload.h"
+#include "gob/save/saveconverter.h"
+#include "gob/inter.h"
+#include "gob/variables.h"
+
+namespace Gob {
+
+SaveLoad_Geisha::SaveFile SaveLoad_Geisha::_saveFiles[] = {
+ {"save.inf", kSaveModeSave, 0, "savegame"}
+};
+
+
+SaveLoad_Geisha::GameHandler::File::File(GobEngine *vm, const Common::String &base) :
+ SlotFileIndexed(vm, SaveLoad_Geisha::kSlotCount, base, "s") {
+
+}
+
+SaveLoad_Geisha::GameHandler::File::~File() {
+}
+
+int SaveLoad_Geisha::GameHandler::File::getSlot(int32 offset) const {
+ return 0;
+}
+
+int SaveLoad_Geisha::GameHandler::File::getSlotRemainder(int32 offset) const {
+ return 0;
+}
+
+
+SaveLoad_Geisha::GameHandler::GameHandler(GobEngine *vm, const Common::String &target) :
+ SaveHandler(vm), _file(vm, target) {
+
+}
+
+SaveLoad_Geisha::GameHandler::~GameHandler() {
+}
+
+int32 SaveLoad_Geisha::GameHandler::getSize() {
+ if (_file.getSlotMax() == 0)
+ return -1;
+
+ return SaveLoad_Geisha::kSaveFileSize;
+}
+
+bool SaveLoad_Geisha::GameHandler::load(int16 dataVar, int32 size, int32 offset) {
+ if ((size != 0) || (offset != 0)) {
+ warning("Invalid loading procedure: %d, %d, %d", dataVar, size, offset);
+ return false;
+ }
+
+ memset(_vm->_inter->_variables->getAddressOff8(dataVar), 0, SaveLoad_Geisha::kSaveFileSize);
+
+ for (uint32 slot = 0; slot < SaveLoad_Geisha::kSlotCount;
+ slot++, dataVar += SaveLoad_Geisha::kSlotSize) {
+
+ if (!_file.exists(slot))
+ continue;
+
+ Common::String slotFile = _file.build(slot);
+ if (slotFile.empty())
+ return false;
+
+ SaveReader reader(2, slot, slotFile);
+ if (!reader.load()) {
+ warning("Save slot %d contains corrupted save", slot);
+ continue;
+ }
+
+ SavePartInfo info(20, (uint32) _vm->getGameType(), 0,
+ _vm->getEndianness(), _vm->_inter->_variables->getSize());
+ SavePartVars vars(_vm, SaveLoad_Geisha::kSlotSize);
+
+ if (!reader.readPart(0, &info) || !reader.readPart(1, &vars)) {
+ warning("Save slot %d contains corrupted save", slot);
+ continue;
+ }
+
+ if (!vars.writeInto(dataVar, 0, SaveLoad_Geisha::kSlotSize)) {
+ warning("Save slot %d contains corrupted save", slot);
+ continue;
+ }
+ }
+
+ return true;
+}
+
+bool SaveLoad_Geisha::GameHandler::save(int16 dataVar, int32 size, int32 offset) {
+ if (((uint32)size != SaveLoad_Geisha::kSaveFileSize) || (offset != 0)) {
+ warning("Invalid saving procedure: %d, %d, %d", dataVar, size, offset);
+ return false;
+ }
+
+ for (uint32 slot = 0; slot < SaveLoad_Geisha::kSlotCount;
+ slot++, dataVar += SaveLoad_Geisha::kSlotSize) {
+
+ const byte *slotData = _vm->_inter->_variables->getAddressOff8(dataVar);
+
+ // Check of the slot's data is empty
+ bool empty = true;
+ for (uint32 j = 0; j < SaveLoad_Geisha::kSlotSize; j++) {
+ if (slotData[j] != 0) {
+ empty = false;
+ break;
+ }
+ }
+
+ // Don't save empty slots
+ if (empty)
+ continue;
+
+ Common::String slotFile = _file.build(slot);
+ if (slotFile.empty())
+ return false;
+
+ SaveWriter writer(2, slot, slotFile);
+
+ SavePartInfo info(20, (uint32) _vm->getGameType(), 0,
+ _vm->getEndianness(), _vm->_inter->_variables->getSize());
+ SavePartVars vars(_vm, SaveLoad_Geisha::kSlotSize);
+
+ info.setDesc(Common::String::format("Geisha, slot %d", slot).c_str());
+ if (!vars.readFrom(dataVar, 0, SaveLoad_Geisha::kSlotSize))
+ return false;
+
+ if (!writer.writePart(0, &info))
+ return false;
+ if (!writer.writePart(1, &vars))
+ return false;
+ }
+
+ return true;
+}
+
+
+SaveLoad_Geisha::SaveLoad_Geisha(GobEngine *vm, const char *targetName) :
+ SaveLoad(vm) {
+
+ _saveFiles[0].handler = new GameHandler(vm, targetName);
+}
+
+SaveLoad_Geisha::~SaveLoad_Geisha() {
+ for (int i = 0; i < ARRAYSIZE(_saveFiles); i++)
+ delete _saveFiles[i].handler;
+}
+
+const SaveLoad_Geisha::SaveFile *SaveLoad_Geisha::getSaveFile(const char *fileName) const {
+ fileName = stripPath(fileName);
+
+ for (int i = 0; i < ARRAYSIZE(_saveFiles); i++)
+ if (!scumm_stricmp(fileName, _saveFiles[i].sourceName))
+ return &_saveFiles[i];
+
+ return 0;
+}
+
+SaveLoad_Geisha::SaveFile *SaveLoad_Geisha::getSaveFile(const char *fileName) {
+ fileName = stripPath(fileName);
+
+ for (int i = 0; i < ARRAYSIZE(_saveFiles); i++)
+ if (!scumm_stricmp(fileName, _saveFiles[i].sourceName))
+ return &_saveFiles[i];
+
+ return 0;
+}
+
+SaveHandler *SaveLoad_Geisha::getHandler(const char *fileName) const {
+ const SaveFile *saveFile = getSaveFile(fileName);
+
+ if (saveFile)
+ return saveFile->handler;
+
+ return 0;
+}
+
+const char *SaveLoad_Geisha::getDescription(const char *fileName) const {
+ const SaveFile *saveFile = getSaveFile(fileName);
+
+ if (saveFile)
+ return saveFile->description;
+
+ return 0;
+}
+
+SaveLoad::SaveMode SaveLoad_Geisha::getSaveMode(const char *fileName) const {
+ const SaveFile *saveFile = getSaveFile(fileName);
+
+ if (saveFile)
+ return saveFile->mode;
+
+ return kSaveModeNone;
+}
+
+} // End of namespace Gob
diff --git a/engines/gob/sound/sound.cpp b/engines/gob/sound/sound.cpp
index 212116f689..e064a312c2 100644
--- a/engines/gob/sound/sound.cpp
+++ b/engines/gob/sound/sound.cpp
@@ -330,7 +330,7 @@ void Sound::adlibPlayBgMusic() {
if (!_adlPlayer)
_adlPlayer = new ADLPlayer(*_vm->_mixer);
- static const char *tracksMac[] = {
+ static const char *const tracksMac[] = {
// "musmac1.adl", // TODO: This track isn't played correctly at all yet
"musmac2.adl",
"musmac3.adl",
@@ -339,7 +339,7 @@ void Sound::adlibPlayBgMusic() {
"musmac6.adl"
};
- static const char *tracksWin[] = {
+ static const char *const tracksWin[] = {
"musmac1.mid",
"musmac2.mid",
"musmac3.mid",
@@ -534,7 +534,7 @@ void Sound::cdPlayBgMusic() {
if (!_cdrom)
return;
- static const char *tracks[][2] = {
+ static const char *const tracks[][2] = {
{"avt00.tot", "mine"},
{"avt001.tot", "nuit"},
{"avt002.tot", "campagne"},
@@ -571,7 +571,7 @@ void Sound::cdPlayMultMusic() {
if (!_cdrom)
return;
- static const char *tracks[][6] = {
+ static const char *const tracks[][6] = {
{"avt005.tot", "fra1", "all1", "ang1", "esp1", "ita1"},
{"avt006.tot", "fra2", "all2", "ang2", "esp2", "ita2"},
{"avt012.tot", "fra3", "all3", "ang3", "esp3", "ita3"},
diff --git a/engines/gob/util.cpp b/engines/gob/util.cpp
index 6d83745602..7f9c6131fd 100644
--- a/engines/gob/util.cpp
+++ b/engines/gob/util.cpp
@@ -20,6 +20,10 @@
*
*/
+#include "common/stream.h"
+#include "common/events.h"
+
+#include "graphics/palette.h"
#include "gob/gob.h"
#include "gob/util.h"
@@ -31,10 +35,6 @@
#include "gob/videoplayer.h"
#include "gob/sound/sound.h"
-#include "common/events.h"
-
-#include "graphics/palette.h"
-
namespace Gob {
Util::Util(GobEngine *vm) : _vm(vm) {
@@ -257,6 +257,18 @@ bool Util::checkKey(int16 &key) {
return true;
}
+bool Util::keyPressed() {
+ int16 key = checkKey();
+ if (key)
+ return true;
+
+ int16 x, y;
+ MouseButtons buttons;
+
+ getMouseState(&x, &y, &buttons);
+ return buttons != kMouseButtonsNone;
+}
+
void Util::getMouseState(int16 *pX, int16 *pY, MouseButtons *pButtons) {
Common::Point mouse = g_system->getEventManager()->getMousePos();
*pX = mouse.x + _vm->_video->_scrollOffsetX - _vm->_video->_screenDeltaX;
@@ -518,6 +530,11 @@ void Util::deleteList(List *list) {
}
char *Util::setExtension(char *str, const char *ext) {
+ assert(str && ext);
+
+ if (str[0] == '\0')
+ return str;
+
char *dot = strrchr(str, '.');
if (dot)
*dot = '\0';
@@ -527,6 +544,9 @@ char *Util::setExtension(char *str, const char *ext) {
}
Common::String Util::setExtension(const Common::String &str, const Common::String &ext) {
+ if (str.empty())
+ return str;
+
const char *dot = strrchr(str.c_str(), '.');
if (dot)
return Common::String(str.c_str(), dot - str.c_str()) + ext;
@@ -534,6 +554,23 @@ Common::String Util::setExtension(const Common::String &str, const Common::Strin
return str + ext;
}
+Common::String Util::readString(Common::SeekableReadStream &stream, int n) {
+ Common::String str;
+
+ char c;
+ while (n-- > 0) {
+ if ((c = stream.readByte()) == '\0')
+ break;
+
+ str += c;
+ }
+
+ if (n > 0)
+ stream.skip(n);
+
+ return str;
+}
+
/* NOT IMPLEMENTED */
void Util::checkJoystick() {
_vm->_global->_useJoystick = 0;
diff --git a/engines/gob/util.h b/engines/gob/util.h
index a6a689c1d2..4228dac768 100644
--- a/engines/gob/util.h
+++ b/engines/gob/util.h
@@ -23,8 +23,13 @@
#ifndef GOB_UTIL_H
#define GOB_UTIL_H
+#include "common/str.h"
#include "common/keyboard.h"
+namespace Common {
+ class SeekableReadStream;
+}
+
namespace Gob {
class GobEngine;
@@ -103,6 +108,7 @@ public:
int16 getKey();
int16 checkKey();
bool checkKey(int16 &key);
+ bool keyPressed();
void getMouseState(int16 *pX, int16 *pY, MouseButtons *pButtons);
void setMousePos(int16 x, int16 y);
@@ -131,6 +137,9 @@ public:
static char *setExtension(char *str, const char *ext);
static Common::String setExtension(const Common::String &str, const Common::String &ext);
+ /** Read a constant-length string out of a stream. */
+ static Common::String readString(Common::SeekableReadStream &stream, int n);
+
Util(GobEngine *vm);
protected:
diff --git a/engines/gob/videoplayer.cpp b/engines/gob/videoplayer.cpp
index 651c9a3154..221f5ab3c9 100644
--- a/engines/gob/videoplayer.cpp
+++ b/engines/gob/videoplayer.cpp
@@ -61,7 +61,7 @@ void VideoPlayer::Video::close() {
}
-const char *VideoPlayer::_extensions[] = { "IMD", "IMD", "VMD", "RMD", "SMD" };
+const char *const VideoPlayer::_extensions[] = { "IMD", "IMD", "VMD", "RMD", "SMD" };
VideoPlayer::VideoPlayer(GobEngine *vm) : _vm(vm), _needBlit(false),
_noCursorSwitch(false), _woodruffCohCottWorkaround(false) {
@@ -262,7 +262,7 @@ void VideoPlayer::waitSoundEnd(int slot) {
video->decoder->finishSound();
- while(video->decoder->isSoundPlaying())
+ while (video->decoder->isSoundPlaying())
_vm->_util->longDelay(1);
}
diff --git a/engines/gob/videoplayer.h b/engines/gob/videoplayer.h
index 373832939a..bc7cb48768 100644
--- a/engines/gob/videoplayer.h
+++ b/engines/gob/videoplayer.h
@@ -167,7 +167,7 @@ private:
static const int kVideoSlotCount = 32;
- static const char *_extensions[];
+ static const char *const _extensions[];
GobEngine *_vm;
diff --git a/engines/groovie/roq.cpp b/engines/groovie/roq.cpp
index 7f477c41fa..ca896a8d21 100644
--- a/engines/groovie/roq.cpp
+++ b/engines/groovie/roq.cpp
@@ -43,9 +43,6 @@
namespace Groovie {
ROQPlayer::ROQPlayer(GroovieEngine *vm) :
-#ifdef DITHER
- _dither(NULL),
-#endif
VideoPlayer(vm), _codingTypeCount(0),
_fg(&_vm->_graphicsMan->_foreground), _bg(&_vm->_graphicsMan->_background) {
@@ -55,38 +52,13 @@ ROQPlayer::ROQPlayer(GroovieEngine *vm) :
if (_vm->_mode8bit) {
byte pal[256 * 3];
-#ifdef DITHER
- // Initialize to a black palette
- memset(pal, 0, 256 * 3);
-
- // Build a basic color palette
- for (int r = 0; r < 4; r++) {
- for (int g = 0; g < 4; g++) {
- for (int b = 0; b < 4; b++) {
- byte col = (r << 4) | (g << 2) | (b << 0);
- pal[3 * col + 0] = r << 6;
- pal[3 * col + 1] = g << 6;
- pal[3 * col + 2] = b << 6;
- }
- }
- }
-
- // Initialize the dithering algorithm
- _paletteLookup = new Graphics::PaletteLUT(8, Graphics::PaletteLUT::kPaletteYUV);
- _paletteLookup->setPalette(pal, Graphics::PaletteLUT::kPaletteRGB, 8);
- for (int i = 0; (i < 64) && !_vm->shouldQuit(); i++) {
- debug("Groovie::ROQ: Building palette table: %02d/63", i);
- _paletteLookup->buildNext();
- }
-#else // !DITHER
// Set a grayscale palette
for (int i = 0; i < 256; i++) {
pal[(i * 3) + 0] = i;
pal[(i * 3) + 1] = i;
pal[(i * 3) + 2] = i;
}
-#endif // DITHER
_syst->getPaletteManager()->setPalette(pal, 0, 256);
}
@@ -98,12 +70,6 @@ ROQPlayer::~ROQPlayer() {
delete _currBuf;
_prevBuf->free();
delete _prevBuf;
-
-#ifdef DITHER
- // Free the dithering algorithm
- delete _dither;
- delete _paletteLookup;
-#endif
}
uint16 ROQPlayer::loadInternal() {
@@ -147,22 +113,13 @@ uint16 ROQPlayer::loadInternal() {
}
void ROQPlayer::buildShowBuf() {
-#ifdef DITHER
- // Start a new frame dithering
- _dither->newFrame();
-#endif
-
for (int line = 0; line < _bg->h; line++) {
byte *out = (byte *)_bg->getBasePtr(0, line);
byte *in = (byte *)_currBuf->getBasePtr(0, line / _scaleY);
for (int x = 0; x < _bg->w; x++) {
if (_vm->_mode8bit) {
-#ifdef DITHER
- *out = _dither->dither(*in, *(in + 1), *(in + 2), x);
-#else
// Just use the luminancy component
*out = *in;
-#endif // DITHER
#ifdef USE_RGB_COLOR
} else {
// Do the format conversion (YUV -> RGB -> Screen format)
@@ -178,9 +135,6 @@ void ROQPlayer::buildShowBuf() {
if (!(x % _scaleX))
in += _currBuf->format.bytesPerPixel;
}
-#ifdef DITHER
- _dither->nextLine();
-#endif
}
// Swap buffers
@@ -349,11 +303,6 @@ bool ROQPlayer::processBlockInfo(ROQBlockHeader &blockHeader) {
*ptr2++ = 128;
}
-#ifdef DITHER
- // Reset the dithering algorithm with the new width
- delete _dither;
- _dither = new Graphics::SierraLight(width * _scaleX, _paletteLookup);
-#endif
}
return true;
diff --git a/engines/groovie/roq.h b/engines/groovie/roq.h
index ddb307065c..c5d3f255d3 100644
--- a/engines/groovie/roq.h
+++ b/engines/groovie/roq.h
@@ -25,12 +25,6 @@
#include "groovie/player.h"
-//#define DITHER
-
-#ifdef DITHER
-#include "graphics/dither.h"
-#endif
-
namespace Groovie {
class GroovieEngine;
@@ -89,11 +83,6 @@ private:
bool _dirty;
byte _alpha;
-#ifdef DITHER
- // Dithering
- Graphics::PaletteLUT *_paletteLookup;
- Graphics::SierraLight *_dither;
-#endif
};
} // End of Groovie namespace
diff --git a/engines/hugo/intro.cpp b/engines/hugo/intro.cpp
index c66c0ef624..72f718fe8e 100644
--- a/engines/hugo/intro.cpp
+++ b/engines/hugo/intro.cpp
@@ -317,7 +317,7 @@ void intro_v3d::introInit() {
_vm->_file->readBackground(22); // display screen MAP_3d
_vm->_screen->displayBackground();
introTicks = 0;
- _vm->_sound->DOSSongPtr = _vm->_sound->DOSIntroSong;
+ _vm->_sound->_DOSSongPtr = _vm->_sound->_DOSIntroSong;
}
/**
diff --git a/engines/hugo/object.cpp b/engines/hugo/object.cpp
index e5c7b4bf90..bc99abf410 100644
--- a/engines/hugo/object.cpp
+++ b/engines/hugo/object.cpp
@@ -283,7 +283,7 @@ void ObjectHandler::freeObjects() {
free(_uses);
}
- for(int16 i = 0; i < _objCount; i++) {
+ for (int16 i = 0; i < _objCount; i++) {
free(_objects[i].stateDataIndex);
_objects[i].stateDataIndex = 0;
}
diff --git a/engines/hugo/parser.cpp b/engines/hugo/parser.cpp
index 38a8e4e3ff..bbf6c39f13 100644
--- a/engines/hugo/parser.cpp
+++ b/engines/hugo/parser.cpp
@@ -449,7 +449,7 @@ const char *Parser::findVerb() const {
*/
void Parser::showDosInventory() const {
debugC(1, kDebugParser, "showDosInventory()");
- static const char *blanks = " ";
+ static const char *const blanks = " ";
uint16 index = 0, len1 = 0, len2 = 0;
for (int i = 0; i < _vm->_object->_numObj; i++) { // Find widths of 2 columns
diff --git a/engines/hugo/schedule.cpp b/engines/hugo/schedule.cpp
index d1b4aa6a9c..384b3ace8f 100644
--- a/engines/hugo/schedule.cpp
+++ b/engines/hugo/schedule.cpp
@@ -297,7 +297,7 @@ void Scheduler::readAct(Common::ReadStream &in, act &curAct) {
curAct.a3.timer = in.readSint16BE();
curAct.a3.promptIndex = in.readSint16BE();
numSubAct = in.readUint16BE();
- curAct.a3.responsePtr = (int *) malloc(sizeof(int) * numSubAct);
+ curAct.a3.responsePtr = (int *)malloc(sizeof(int) * numSubAct);
for (int k = 0; k < numSubAct; k++)
curAct.a3.responsePtr[k] = in.readSint16BE();
curAct.a3.actPassIndex = in.readUint16BE();
@@ -566,7 +566,7 @@ void Scheduler::loadActListArr(Common::ReadStream &in) {
for (int i = 0; i < numElem; i++) {
numSubElem = in.readUint16BE();
if (varnt == _vm->_gameVariant)
- _actListArr[i] = (act *) malloc(sizeof(act) * (numSubElem + 1));
+ _actListArr[i] = (act *)malloc(sizeof(act) * (numSubElem + 1));
for (int j = 0; j < numSubElem; j++) {
if (varnt == _vm->_gameVariant) {
readAct(in, _actListArr[i][j]);
@@ -1416,7 +1416,7 @@ event_t *Scheduler::doAction(event_t *curEvent) {
break;
case OLD_SONG:
// Replaces ACT26 for DOS games.
- _vm->_sound->DOSSongPtr = _vm->_text->getTextData(action->a49.songIndex);
+ _vm->_sound->_DOSSongPtr = _vm->_text->getTextData(action->a49.songIndex);
break;
default:
error("An error has occurred: %s", "doAction");
@@ -1557,7 +1557,7 @@ void Scheduler_v1d::decodeString(char *line) {
debugC(1, kDebugSchedule, "decodeString(%s)", line);
uint16 linelength = strlen(line);
- for(uint16 i = 0; i < linelength; i++) {
+ for (uint16 i = 0; i < linelength; i++) {
line[i] = (line[i] + _cypher.c_str()[i % _cypher.size()]) % '~';
if (line[i] < ' ')
line[i] += ' ';
diff --git a/engines/hugo/sound.cpp b/engines/hugo/sound.cpp
index fe34e6ff2d..9dcd7d346a 100644
--- a/engines/hugo/sound.cpp
+++ b/engines/hugo/sound.cpp
@@ -123,11 +123,11 @@ SoundHandler::SoundHandler(HugoEngine *vm) : _vm(vm) {
_speakerStream = new Audio::PCSpeaker(_vm->_mixer->getOutputRate());
_vm->_mixer->playStream(Audio::Mixer::kSFXSoundType, &_speakerHandle,
_speakerStream, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO, true);
- DOSSongPtr = 0;
- curPriority = 0;
- pcspkrTimer = 0;
- pcspkrOctave = 3;
- pcspkrNoteDuration = 2;
+ _DOSSongPtr = 0;
+ _curPriority = 0;
+ _pcspkrTimer = 0;
+ _pcspkrOctave = 3;
+ _pcspkrNoteDuration = 2;
}
SoundHandler::~SoundHandler() {
@@ -207,7 +207,7 @@ void SoundHandler::playSound(int16 sound, const byte priority) {
return;
syncVolume();
- curPriority = priority;
+ _curPriority = priority;
// Get sound data
if ((sound_p = _vm->_file->getSound(sound, &size)) == 0)
@@ -269,94 +269,112 @@ void SoundHandler::pcspkr_player() {
static const uint16 pcspkrSharps[8] = {1279, 1171, 2150, 1916, 1755, 1611, 1435}; // The sharps, A# to B#
static const uint16 pcspkrFlats[8] = {1435, 1279, 2342, 2150, 1916, 1755, 1611}; // The flats, Ab to Bb
- _vm->getTimerManager()->removeTimerProc(&loopPlayer);
- _vm->getTimerManager()->installTimerProc(&loopPlayer, 1000000 / 9, this, "hugoSoundLoop");
-
- uint16 count; // Value to set timer chip to for note
- bool cmd_note;
-
+ // Does the user not want any sound?
if (!_vm->_config.soundFl || !_vm->_mixer->isReady())
- return; // Poo! User doesn't want sound!
+ return;
- if (!DOSSongPtr)
+ // Is there no song?
+ if (!_DOSSongPtr)
return;
- if (!*DOSSongPtr) // Song has finished
+ // Did we reach the end of the song?
+ if (!*_DOSSongPtr)
return;
- if (!--pcspkrTimer) { // timer zero, stop note
+ // Update the timer.
+ _pcspkrTimer--;
+
+ // Check the timer state..
+ if (!_pcspkrTimer) {
+ // A note just finished, stop the sound (if any) and return.
_speakerStream->stop();
return;
- } else if (pcspkrTimer >= 0) { // Note still going
+ } else if (_pcspkrTimer > 0) {
+ // A (rest or normal) note is still playing, return.
return;
}
- // Time to play next note
+ // The timer is <0, time to play the next note.
+ bool cmdNote = true;
do {
- cmd_note = true;
- switch (*DOSSongPtr) {
- case 'O': // Switch to new octave 1..7
- DOSSongPtr++;
- pcspkrOctave = *DOSSongPtr - '0';
- if ((pcspkrOctave < 0) || (pcspkrOctave > 7))
+ switch (*_DOSSongPtr) {
+ case 'O':
+ // Switch to new octave 0..7
+ _DOSSongPtr++;
+ _pcspkrOctave = *_DOSSongPtr - '0';
+ if ((_pcspkrOctave < 0) || (_pcspkrOctave > 7))
error("pcspkr_player() - Bad octave");
- DOSSongPtr++;
+ _DOSSongPtr++;
break;
- case 'L': // Switch to new duration (in ticks)
- DOSSongPtr++;
- pcspkrNoteDuration = *DOSSongPtr - '0';
- if (pcspkrNoteDuration < 0)
+ case 'L':
+ // Switch to new duration (in ticks)
+ _DOSSongPtr++;
+ _pcspkrNoteDuration = *_DOSSongPtr - '0';
+ if (_pcspkrNoteDuration < 0)
error("pcspkr_player() - Bad duration");
- pcspkrNoteDuration--;
- DOSSongPtr++;
+ _pcspkrNoteDuration--;
+ _DOSSongPtr++;
break;
case '<':
- case '^': // Move up an octave
- pcspkrOctave++;
- DOSSongPtr++;
+ case '^':
+ // Move up an octave
+ _DOSSongPtr++;
+ _pcspkrOctave++;
break;
case '>':
- case 'v': // Move down an octave
- pcspkrOctave--;
- DOSSongPtr++;
+ case 'v':
+ // Move down an octave
+ _DOSSongPtr++;
+ _pcspkrOctave--;
break;
default:
- cmd_note = false;
+ // Not a command, probably a note; so we should stop
+ // processing commands and move onward now.
+ cmdNote = false;
break;
}
- } while (cmd_note);
+ } while (cmdNote);
- switch (*DOSSongPtr) {
- case 'A': // The notes.
+ switch (*_DOSSongPtr) {
+ case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
case 'G':
- count = pcspkrNotes[*DOSSongPtr - 'A'];
- switch (DOSSongPtr[1]) { // Check for sharp or flat (#, -)
+ // Play a note.
+
+ // First, what frequency does this note get played at?
+ // We must check for sharp or flat (#, -).
+ uint16 count;
+ switch (_DOSSongPtr[1]) {
case '#':
- count = pcspkrSharps[*DOSSongPtr++ - 'A'];
+ count = pcspkrSharps[*_DOSSongPtr++ - 'A'];
break;
case 'b':
- count = pcspkrFlats[*DOSSongPtr++ - 'A'];
+ count = pcspkrFlats[*_DOSSongPtr++ - 'A'];
break;
default:
+ count = pcspkrNotes[*_DOSSongPtr - 'A'];
break;
}
- if (pcspkrOctave > 3) // Adjust for octave
- count /= (1 << (pcspkrOctave - 3));
- else if (pcspkrOctave < 3)
- count *= (1 << (3 - pcspkrOctave));
- _speakerStream->play(Audio::PCSpeaker::kWaveFormSaw, kHugoCNT / count, (int32) ((1 + pcspkrNoteDuration) * _vm->_normalTPS) * 8);
- pcspkrTimer = pcspkrNoteDuration;
- DOSSongPtr++;
+ // Adjust for the octave if needed.
+ if (_pcspkrOctave > 3)
+ count /= (1 << (_pcspkrOctave - 3));
+ else if (_pcspkrOctave < 3)
+ count *= (1 << (3 - _pcspkrOctave));
+
+ // Start a note playing (we will stop it when the timer expires).
+ _speakerStream->play(Audio::PCSpeaker::kWaveFormSquare, kHugoCNT / count, -1);
+ _pcspkrTimer = _pcspkrNoteDuration;
+ _DOSSongPtr++;
break;
- case '.': // A rest note
+ case '.':
+ // Play a 'rest note' by being silent for a bit.
_speakerStream->stop();
- pcspkrTimer = pcspkrNoteDuration;
- DOSSongPtr++;
+ _pcspkrTimer = _pcspkrNoteDuration;
+ _DOSSongPtr++;
break;
default:
warning("pcspkr_player() - Unhandled note");
@@ -367,12 +385,12 @@ void SoundHandler::loadIntroSong(Common::ReadStream &in) {
for (int varnt = 0; varnt < _vm->_numVariant; varnt++) {
uint16 numBuf = in.readUint16BE();
if (varnt == _vm->_gameVariant)
- DOSIntroSong = _vm->_text->getTextData(numBuf);
+ _DOSIntroSong = _vm->_text->getTextData(numBuf);
}
}
void SoundHandler::initPcspkrPlayer() {
- _vm->getTimerManager()->installTimerProc(&loopPlayer, 1000000 / 9, this, "hugoSoundLoop");
+ _vm->getTimerManager()->installTimerProc(&loopPlayer, 1000000 / _vm->_normalTPS, this, "hugoSoundLoop");
}
} // End of namespace Hugo
diff --git a/engines/hugo/sound.h b/engines/hugo/sound.h
index 33dba9f2a8..1e504fbdea 100644
--- a/engines/hugo/sound.h
+++ b/engines/hugo/sound.h
@@ -60,12 +60,12 @@ public:
static const int kHugoCNT = 1190000;
- int8 pcspkrTimer; // Timer (ticks) for note being played
- int8 pcspkrOctave; // Current octave 1..7
- int8 pcspkrNoteDuration; // Current length of note (ticks)
+ int8 _pcspkrTimer; // Timer (ticks) for note being played
+ int8 _pcspkrOctave; // Current octave 1..7
+ int8 _pcspkrNoteDuration; // Current length of note (ticks)
- const char *DOSSongPtr;
- const char *DOSIntroSong;
+ const char *_DOSSongPtr;
+ const char *_DOSIntroSong;
void toggleMusic();
void toggleSound();
@@ -80,7 +80,7 @@ public:
void loadIntroSong(Common::ReadStream &in);
void initPcspkrPlayer();
protected:
- byte curPriority; // Priority of currently playing sound
+ byte _curPriority; // Priority of currently playing sound
private:
HugoEngine *_vm;
diff --git a/engines/kyra/animator_mr.cpp b/engines/kyra/animator_mr.cpp
index 6414b99ffd..31c5cd1a53 100644
--- a/engines/kyra/animator_mr.cpp
+++ b/engines/kyra/animator_mr.cpp
@@ -445,7 +445,7 @@ void KyraEngine_MR::showIdleAnim() {
if (!_nextIdleType && !talkObjectsInCurScene()) {
randomSceneChat();
} else {
- static const char *facingTable[] = {
+ static const char *const facingTable[] = {
"A", "R", "R", "FR", "FX", "FL", "L", "L"
};
diff --git a/engines/kyra/kyra_hof.cpp b/engines/kyra/kyra_hof.cpp
index b82099f058..c9603a2523 100644
--- a/engines/kyra/kyra_hof.cpp
+++ b/engines/kyra/kyra_hof.cpp
@@ -857,7 +857,7 @@ void KyraEngine_HoF::loadOptionsBuffer(const char *file) {
void KyraEngine_HoF::loadChapterBuffer(int chapter) {
char tempString[14];
- static const char *chapterFilenames[] = {
+ static const char *const chapterFilenames[] = {
"CH1.XXX", "CH2.XXX", "CH3.XXX", "CH4.XXX", "CH5.XXX"
};
@@ -1413,7 +1413,7 @@ void KyraEngine_HoF::runIdleScript(int script) {
setNextIdleAnimTimer();
} else {
// FIXME: move this to staticres.cpp?
- static const char *idleScriptFiles[] = {
+ static const char *const idleScriptFiles[] = {
"_IDLHAIR.EMC", "_IDLDUST.EMC", "_IDLLEAN.EMC", "_IDLDIRT.EMC", "_IDLTOSS.EMC", "_IDLNOSE.EMC",
"_IDLBRSH.EMC", "_Z3IDLE.EMC", "_Z4IDLE.EMC", "_Z6IDLE.EMC", "_Z7IDLE.EMC", "_Z8IDLE.EMC"
};
diff --git a/engines/kyra/kyra_hof.h b/engines/kyra/kyra_hof.h
index 2561171598..916cac0c9d 100644
--- a/engines/kyra/kyra_hof.h
+++ b/engines/kyra/kyra_hof.h
@@ -566,8 +566,8 @@ protected:
// -
char _internStringBuf[200];
- static const char *_languageExtension[];
- static const char *_scriptLangExt[];
+ static const char *const _languageExtension[];
+ static const char *const _scriptLangExt[];
// character
bool _useCharPal;
diff --git a/engines/kyra/kyra_mr.h b/engines/kyra/kyra_mr.h
index ec76340638..473c0371dc 100644
--- a/engines/kyra/kyra_mr.h
+++ b/engines/kyra/kyra_mr.h
@@ -659,7 +659,7 @@ private:
// resource specific
private:
- static const char *_languageExtension[];
+ static const char *const _languageExtension[];
static const int _languageExtensionSize;
int loadLanguageFile(const char *file, uint8 *&buffer);
diff --git a/engines/kyra/sequences_mr.cpp b/engines/kyra/sequences_mr.cpp
index d546d9c25b..76badb63f5 100644
--- a/engines/kyra/sequences_mr.cpp
+++ b/engines/kyra/sequences_mr.cpp
@@ -57,7 +57,7 @@ void KyraEngine_MR::showBadConscience() {
talkObject.x = 30;
talkObject.y = 30;
- static const char *animFilenames[] = {
+ static const char *const animFilenames[] = {
"GUNFL00.WSA", "GUNFL01.WSA", "GUNFL02.WSA", "GUNFL03.WSA", "GUNFL04.WSA", "GUNFL05.WSA", "GUNFL06.WSA", "GUNFL07.WSA",
"GUNFR00.WSA", "GUNFR01.WSA", "GUNFR02.WSA", "GUNFR03.WSA", "GUNFR04.WSA", "GUNFR05.WSA", "GUNFR06.WSA", "GUNFR07.WSA"
};
@@ -128,7 +128,7 @@ void KyraEngine_MR::showGoodConscience() {
talkObject.x = 30;
talkObject.y = 30;
- static const char *animFilenames[] = {
+ static const char *const animFilenames[] = {
"STUFL00.WSA", "STUFL02.WSA", "STUFL04.WSA", "STUFL03.WSA", "STUFL01.WSA",
"STUFR00.WSA", "STUFR02.WSA", "STUFR04.WSA", "STUFR03.WSA", "STUFR01.WSA"
};
diff --git a/engines/kyra/sound_adlib.cpp b/engines/kyra/sound_adlib.cpp
index 12c980486c..67dc9863a8 100644
--- a/engines/kyra/sound_adlib.cpp
+++ b/engines/kyra/sound_adlib.cpp
@@ -395,7 +395,7 @@ private:
static const uint8 _regOffset[];
static const uint16 _unkTable[];
- static const uint8 *_unkTable2[];
+ static const uint8 *const _unkTable2[];
static const uint8 _unkTable2_1[];
static const uint8 _unkTable2_2[];
static const uint8 _unkTable2_3[];
@@ -2074,7 +2074,7 @@ const uint16 AdLibDriver::_unkTable[] = {
// These tables are currently only used by updateCallback46(), which only ever
// uses the first element of one of the sub-tables.
-const uint8 *AdLibDriver::_unkTable2[] = {
+const uint8 *const AdLibDriver::_unkTable2[] = {
AdLibDriver::_unkTable2_1,
AdLibDriver::_unkTable2_2,
AdLibDriver::_unkTable2_1,
diff --git a/engines/kyra/staticres.cpp b/engines/kyra/staticres.cpp
index f6d59922b1..e03369f700 100644
--- a/engines/kyra/staticres.cpp
+++ b/engines/kyra/staticres.cpp
@@ -794,8 +794,8 @@ void KyraEngine_LoK::initStaticResource() {
}
// audio data tables
- static const char *tIntro98[] = { "INTRO%d.DAT" };
- static const char *tIngame98[] = { "KYRAM%d.DAT" };
+ static const char *const tIntro98[] = { "INTRO%d.DAT" };
+ static const char *const tIngame98[] = { "KYRAM%d.DAT" };
// FIXME: It seems Kyra1 MAC CD includes AdLib and MIDI music and sfx, thus we enable
// support for those for now. (Based on patch #2767489 "Support for Mac Kyrandia 1 CD" by satz).
@@ -1011,13 +1011,13 @@ void KyraEngine_HoF::initStaticResource() {
_sequenceSoundList = tmpSndLst;
// assign music data
- static const char *fmtMusicFileListIntro[] = { "intro%d.twn" };
- static const char *fmtMusicFileListFinale[] = { "finale%d.twn" };
- static const char *fmtMusicFileListIngame[] = { "km%02d.twn" };
+ static const char *const fmtMusicFileListIntro[] = { "intro%d.twn" };
+ static const char *const fmtMusicFileListFinale[] = { "finale%d.twn" };
+ static const char *const fmtMusicFileListIngame[] = { "km%02d.twn" };
- static const char *pc98MusicFileListIntro[] = { "intro%d.86" };
- static const char *pc98MusicFileListFinale[] = { "finale%d.86" };
- static const char *pc98MusicFileListIngame[] = { "km%02d.86" };
+ static const char *const pc98MusicFileListIntro[] = { "intro%d.86" };
+ static const char *const pc98MusicFileListFinale[] = { "finale%d.86" };
+ static const char *const pc98MusicFileListIngame[] = { "km%02d.86" };
memset(_soundData, 0, sizeof(_soundData));
if (_flags.platform == Common::kPlatformPC) {
@@ -1387,7 +1387,7 @@ const int GUI_v2::_sliderBarsPosition[] = {
const uint8 KyraEngine_HoF::_seqTextColorPresets[] = { 0x01, 0x01, 0x00, 0x3f, 0x3f, 0x3f };
-const char *KyraEngine_HoF::_languageExtension[] = {
+const char *const KyraEngine_HoF::_languageExtension[] = {
"ENG",
"FRE",
"GER",/*,
@@ -1396,7 +1396,7 @@ const char *KyraEngine_HoF::_languageExtension[] = {
"JPN",
};
-const char *KyraEngine_HoF::_scriptLangExt[] = {
+const char *const KyraEngine_HoF::_scriptLangExt[] = {
"EMC",
"FMC",
"GMC",/*,
@@ -1885,7 +1885,7 @@ const uint8 KyraEngine_HoF::_rainbowRoomData[] = {
// kyra 3 static res
-const char *KyraEngine_MR::_languageExtension[] = {
+const char *const KyraEngine_MR::_languageExtension[] = {
"TRE",
"TRF",
"TRG"/*,
diff --git a/engines/kyra/staticres_lol.cpp b/engines/kyra/staticres_lol.cpp
index ca35569afa..bf838cd572 100644
--- a/engines/kyra/staticres_lol.cpp
+++ b/engines/kyra/staticres_lol.cpp
@@ -261,13 +261,13 @@ void StaticResource::freeButtonDefs(void *&ptr, int &size) {
void LoLEngine::initStaticResource() {
// assign music data
- static const char *pcMusicFileListIntro[] = { "LOREINTR" };
- static const char *pcMusicFileListFinale[] = { "LOREFINL" };
- static const char *pcMusicFileListIngame[] = { "LORE%02d%c" };
+ static const char *const pcMusicFileListIntro[] = { "LOREINTR" };
+ static const char *const pcMusicFileListFinale[] = { "LOREFINL" };
+ static const char *const pcMusicFileListIngame[] = { "LORE%02d%c" };
- static const char *pc98MusicFileListIntro[] = { 0, "lore84.86", "lore82.86", 0, 0, 0, "lore83.86", "lore81.86" };
- static const char *pc98MusicFileListFinale[] = { 0, 0, "lore85.86", "lore86.86", "lore87.86" };
- static const char *pc98MusicFileListIngame[] = { "lore%02d.86" };
+ static const char *const pc98MusicFileListIntro[] = { 0, "lore84.86", "lore82.86", 0, 0, 0, "lore83.86", "lore81.86" };
+ static const char *const pc98MusicFileListFinale[] = { 0, 0, "lore85.86", "lore86.86", "lore87.86" };
+ static const char *const pc98MusicFileListIngame[] = { "lore%02d.86" };
memset(_soundData, 0, sizeof(_soundData));
if (_flags.platform == Common::kPlatformPC) {
diff --git a/engines/kyra/text_hof.cpp b/engines/kyra/text_hof.cpp
index 4406f3ec41..4a52d7d740 100644
--- a/engines/kyra/text_hof.cpp
+++ b/engines/kyra/text_hof.cpp
@@ -194,7 +194,7 @@ void KyraEngine_HoF::objectChat(const char *str, int object, int vocHigh, int vo
assert(_mainCharacter.facing * 3 + chatType < ARRAYSIZE(talkScriptTable));
int script = talkScriptTable[_mainCharacter.facing * 3 + chatType];
- static const char *chatScriptFilenames[] = {
+ static const char *const chatScriptFilenames[] = {
"_Z1FSTMT.EMC",
"_Z1FQUES.EMC",
"_Z1FEXCL.EMC",
diff --git a/engines/kyra/text_mr.cpp b/engines/kyra/text_mr.cpp
index fd4a00b73c..b680e9c6f9 100644
--- a/engines/kyra/text_mr.cpp
+++ b/engines/kyra/text_mr.cpp
@@ -216,7 +216,7 @@ void KyraEngine_MR::objectChat(const char *str, int object, int vocHigh, int voc
0x08, 0x09, 0x0A, 0x0B
};
- static const char *talkFilenameTable[] = {
+ static const char *const talkFilenameTable[] = {
"MTFL00S.EMC", "MTFL00Q.EMC", "MTFL00E.EMC", "MTFL00T.EMC",
"MTFR00S.EMC", "MTFR00Q.EMC", "MTFR00E.EMC", "MTFR00T.EMC",
"MTL00S.EMC", "MTL00Q.EMC", "MTL00E.EMC", "MTL00T.EMC",
diff --git a/engines/lastexpress/entities/francois.cpp b/engines/lastexpress/entities/francois.cpp
index 6bbe740730..2b170d93a3 100644
--- a/engines/lastexpress/entities/francois.cpp
+++ b/engines/lastexpress/entities/francois.cpp
@@ -221,7 +221,7 @@ IMPLEMENT_FUNCTION(9, Francois, function9)
case 1:
getObjects()->update(kObjectCompartmentD, kEntityPlayer, kObjectLocation2, kCursorKeepValue, kCursorKeepValue);
- break;
+ // Fallback to next case
case 2:
getData()->location = kLocationOutsideCompartment;
@@ -257,7 +257,7 @@ IMPLEMENT_FUNCTION(10, Francois, function10)
case 1:
getObjects()->update(kObjectCompartmentD, kEntityPlayer, kObjectLocation2, kCursorKeepValue, kCursorKeepValue);
getSavePoints()->push(kEntityFrancois, kEntityMmeBoutarel, kAction102484312);
- break;
+ // Fallback to next case
case 2:
getData()->location = kLocationInsideCompartment;
diff --git a/engines/lure/hotspots.cpp b/engines/lure/hotspots.cpp
index f38bac6e12..96e5e088ab 100644
--- a/engines/lure/hotspots.cpp
+++ b/engines/lure/hotspots.cpp
@@ -1673,6 +1673,12 @@ void Hotspot::doTalkTo(HotspotData *hotspot) {
faceHotspot(hotspot);
endAction();
+ // WORKAROUND: Fix crash when talking when an ask conversation is active
+ if (_data->talkDestCharacterId != 0) {
+ // Don't allow the talk to start
+ return;
+ }
+
uint16 sequenceOffset = res.getHotspotAction(hotspot->actionsOffset, TALK_TO);
if (sequenceOffset >= 0x8000) {
showMessage(sequenceOffset);
diff --git a/engines/mohawk/cursors.cpp b/engines/mohawk/cursors.cpp
index cbd17e0b86..8c72c9875e 100644
--- a/engines/mohawk/cursors.cpp
+++ b/engines/mohawk/cursors.cpp
@@ -199,12 +199,10 @@ void MacCursorManager::setCursor(uint16 id) {
if (!stream)
stream = _resFork->getResource(MKTAG('C','U','R','S'), id);
- if (stream) {
+ if (stream)
setMacCursor(stream);
- delete stream;
- } else {
+ else
setDefaultCursor();
- }
}
LivingBooksCursorManager_v2::LivingBooksCursorManager_v2() {
diff --git a/engines/mohawk/graphics.cpp b/engines/mohawk/graphics.cpp
index 35c9d478d8..c4326d175f 100644
--- a/engines/mohawk/graphics.cpp
+++ b/engines/mohawk/graphics.cpp
@@ -672,12 +672,50 @@ void MystGraphics::simulatePreviousDrawDelay(const Common::Rect &dest) {
_nextAllowedDrawTime = time + _constantDrawDelay + dest.height() * dest.width() / _proportionalDrawDelay;
}
+void MystGraphics::copyBackBufferToScreenWithSaturation(int16 saturation) {
+ Graphics::Surface *screen = _vm->_system->lockScreen();
+
+ for (uint16 y = 0; y < _viewport.height(); y++)
+ for (uint16 x = 0; x < _viewport.width(); x++) {
+ uint32 color;
+ uint8 r, g, b;
+
+ if (_pixelFormat.bytesPerPixel == 2)
+ color = *(const uint16 *)_backBuffer->getBasePtr(x, y);
+ else
+ color = *(const uint32 *)_backBuffer->getBasePtr(x, y);
+
+ _pixelFormat.colorToRGB(color, r, g, b);
+
+ r = CLIP<int16>((int16)r - saturation, 0, 255);
+ g = CLIP<int16>((int16)g - saturation, 0, 255);
+ b = CLIP<int16>((int16)b - saturation, 0, 255);
+
+ color = _pixelFormat.RGBToColor(r, g, b);
+
+ if (_pixelFormat.bytesPerPixel == 2) {
+ uint16 *dst = (uint16 *)screen->getBasePtr(x, y);
+ *dst = color;
+ } else {
+ uint32 *dst = (uint32 *)screen->getBasePtr(x, y);
+ *dst = color;
+ }
+ }
+
+ _vm->_system->unlockScreen();
+ _vm->_system->updateScreen();
+}
+
void MystGraphics::fadeToBlack() {
- // TODO: Implement
+ for (int16 i = 0; i < 256; i += 32) {
+ copyBackBufferToScreenWithSaturation(i);
+ }
}
void MystGraphics::fadeFromBlack() {
- // TODO: Implement
+ for (int16 i = 256; i >= 0; i -= 32) {
+ copyBackBufferToScreenWithSaturation(i);
+ }
}
#endif // ENABLE_MYST
diff --git a/engines/mohawk/graphics.h b/engines/mohawk/graphics.h
index 96357bbff1..463608a2aa 100644
--- a/engines/mohawk/graphics.h
+++ b/engines/mohawk/graphics.h
@@ -136,6 +136,7 @@ protected:
MohawkSurface *decodeImage(uint16 id);
MohawkEngine *getVM() { return (MohawkEngine *)_vm; }
void simulatePreviousDrawDelay(const Common::Rect &dest);
+ void copyBackBufferToScreenWithSaturation(int16 saturation);
private:
MohawkEngine_Myst *_vm;
diff --git a/engines/mohawk/myst_stacks/channelwood.cpp b/engines/mohawk/myst_stacks/channelwood.cpp
index 0dd69a673a..9ca47cc92a 100644
--- a/engines/mohawk/myst_stacks/channelwood.cpp
+++ b/engines/mohawk/myst_stacks/channelwood.cpp
@@ -159,6 +159,16 @@ uint16 Channelwood::getVar(uint16 var) {
return ((_state.waterValveStates & 0xe2) == 0x80) ? 1 : 0;
case 30: // Door State
return _doorOpened;
+ case 31: // Water flowing in pipe fork ?
+ // 0 -> keep sound.
+ // 1 -> not flowing.
+ // 2 --> flowing.
+ if ((_state.waterValveStates & 0xe2) == 0x82) // From left.
+ return 2;
+ if ((_state.waterValveStates & 0xf4) == 0xa0) // From right.
+ return 1;
+
+ return 0;
case 32: // Sound - Water Flowing in Pipe to Book Room Elevator
return ((_state.waterValveStates & 0xf8) == 0xb0 && _state.pipeState) ? 1 : 0;
case 33: // Channelwood Lower Walkway to Upper Walkway Spiral Stair Upper Door State
diff --git a/engines/mohawk/myst_stacks/demo.cpp b/engines/mohawk/myst_stacks/demo.cpp
index c9e806655e..fbad7dc384 100644
--- a/engines/mohawk/myst_stacks/demo.cpp
+++ b/engines/mohawk/myst_stacks/demo.cpp
@@ -84,7 +84,10 @@ void Demo::o_stopIntro(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
void Demo::o_fadeFromBlack(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
debugC(kDebugScript, "Opcode %d: Fade from black", op);
- _vm->_gfx->fadeFromBlack();
+
+ // FIXME: This glitches when enabled. The backbuffer is drawn to screen,
+ // and then the fading occurs, causing the background to appear for one frame.
+ // _vm->_gfx->fadeFromBlack();
}
void Demo::o_fadeToBlack(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
@@ -101,14 +104,14 @@ void Demo::returnToMenu_run() {
switch (_returnToMenuStep){
case 0:
_vm->_gfx->fadeToBlack();
- _vm->changeToCard(2003, true);
+ _vm->changeToCard(2003, false);
_vm->_gfx->fadeFromBlack();
_returnToMenuStep++;
break;
case 1:
_vm->_gfx->fadeToBlack();
- _vm->changeToCard(2001, true);
+ _vm->changeToCard(2001, false);
_vm->_gfx->fadeFromBlack();
_vm->_cursor->showCursor();
diff --git a/engines/mohawk/myst_stacks/dni.cpp b/engines/mohawk/myst_stacks/dni.cpp
index cf28945c71..2ced265f02 100644
--- a/engines/mohawk/myst_stacks/dni.cpp
+++ b/engines/mohawk/myst_stacks/dni.cpp
@@ -106,7 +106,7 @@ void Dni::o_handPage(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
if (_globals.ending == 1 && _vm->_video->getElapsedTime(atrus) > (uint)Audio::Timestamp(0, 6801, 600).msecs()) {
_globals.ending = 2;
_globals.heldPage = 0;
- _vm->_cursor->setCursor(kDefaultMystCursor);
+ _vm->setMainCursor(kDefaultMystCursor);
// Play movie end (atrus leaving)
_vm->_video->setVideoBounds(atrus, Audio::Timestamp(0, 14813, 600), Audio::Timestamp(0xFFFFFFFF));
diff --git a/engines/mohawk/myst_stacks/myst.cpp b/engines/mohawk/myst_stacks/myst.cpp
index 66492d1200..b67b333a85 100644
--- a/engines/mohawk/myst_stacks/myst.cpp
+++ b/engines/mohawk/myst_stacks/myst.cpp
@@ -1350,8 +1350,10 @@ void Myst::o_generatorButtonPressed(uint16 op, uint16 var, uint16 argc, uint16 *
if (_state.generatorVoltage)
_vm->_sound->replaceSoundMyst(8297);
- else
+ else {
_vm->_sound->replaceSoundMyst(9297);
+ _vm->_sound->stopBackgroundMyst();
+ }
} else {
if (_generatorVoltage)
_vm->_sound->replaceSoundMyst(6297);
diff --git a/engines/mohawk/myst_stacks/preview.cpp b/engines/mohawk/myst_stacks/preview.cpp
index 1b72c85d96..31e22bb8c5 100644
--- a/engines/mohawk/myst_stacks/preview.cpp
+++ b/engines/mohawk/myst_stacks/preview.cpp
@@ -85,7 +85,10 @@ void Preview::o_fadeToBlack(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
void Preview::o_fadeFromBlack(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
debugC(kDebugScript, "Opcode %d: Fade from black", op);
- _vm->_gfx->fadeFromBlack();
+
+ // FIXME: This glitches when enabled. The backbuffer is drawn to screen,
+ // and then the fading occurs, causing the background to appear for one frame.
+ // _vm->_gfx->fadeFromBlack();
}
void Preview::o_stayHere(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
@@ -99,6 +102,7 @@ void Preview::o_stayHere(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
void Preview::o_speechStop(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
debugC(kDebugScript, "Opcode %d: Speech stop", op);
+ _vm->_sound->stopSound(3001);
_speechRunning = false;
_globals.currentAge = 2;
}
@@ -143,7 +147,7 @@ void Preview::speech_run() {
case 2: // Go to Myst
if (_currentCue >= 2) {
_vm->_gfx->fadeToBlack();
- _vm->changeToCard(3002, true);
+ _vm->changeToCard(3002, false);
_vm->_gfx->fadeFromBlack();
_speechStep++;
@@ -186,7 +190,7 @@ void Preview::speech_run() {
break;
_vm->_gfx->fadeToBlack();
- _vm->changeToCard(3005, true);
+ _vm->changeToCard(3005, false);
_vm->_gfx->fadeFromBlack();
_speechNextTime = time + 1000;
_speechStep++;
diff --git a/engines/mohawk/myst_stacks/slides.cpp b/engines/mohawk/myst_stacks/slides.cpp
index 943cb90071..794793e49c 100644
--- a/engines/mohawk/myst_stacks/slides.cpp
+++ b/engines/mohawk/myst_stacks/slides.cpp
@@ -63,7 +63,7 @@ void Slides::runPersistentScripts() {
// Used on Cards...
if (_vm->_system->getMillis() > _nextCardTime) {
_vm->_gfx->fadeToBlack();
- _vm->changeToCard(_nextCardID, true);
+ _vm->changeToCard(_nextCardID, false);
_vm->_gfx->fadeFromBlack();
}
}
diff --git a/engines/parallaction/gfxbase.cpp b/engines/parallaction/gfxbase.cpp
index 48d84ed101..c351551e36 100644
--- a/engines/parallaction/gfxbase.cpp
+++ b/engines/parallaction/gfxbase.cpp
@@ -55,17 +55,14 @@ const char *GfxObj::getName() const {
return _name;
}
-
uint GfxObj::getNum() {
return _frames->getNum();
}
-
void GfxObj::getRect(uint f, Common::Rect &r) {
_frames->getRect(f, r);
}
-
byte *GfxObj::getData(uint f) {
return _frames->getData(f);
}
@@ -77,7 +74,6 @@ uint GfxObj::getSize(uint f) {
return _frames->getSize(f);
}
-
void GfxObj::setFlags(uint32 flags) {
_flags |= flags;
}
@@ -108,6 +104,7 @@ void Gfx::resetSceneDrawList() {
}
GfxObj* Gfx::loadAnim(const char *name) {
+ debugC(1, kDebugGraphics, "Gfx::loadAnim(\"%s\")", name);
Frames* frames = _disk->loadFrames(name);
assert(frames);
@@ -146,7 +143,6 @@ GfxObj* Gfx::loadDoor(const char *name) {
return obj;
}
-
void Gfx::freeLocationObjects() {
freeDialogueObjects();
freeLabels();
@@ -157,6 +153,7 @@ void Gfx::freeCharacterObjects() {
}
void BackgroundInfo::loadGfxObjMask(const char *name, GfxObj *obj) {
+ debugC(1, kDebugGraphics, "BackgroundInfo::loadGfxObjMask(\"%s\")", name);
Common::Rect rect;
obj->getRect(0, rect);
@@ -180,6 +177,7 @@ void Gfx::showGfxObj(GfxObj* obj, bool visible) {
if (!obj) {
return;
}
+ debugC(1, kDebugGraphics, "Gfx::showGfxObj(\"%s\", visible:%d)", obj->getName(), visible ? 1 : 0);
if (visible) {
obj->setFlags(kGfxObjVisible);
@@ -188,27 +186,27 @@ void Gfx::showGfxObj(GfxObj* obj, bool visible) {
}
if (obj->_hasMask) {
+ debugC(1, kDebugGraphics, "\tHas Mask");
_backgroundInfo->toggleMaskPatch(obj->_maskId, obj->x, obj->y, visible);
}
if (obj->_hasPath) {
+ debugC(1, kDebugGraphics, "\tHas Path");
_backgroundInfo->togglePathPatch(obj->_pathId, obj->x, obj->y, visible);
}
}
-
-
bool compareZ(const GfxObj* a1, const GfxObj* a2) {
return (a1->z == a2->z) ? (a1->_prog < a2->_prog) : (a1->z < a2->z);
}
void Gfx::sortScene() {
+ debugC(3, kDebugGraphics, "Gfx::sortScene()");
GfxObjArray::iterator first = _sceneObjects.begin();
GfxObjArray::iterator last = _sceneObjects.end();
Common::sort(first, last, compareZ);
}
-
void Gfx::drawGfxObject(GfxObj *obj, Graphics::Surface &surf) {
if (!obj->isVisible()) {
return;
@@ -236,16 +234,13 @@ void Gfx::drawGfxObject(GfxObj *obj, Graphics::Surface &surf) {
}
-
void Gfx::drawText(Font *font, Graphics::Surface* surf, uint16 x, uint16 y, const char *text, byte color) {
byte *dst = (byte*)surf->getBasePtr(x, y);
font->setColor(color);
font->drawString(dst, surf->w, text);
}
-
void Gfx::unpackBlt(const Common::Rect& r, byte *data, uint size, Graphics::Surface *surf, uint16 z, uint scale, byte transparentColor) {
-
byte *d = _unpackedBitmap;
uint pixelsLeftInLine = r.width();
@@ -273,7 +268,6 @@ void Gfx::unpackBlt(const Common::Rect& r, byte *data, uint size, Graphics::Surf
blt(r, _unpackedBitmap, surf, z, scale, transparentColor);
}
-
void Gfx::bltMaskScale(const Common::Rect& r, byte *data, Graphics::Surface *surf, uint16 z, uint scale, byte transparentColor) {
if (scale == 100) {
// use optimized path
@@ -301,7 +295,6 @@ void Gfx::bltMaskScale(const Common::Rect& r, byte *data, Graphics::Surface *sur
dstRect.clip(clipper);
if (!dstRect.isValidRect()) return;
-
// clipped source rectangle
Common::Rect srcRect;
srcRect.left = (dstRect.left - scaledLeft) * 100 / scale;
@@ -448,10 +441,8 @@ void Gfx::bltNoMaskNoScale(const Common::Rect& r, byte *data, Graphics::Surface
}
}
-
void Gfx::blt(const Common::Rect& r, byte *data, Graphics::Surface *surf, uint16 z, uint scale, byte transparentColor) {
bltMaskScale(r, data, surf, z, scale, transparentColor);
}
-
} // namespace Parallaction
diff --git a/engines/parallaction/walk.cpp b/engines/parallaction/walk.cpp
index 5d5695ace4..53237db4ef 100644
--- a/engines/parallaction/walk.cpp
+++ b/engines/parallaction/walk.cpp
@@ -26,8 +26,6 @@
namespace Parallaction {
-#define IS_PATH_CLEAR(x,y) _vm->_gfx->_backgroundInfo->_path->getValue((x), (y))
-
enum {
WALK_LEFT = 0,
WALK_RIGHT = 1,
@@ -56,21 +54,45 @@ WalkFrames _char24WalkFrames_NS = {
{ 2, 2, 4, 4 }
};
+static int getPathWidth() {
+ if (!_vm->_gfx->_backgroundInfo->_path) {
+ warning("getPathWidth() _path is NULL!");
+ return 0;
+ } else
+ return _vm->_gfx->_backgroundInfo->_path->w;
+}
+
+static int getPathHeight() {
+ if (!_vm->_gfx->_backgroundInfo->_path) {
+ warning("getPathHeight() _path is NULL!");
+ return 0;
+ } else
+ return _vm->_gfx->_backgroundInfo->_path->h;
+}
+
+static bool isPathClear(uint16 x, uint16 y) {
+ if (!_vm->_gfx->_backgroundInfo->_path) {
+ warning("isPathClear() _path is NULL!");
+ return false;
+ } else
+ return (_vm->_gfx->_backgroundInfo->_path->getValue(x, y) ? true : false);
+}
+
// adjusts position towards nearest walkable point
void PathWalker_NS::correctPathPoint(Common::Point &to) {
- if (IS_PATH_CLEAR(to.x, to.y)) return;
+ if (isPathClear(to.x, to.y)) return;
- int maxX = _vm->_gfx->_backgroundInfo->_path->w;
- int maxY = _vm->_gfx->_backgroundInfo->_path->h;
+ int maxX = getPathWidth();
+ int maxY = getPathHeight();
int16 right = to.x;
int16 left = to.x;
do {
right++;
- } while ((right < maxX) && !IS_PATH_CLEAR(right, to.y));
+ } while ((right < maxX) && !isPathClear(right, to.y));
do {
left--;
- } while ((left > 0) && !IS_PATH_CLEAR(left, to.y));
+ } while ((left > 0) && !isPathClear(left, to.y));
right = (right == maxX) ? 1000 : right - to.x;
left = (left == 0) ? 1000 : to.x - left;
@@ -78,10 +100,10 @@ void PathWalker_NS::correctPathPoint(Common::Point &to) {
int16 bottom = to.y;
do {
top--;
- } while ((top > 0) && !IS_PATH_CLEAR(to.x, top));
+ } while ((top > 0) && !isPathClear(to.x, top));
do {
bottom++;
- } while ((bottom < maxY) && !IS_PATH_CLEAR(to.x, bottom));
+ } while ((bottom < maxY) && !isPathClear(to.x, bottom));
top = (top == 0) ? 1000 : to.y - top;
bottom = (bottom == maxY) ? 1000 : bottom - to.y;
@@ -203,10 +225,10 @@ uint16 PathWalker_NS::walkFunc1(const Common::Point &to, Common::Point& node) {
while (foot != arg) {
- if (foot.x < to.x && IS_PATH_CLEAR(foot.x + 1, foot.y)) foot.x++;
- if (foot.x > to.x && IS_PATH_CLEAR(foot.x - 1, foot.y)) foot.x--;
- if (foot.y < to.y && IS_PATH_CLEAR(foot.x, foot.y + 1)) foot.y++;
- if (foot.y > to.y && IS_PATH_CLEAR(foot.x, foot.y - 1)) foot.y--;
+ if (foot.x < to.x && isPathClear(foot.x + 1, foot.y)) foot.x++;
+ if (foot.x > to.x && isPathClear(foot.x - 1, foot.y)) foot.x--;
+ if (foot.y < to.y && isPathClear(foot.x, foot.y + 1)) foot.y++;
+ if (foot.y > to.y && isPathClear(foot.x, foot.y - 1)) foot.y--;
if (foot == v8 && foot != arg) {
// foot couldn't move and still away from target
@@ -215,10 +237,10 @@ uint16 PathWalker_NS::walkFunc1(const Common::Point &to, Common::Point& node) {
while (foot != arg) {
- if (foot.x < to.x && !IS_PATH_CLEAR(foot.x + 1, foot.y)) foot.x++;
- if (foot.x > to.x && !IS_PATH_CLEAR(foot.x - 1, foot.y)) foot.x--;
- if (foot.y < to.y && !IS_PATH_CLEAR(foot.x, foot.y + 1)) foot.y++;
- if (foot.y > to.y && !IS_PATH_CLEAR(foot.x, foot.y - 1)) foot.y--;
+ if (foot.x < to.x && !isPathClear(foot.x + 1, foot.y)) foot.x++;
+ if (foot.x > to.x && !isPathClear(foot.x - 1, foot.y)) foot.x--;
+ if (foot.y < to.y && !isPathClear(foot.x, foot.y + 1)) foot.y++;
+ if (foot.y > to.y && !isPathClear(foot.x, foot.y - 1)) foot.y--;
if (foot == v8 && foot != arg)
return 0;
@@ -238,19 +260,19 @@ uint16 PathWalker_NS::walkFunc1(const Common::Point &to, Common::Point& node) {
}
void PathWalker_NS::clipMove(Common::Point& pos, const Common::Point& to) {
- if ((pos.x < to.x) && (pos.x < _vm->_gfx->_backgroundInfo->_path->w) && IS_PATH_CLEAR(pos.x + 2, pos.y)) {
+ if ((pos.x < to.x) && (pos.x < getPathWidth()) && isPathClear(pos.x + 2, pos.y)) {
pos.x = (pos.x + 2 < to.x) ? pos.x + 2 : to.x;
}
- if ((pos.x > to.x) && (pos.x > 0) && IS_PATH_CLEAR(pos.x - 2, pos.y)) {
+ if ((pos.x > to.x) && (pos.x > 0) && isPathClear(pos.x - 2, pos.y)) {
pos.x = (pos.x - 2 > to.x) ? pos.x - 2 : to.x;
}
- if ((pos.y < to.y) && (pos.y < _vm->_gfx->_backgroundInfo->_path->h) && IS_PATH_CLEAR(pos.x, pos.y + 2)) {
+ if ((pos.y < to.y) && (pos.y < getPathHeight()) && isPathClear(pos.x, pos.y + 2)) {
pos.y = (pos.y + 2 <= to.y) ? pos.y + 2 : to.y;
}
- if ((pos.y > to.y) && (pos.y > 0) && IS_PATH_CLEAR(pos.x, pos.y - 2)) {
+ if ((pos.y > to.y) && (pos.y > 0) && isPathClear(pos.x, pos.y - 2)) {
pos.y = (pos.y - 2 >= to.y) ? pos.y - 2 : to.y;
}
}
@@ -368,10 +390,10 @@ bool PathWalker_BR::directPathExists(const Common::Point &from, const Common::Po
Common::Point p(copy);
while (p != to) {
- if (p.x < to.x && IS_PATH_CLEAR(p.x + 1, p.y)) p.x++;
- if (p.x > to.x && IS_PATH_CLEAR(p.x - 1, p.y)) p.x--;
- if (p.y < to.y && IS_PATH_CLEAR(p.x, p.y + 1)) p.y++;
- if (p.y > to.y && IS_PATH_CLEAR(p.x, p.y - 1)) p.y--;
+ if (p.x < to.x && isPathClear(p.x + 1, p.y)) p.x++;
+ if (p.x > to.x && isPathClear(p.x - 1, p.y)) p.x--;
+ if (p.y < to.y && isPathClear(p.x, p.y + 1)) p.y++;
+ if (p.y > to.y && isPathClear(p.x, p.y - 1)) p.y--;
if (p == copy && p != to)
return false;
@@ -620,7 +642,7 @@ void PathWalker_BR::doWalk(State &s) {
assert (!s._walkPath.empty());
Common::Point p(*s._walkPath.begin());
- if (s._startFoot.y < p.y && (s._startFoot.y + yStep) < maxY && IS_PATH_CLEAR(s._startFoot.x, s._startFoot.y + yStep)) {
+ if (s._startFoot.y < p.y && (s._startFoot.y + yStep) < maxY && isPathClear(s._startFoot.x, s._startFoot.y + yStep)) {
if (yStep + s._startFoot.y <= p.y) {
s._stillWalkingTowardsNode = true;
delta.y = yStep;
@@ -631,7 +653,7 @@ void PathWalker_BR::doWalk(State &s) {
}
s._dirFrame = 9;
} else
- if (s._startFoot.y > p.y && (s._startFoot.y - yStep) > minY && IS_PATH_CLEAR(s._startFoot.x, s._startFoot.y - yStep)) {
+ if (s._startFoot.y > p.y && (s._startFoot.y - yStep) > minY && isPathClear(s._startFoot.x, s._startFoot.y - yStep)) {
if (s._startFoot.y - yStep >= p.y) {
s._stillWalkingTowardsNode = true;
delta.y = yStep;
@@ -643,7 +665,7 @@ void PathWalker_BR::doWalk(State &s) {
s._dirFrame = 0;
}
- if (s._startFoot.x < p.x && (s._startFoot.x + xStep) < maxX && IS_PATH_CLEAR(s._startFoot.x + xStep, s._startFoot.y)) {
+ if (s._startFoot.x < p.x && (s._startFoot.x + xStep) < maxX && isPathClear(s._startFoot.x + xStep, s._startFoot.y)) {
if (s._startFoot.x + xStep <= p.x) {
s._stillWalkingTowardsNode = true;
delta.x = xStep;
@@ -656,7 +678,7 @@ void PathWalker_BR::doWalk(State &s) {
s._dirFrame = 18; // right
}
} else
- if (s._startFoot.x > p.x && (s._startFoot.x - xStep) > minX && IS_PATH_CLEAR(s._startFoot.x - xStep, s._startFoot.y)) {
+ if (s._startFoot.x > p.x && (s._startFoot.x - xStep) > minX && isPathClear(s._startFoot.x - xStep, s._startFoot.y)) {
if (s._startFoot.x - xStep >= p.x) {
s._stillWalkingTowardsNode = true;
delta.x = xStep;
diff --git a/engines/queen/graphics.cpp b/engines/queen/graphics.cpp
index d9a8a10d70..fbb72fde44 100644
--- a/engines/queen/graphics.cpp
+++ b/engines/queen/graphics.cpp
@@ -1201,7 +1201,7 @@ void BamScene::updateCarAnimation() {
}
void BamScene::updateFightAnimation() {
- static const BamDataBlock *fightDataBlocks[] = {
+ static const BamDataBlock *const fightDataBlocks[] = {
_fight1Data,
_fight2Data,
_fight3Data
diff --git a/engines/queen/input.cpp b/engines/queen/input.cpp
index 5a04b0f8a4..30bf681e63 100644
--- a/engines/queen/input.cpp
+++ b/engines/queen/input.cpp
@@ -30,7 +30,7 @@
namespace Queen {
-const char *Input::_commandKeys[] = {
+const char *const Input::_commandKeys[] = {
"ocmglptu", // English
"osbgpnre", // German
"ofdnepau", // French
diff --git a/engines/queen/input.h b/engines/queen/input.h
index 93e2bde638..0aa04dd026 100644
--- a/engines/queen/input.h
+++ b/engines/queen/input.h
@@ -141,7 +141,7 @@ private:
const char *_currentCommandKeys;
//! command keys for all languages
- static const char *_commandKeys[];
+ static const char *const _commandKeys[];
//! verbs matching the command keys
static const Verb _verbKeys[];
diff --git a/engines/queen/musicdata.cpp b/engines/queen/musicdata.cpp
index d3974dcdbf..a046355446 100644
--- a/engines/queen/musicdata.cpp
+++ b/engines/queen/musicdata.cpp
@@ -1495,7 +1495,7 @@ const TuneData Sound::_tune[] = {
{ { 77, 1017, 0 }, { 0, 0 }, 1, 0 }
};
-const char *Sound::_sfxName[] = {
+const char *const Sound::_sfxName[] = {
/* 1 - Door Open (standard) */
"116Bssss",
diff --git a/engines/queen/resource.cpp b/engines/queen/resource.cpp
index d837a63cb5..84043fa3af 100644
--- a/engines/queen/resource.cpp
+++ b/engines/queen/resource.cpp
@@ -30,7 +30,7 @@
namespace Queen {
-const char *Resource::_tableFilename = "queen.tbl";
+const char *const Resource::_tableFilename = "queen.tbl";
const RetailGameVersion Resource::_gameVersions[] = {
{ "PEM10", 1, 0x00000008, 22677657 },
diff --git a/engines/queen/resource.h b/engines/queen/resource.h
index 5c6746e92f..ef8e463631 100644
--- a/engines/queen/resource.h
+++ b/engines/queen/resource.h
@@ -158,7 +158,7 @@ protected:
static const RetailGameVersion *detectGameVersionFromSize(uint32 size);
//! resource table filename (queen.tbl)
- static const char *_tableFilename;
+ static const char *const _tableFilename;
//! known FOTAQ versions
static const RetailGameVersion _gameVersions[];
diff --git a/engines/queen/sound.h b/engines/queen/sound.h
index 2aabb0d73b..371500f356 100644
--- a/engines/queen/sound.h
+++ b/engines/queen/sound.h
@@ -104,7 +104,7 @@ public:
static const SongData _song[];
static const TuneData _tuneDemo[];
static const TuneData _tune[];
- static const char *_sfxName[];
+ static const char *const _sfxName[];
static const int16 _jungleList[];
protected:
diff --git a/engines/saga/interface.cpp b/engines/saga/interface.cpp
index fe37ed8995..994b35cbf8 100644
--- a/engines/saga/interface.cpp
+++ b/engines/saga/interface.cpp
@@ -324,6 +324,7 @@ Interface::Interface(SagaEngine *vm) : _vm(vm) {
}
Interface::~Interface() {
+ _vm->getTimerManager()->removeTimerProc(&saveReminderCallback);
}
void Interface::saveReminderCallback(void *refCon) {
diff --git a/engines/saga/sthread.cpp b/engines/saga/sthread.cpp
index afd528f4b5..6e5cc68ae6 100644
--- a/engines/saga/sthread.cpp
+++ b/engines/saga/sthread.cpp
@@ -102,9 +102,8 @@ void Script::wakeUpThreadsDelayed(int waitType, int sleepTime) {
void Script::executeThreads(uint msec) {
ScriptThreadList::iterator threadIterator;
- if (_vm->_interface->_statusTextInput) {
+ if (_vm->_interface->_statusTextInput)
return;
- }
threadIterator = _threadList.begin();
@@ -129,11 +128,10 @@ void Script::executeThreads(uint msec) {
switch (thread._waitType) {
case kWaitTypeDelay:
- if (thread._sleepTime < msec) {
+ if (thread._sleepTime < msec)
thread._sleepTime = 0;
- } else {
+ else
thread._sleepTime -= msec;
- }
if (thread._sleepTime == 0)
thread._flags &= ~kTFlagWaiting;
@@ -141,11 +139,9 @@ void Script::executeThreads(uint msec) {
case kWaitTypeWalk:
{
- ActorData *actor;
- actor = (ActorData *)thread._threadObj;
- if (actor->_currentAction == kActionWait) {
+ ActorData *actor = (ActorData *)thread._threadObj;
+ if (actor->_currentAction == kActionWait)
thread._flags &= ~kTFlagWaiting;
- }
}
break;
@@ -157,9 +153,8 @@ void Script::executeThreads(uint msec) {
}
if (!(thread._flags & kTFlagWaiting)) {
- if (runThread(thread)) {
+ if (runThread(thread))
break;
- }
}
++threadIterator;
diff --git a/engines/sci/detection.cpp b/engines/sci/detection.cpp
index 33ca3a6c9c..56da696592 100644
--- a/engines/sci/detection.cpp
+++ b/engines/sci/detection.cpp
@@ -296,8 +296,10 @@ Common::String convertSierraGameId(Common::String sierraId, uint32 *gameFlags, R
sierraId == "mg" || sierraId == "pq" ||
sierraId == "jones" ||
sierraId == "cardgames" || sierraId == "solitare" ||
- sierraId == "hoyle3" || sierraId == "hoyle4")
+ sierraId == "hoyle4")
demoThreshold = 40;
+ if (sierraId == "hoyle3")
+ demoThreshold = 45; // cnick-kq has 42 scripts. The actual hoyle 3 demo has 27.
if (sierraId == "fp" || sierraId == "gk" || sierraId == "pq4")
demoThreshold = 150;
@@ -310,8 +312,11 @@ Common::String convertSierraGameId(Common::String sierraId, uint32 *gameFlags, R
return "cnick-lsl";
if (sierraId == "sq4" && resources->size() == 34)
return "cnick-sq";
-
- // TODO: cnick-kq, cnick-laurabow and cnick-longbow (their resources can't be read)
+ if (sierraId == "hoyle3" && resources->size() == 42)
+ return "cnick-kq";
+ if (sierraId == "rh budget" && resources->size() == 39)
+ return "cnick-longbow";
+ // TODO: cnick-laurabow (the name of the game object contains junk)
// Handle Astrochicken 1 (SQ3) and 2 (SQ4)
if (sierraId == "sq3" && resources->size() == 20)
diff --git a/engines/sci/detection_tables.h b/engines/sci/detection_tables.h
index 3b18a1f68d..455223a086 100644
--- a/engines/sci/detection_tables.h
+++ b/engines/sci/detection_tables.h
@@ -91,7 +91,7 @@ static const struct ADGameDescription SciGameDescriptions[] = {
AD_LISTEND},
Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH },
- // Castle of Dr. Brain - English DOS Floppy EGA (from omer_mor, bug report #3035349)
+ // Castle of Dr. Brain - English DOS 5.25" Floppy EGA (from omer_mor, bug report #3035349)
{"castlebrain", "EGA", {
{"resource.map", 0, "88d106f945f7fd9d1aeda961cfec38a9", 2646},
{"resource.000", 0, "6e125f4ce3f4f5c35f2617c7b66c6e21", 25325},
@@ -104,6 +104,16 @@ static const struct ADGameDescription SciGameDescriptions[] = {
AD_LISTEND},
Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH },
+ // Castle of Dr. Brain - English DOS 3.5" Floppy EGA (from nozomi77, bug report #3405307)
+ {"castlebrain", "EGA", {
+ {"resource.map", 0, "dfcf23e36cb81223bdf11166aaf90754", 2730},
+ {"resource.000", 0, "27ec5fa09cd12a7fd16e86d96a2ed245", 300857},
+ {"resource.001", 0, "6e0020a9f9bef9a9d65943dc013f14b5", 222108},
+ {"resource.002", 0, "de2f182529efaad2c4b510b452ab77ac", 633662},
+ {"resource.003", 0, "38b4b37febc6b4f5061c461a283df148", 430388},
+ AD_LISTEND},
+ Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH },
+
// Castle of Dr. Brain - English DOS Floppy (from jvprat)
// Executable scanning reports "1.000.044", Floppy label reports "1.0, 10.30.91", VERSION file reports "1.000"
// SCI interpreter version 1.000.510
@@ -2649,6 +2659,14 @@ static const struct ADGameDescription SciGameDescriptions[] = {
AD_LISTEND},
Common::EN_ANY, Common::kPlatformPC, ADGF_CD | ADGF_UNSTABLE, GUIO_NONE },
+ // Police Quest 4 - German DOS CD (German text, English speech)
+ // Supplied by markcoolio in bug report #3392955
+ {"pq4", "CD", {
+ {"resource.map", 0, "a398076371ed0e1e706c8f9fb9fc7ac5", 11386},
+ {"resource.000", 0, "6ff21954e0a2c5992279e7eb787c8d56", 18918747},
+ AD_LISTEND},
+ Common::DE_DEU, Common::kPlatformPC, ADGF_CD | ADGF_UNSTABLE, GUIO_NONE },
+
// Police Quest 4 - English DOS
// SCI interpreter version 2.000.000 (a guess?)
{"pq4", "", {
diff --git a/engines/sci/engine/kernel_tables.h b/engines/sci/engine/kernel_tables.h
index 0c5d4e680d..3c5af6fab7 100644
--- a/engines/sci/engine/kernel_tables.h
+++ b/engines/sci/engine/kernel_tables.h
@@ -602,7 +602,7 @@ static SciKernelMapEntry s_kernelMap[] = {
};
/** Default kernel name table. */
-static const char *s_defaultKernelNames[] = {
+static const char *const s_defaultKernelNames[] = {
/*0x00*/ "Load",
/*0x01*/ "UnLoad",
/*0x02*/ "ScriptID",
@@ -751,7 +751,7 @@ static const char *s_defaultKernelNames[] = {
// NOTE: 0x72-0x79, 0x85-0x86, 0x88 are from the GK2 demo (which has debug support) and are
// just Dummy in other SCI2 games.
-static const char *sci2_default_knames[] = {
+static const char *const sci2_default_knames[] = {
/*0x00*/ "Load",
/*0x01*/ "UnLoad",
/*0x02*/ "ScriptID",
@@ -916,7 +916,7 @@ static const char *sci2_default_knames[] = {
/*0x9f*/ "MessageBox"
};
-static const char *sci21_default_knames[] = {
+static const char *const sci21_default_knames[] = {
/*0x00*/ "Load",
/*0x01*/ "UnLoad",
/*0x02*/ "ScriptID",
diff --git a/engines/sci/engine/kgraphics.cpp b/engines/sci/engine/kgraphics.cpp
index 36de767464..556e5249b6 100644
--- a/engines/sci/engine/kgraphics.cpp
+++ b/engines/sci/engine/kgraphics.cpp
@@ -49,6 +49,7 @@
#include "sci/graphics/text16.h"
#include "sci/graphics/view.h"
#ifdef ENABLE_SCI32
+#include "sci/graphics/text32.h"
#include "sci/graphics/frameout.h"
#include "sci/video/robot_decoder.h"
#endif
@@ -1380,15 +1381,19 @@ reg_t kIsOnMe(EngineState *s, int argc, reg_t *argv) {
}
reg_t kCreateTextBitmap(EngineState *s, int argc, reg_t *argv) {
- // TODO: argument 0 is usually 0, and arguments 1 and 2 are usually 1
switch (argv[0].toUint16()) {
case 0: {
if (argc != 4) {
warning("kCreateTextBitmap(0): expected 4 arguments, got %i", argc);
return NULL_REG;
}
- //reg_t object = argv[3];
- //Common::String text = s->_segMan->getString(readSelector(s->_segMan, object, SELECTOR(text)));
+ reg_t object = argv[3];
+ Common::String text = s->_segMan->getString(readSelector(s->_segMan, object, SELECTOR(text)));
+ 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());
+ // TODO: arguments 1 and 2
+ g_sci->_gfxText32->createTextBitmap(object);
break;
}
case 1: {
@@ -1396,8 +1401,11 @@ reg_t kCreateTextBitmap(EngineState *s, int argc, reg_t *argv) {
warning("kCreateTextBitmap(0): expected 2 arguments, got %i", argc);
return NULL_REG;
}
- //reg_t object = argv[1];
- //Common::String text = s->_segMan->getString(readSelector(s->_segMan, object, SELECTOR(text)));
+ reg_t object = argv[1];
+ Common::String text = s->_segMan->getString(readSelector(s->_segMan, object, SELECTOR(text)));
+ debugC(kDebugLevelStrings, "kCreateTextBitmap case 1 (%04x:%04x)", PRINT_REG(argv[1]));
+ debugC(kDebugLevelStrings, "%s", text.c_str());
+ g_sci->_gfxText32->createTextBitmap(object);
break;
}
default:
diff --git a/engines/sci/engine/kstring.cpp b/engines/sci/engine/kstring.cpp
index b383f88840..783845bb76 100644
--- a/engines/sci/engine/kstring.cpp
+++ b/engines/sci/engine/kstring.cpp
@@ -42,6 +42,14 @@ reg_t kStrCat(EngineState *s, int argc, reg_t *argv) {
Common::String s1 = s->_segMan->getString(argv[0]);
Common::String s2 = s->_segMan->getString(argv[1]);
+ // The Japanese version of PQ2 splits the two strings here
+ // (check bug #3396887).
+ if (g_sci->getGameId() == GID_PQ2 &&
+ g_sci->getLanguage() == Common::JA_JPN) {
+ s1 = g_sci->strSplit(s1.c_str(), NULL);
+ s2 = g_sci->strSplit(s2.c_str(), NULL);
+ }
+
s1 += s2;
s->_segMan->strcpy(argv[0], s1.c_str());
return argv[0];
diff --git a/engines/sci/engine/script_patches.cpp b/engines/sci/engine/script_patches.cpp
index a714980a35..7efcb42f4b 100644
--- a/engines/sci/engine/script_patches.cpp
+++ b/engines/sci/engine/script_patches.cpp
@@ -855,26 +855,8 @@ const uint16 qfg3PatchImportDialog[] = {
PATCH_END
};
-// Script 23 in QFG3 has a typo/bug which makes it loop endlessly and
-// read garbage. Fixes bug #3040722.
-const byte qfg3DialogCrash[] = {
- 5,
- 0x34, 0xe7, 0x03, // ldi 3e7 (999)
- 0x22, // lt?
- 0x33, // jmp [back] ---> BUG! Infinite loop
- 0
-};
-
-const uint16 qfg3PatchDialogCrash[] = {
- 0x34, 0xe7, 0x03, // ldi 3e7 (999)
- 0x22, // lt?
- 0x31, // bnt [back]
- PATCH_END
-};
-
// script, description, magic DWORD, adjust
const SciScriptSignature qfg3Signatures[] = {
- { 23, "dialog crash", 1, PATCH_MAGICDWORD(0xe7, 0x03, 0x22, 0x33), -1, qfg3DialogCrash, qfg3PatchDialogCrash },
{ 944, "import dialog continuous calls", 1, PATCH_MAGICDWORD(0x2a, 0x31, 0x0b, 0x7a), -1, qfg3SignatureImportDialog, qfg3PatchImportDialog },
SCI_SIGNATUREENTRY_TERMINATOR
};
diff --git a/engines/sci/engine/workarounds.cpp b/engines/sci/engine/workarounds.cpp
index b2cde47f4a..968afcb11c 100644
--- a/engines/sci/engine/workarounds.cpp
+++ b/engines/sci/engine/workarounds.cpp
@@ -209,6 +209,8 @@ const SciWorkaroundEntry kDeviceInfo_workarounds[] = {
// gameID, room,script,lvl, object-name, method-name, call,index, workaround
const SciWorkaroundEntry kDisplay_workarounds[] = {
{ GID_ISLANDBRAIN, 300, 300, 0, "geneDude", "show", -1, 0, { WORKAROUND_IGNORE, 0 } }, // when looking at the gene explanation chart - a parameter is an object
+ { GID_PQ1, 500, 500, 0, "endInter", "changeState", 0x3e8, 0, { WORKAROUND_IGNORE, 0 } }, // restoring a game at the map scene (bug #3389579)
+ { GID_PQ1, 500, 500, 0, "endInter", "changeState", 0x46b, 0, { WORKAROUND_IGNORE, 0 } }, // restoring a game at the map scene (bug #3389579)
{ GID_PQ2, 23, 23, 0, "rm23Script", "elements", 0x4ae, 0, { WORKAROUND_IGNORE, 0 } }, // when looking at the 2nd page of pate's file - 0x75 as id
{ GID_PQ2, 23, 23, 0, "rm23Script", "elements", 0x4c1, 0, { WORKAROUND_IGNORE, 0 } }, // when looking at the 2nd page of pate's file - 0x75 as id (another pq2 version, bug #3043904)
{ GID_QFG1, 11, 11, 0, "battle", "<noname90>", -1, 0, { WORKAROUND_IGNORE, 0 } }, // DEMO: When entering battle, 0x75 as id
diff --git a/engines/sci/graphics/cursor.cpp b/engines/sci/graphics/cursor.cpp
index ec49a38814..57c65aa6e0 100644
--- a/engines/sci/graphics/cursor.cpp
+++ b/engines/sci/graphics/cursor.cpp
@@ -227,8 +227,10 @@ void GfxCursor::kernelSetView(GuiResourceId viewNum, int loopNum, int celNum, Co
// Game, newPosition, validRect
static const SciCursorSetPositionWorkarounds setPositionWorkarounds[] = {
{ GID_ISLANDBRAIN, 84, 109, 46, 76, 174, 243 }, // island of dr. brain / game menu
+ { GID_ISLANDBRAIN,143, 135, 57, 102, 163, 218 },// island of dr. brain / pause menu within copy protection
{ GID_LSL5, 23, 171, 0, 0, 26, 320 }, // larry 5 / skip forward helper
{ GID_QFG1VGA, 64, 174, 40, 37, 74, 284 }, // Quest For Glory 1 VGA / run/walk/sleep sub-menu
+ { GID_QFG3, 70, 170, 40, 61, 81, 258 }, // Quest For Glory 3 / run/walk/sleep sub-menu
{ (SciGameId)0, -1, -1, -1, -1, -1, -1 }
};
diff --git a/engines/sci/graphics/frameout.cpp b/engines/sci/graphics/frameout.cpp
index 11948d5d38..5499a2d192 100644
--- a/engines/sci/graphics/frameout.cpp
+++ b/engines/sci/graphics/frameout.cpp
@@ -43,6 +43,7 @@
#include "sci/graphics/paint32.h"
#include "sci/graphics/palette.h"
#include "sci/graphics/picture.h"
+#include "sci/graphics/text32.h"
#include "sci/graphics/frameout.h"
#include "sci/video/robot_decoder.h"
@@ -316,44 +317,6 @@ void GfxFrameout::sortPlanes() {
Common::sort(_planes.begin(), _planes.end(), planeSortHelper);
}
-static int16 GetLongest(const char *text, int16 maxWidth, GfxFont *font) {
- uint16 curChar = 0;
- int16 maxChars = 0, curCharCount = 0;
- uint16 width = 0;
-
- while (width <= maxWidth) {
- curChar = (*(const byte *)text++);
-
- switch (curChar) {
- // We need to add 0xD, 0xA and 0xD 0xA to curCharCount and then exit
- // which means, we split text like
- // 'Mature, experienced software analyst available.' 0xD 0xA
- // 'Bug installation a proven speciality. "No version too clean."' (normal game text, this is from lsl2)
- // and 0xA '-------' 0xA (which is the official sierra subtitle separator)
- // Sierra did it the same way.
- case 0xD:
- // Check, if 0xA is following, if so include it as well
- if ((*(const unsigned char *)text) == 0xA)
- curCharCount++;
- // it's meant to pass through here
- case 0xA:
- curCharCount++;
- // and it's also meant to pass through here
- case 0:
- return curCharCount;
- case ' ':
- maxChars = curCharCount; // return count up to (but not including) breaking space
- break;
- }
- if (width + font->getCharWidth(curChar) > maxWidth)
- break;
- width += font->getCharWidth(curChar);
- curCharCount++;
- }
-
- return maxChars;
-}
-
void GfxFrameout::kernelFrameout() {
if (g_sci->_robotDecoder->isVideoLoaded()) {
bool skipVideo = false;
@@ -578,62 +541,25 @@ void GfxFrameout::kernelFrameout() {
}
} else {
// Most likely a text entry
- // This draws text the "SCI0-SCI11" way. In SCI2, text is prerendered in kCreateTextBitmap
- // TODO: rewrite this the "SCI2" way (i.e. implement the text buffer to draw inside kCreateTextBitmap)
if (lookupSelector(_segMan, itemEntry->object, SELECTOR(text), NULL, NULL) == kSelectorVariable) {
- reg_t stringObject = readSelector(_segMan, itemEntry->object, SELECTOR(text));
-
- // The object in the text selector of the item can be either a raw string
- // or a Str object. In the latter case, we need to access the object's data
- // selector to get the raw string.
- if (_segMan->isHeapObject(stringObject))
- stringObject = readSelector(_segMan, stringObject, SELECTOR(data));
-
- Common::String text = _segMan->getString(stringObject);
- GfxFont *font = _cache->getFont(readSelectorValue(_segMan, itemEntry->object, SELECTOR(font)));
- bool dimmed = readSelectorValue(_segMan, itemEntry->object, SELECTOR(dimmed));
- uint16 foreColor = readSelectorValue(_segMan, itemEntry->object, SELECTOR(fore));
-
- itemEntry->y = ((itemEntry->y * _screen->getHeight()) / scriptsRunningHeight);
- itemEntry->x = ((itemEntry->x * _screen->getWidth()) / scriptsRunningWidth);
-
- uint16 startX = itemEntry->x + it->planeRect.left;
- uint16 curY = itemEntry->y + it->planeRect.top;
- const char *txt = text.c_str();
+ TextEntry *textEntry = g_sci->_gfxText32->getTextEntry(itemEntry->object);
+ uint16 startX = ((textEntry->x * _screen->getWidth()) / scriptsRunningWidth) + it->planeRect.left;
+ uint16 startY = ((textEntry->y * _screen->getHeight()) / scriptsRunningHeight) + it->planeRect.top;
// HACK. The plane sometimes doesn't contain the correct width. This
// hack breaks the dialog options when speaking with Grace, but it's
// the best we got up to now. This happens because of the unimplemented
// kTextWidth function in SCI32.
// TODO: Remove this once kTextWidth has been implemented.
uint16 w = it->planeRect.width() >= 20 ? it->planeRect.width() : _screen->getWidth() - 10;
- int16 charCount;
// Upscale the coordinates/width if the fonts are already upscaled
if (_screen->fontIsUpscaled()) {
startX = startX * _screen->getDisplayWidth() / _screen->getWidth();
- curY = curY * _screen->getDisplayHeight() / _screen->getHeight();
+ startY = startY * _screen->getDisplayHeight() / _screen->getHeight();
w = w * _screen->getDisplayWidth() / _screen->getWidth();
}
- while (*txt) {
- charCount = GetLongest(txt, w, font);
- if (charCount == 0)
- break;
-
- uint16 curX = startX;
-
- for (int i = 0; i < charCount; i++) {
- unsigned char curChar = txt[i];
- font->draw(curChar, curY, curX, foreColor, dimmed);
- curX += font->getCharWidth(curChar);
- }
-
- curY += font->getHeight();
- txt += charCount;
- while (*txt == ' ')
- txt++; // skip over breaking spaces
- }
-
+ g_sci->_gfxText32->drawTextBitmap(itemEntry->object, startX, startY, w);
}
}
}
diff --git a/engines/sci/graphics/text32.cpp b/engines/sci/graphics/text32.cpp
new file mode 100644
index 0000000000..21372f1502
--- /dev/null
+++ b/engines/sci/graphics/text32.cpp
@@ -0,0 +1,238 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL: https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/trunk/engines/sci/graphics/text16.cpp $
+ * $Id: text16.cpp 55178 2011-01-08 23:16:44Z thebluegr $
+ *
+ */
+
+#include "common/util.h"
+#include "common/stack.h"
+#include "graphics/primitives.h"
+
+#include "sci/sci.h"
+#include "sci/engine/kernel.h"
+#include "sci/engine/selector.h"
+#include "sci/engine/state.h"
+#include "sci/graphics/cache.h"
+#include "sci/graphics/font.h"
+#include "sci/graphics/screen.h"
+#include "sci/graphics/text32.h"
+
+namespace Sci {
+
+GfxText32::GfxText32(SegManager *segMan, GfxCache *fonts, GfxScreen *screen)
+ : _segMan(segMan), _cache(fonts), _screen(screen) {
+}
+
+GfxText32::~GfxText32() {
+ purgeCache();
+}
+
+void GfxText32::purgeCache() {
+ for (TextCache::iterator cacheIterator = _textCache.begin(); cacheIterator != _textCache.end(); cacheIterator++) {
+ delete[] cacheIterator->_value->surface;
+ delete cacheIterator->_value;
+ cacheIterator->_value = 0;
+ }
+
+ _textCache.clear();
+}
+
+void GfxText32::createTextBitmap(reg_t textObject) {
+ if (_textCache.size() >= MAX_CACHED_TEXTS)
+ purgeCache();
+
+ uint32 textId = (textObject.segment << 16) | textObject.offset;
+
+ if (_textCache.contains(textId)) {
+ // Delete the old entry
+ TextEntry *oldEntry = _textCache[textId];
+ delete[] oldEntry->surface;
+ delete oldEntry;
+ _textCache.erase(textId);
+ }
+
+ _textCache[textId] = createTextEntry(textObject);
+}
+
+// TODO: Finish this!
+void GfxText32::drawTextBitmap(reg_t textObject, uint16 textX, uint16 textY, uint16 w) {
+ uint32 textId = (textObject.segment << 16) | textObject.offset;
+
+ if (!_textCache.contains(textId))
+ createTextBitmap(textObject);
+
+ TextEntry *entry = _textCache[textId];
+
+ // This draws text the "SCI0-SCI11" way. In SCI2, text is prerendered in kCreateTextBitmap
+ // TODO: rewrite this the "SCI2" way (i.e. implement the text buffer to draw inside kCreateTextBitmap)
+ GfxFont *font = _cache->getFont(readSelectorValue(_segMan, textObject, SELECTOR(font)));
+ bool dimmed = readSelectorValue(_segMan,textObject, SELECTOR(dimmed));
+ uint16 foreColor = readSelectorValue(_segMan, textObject, SELECTOR(fore));
+
+ const char *txt = entry->text.c_str();
+ int16 charCount;
+
+ while (*txt) {
+ charCount = GetLongest(txt, w, font);
+ if (charCount == 0)
+ break;
+
+ uint16 curX = textX;
+
+ for (int i = 0; i < charCount; i++) {
+ unsigned char curChar = txt[i];
+ font->draw(curChar, textY, curX, foreColor, dimmed);
+ curX += font->getCharWidth(curChar);
+ }
+
+ textY += font->getHeight();
+ txt += charCount;
+ while (*txt == ' ')
+ txt++; // skip over breaking spaces
+ }
+
+ // TODO: The "SCI2" way of font drawing. Currently buggy
+ /*
+ for (int x = textX; x < entry->width; x++) {
+ for (int y = textY; y < entry->height; y++) {
+ byte pixel = entry->surface[y * entry->width + x];
+ if (pixel)
+ _screen->putPixel(x, y, 1, pixel, 0, 0);
+ }
+ }
+ */
+}
+
+TextEntry *GfxText32::getTextEntry(reg_t textObject) {
+ uint32 textId = (textObject.segment << 16) | textObject.offset;
+
+ if (!_textCache.contains(textId))
+ createTextBitmap(textObject);
+
+ return _textCache[textId];
+}
+
+// TODO: Finish this! Currently buggy.
+TextEntry *GfxText32::createTextEntry(reg_t textObject) {
+ reg_t stringObject = readSelector(_segMan, textObject, SELECTOR(text));
+
+ // The object in the text selector of the item can be either a raw string
+ // or a Str object. In the latter case, we need to access the object's data
+ // selector to get the raw string.
+ if (_segMan->isHeapObject(stringObject))
+ stringObject = readSelector(_segMan, stringObject, SELECTOR(data));
+
+ const char *text = _segMan->getString(stringObject).c_str();
+ GfxFont *font = _cache->getFont(readSelectorValue(_segMan, textObject, SELECTOR(font)));
+ bool dimmed = readSelectorValue(_segMan, textObject, SELECTOR(dimmed));
+ uint16 foreColor = readSelectorValue(_segMan, textObject, SELECTOR(fore));
+ uint16 x = readSelectorValue(_segMan, textObject, SELECTOR(x));
+ uint16 y = readSelectorValue(_segMan, textObject, SELECTOR(y));
+
+ // Now get the bounding box from the associated plane
+ reg_t planeObject = readSelector(_segMan, textObject, SELECTOR(plane));
+ Common::Rect planeRect;
+ if (!planeObject.isNull()) {
+ planeRect.top = readSelectorValue(_segMan, planeObject, SELECTOR(top));
+ planeRect.left = readSelectorValue(_segMan, planeObject, SELECTOR(left));
+ planeRect.bottom = readSelectorValue(_segMan, planeObject, SELECTOR(bottom)) + 1;
+ planeRect.right = readSelectorValue(_segMan, planeObject, SELECTOR(right)) + 1;
+ } else {
+ planeRect.top = 0;
+ planeRect.left = 0;
+ planeRect.bottom = _screen->getHeight();
+ planeRect.right = _screen->getWidth();
+ }
+
+ TextEntry *newEntry = new TextEntry();
+ newEntry->object = stringObject;
+ newEntry->x = x;
+ newEntry->y = y;
+ newEntry->width = planeRect.width();
+ newEntry->height = planeRect.height();
+ newEntry->surface = new byte[newEntry->width * newEntry->height];
+ memset(newEntry->surface, 0, newEntry->width * newEntry->height);
+ newEntry->text = _segMan->getString(stringObject);
+
+ int16 maxTextWidth, charCount;
+ uint16 curX = 0, curY = 0;
+
+ maxTextWidth = 0;
+ while (*text) {
+ charCount = GetLongest(text, planeRect.width(), font);
+ if (charCount == 0)
+ break;
+
+ for (int i = 0; i < charCount; i++) {
+ unsigned char curChar = text[i];
+ font->drawToBuffer(curChar, curY, curX, foreColor, dimmed, newEntry->surface, newEntry->width, newEntry->height);
+ curX += font->getCharWidth(curChar);
+ }
+
+ curY += font->getHeight();
+ text += charCount;
+ while (*text == ' ')
+ text++; // skip over breaking spaces
+ }
+
+ return newEntry;
+}
+
+int16 GfxText32::GetLongest(const char *text, int16 maxWidth, GfxFont *font) {
+ uint16 curChar = 0;
+ int16 maxChars = 0, curCharCount = 0;
+ uint16 width = 0;
+
+ while (width <= maxWidth) {
+ curChar = (*(const byte *)text++);
+
+ switch (curChar) {
+ // We need to add 0xD, 0xA and 0xD 0xA to curCharCount and then exit
+ // which means, we split text like
+ // 'Mature, experienced software analyst available.' 0xD 0xA
+ // 'Bug installation a proven speciality. "No version too clean."' (normal game text, this is from lsl2)
+ // and 0xA '-------' 0xA (which is the official sierra subtitle separator)
+ // Sierra did it the same way.
+ case 0xD:
+ // Check, if 0xA is following, if so include it as well
+ if ((*(const unsigned char *)text) == 0xA)
+ curCharCount++;
+ // it's meant to pass through here
+ case 0xA:
+ curCharCount++;
+ // and it's also meant to pass through here
+ case 0:
+ return curCharCount;
+ case ' ':
+ maxChars = curCharCount; // return count up to (but not including) breaking space
+ break;
+ }
+ if (width + font->getCharWidth(curChar) > maxWidth)
+ break;
+ width += font->getCharWidth(curChar);
+ curCharCount++;
+ }
+
+ return maxChars;
+}
+
+} // End of namespace Sci
diff --git a/engines/sci/graphics/text32.h b/engines/sci/graphics/text32.h
new file mode 100644
index 0000000000..39fe710a86
--- /dev/null
+++ b/engines/sci/graphics/text32.h
@@ -0,0 +1,71 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL: https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/trunk/engines/sci/graphics/text16.h $
+ * $Id: text16.h 55178 2011-01-08 23:16:44Z thebluegr $
+ *
+ */
+
+#ifndef SCI_GRAPHICS_TEXT32_H
+#define SCI_GRAPHICS_TEXT32_H
+
+#include "common/hashmap.h"
+
+namespace Sci {
+
+struct TextEntry {
+ reg_t object;
+ uint16 x;
+ uint16 y;
+ uint16 width;
+ uint16 height;
+ byte *surface;
+ Common::String text;
+};
+
+// TODO: Move to Cache, perhaps?
+#define MAX_CACHED_TEXTS 20
+typedef Common::HashMap<uint32, TextEntry *> TextCache;
+
+/**
+ * Text32 class, handles text calculation and displaying of text for SCI2, SCI21 and SCI3 games
+ */
+class GfxText32 {
+public:
+ GfxText32(SegManager *segMan, GfxCache *fonts, GfxScreen *screen);
+ ~GfxText32();
+ void createTextBitmap(reg_t textObject);
+ void drawTextBitmap(reg_t textObject, uint16 textX, uint16 textY, uint16 w);
+ int16 GetLongest(const char *text, int16 maxWidth, GfxFont *font);
+ TextEntry *getTextEntry(reg_t textObject);
+
+private:
+ TextEntry *createTextEntry(reg_t textObject);
+ void purgeCache();
+
+ SegManager *_segMan;
+ GfxCache *_cache;
+ TextCache _textCache;
+ GfxScreen *_screen;
+};
+
+} // End of namespace Sci
+
+#endif
diff --git a/engines/sci/module.mk b/engines/sci/module.mk
index 2202002e2e..c129ae5439 100644
--- a/engines/sci/module.mk
+++ b/engines/sci/module.mk
@@ -80,6 +80,7 @@ ifdef ENABLE_SCI32
MODULE_OBJS += \
graphics/frameout.o \
graphics/paint32.o \
+ graphics/text32.o \
video/robot_decoder.o
endif
diff --git a/engines/sci/resource.cpp b/engines/sci/resource.cpp
index f18b6c91f5..bdd7d6692b 100644
--- a/engines/sci/resource.cpp
+++ b/engines/sci/resource.cpp
@@ -93,7 +93,7 @@ const char *getSciVersionDesc(SciVersion version) {
//#define SCI_VERBOSE_RESMAN 1
-static const char *sci_error_types[] = {
+static const char *const sci_error_types[] = {
"No error",
"I/O error",
"Resource is empty (size 0)",
@@ -107,7 +107,7 @@ static const char *sci_error_types[] = {
"SCI version is unsupported"
};
-static const char *s_resourceTypeNames[] = {
+static const char *const s_resourceTypeNames[] = {
"view", "pic", "script", "text", "sound",
"memory", "vocab", "font", "cursor",
"patch", "bitmap", "palette", "cdaudio",
@@ -120,7 +120,7 @@ static const char *s_resourceTypeNames[] = {
// Resource type suffixes. Note that the
// suffic of SCI3 scripts has been changed from
// scr to csc
-static const char *s_resourceTypeSuffixes[] = {
+static const char *const s_resourceTypeSuffixes[] = {
"v56", "p56", "scr", "tex", "snd",
"", "voc", "fon", "cur", "pat",
"bit", "pal", "cda", "aud", "syn",
@@ -1158,8 +1158,10 @@ ResVersion ResourceManager::detectMapVersion() {
}
}
- if (!fileStream)
- error("Failed to open resource map file");
+ if (!fileStream) {
+ warning("Failed to open resource map file");
+ return kResVersionUnknown;
+ }
// detection
// SCI0 and SCI01 maps have last 6 bytes set to FF
@@ -1259,7 +1261,7 @@ ResVersion ResourceManager::detectVolVersion() {
}
if (!fileStream) {
- error("Failed to open volume file - if you got resource.p01/resource.p02/etc. files, merge them together into resource.000");
+ warning("Failed to open volume file - if you got resource.p01/resource.p02/etc. files, merge them together into resource.000");
// resource.p01/resource.p02/etc. may be there when directly copying the files from the original floppies
// the sierra installer would merge those together (perhaps we could do this as well?)
// possible TODO
@@ -1721,15 +1723,19 @@ int ResourceManager::readResourceMapSCI1(ResourceSource *map) {
if (!resource) {
addResource(resId, source, fileOffset);
} else {
- // if resource is already present, change it to new content
- // this is needed at least for pharkas/german. This version
- // contains several duplicate resources INSIDE the resource
- // data files like fonts, views, scripts, etc. And if we use
- // the first entries, half of the game will be english and
- // umlauts will also be missing :P
- resource->_source = source;
- resource->_fileOffset = fileOffset;
- resource->size = 0;
+ // If the resource is already present in a volume, change it to
+ // the new content (but only in a volume, so as not to overwrite
+ // external patches - refer to bug #3366295).
+ // This is needed at least for the German version of Pharkas.
+ // That version contains several duplicate resources INSIDE the
+ // resource data files like fonts, views, scripts, etc. Thus,
+ // if we use the first entries in the resource file, half of the
+ // game will be English and umlauts will also be missing :P
+ if (resource->_source->getSourceType() == kSourceVolume) {
+ resource->_source = source;
+ resource->_fileOffset = fileOffset;
+ resource->size = 0;
+ }
}
}
}
diff --git a/engines/sci/sci.cpp b/engines/sci/sci.cpp
index 792b2b2055..6c1b6e4dd6 100644
--- a/engines/sci/sci.cpp
+++ b/engines/sci/sci.cpp
@@ -61,6 +61,7 @@
#include "sci/graphics/transitions.h"
#ifdef ENABLE_SCI32
+#include "sci/graphics/text32.h"
#include "sci/graphics/frameout.h"
#include "sci/video/robot_decoder.h"
#endif
@@ -146,6 +147,7 @@ SciEngine::~SciEngine() {
DebugMan.clearAllDebugChannels();
#ifdef ENABLE_SCI32
+ delete _gfxText32;
delete _robotDecoder;
delete _gfxFrameout;
#endif
@@ -598,6 +600,7 @@ void SciEngine::initGraphics() {
_gfxText16 = 0;
_gfxTransitions = 0;
#ifdef ENABLE_SCI32
+ _gfxText32 = 0;
_robotDecoder = 0;
_gfxFrameout = 0;
_gfxPaint32 = 0;
@@ -627,6 +630,7 @@ void SciEngine::initGraphics() {
_gfxCompare = new GfxCompare(_gamestate->_segMan, _kernel, _gfxCache, _gfxScreen, _gfxCoordAdjuster);
_gfxPaint32 = new GfxPaint32(_resMan, _gamestate->_segMan, _kernel, _gfxCoordAdjuster, _gfxCache, _gfxScreen, _gfxPalette);
_gfxPaint = _gfxPaint32;
+ _gfxText32 = new GfxText32(_gamestate->_segMan, _gfxCache, _gfxScreen);
_robotDecoder = new RobotDecoder(g_system->getMixer(), getPlatform() == Common::kPlatformMacintosh);
_gfxFrameout = new GfxFrameout(_gamestate->_segMan, _resMan, _gfxCoordAdjuster, _gfxCache, _gfxScreen, _gfxPalette, _gfxPaint32);
} else {
diff --git a/engines/sci/sci.h b/engines/sci/sci.h
index b419d862a4..81bbdc51de 100644
--- a/engines/sci/sci.h
+++ b/engines/sci/sci.h
@@ -71,6 +71,7 @@ class GfxPalette;
class GfxPorts;
class GfxScreen;
class GfxText16;
+class GfxText32;
class GfxTransitions;
#ifdef ENABLE_SCI32
@@ -313,6 +314,7 @@ public:
GfxPorts *_gfxPorts; // Port managment for 16-bit gfx
GfxScreen *_gfxScreen;
GfxText16 *_gfxText16;
+ GfxText32 *_gfxText32;
GfxTransitions *_gfxTransitions; // transitions between screens for 16-bit gfx
GfxMacIconBar *_gfxMacIconBar; // Mac Icon Bar manager
diff --git a/engines/sci/sound/drivers/gm_names.h b/engines/sci/sound/drivers/gm_names.h
index bfe5ff88c7..fbfa413a4a 100644
--- a/engines/sci/sound/drivers/gm_names.h
+++ b/engines/sci/sound/drivers/gm_names.h
@@ -30,7 +30,7 @@ namespace Sci {
// is defined
#ifndef REDUCE_MEMORY_USAGE
-static const char *GmInstrumentNames[] = {
+static const char *const GmInstrumentNames[] = {
/*000*/ "Acoustic Grand Piano",
/*001*/ "Bright Acoustic Piano",
/*002*/ "Electric Grand Piano",
@@ -162,7 +162,7 @@ static const char *GmInstrumentNames[] = {
};
// The GM Percussion map is downwards compatible to the MT32 map, which is used in SCI
-static const char *GmPercussionNames[] = {
+static const char *const GmPercussionNames[] = {
/*00*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*10*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*20*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
diff --git a/engines/sci/sound/midiparser_sci.cpp b/engines/sci/sound/midiparser_sci.cpp
index 95b165468d..ad7ba7ca36 100644
--- a/engines/sci/sound/midiparser_sci.cpp
+++ b/engines/sci/sound/midiparser_sci.cpp
@@ -480,11 +480,18 @@ void MidiParser_SCI::parseNextEvent(EventInfo &info) {
info.basic.param2 = 0;
if (info.channel() == 0xF) {// SCI special case
if (info.basic.param1 != kSetSignalLoop) {
- // at least in kq5/french&mac the first scene in the intro has a song that sets signal to 4 immediately
- // on tick 0. Signal isn't set at that point by sierra sci and it would cause the castle daventry text to
- // get immediately removed, so we currently filter it.
- // Sierra SCI ignores them as well at that time
- if ((_position._play_tick) || (info.delta)) {
+ // At least in kq5/french&mac the first scene in the intro has
+ // a song that sets signal to 4 immediately on tick 0. Signal
+ // isn't set at that point by sierra sci and it would cause the
+ // castle daventry text to get immediately removed, so we
+ // currently filter it. Sierra SCI ignores them as well at that
+ // time. However, this filtering should only be performed for
+ // SCI1 and newer games. Signalling is done differently in SCI0
+ // though, so ignoring these signals in SCI0 games will result
+ // in glitches (e.g. the intro of LB1 Amiga gets stuck - bug
+ // #3297883). Refer to MusicEntry::setSignal() in sound/music.cpp.
+ if (_soundVersion <= SCI_VERSION_0_LATE ||
+ _position._play_tick || info.delta) {
_signalSet = true;
_signalToSet = info.basic.param1;
}
@@ -626,7 +633,11 @@ void MidiParser_SCI::parseNextEvent(EventInfo &info) {
if (info.ext.type == 0x2F) {// end of track reached
if (_pSnd->loop)
_pSnd->loop--;
- if (_pSnd->loop) {
+ // QFG3 abuses the hold flag. Its scripts call kDoSoundSetHold,
+ // but sometimes there's no hold marker in the associated songs
+ // (e.g. song 110, during the intro). The original interpreter
+ // treats this case as an infinite loop (bug #3311911).
+ if (_pSnd->loop || _pSnd->hold > 0) {
// We need to play it again...
jumpToTick(_loopTick);
} else {
diff --git a/engines/sci/sound/soundcmd.cpp b/engines/sci/sound/soundcmd.cpp
index 4ea290ff9e..d4cff7614c 100644
--- a/engines/sci/sound/soundcmd.cpp
+++ b/engines/sci/sound/soundcmd.cpp
@@ -49,11 +49,22 @@ reg_t SoundCommandParser::kDoSoundInit(int argc, reg_t *argv, reg_t acc) {
return acc;
}
-void SoundCommandParser::processInitSound(reg_t obj) {
- int resourceId = readSelectorValue(_segMan, obj, SELECTOR(number));
+int SoundCommandParser::getSoundResourceId(reg_t obj) {
+ int resourceId = obj.segment ? readSelectorValue(_segMan, obj, SELECTOR(number)) : -1;
// Modify the resourceId for the Windows versions that have an alternate MIDI soundtrack, like SSCI did.
- if (g_sci && g_sci->_features->useAltWinGMSound())
- resourceId += 1000;
+ if (g_sci && g_sci->_features->useAltWinGMSound()) {
+ // Check if the alternate MIDI song actually exists...
+ // There are cases where it just doesn't exist (e.g. SQ4, room 530 -
+ // bug #3392767). In these cases, use the DOS tracks instead.
+ if (resourceId && _resMan->testResource(ResourceId(kResourceTypeSound, resourceId + 1000)))
+ resourceId += 1000;
+ }
+
+ return resourceId;
+}
+
+void SoundCommandParser::processInitSound(reg_t obj) {
+ int resourceId = getSoundResourceId(obj);
// Check if a track with the same sound object is already playing
MusicEntry *oldSound = _music->getSlot(obj);
@@ -123,10 +134,7 @@ void SoundCommandParser::processPlaySound(reg_t obj) {
return;
}
- int resourceId = obj.segment ? readSelectorValue(_segMan, obj, SELECTOR(number)) : -1;
- // Modify the resourceId for the Windows versions that have an alternate MIDI soundtrack, like SSCI did.
- if (g_sci && g_sci->_features->useAltWinGMSound())
- resourceId += 1000;
+ int resourceId = getSoundResourceId(obj);
if (musicSlot->resourceId != resourceId) { // another sound loaded into struct
processDisposeSound(obj);
@@ -618,13 +626,10 @@ reg_t SoundCommandParser::kDoSoundSetPriority(int argc, reg_t *argv, reg_t acc)
}
if (value == -1) {
- uint16 resourceNr = musicSlot->resourceId;
- // Modify the resourceId for the Windows versions that have an alternate MIDI soundtrack, like SSCI did.
- if (g_sci && g_sci->_features->useAltWinGMSound())
- resourceNr += 1000;
+ uint16 resourceId = musicSlot->resourceId;
// Set priority from the song data
- Resource *song = _resMan->findResource(ResourceId(kResourceTypeSound, resourceNr), 0);
+ Resource *song = _resMan->findResource(ResourceId(kResourceTypeSound, resourceId), 0);
if (song->data[0] == 0xf0)
_music->soundSetPriority(musicSlot, song->data[1]);
else
diff --git a/engines/sci/sound/soundcmd.h b/engines/sci/sound/soundcmd.h
index a542a8b384..7f6e2a0fe8 100644
--- a/engines/sci/sound/soundcmd.h
+++ b/engines/sci/sound/soundcmd.h
@@ -113,6 +113,7 @@ private:
void processInitSound(reg_t obj);
void processDisposeSound(reg_t obj);
void processUpdateCues(reg_t obj);
+ int getSoundResourceId(reg_t obj);
};
} // End of namespace Sci
diff --git a/engines/scumm/actor.cpp b/engines/scumm/actor.cpp
index 20b929dfd4..eb23c30ebe 100644
--- a/engines/scumm/actor.cpp
+++ b/engines/scumm/actor.cpp
@@ -2287,7 +2287,7 @@ void Actor::setActorCostume(int c) {
}
}
-static const char* v0ActorNames_English[25] = {
+static const char *const v0ActorNames_English[25] = {
"Syd",
"Razor",
"Dave",
@@ -2313,7 +2313,7 @@ static const char* v0ActorNames_English[25] = {
"Sandy"
};
-static const char* v0ActorNames_German[25] = {
+static const char *const v0ActorNames_German[25] = {
"Syd",
"Razor",
"Dave",
diff --git a/engines/scumm/charset.cpp b/engines/scumm/charset.cpp
index 8558da397e..f7b98e2451 100644
--- a/engines/scumm/charset.cpp
+++ b/engines/scumm/charset.cpp
@@ -767,6 +767,13 @@ void CharsetRendererClassic::printChar(int chr, bool ignoreCharsetMask) {
_textScreenID = vs->number;
}
+ // We need to know the virtual screen we draw on for Indy 4 Amiga, since
+ // it selects the palette map according to this. We furthermore can not
+ // use _textScreenID here, since that will cause inventory graphics
+ // glitches.
+ if (_vm->_game.platform == Common::kPlatformAmiga && _vm->_game.id == GID_INDY4)
+ _drawScreen = vs->number;
+
printCharIntern(is2byte, _charPtr, _origWidth, _origHeight, _width, _height, vs, ignoreCharsetMask);
_left += _origWidth;
@@ -917,12 +924,27 @@ void CharsetRendererClassic::drawBitsN(const Graphics::Surface &s, byte *dst, co
numbits = 8;
byte *cmap = _vm->_charsetColorMap;
+ // Indy4 Amiga always uses the room or verb palette map to match colors to
+ // the currently setup palette, thus we need to select it over here too.
+ // Done like the original interpreter.
+ byte *amigaMap = 0;
+ if (_vm->_game.platform == Common::kPlatformAmiga && _vm->_game.id == GID_INDY4) {
+ if (_drawScreen == kVerbVirtScreen)
+ amigaMap = _vm->_verbPalette;
+ else
+ amigaMap = _vm->_roomPalette;
+ }
+
for (y = 0; y < height && y + drawTop < s.h; y++) {
for (x = 0; x < width; x++) {
color = (bits >> (8 - bpp)) & 0xFF;
- if (color && y + drawTop >= 0)
- *dst = cmap[color];
+ if (color && y + drawTop >= 0) {
+ if (amigaMap)
+ *dst = amigaMap[cmap[color]];
+ else
+ *dst = cmap[color];
+ }
dst++;
bits <<= bpp;
numbits -= bpp;
diff --git a/engines/scumm/charset.h b/engines/scumm/charset.h
index b23ec996f5..fabb82b389 100644
--- a/engines/scumm/charset.h
+++ b/engines/scumm/charset.h
@@ -119,6 +119,9 @@ protected:
int _offsX, _offsY;
const byte *_charPtr;
+ // On which virtual screen will be drawn right now
+ VirtScreenNumber _drawScreen;
+
public:
CharsetRendererClassic(ScummEngine *vm) : CharsetRendererCommon(vm) {}
diff --git a/engines/scumm/costume.cpp b/engines/scumm/costume.cpp
index 4ca4988605..eb3cc3262c 100644
--- a/engines/scumm/costume.cpp
+++ b/engines/scumm/costume.cpp
@@ -545,6 +545,13 @@ void ClassicCostumeRenderer::proc3_ami(Codec1 &v1) {
oldXpos = v1.x;
oldScaleIndexX = _scaleIndexX;
+ // Indy4 Amiga always uses the room map to match colors to the currently
+ // setup palette in the actor code in the original, thus we need to do this
+ // mapping over here too.
+ byte *amigaMap = 0;
+ if (_vm->_game.platform == Common::kPlatformAmiga && _vm->_game.id == GID_INDY4)
+ amigaMap = _vm->_roomPalette;
+
do {
len = *src++;
color = len >> v1.shr;
@@ -556,7 +563,10 @@ void ClassicCostumeRenderer::proc3_ami(Codec1 &v1) {
masked = (y < 0 || y >= _out.h) || (v1.x < 0 || v1.x >= _out.w) || (v1.mask_ptr && (mask[0] & maskbit));
if (color && !masked) {
- *dst = _palette[color];
+ if (amigaMap)
+ *dst = amigaMap[_palette[color]];
+ else
+ *dst = _palette[color];
}
if (_scaleX == 255 || v1.scaletable[_scaleIndexX] < _scaleX) {
diff --git a/engines/scumm/cursor.cpp b/engines/scumm/cursor.cpp
index 6739282c9d..36f06a4889 100644
--- a/engines/scumm/cursor.cpp
+++ b/engines/scumm/cursor.cpp
@@ -609,7 +609,16 @@ void ScummEngine_v5::setBuiltinCursor(int idx) {
for (i = 0; i < 1024; i++)
WRITE_UINT16(_grabbedCursor + i * 2, 0xFF);
} else {
- color = default_cursor_colors[idx];
+ // Indy4 Amiga uses its own color set for the cursor image.
+ // This is patchwork code to make the cursor flash in correct colors.
+ if (_game.platform == Common::kPlatformAmiga && _game.id == GID_INDY4) {
+ static const uint8 indy4AmigaColors[4] = {
+ 252, 252, 253, 254
+ };
+ color = indy4AmigaColors[idx];
+ } else {
+ color = default_cursor_colors[idx];
+ }
memset(_grabbedCursor, 0xFF, sizeof(_grabbedCursor));
}
diff --git a/engines/scumm/detection.cpp b/engines/scumm/detection.cpp
index 037c12bdbf..3ed9218776 100644
--- a/engines/scumm/detection.cpp
+++ b/engines/scumm/detection.cpp
@@ -436,7 +436,7 @@ static void computeGameSettingsFromMD5(const Common::FSList &fslist, const GameF
}
}
-static void composeFileHashMap(DescMap &fileMD5Map, const Common::FSList &fslist, int depth, const char **globs) {
+static void composeFileHashMap(DescMap &fileMD5Map, const Common::FSList &fslist, int depth, const char *const *globs) {
if (depth <= 0)
return;
@@ -454,7 +454,7 @@ static void composeFileHashMap(DescMap &fileMD5Map, const Common::FSList &fslist
continue;
bool matched = false;
- for (const char **glob = globs; *glob; glob++)
+ for (const char *const *glob = globs; *glob; glob++)
if (file->getName().matchString(*glob, true)) {
matched = true;
break;
diff --git a/engines/scumm/detection_tables.h b/engines/scumm/detection_tables.h
index 78645ea8d5..7463fa7dcc 100644
--- a/engines/scumm/detection_tables.h
+++ b/engines/scumm/detection_tables.h
@@ -49,7 +49,7 @@ namespace Scumm {
* This table contains list of directories which could contain game data
* and which should be looked into during detection.
*/
-static const char *directoryGlobs[] = {
+static const char *const directoryGlobs[] = {
"rooms *", // Mac version of indy3/loom
0
};
diff --git a/engines/scumm/dialogs.cpp b/engines/scumm/dialogs.cpp
index 74a92f2204..20aedae089 100644
--- a/engines/scumm/dialogs.cpp
+++ b/engines/scumm/dialogs.cpp
@@ -593,7 +593,7 @@ void SubtitleSettingsDialog::open() {
}
void SubtitleSettingsDialog::cycleValue() {
- static const char* subtitleDesc[] = {
+ static const char *const subtitleDesc[] = {
_s("Speech Only"),
_s("Speech and Subtitles"),
_s("Subtitles Only")
diff --git a/engines/scumm/gfx.cpp b/engines/scumm/gfx.cpp
index 8a32b963cd..a22aa1802f 100644
--- a/engines/scumm/gfx.cpp
+++ b/engines/scumm/gfx.cpp
@@ -1025,6 +1025,16 @@ void ScummEngine::restoreBackground(Common::Rect rect, byte backColor) {
if (rect.left > vs->w)
return;
+ // Indy4 Amiga always uses the room or verb palette map to match colors to
+ // the currently setup palette, thus we need to select it over here too.
+ // Done like the original interpreter.
+ if (_game.platform == Common::kPlatformAmiga && _game.id == GID_INDY4) {
+ if (vs->number == kVerbVirtScreen)
+ backColor = _verbPalette[backColor];
+ else
+ backColor = _roomPalette[backColor];
+ }
+
// Convert 'rect' to local (virtual screen) coordinates
rect.top -= vs->topline;
rect.bottom -= vs->topline;
@@ -1235,6 +1245,16 @@ void ScummEngine::drawBox(int x, int y, int x2, int y2, int color) {
if ((vs = findVirtScreen(y)) == NULL)
return;
+ // Indy4 Amiga always uses the room or verb palette map to match colors to
+ // the currently setup palette, thus we need to select it over here too.
+ // Done like the original interpreter.
+ if (_game.platform == Common::kPlatformAmiga && _game.id == GID_INDY4) {
+ if (vs->number == kVerbVirtScreen)
+ color = _verbPalette[color];
+ else
+ color = _roomPalette[color];
+ }
+
if (x > x2)
SWAP(x, x2);
@@ -1872,6 +1892,16 @@ bool Gdi::drawStrip(byte *dstPtr, VirtScreen *vs, int x, int y, const int width,
}
assertRange(0, offset, smapLen-1, "screen strip");
+ // Indy4 Amiga always uses the room or verb palette map to match colors to
+ // the currently setup palette, thus we need to select it over here too.
+ // Done like the original interpreter.
+ if (_vm->_game.platform == Common::kPlatformAmiga && _vm->_game.id == GID_INDY4) {
+ if (vs->number == kVerbVirtScreen)
+ _roomPalette = _vm->_verbPalette;
+ else
+ _roomPalette = _vm->_roomPalette;
+ }
+
return decompressBitmap(dstPtr, vs->pitch, smap_ptr + offset, height);
}
diff --git a/engines/scumm/he/intern_he.h b/engines/scumm/he/intern_he.h
index f4df6571fa..cdc5faa084 100644
--- a/engines/scumm/he/intern_he.h
+++ b/engines/scumm/he/intern_he.h
@@ -458,6 +458,7 @@ protected:
virtual void saveOrLoad(Serializer *s);
virtual void readMAXS(int blockSize);
+ void setResourceOffHeap(int typeId, int resId, int val);
virtual void processActors();
diff --git a/engines/scumm/he/logic/basketball.cpp b/engines/scumm/he/logic/basketball.cpp
index 8352aa4357..a4da8e05dc 100644
--- a/engines/scumm/he/logic/basketball.cpp
+++ b/engines/scumm/he/logic/basketball.cpp
@@ -157,7 +157,7 @@ int LogicHEbasketball::op_1012() {
int LogicHEbasketball::op_1050(int32 *args) {
// This function loads the court data
- static const char *courtNames[] = {
+ static const char *const courtNames[] = {
"Dobbaguchi", "Jocindas", "SandyFlats", "Queens",
"Park", "Scheffler", "Polk", "McMillan",
"CrownHill", "Memorial", "TechState", "Garden",
diff --git a/engines/scumm/he/resource_he.cpp b/engines/scumm/he/resource_he.cpp
index 39240e347f..42748d08ed 100644
--- a/engines/scumm/he/resource_he.cpp
+++ b/engines/scumm/he/resource_he.cpp
@@ -386,6 +386,40 @@ int ScummEngine_v72he::getSoundResourceSize(ResId id) {
return size;
}
+void ScummEngine_v90he::setResourceOffHeap(int typeId, int resId, int val) {
+ debug(0, "setResourceOffHeap: type %d resId %d toggle %d", typeId, resId, val);
+ ResType type;
+
+ switch (typeId) {
+ case 1:
+ type = rtRoom;
+ break;
+ case 2:
+ type = rtScript;
+ break;
+ case 3:
+ type = rtCostume;
+ break;
+ case 4:
+ type = rtSound;
+ break;
+ case 6:
+ type = rtCharset;
+ break;
+ case 19:
+ type = rtImage;
+ break;
+ default:
+ error("setResourceOffHeap: default case %d", typeId);
+ }
+
+ if (val == 1) {
+ _res->setOffHeap(type, resId);
+ } else {
+ _res->setOnHeap(type, resId);
+ }
+}
+
#endif
} // End of namespace Scumm
diff --git a/engines/scumm/he/script_v90he.cpp b/engines/scumm/he/script_v90he.cpp
index 66a0a34d16..877f8b239d 100644
--- a/engines/scumm/he/script_v90he.cpp
+++ b/engines/scumm/he/script_v90he.cpp
@@ -2358,7 +2358,7 @@ void ScummEngine_v90he::o90_kernelSetFunctions() {
_wiz->_rectOverrideEnabled = false;
break;
case 714:
- debug(5, "o90_kernelSetFunctions: case 714: type %d resId %d unk1 %d", args[1], args[2], args[3]);
+ setResourceOffHeap(args[1], args[2], args[3]);
break;
case 1492:
// Remote start script function
diff --git a/engines/scumm/palette.cpp b/engines/scumm/palette.cpp
index 30096000ce..2c10758730 100644
--- a/engines/scumm/palette.cpp
+++ b/engines/scumm/palette.cpp
@@ -372,6 +372,143 @@ void ScummEngine::setPaletteFromPtr(const byte *ptr, int numcolor) {
setDirtyColors(firstIndex, numcolor - 1);
}
+void ScummEngine::setAmigaPaletteFromPtr(const byte *ptr) {
+ memcpy(_currentPalette, ptr, 768);
+
+ for (int i = 0; i < 32; ++i) {
+ _shadowPalette[i] = i;
+ _colorUsedByCycle[i] = 0;
+ }
+
+ amigaPaletteFindFirstUsedColor();
+
+ for (int i = 0; i < 64; ++i) {
+ _amigaPalette[i * 3 + 0] = _currentPalette[(i + 16) * 3 + 0] >> 4;
+ _amigaPalette[i * 3 + 1] = _currentPalette[(i + 16) * 3 + 1] >> 4;
+ _amigaPalette[i * 3 + 2] = _currentPalette[(i + 16) * 3 + 2] >> 4;
+ }
+
+ for (int i = 0; i < 256; ++i) {
+ if (i < 16 || i >= _amigaFirstUsedColor) {
+ mapRoomPalette(i);
+ mapVerbPalette(i);
+ } else {
+ int idx = (i - 16) & 31;
+ // We adjust our verb palette map from [0, 31] to [32, 63], since unlike
+ // the original we set up the verb palette at colors [32, 63].
+ // The original instead used two different palettes for the verb virtual
+ // screen and all the rest.
+ if (idx != 17) {
+ _roomPalette[i] = idx;
+ _verbPalette[i] = idx + 32;
+ } else {
+ // In all my tests it seems the colors 0 and 32 in
+ // _amigaPalette are in fact black. Thus 17 is probably black.
+ // For the room map the color 17 is 33 (17+16), for the verb
+ // map it is 65 (17+32).
+ _roomPalette[i] = 0;
+ _verbPalette[i] = 32;
+ }
+ }
+ }
+
+ setDirtyColors(0, 255);
+}
+
+void ScummEngine::amigaPaletteFindFirstUsedColor() {
+ for (_amigaFirstUsedColor = 80; _amigaFirstUsedColor < 256; ++_amigaFirstUsedColor) {
+ // We look for the first used color here. If all color components are
+ // >= 252 the color seems to be unused. Check remapPaletteColor for
+ // the same behavior.
+ if (_currentPalette[_amigaFirstUsedColor * 3 + 0] <= 251
+ || _currentPalette[_amigaFirstUsedColor * 3 + 1] <= 251
+ || _currentPalette[_amigaFirstUsedColor * 3 + 2] <= 251)
+ break;
+ }
+}
+
+void ScummEngine::mapRoomPalette(int idx) {
+ // For Color 33 (which is in fact 17+16) see the special case in
+ // setAmigaPaletteFromPtr.
+ if (idx >= 16 && idx < 48 && idx != 33)
+ _roomPalette[idx] = idx - 16;
+ else
+ _roomPalette[idx] = remapRoomPaletteColor(_currentPalette[idx * 3 + 0] >> 4,
+ _currentPalette[idx * 3 + 1] >> 4,
+ _currentPalette[idx * 3 + 2] >> 4);
+}
+
+static const uint8 amigaWeightTable[16] = {
+ 0, 1, 4, 9, 16, 25, 36, 49,
+ 64, 81, 100, 121, 144, 169, 196, 225
+};
+
+int ScummEngine::remapRoomPaletteColor(int r, int g, int b) {
+ int idx = 0;
+ uint16 minValue = 0xFFFF;
+
+ const byte *pal = _amigaPalette;
+ const byte *cycle = _colorUsedByCycle;
+
+ for (int i = 0; i < 32; ++i) {
+ if (!*cycle++ && i != 17) {
+ int rD = ABS<int>(*pal++ - r);
+ int gD = ABS<int>(*pal++ - g);
+ int bD = ABS<int>(*pal++ - b);
+
+ const uint16 weight = amigaWeightTable[rD] + amigaWeightTable[gD] + amigaWeightTable[bD];
+ if (weight < minValue) {
+ minValue = weight;
+ idx = i;
+ }
+ } else {
+ pal += 3;
+ }
+ }
+
+ return idx;
+}
+
+void ScummEngine::mapVerbPalette(int idx) {
+ // We adjust our verb palette map from [0, 31] to [32, 63], since unlike
+ // the original we set up the verb palette at colors [32, 63].
+ // The original instead used two different palettes for the verb virtual
+ // screen and all the rest.
+ // For Color 65 (which is in fact 17+32) see the special case in
+ // setAmigaPaletteFromPtr.
+ if (idx >= 48 && idx < 80 && idx != 65)
+ _verbPalette[idx] = idx - 16;
+ else
+ _verbPalette[idx] = remapVerbPaletteColor(_currentPalette[idx * 3 + 0] >> 4,
+ _currentPalette[idx * 3 + 1] >> 4,
+ _currentPalette[idx * 3 + 2] >> 4) + 32;
+}
+
+int ScummEngine::remapVerbPaletteColor(int r, int g, int b) {
+ int idx = 0;
+ uint16 minValue = 0xFFFF;
+
+ const byte *pal = _amigaPalette + 32 * 3;
+
+ for (int i = 0; i < 32; ++i) {
+ if (i != 17) {
+ int rD = ABS<int>(*pal++ - r);
+ int gD = ABS<int>(*pal++ - g);
+ int bD = ABS<int>(*pal++ - b);
+
+ const uint16 weight = amigaWeightTable[rD] + amigaWeightTable[gD] + amigaWeightTable[bD];
+ if (weight < minValue) {
+ minValue = weight;
+ idx = i;
+ }
+ } else {
+ pal += 3;
+ }
+ }
+
+ return idx;
+}
+
void ScummEngine::setDirtyColors(int min, int max) {
if (_palDirtyMin > min)
_palDirtyMin = min;
@@ -419,11 +556,26 @@ void ScummEngine::initCycl(const byte *ptr) {
cycl->start = *ptr++;
cycl->end = *ptr++;
+ if (_game.platform == Common::kPlatformAmiga && _game.id == GID_INDY4) {
+ cycl->start = CLIP(cycl->start - 16, 0, 31);
+ cycl->end = CLIP(cycl->end - 16, 0, 31);
+ }
+
for (int i = cycl->start; i <= cycl->end; ++i) {
_colorUsedByCycle[i] = 1;
}
}
}
+
+ if (_game.platform == Common::kPlatformAmiga && _game.id == GID_INDY4) {
+ for (int i = 0; i < 256; ++i) {
+ if (i >= 16 && i < _amigaFirstUsedColor)
+ continue;
+
+ if (_colorUsedByCycle[_roomPalette[i]])
+ mapRoomPalette(i);
+ }
+ }
}
void ScummEngine::stopCycle(int i) {
@@ -432,11 +584,25 @@ void ScummEngine::stopCycle(int i) {
assertRange(0, i, 16, "stopCycle: cycle");
if (i != 0) {
_colorCycle[i - 1].delay = 0;
+ if (_game.platform == Common::kPlatformAmiga && _game.id == GID_INDY4) {
+ cycl = &_colorCycle[i - 1];
+ for (int j = cycl->start; j <= cycl->end && j < 32; ++j) {
+ _shadowPalette[j] = j;
+ _colorUsedByCycle[j] = 0;
+ }
+ }
return;
}
- for (i = 0, cycl = _colorCycle; i < 16; i++, cycl++)
+ for (i = 0, cycl = _colorCycle; i < 16; i++, cycl++) {
cycl->delay = 0;
+ if (_game.platform == Common::kPlatformAmiga && _game.id == GID_INDY4) {
+ for (int j = cycl->start; j <= cycl->end && j < 32; ++j) {
+ _shadowPalette[j] = j;
+ _colorUsedByCycle[j] = 0;
+ }
+ }
+ }
}
/**
@@ -512,14 +678,18 @@ void ScummEngine::cyclePalette() {
setDirtyColors(cycl->start, cycl->end);
moveMemInPalRes(cycl->start, cycl->end, cycl->flags & 2);
- doCyclePalette(_currentPalette, cycl->start, cycl->end, 3, !(cycl->flags & 2));
+ if (_game.platform == Common::kPlatformAmiga && _game.id == GID_INDY4) {
+ doCyclePalette(_shadowPalette, cycl->start, cycl->end, 1, !(cycl->flags & 2));
+ } else {
+ doCyclePalette(_currentPalette, cycl->start, cycl->end, 3, !(cycl->flags & 2));
- if (_shadowPalette) {
- if (_game.version >= 7) {
- for (j = 0; j < NUM_SHADOW_PALETTE; j++)
+ if (_shadowPalette) {
+ if (_game.version >= 7) {
+ for (j = 0; j < NUM_SHADOW_PALETTE; j++)
doCycleIndirectPalette(_shadowPalette + j * 256, cycl->start, cycl->end, !(cycl->flags & 2));
- } else {
- doCycleIndirectPalette(_shadowPalette, cycl->start, cycl->end, !(cycl->flags & 2));
+ } else {
+ doCycleIndirectPalette(_shadowPalette, cycl->start, cycl->end, !(cycl->flags & 2));
+ }
}
}
}
@@ -733,62 +903,106 @@ void ScummEngine::setShadowPalette(int redScale, int greenScale, int blueScale,
}
void ScummEngine::darkenPalette(int redScale, int greenScale, int blueScale, int startColor, int endColor) {
- int max;
- if (_game.version >= 5 && _game.version <= 6 && _game.heversion <= 60) {
- max = 252;
- } else {
- max = 255;
- }
+ if (_game.platform == Common::kPlatformAmiga && _game.id == GID_INDY4) {
+ startColor = CLIP(startColor, 0, 255);
- if (startColor <= endColor) {
- const byte *cptr;
- const byte *palptr;
- int color, idx, j;
+ //bool remappedVerbColors = false;
+ bool remappedRoomColors = false;
+ bool cycleFlag = (blueScale >= 250 && greenScale >= 250 && redScale >= 250);
+
+ const byte *palptr = getPalettePtr(_curPalIndex, _roomResource) + startColor * 3;
- if (_game.heversion >= 90 || _game.version == 8) {
- palptr = _darkenPalette;
+ for (int i = startColor; i <= endColor; ++i) {
+ if (i > 16 && i < 48) {
+ if (cycleFlag)
+ _colorUsedByCycle[i - 16] &= ~2;
+ else
+ _colorUsedByCycle[i - 16] |= 2;
+ }
+
+ _currentPalette[i * 3 + 0] = (*palptr++ * redScale) >> 8;
+ _currentPalette[i * 3 + 1] = (*palptr++ * greenScale) >> 8;
+ _currentPalette[i * 3 + 2] = (*palptr++ * blueScale) >> 8;
+ }
+
+ for (int i = startColor; i <= endColor; ++i) {
+ // Colors 33 (17+16) and 65 (17+32) will never get changed. For
+ // more information about these check setAmigaPaletteFromPtr.
+ if (i >= 16 && i < 48 && i != 33) {
+ remappedRoomColors = true;
+ _amigaPalette[(i - 16) * 3 + 0] = _currentPalette[i * 3 + 0] >> 4;
+ _amigaPalette[(i - 16) * 3 + 1] = _currentPalette[i * 3 + 1] >> 4;
+ _amigaPalette[(i - 16) * 3 + 2] = _currentPalette[i * 3 + 2] >> 4;
+ } else if (i >= 48 && i < 80 && i != 65) {
+ //remappedVerbColors = true;
+ _amigaPalette[(i - 16) * 3 + 0] = _currentPalette[i * 3 + 0] >> 4;
+ _amigaPalette[(i - 16) * 3 + 1] = _currentPalette[i * 3 + 1] >> 4;
+ _amigaPalette[(i - 16) * 3 + 2] = _currentPalette[i * 3 + 2] >> 4;
+ }
+ }
+
+ for (int i = 0; i < 256; ++i) {
+ if (i >= 16 && i < _amigaFirstUsedColor)
+ continue;
+
+ bool inRange = (startColor <= i && i <= endColor);
+ int idx = _roomPalette[i] + 16;
+ bool mappedInRange = (startColor <= idx && idx <= endColor);
+
+ if (inRange != mappedInRange || (remappedRoomColors && cycleFlag))
+ mapRoomPalette(i);
+ }
+
+ setDirtyColors(startColor, endColor);
+ } else {
+ int max;
+ if (_game.version >= 5 && _game.version <= 6 && _game.heversion <= 60) {
+ max = 252;
} else {
- palptr = getPalettePtr(_curPalIndex, _roomResource);
+ max = 255;
}
- for (j = startColor; j <= endColor; j++) {
- idx = (_game.heversion == 70) ? _HEV7ActorPalette[j] : j;
- cptr = palptr + idx * 3;
- if (_game.heversion == 70)
- setDirtyColors(idx, idx);
+ if (startColor <= endColor) {
+ const byte *cptr;
+ const byte *palptr;
+ int color, idx, j;
- // Original FOA Amiga version skips these colors
- // Fixes bug #1206994: "FOA AMIGA: Black cursor and text in Dig Site"
- if (_game.platform == Common::kPlatformAmiga && _game.id == GID_INDY4) {
- if (j < 16) {
- cptr += 3;
- continue;
- }
+ if (_game.heversion >= 90 || _game.version == 8) {
+ palptr = _darkenPalette;
+ } else {
+ palptr = getPalettePtr(_curPalIndex, _roomResource);
}
-
- color = *cptr++;
- color = color * redScale / 0xFF;
- if (color > max)
- color = max;
- _currentPalette[idx * 3 + 0] = color;
-
- color = *cptr++;
- color = color * greenScale / 0xFF;
- if (color > max)
- color = max;
- _currentPalette[idx * 3 + 1] = color;
-
- color = *cptr++;
- color = color * blueScale / 0xFF;
- if (color > max)
- color = max;
- _currentPalette[idx * 3 + 2] = color;
-
- if (_game.features & GF_16BIT_COLOR)
- _16BitPalette[idx] = get16BitColor(_currentPalette[idx * 3 + 0], _currentPalette[idx * 3 + 1], _currentPalette[idx * 3 + 2]);
+ for (j = startColor; j <= endColor; j++) {
+ idx = (_game.heversion == 70) ? _HEV7ActorPalette[j] : j;
+ cptr = palptr + idx * 3;
+
+ if (_game.heversion == 70)
+ setDirtyColors(idx, idx);
+
+ color = *cptr++;
+ color = color * redScale / 0xFF;
+ if (color > max)
+ color = max;
+ _currentPalette[idx * 3 + 0] = color;
+
+ color = *cptr++;
+ color = color * greenScale / 0xFF;
+ if (color > max)
+ color = max;
+ _currentPalette[idx * 3 + 1] = color;
+
+ color = *cptr++;
+ color = color * blueScale / 0xFF;
+ if (color > max)
+ color = max;
+ _currentPalette[idx * 3 + 2] = color;
+
+ if (_game.features & GF_16BIT_COLOR)
+ _16BitPalette[idx] = get16BitColor(_currentPalette[idx * 3 + 0], _currentPalette[idx * 3 + 1], _currentPalette[idx * 3 + 2]);
+ }
+ if (_game.heversion != 70)
+ setDirtyColors(startColor, endColor);
}
- if (_game.heversion != 70)
- setDirtyColors(startColor, endColor);
}
}
@@ -1007,6 +1221,41 @@ void ScummEngine::setPalColor(int idx, int r, int g, int b) {
_darkenPalette[idx * 3 + 2] = b;
}
+ if (_game.platform == Common::kPlatformAmiga && _game.id == GID_INDY4) {
+ // Colors 33 (17+16) and 65 (17+32) will never get changed. For
+ // more information about these check setAmigaPaletteFromPtr.
+ if (idx < 16 || idx >= _amigaFirstUsedColor) {
+ mapRoomPalette(idx);
+ mapVerbPalette(idx);
+ } else if (idx >= 16 && idx < 48 && idx != 33) {
+ _amigaPalette[(idx - 16) * 3 + 0] = _currentPalette[idx * 3 + 0] >> 4;
+ _amigaPalette[(idx - 16) * 3 + 1] = _currentPalette[idx * 3 + 1] >> 4;
+ _amigaPalette[(idx - 16) * 3 + 2] = _currentPalette[idx * 3 + 2] >> 4;
+
+ for (int i = 0; i < 256; ++i) {
+ if (i >= 16 && i < _amigaFirstUsedColor)
+ continue;
+
+ if (idx - 16 == _roomPalette[i])
+ mapRoomPalette(i);
+ }
+ } else if (idx >= 48 && idx < 80 && idx != 65) {
+ _amigaPalette[(idx - 16) * 3 + 0] = _currentPalette[idx * 3 + 0] >> 4;
+ _amigaPalette[(idx - 16) * 3 + 1] = _currentPalette[idx * 3 + 1] >> 4;
+ _amigaPalette[(idx - 16) * 3 + 2] = _currentPalette[idx * 3 + 2] >> 4;
+
+ for (int i = 0; i < 256; ++i) {
+ if (i >= 16 && i < _amigaFirstUsedColor)
+ continue;
+
+ // We do - 16 instead of - 48 like the original, since our
+ // verb palette map is using [32, 63] instead of [0, 31].
+ if (idx - 16 == _verbPalette[i])
+ mapVerbPalette(i);
+ }
+ }
+ }
+
if (_game.features & GF_16BIT_COLOR)
_16BitPalette[idx] = get16BitColor(r, g, b);
@@ -1026,6 +1275,8 @@ void ScummEngine::setCurrentPalette(int palindex) {
towns_setPaletteFromPtr(pals);
#endif
#endif
+ } else if (_game.id == GID_INDY4 && _game.platform == Common::kPlatformAmiga) {
+ setAmigaPaletteFromPtr(pals);
} else {
setPaletteFromPtr(pals);
}
@@ -1081,42 +1332,74 @@ void ScummEngine::updatePalette() {
if (_palDirtyMax == -1)
return;
- bool noir_mode = (_game.id == GID_SAMNMAX && readVar(0x8000));
- int first = _palDirtyMin;
- int num = _palDirtyMax - first + 1;
- int i;
-
byte palette_colors[3 * 256];
byte *p = palette_colors;
+ int first;
+ int num;
- for (i = _palDirtyMin; i <= _palDirtyMax; i++) {
- byte *data;
+ if (_game.platform == Common::kPlatformAmiga && _game.id == GID_INDY4) {
+ // Indy4 Amiga has a special palette handling scheme
+ first = 0;
+ num = 64;
- if (_game.features & GF_SMALL_HEADER && _game.version > 2)
- data = _currentPalette + _shadowPalette[i] * 3;
- else
- data = _currentPalette + i * 3;
+ for (int i = 0; i < 64; ++i) {
+ byte *data;
- // Sam & Max film noir mode. Convert the colors to grayscale
- // before uploading them to the backend.
+ if (i < 32)
+ data = _amigaPalette + _shadowPalette[i] * 3;
+ else
+ data = _amigaPalette + i * 3;
- if (noir_mode) {
- int r, g, b;
- byte brightness;
+ *p++ = data[0] * 255 / 15;
+ *p++ = data[1] * 255 / 15;
+ *p++ = data[2] * 255 / 15;
+ }
- r = data[0];
- g = data[1];
- b = data[2];
+ // Setup colors for the mouse cursor
+ // Color values taken from Indy4 DOS
+ static const uint8 mouseCursorPalette[] = {
+ 255, 255, 255,
+ 171, 171, 171,
+ 87, 87, 87
+ };
- brightness = (byte)((0.299 * r + 0.587 * g + 0.114 * b) + 0.5);
+ _system->getPaletteManager()->setPalette(mouseCursorPalette, 252, 3);
+ } else {
+ bool noir_mode = (_game.id == GID_SAMNMAX && readVar(0x8000));
+ int i;
- *p++ = brightness;
- *p++ = brightness;
- *p++ = brightness;
- } else {
- *p++ = data[0];
- *p++ = data[1];
- *p++ = data[2];
+ first = _palDirtyMin;
+ num = _palDirtyMax - first + 1;
+
+ for (i = _palDirtyMin; i <= _palDirtyMax; i++) {
+ byte *data;
+
+ if (_game.features & GF_SMALL_HEADER && _game.version > 2)
+ data = _currentPalette + _shadowPalette[i] * 3;
+ else
+ data = _currentPalette + i * 3;
+
+ // Sam & Max film noir mode. Convert the colors to grayscale
+ // before uploading them to the backend.
+
+ if (noir_mode) {
+ int r, g, b;
+ byte brightness;
+
+ r = data[0];
+ g = data[1];
+ b = data[2];
+
+ brightness = (byte)((0.299 * r + 0.587 * g + 0.114 * b) + 0.5);
+
+ *p++ = brightness;
+ *p++ = brightness;
+ *p++ = brightness;
+ } else {
+ *p++ = data[0];
+ *p++ = data[1];
+ *p++ = data[2];
+ }
}
}
@@ -1127,7 +1410,7 @@ void ScummEngine::updatePalette() {
#ifndef DISABLE_TOWNS_DUAL_LAYER_MODE
if (_game.platform == Common::kPlatformFMTowns) {
p = palette_colors;
- for (i = first; i < first + num; ++i) {
+ for (int i = first; i < first + num; ++i) {
_16BitPalette[i] = get16BitColor(p[0], p[1], p[2]);
p += 3;
}
diff --git a/engines/scumm/resource.cpp b/engines/scumm/resource.cpp
index 10301da3e3..f445a44ded 100644
--- a/engines/scumm/resource.cpp
+++ b/engines/scumm/resource.cpp
@@ -47,7 +47,8 @@ enum {
RF_USAGE = 0x7F,
RF_USAGE_MAX = RF_USAGE,
- RS_MODIFIED = 0x10
+ RS_MODIFIED = 0x10,
+ RF_OFFHEAP = 0x40
};
@@ -993,18 +994,42 @@ void ResourceManager::setModified(ResType type, ResId idx) {
_types[type][idx].setModified();
}
+void ResourceManager::setOffHeap(ResType type, ResId idx) {
+ if (!validateResource("setOffHeap", type, idx))
+ return;
+ _types[type][idx].setOffHeap();
+}
+
+void ResourceManager::setOnHeap(ResType type, ResId idx) {
+ if (!validateResource("setOnHeap", type, idx))
+ return;
+ _types[type][idx].setOnHeap();
+}
+
bool ResourceManager::isModified(ResType type, ResId idx) const {
if (!validateResource("isModified", type, idx))
return false;
return _types[type][idx].isModified();
}
+bool ResourceManager::Resource::isModified() const {
+ return (_status & RS_MODIFIED) != 0;
+}
+
+bool ResourceManager::Resource::isOffHeap() const {
+ return (_status & RF_OFFHEAP) != 0;
+}
+
void ResourceManager::Resource::setModified() {
_status |= RS_MODIFIED;
}
-bool ResourceManager::Resource::isModified() const {
- return (_status & RS_MODIFIED) != 0;
+void ResourceManager::Resource::setOffHeap() {
+ _status |= RF_OFFHEAP;
+}
+
+void ResourceManager::Resource::setOnHeap() {
+ _status &= ~RF_OFFHEAP;
}
void ResourceManager::expireResources(uint32 size) {
@@ -1035,7 +1060,7 @@ void ResourceManager::expireResources(uint32 size) {
while (idx-- > 0) {
Resource &tmp = _types[type][idx];
byte counter = tmp.getResourceCounter();
- if (!tmp.isLocked() && counter >= best_counter && tmp._address && !_vm->isResourceInUse(type, idx)) {
+ if (!tmp.isLocked() && counter >= best_counter && tmp._address && !_vm->isResourceInUse(type, idx) && !tmp.isOffHeap()) {
best_counter = counter;
best_type = type;
best_res = idx;
diff --git a/engines/scumm/resource.h b/engines/scumm/resource.h
index 2e8960717f..aa7f809b76 100644
--- a/engines/scumm/resource.h
+++ b/engines/scumm/resource.h
@@ -138,8 +138,12 @@ public:
void unlock();
bool isLocked() const;
+ // HE specific
void setModified();
bool isModified() const;
+ void setOffHeap();
+ void setOnHeap();
+ bool isOffHeap() const;
};
/**
@@ -192,8 +196,11 @@ public:
void unlock(ResType type, ResId idx);
bool isLocked(ResType type, ResId idx) const;
+ // HE Specific
void setModified(ResType type, ResId idx);
bool isModified(ResType type, ResId idx) const;
+ void setOffHeap(ResType type, ResId idx);
+ void setOnHeap(ResType type, ResId idx);
/**
* This method increments the _expireCounter, and if it overflows (which happens
diff --git a/engines/scumm/room.cpp b/engines/scumm/room.cpp
index 8962a0e971..63cbef8944 100644
--- a/engines/scumm/room.cpp
+++ b/engines/scumm/room.cpp
@@ -552,6 +552,10 @@ void ScummEngine::resetRoomSubBlocks() {
}
}
+ // We need to setup the current palette before initCycl for Indy4 Amiga.
+ if (_PALS_offs || _CLUT_offs)
+ setCurrentPalette(0);
+
// Color cycling
// HE 7.0 games load resources but don't use them.
if (_game.version >= 4 && _game.heversion <= 62) {
@@ -570,9 +574,6 @@ void ScummEngine::resetRoomSubBlocks() {
}
}
#endif
-
- if (_PALS_offs || _CLUT_offs)
- setCurrentPalette(0);
}
diff --git a/engines/scumm/saveload.cpp b/engines/scumm/saveload.cpp
index 870ec8cdf7..3ab13df032 100644
--- a/engines/scumm/saveload.cpp
+++ b/engines/scumm/saveload.cpp
@@ -30,7 +30,7 @@
#include "scumm/charset.h"
#include "scumm/imuse_digi/dimuse.h"
#include "scumm/imuse/imuse.h"
-#include "player_towns.h"
+#include "scumm/player_towns.h"
#include "scumm/he/intern_he.h"
#include "scumm/object.h"
#include "scumm/resource.h"
@@ -1322,6 +1322,9 @@ void ScummEngine::saveOrLoad(Serializer *s) {
if (_shadowPaletteSize) {
s->saveLoadArrayOf(_shadowPalette, _shadowPaletteSize, 1, sleByte);
// _roomPalette didn't show up until V21 save games
+ // Note that we also save the room palette for Indy4 Amiga, since it
+ // is used as palette map there too, but we do so slightly a bit
+ // further down to group it with the other special palettes needed.
if (s->getVersion() >= VER(21) && _game.version < 5)
s->saveLoadArrayOf(_roomPalette, sizeof(_roomPalette), 1, sleByte);
}
@@ -1348,6 +1351,29 @@ void ScummEngine::saveOrLoad(Serializer *s) {
memset(_colorUsedByCycle, 0, sizeof(_colorUsedByCycle));
}
+ // Indy4 Amiga specific palette tables were not saved before V85
+ if (_game.platform == Common::kPlatformAmiga && _game.id == GID_INDY4) {
+ if (s->getVersion() >= 85) {
+ s->saveLoadArrayOf(_roomPalette, 256, 1, sleByte);
+ s->saveLoadArrayOf(_verbPalette, 256, 1, sleByte);
+ s->saveLoadArrayOf(_amigaPalette, 3 * 64, 1, sleByte);
+
+ // Starting from version 86 we also save the first used color in
+ // the palette beyond the verb palette. For old versions we just
+ // look for it again, which hopefully won't cause any troubles.
+ if (s->getVersion() >= 86) {
+ s->saveLoadArrayOf(&_amigaFirstUsedColor, 1, 2, sleUint16);
+ } else {
+ amigaPaletteFindFirstUsedColor();
+ }
+ } else {
+ warning("Save with old Indiana Jones 4 Amiga palette handling detected");
+ // We need to restore the internal state of the Amiga palette for Indy4
+ // Amiga. This might lead to graphics glitches!
+ setAmigaPaletteFromPtr(_currentPalette);
+ }
+ }
+
//
// Save/load more global object state
//
diff --git a/engines/scumm/saveload.h b/engines/scumm/saveload.h
index 776f40e12b..16c225d20e 100644
--- a/engines/scumm/saveload.h
+++ b/engines/scumm/saveload.h
@@ -47,7 +47,7 @@ namespace Scumm {
* only saves/loads those which are valid for the version of the savegame
* which is being loaded/saved currently.
*/
-#define CURRENT_VER 84
+#define CURRENT_VER 86
/**
* An auxillary macro, used to specify savegame versions. We use this instead
diff --git a/engines/scumm/script_v0.cpp b/engines/scumm/script_v0.cpp
index 1ef16d7106..e2d3f40e8e 100644
--- a/engines/scumm/script_v0.cpp
+++ b/engines/scumm/script_v0.cpp
@@ -442,7 +442,7 @@ void ScummEngine_v0::drawSentenceWord(int object, bool usePrep, bool objInInvent
// The prepositions, like the fonts, were hard code in the engine. Thus
// we have to do that, too, and provde localized versions for all the
// languages MM/Zak are available in.
- static const char *prepositions[][5] = {
+ static const char *const prepositions[][5] = {
{ " ", " in", " with", " on", " to" }, // English
{ " ", " mit", " mit", " mit", " zu" }, // German
{ " ", " dans", " avec", " sur", " <" }, // French
diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp
index 3b83019275..81f6af453c 100644
--- a/engines/scumm/scumm.cpp
+++ b/engines/scumm/scumm.cpp
@@ -290,6 +290,7 @@ ScummEngine::ScummEngine(OSystem *syst, const DetectorResult &dr)
#endif
_shadowPalette = NULL;
_shadowPaletteSize = 0;
+ _verbPalette = NULL;
memset(_currentPalette, 0, sizeof(_currentPalette));
memset(_darkenPalette, 0, sizeof(_darkenPalette));
memset(_HEV7ActorPalette, 0, sizeof(_HEV7ActorPalette));
@@ -610,6 +611,7 @@ ScummEngine::~ScummEngine() {
_textSurface.free();
free(_shadowPalette);
+ free(_verbPalette);
free(_palManipPalette);
free(_palManipIntermediatePal);
@@ -1408,6 +1410,10 @@ void ScummEngine::resetScumm() {
_16BitPalette = (uint16 *)calloc(512, sizeof(uint16));
#endif
+ // Indy4 Amiga needs another palette map for the verb area.
+ if (_game.platform == Common::kPlatformAmiga && _game.id == GID_INDY4 && !_verbPalette)
+ _verbPalette = (uint8 *)calloc(256, 1);
+
#ifndef DISABLE_TOWNS_DUAL_LAYER_MODE
if (_game.platform == Common::kPlatformFMTowns) {
delete _townsScreen;
diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h
index 04a175e732..d9237b2b30 100644
--- a/engines/scumm/scumm.h
+++ b/engines/scumm/scumm.h
@@ -970,6 +970,7 @@ protected:
void setCurrentPalette(int pal);
void setRoomPalette(int pal, int room);
void setPCEPaletteFromPtr(const byte *ptr);
+ void setAmigaPaletteFromPtr(const byte *ptr);
virtual void setPaletteFromPtr(const byte *ptr, int numcolor = -1);
virtual void setPalColor(int index, int r, int g, int b);
@@ -1065,6 +1066,9 @@ public:
uint16 _hePaletteSlot;
uint16 *_16BitPalette;
+ // Indy4 Amiga specific
+ byte *_verbPalette;
+
protected:
int _shadowPaletteSize;
byte _currentPalette[3 * 256];
@@ -1085,6 +1089,15 @@ protected:
bool _enable_gs;
bool _copyProtection;
+ // Indy4 Amiga specific
+ uint16 _amigaFirstUsedColor;
+ byte _amigaPalette[3 * 64];
+ void amigaPaletteFindFirstUsedColor();
+ void mapRoomPalette(int idx);
+ int remapRoomPaletteColor(int r, int g, int b);
+ void mapVerbPalette(int idx);
+ int remapVerbPaletteColor(int r, int g, int b);
+
public:
uint16 _extraBoxFlags[65];
diff --git a/engines/sky/compact.cpp b/engines/sky/compact.cpp
index 84609d5500..fd81cb9bea 100644
--- a/engines/sky/compact.cpp
+++ b/engines/sky/compact.cpp
@@ -471,7 +471,7 @@ uint16 SkyCompact::giveDataListLen(uint16 listNum) {
return _dataListLen[listNum];
}
-const char *SkyCompact::_typeNames[NUM_CPT_TYPES] = {
+const char *const SkyCompact::_typeNames[NUM_CPT_TYPES] = {
"null",
"COMPACT",
"TURNTABLE",
diff --git a/engines/sky/compact.h b/engines/sky/compact.h
index a7b8520539..0bd5b4943b 100644
--- a/engines/sky/compact.h
+++ b/engines/sky/compact.h
@@ -88,7 +88,7 @@ private:
uint16 **_cptTypes;
Common::File *_cptFile;
uint32 _resetDataPos;
- static const char *_typeNames[NUM_CPT_TYPES];
+ static const char *const _typeNames[NUM_CPT_TYPES];
};
} // End of namespace Sky
diff --git a/engines/sky/debug.cpp b/engines/sky/debug.cpp
index ebc1ee377d..a417bc2ece 100644
--- a/engines/sky/debug.cpp
+++ b/engines/sky/debug.cpp
@@ -35,7 +35,7 @@
namespace Sky {
-static const char *logic_table_names[] = {
+static const char *const logic_table_names[] = {
"return",
"Logic::script",
"Logic::auto_route",
@@ -79,7 +79,7 @@ static const char opcode_par[] = {
0
};
-static const char *opcodes[] = {
+static const char *const opcodes[] = {
"push_variable",
"less_than",
"push_number",
@@ -103,7 +103,7 @@ static const char *opcodes[] = {
"restart_script"
};
-static const char *mcodes[] = {
+static const char *const mcodes[] = {
"fn_cache_chip",
"fn_cache_fast",
"fn_draw_screen",
@@ -221,7 +221,7 @@ static const char *mcodes[] = {
"fn_printf"
};
-static const char *scriptVars[] = {
+static const char *const scriptVars[] = {
"result",
"screen",
"logic_list_no",
@@ -1121,12 +1121,12 @@ bool Debugger::Cmd_ReloadGrid(int argc, const char **argv) {
return true;
}
-static const char *logicTypes[] = {
+static const char *const logicTypes[] = {
"(none)", "SCRIPT", "AUTOROUTE", "AR_ANIM", "AR_TURNING", "ALT", "MOD_ANIM", "TURNING", "CURSOR", "TALK", "LISTEN",
"STOPPED", "CHOOSE", "FRAMES", "PAUSE", "WAIT_SYNC", "SIMPLE MOD"
};
-static const char *noYes[] = { "no", "yes" };
+static const char *const noYes[] = { "no", "yes" };
void Debugger::dumpCompact(uint16 cptId) {
uint16 type, size;
diff --git a/engines/sky/disk.cpp b/engines/sky/disk.cpp
index a06c5c9be8..99b707dcf1 100644
--- a/engines/sky/disk.cpp
+++ b/engines/sky/disk.cpp
@@ -32,8 +32,8 @@
namespace Sky {
-static const char *dataFilename = "sky.dsk";
-static const char *dinnerFilename = "sky.dnr";
+static const char *const dataFilename = "sky.dsk";
+static const char *const dinnerFilename = "sky.dnr";
Disk::Disk() {
_dataDiskHandle = new Common::File();
diff --git a/engines/sky/sound.cpp b/engines/sky/sound.cpp
index e94a2a61d9..a60e3d9e38 100644
--- a/engines/sky/sound.cpp
+++ b/engines/sky/sound.cpp
@@ -872,7 +872,7 @@ static const Sfx fx_orifice_swallow_drip = {
}
};
-static const Sfx *musicList[] = {
+static const Sfx *const musicList[] = {
&fx_press_bang, // 256 banging of the press
&fx_press_hiss, // 257 hissing press
&fx_wind_howl, // 258 howling wind
diff --git a/engines/sword1/animation.cpp b/engines/sword1/animation.cpp
index f19efd2635..324154f709 100644
--- a/engines/sword1/animation.cpp
+++ b/engines/sword1/animation.cpp
@@ -38,7 +38,7 @@
namespace Sword1 {
-static const char *sequenceList[20] = {
+static const char *const sequenceList[20] = {
"ferrari", // 0 CD2 ferrari running down fitz in sc19
"ladder", // 1 CD2 george walking down ladder to dig sc24->sc$
"steps", // 2 CD2 george walking down steps sc23->sc24
diff --git a/engines/sword1/control.cpp b/engines/sword1/control.cpp
index 36d5a24e99..6e395116f9 100644
--- a/engines/sword1/control.cpp
+++ b/engines/sword1/control.cpp
@@ -122,8 +122,8 @@ ControlButton::ControlButton(uint16 x, uint16 y, uint32 resId, uint8 id, uint8 f
_width = (_width > SCREEN_WIDTH) ? SCREEN_WIDTH : _width;
_height = _resMan->getUint16(tmp->height);
if ((x == 0) && (y == 0)) { // center the frame (used for panels);
- _x = (((640 - _width) / 2) < 0)? 0 : ((640 - _width) / 2);
- _y = (((480 - _height) / 2) < 0)? 0 : ((480 - _height) / 2);
+ _x = (((640 - _width) / 2) < 0) ? 0 : ((640 - _width) / 2);
+ _y = (((480 - _height) / 2) < 0) ? 0 : ((480 - _height) / 2);
}
_dstBuf = screenBuf + _y * SCREEN_WIDTH + _x;
_system = system;
@@ -139,11 +139,11 @@ bool ControlButton::isSaveslot() {
void ControlButton::draw() {
FrameHeader *fHead = _resMan->fetchFrame(_resMan->fetchRes(_resId), _frameIdx);
- uint8 *src = (uint8*)fHead + sizeof(FrameHeader);
+ uint8 *src = (uint8 *)fHead + sizeof(FrameHeader);
uint8 *dst = _dstBuf;
if (SwordEngine::isPsx() && _resId) {
- uint8 *HIFbuf = (uint8*)malloc(_resMan->readUint16(&fHead->height) * _resMan->readUint16(&fHead->width));
+ uint8 *HIFbuf = (uint8 *)malloc(_resMan->readUint16(&fHead->height) * _resMan->readUint16(&fHead->width));
memset(HIFbuf, 0, _resMan->readUint16(&fHead->height) * _resMan->readUint16(&fHead->width));
Screen::decompressHIF(src, HIFbuf);
src = HIFbuf;
@@ -163,24 +163,24 @@ void ControlButton::draw() {
src += _resMan->readUint16(&fHead->width);
}
else if (_resId == SR_DEATHPANEL) { // Check for death panel psx version (which is 1/3 of original width)
- for (uint16 cnt = 0; cnt < _resMan->readUint16(&fHead->height)/2; cnt++) {
+ for (uint16 cnt = 0; cnt < _resMan->readUint16(&fHead->height) / 2; cnt++) {
//Stretched panel is bigger than 640px, check we don't draw outside screen
- for (uint16 cntx = 0; (cntx < (_resMan->readUint16(&fHead->width))/3) && (cntx < (SCREEN_WIDTH-3) ); cntx++)
+ for (uint16 cntx = 0; (cntx < (_resMan->readUint16(&fHead->width)) / 3) && (cntx < (SCREEN_WIDTH - 3)); cntx++)
if (src[cntx]) {
dst[cntx * 3] = src[cntx];
dst[cntx * 3 + 1] = src[cntx];
dst[cntx * 3 + 2] = src[cntx];
}
- dst+= SCREEN_WIDTH;
+ dst += SCREEN_WIDTH;
- for (uint16 cntx = 0; cntx < (_resMan->readUint16(&fHead->width))/3; cntx++)
+ for (uint16 cntx = 0; cntx < (_resMan->readUint16(&fHead->width)) / 3; cntx++)
if (src[cntx]) {
dst[cntx * 3] = src[cntx];
dst[cntx * 3 + 1] = src[cntx];
dst[cntx * 3 + 2] = src[cntx];
}
dst += SCREEN_WIDTH;
- src += _resMan->readUint16(&fHead->width)/3;
+ src += _resMan->readUint16(&fHead->width) / 3;
}
} else { //save slots needs to be multiplied by 2 in height
for (uint16 cnt = 0; cnt < _resMan->readUint16(&fHead->height); cnt++) {
@@ -198,7 +198,7 @@ void ControlButton::draw() {
}
dst += SCREEN_WIDTH;
- src += _resMan->readUint16(&fHead->width)/2;
+ src += _resMan->readUint16(&fHead->width) / 2;
}
}
@@ -242,13 +242,13 @@ Control::Control(Common::SaveFileManager *saveFileMan, ResMan *pResMan, ObjectMa
}
void Control::askForCd() {
- _screenBuf = (uint8*)malloc(640 * 480);
+ _screenBuf = (uint8 *)malloc(640 * 480);
uint32 fontId = SR_FONT;
if (SwordEngine::_systemVars.language == BS1_CZECH)
fontId = CZECH_SR_FONT;
- _font = (uint8*)_resMan->openFetchRes(fontId);
- uint8 *pal = (uint8*)_resMan->openFetchRes(SR_PALETTE);
- uint8 *palOut = (uint8*)malloc(256 * 3);
+ _font = (uint8 *)_resMan->openFetchRes(fontId);
+ uint8 *pal = (uint8 *)_resMan->openFetchRes(SR_PALETTE);
+ uint8 *palOut = (uint8 *)malloc(256 * 3);
for (uint16 cnt = 1; cnt < 256; cnt++) {
palOut[cnt * 3 + 0] = pal[cnt * 3 + 0] << 2;
palOut[cnt * 3 + 1] = pal[cnt * 3 + 1] << 2;
@@ -262,7 +262,7 @@ void Control::askForCd() {
char fName[10];
uint8 textA[50];
sprintf(fName, "cd%d.id", SwordEngine::_systemVars.currentCD);
- sprintf((char*)textA, "%s%d", _lStrings[STR_INSERT_CD_A], SwordEngine::_systemVars.currentCD);
+ sprintf((char *)textA, "%s%d", _lStrings[STR_INSERT_CD_A], SwordEngine::_systemVars.currentCD);
bool notAccepted = true;
bool refreshText = true;
do {
@@ -304,7 +304,7 @@ uint8 Control::runPanel() {
_restoreBuf = NULL;
_keyPressed.reset();
_numButtons = 0;
- _screenBuf = (uint8*)malloc(640 * 480);
+ _screenBuf = (uint8 *)malloc(640 * 480);
memset(_screenBuf, 0, 640 * 480);
_system->copyRectToScreen(_screenBuf, 640, 0, 0, 640, 480);
_sound->quitScreen();
@@ -314,11 +314,11 @@ uint8 Control::runPanel() {
fontId = CZECH_SR_FONT;
redFontId = CZECH_SR_REDFONT;
}
- _font = (uint8*)_resMan->openFetchRes(fontId);
- _redFont = (uint8*)_resMan->openFetchRes(redFontId);
+ _font = (uint8 *)_resMan->openFetchRes(fontId);
+ _redFont = (uint8 *)_resMan->openFetchRes(redFontId);
- uint8 *pal = (uint8*)_resMan->openFetchRes(SR_PALETTE);
- uint8 *palOut = (uint8*)malloc(256 * 3);
+ uint8 *pal = (uint8 *)_resMan->openFetchRes(SR_PALETTE);
+ uint8 *palOut = (uint8 *)malloc(256 * 3);
for (uint16 cnt = 1; cnt < 256; cnt++) {
palOut[cnt * 3 + 0] = pal[cnt * 3 + 0] << 2;
palOut[cnt * 3 + 1] = pal[cnt * 3 + 1] << 2;
@@ -491,7 +491,7 @@ uint8 Control::handleButtonClick(uint8 id, uint8 mode, uint8 *retVal) {
else
return mode;
} else if ((id == BUTTON_RESTORE_PANEL) || (id == BUTTON_SAVE_PANEL) ||
- (id == BUTTON_DONE) || (id == BUTTON_VOLUME_PANEL))
+ (id == BUTTON_DONE) || (id == BUTTON_VOLUME_PANEL))
return id;
else if (id == BUTTON_TEXT) {
SwordEngine::_systemVars.showText ^= 1;
@@ -641,14 +641,14 @@ void Control::handleVolumeClicks() {
clickDest = 2;
else if (ABS(mouseDiffY) <= 8) // right
clickDest = 3;
- else // lower right
+ else // lower right
clickDest = 4;
} else if (mouseDiffX < -8) { // left part
if (mouseDiffY < -8) // upper left
clickDest = 8;
else if (ABS(mouseDiffY) <= 8) // left
clickDest = 7;
- else // lower left
+ else // lower left
clickDest = 6;
} else { // middle
if (mouseDiffY < -8)
@@ -754,9 +754,9 @@ bool Control::getConfirm(const uint8 *title) {
bool Control::keyAccepted(uint16 ascii) {
static const char allowedSpecials[] = ",.:-()?! \"\'";
if (((ascii >= 'A') && (ascii <= 'Z')) ||
- ((ascii >= 'a') && (ascii <= 'z')) ||
- ((ascii >= '0') && (ascii <= '9')) ||
- strchr(allowedSpecials, ascii))
+ ((ascii >= 'a') && (ascii <= 'z')) ||
+ ((ascii >= '0') && (ascii <= '9')) ||
+ strchr(allowedSpecials, ascii))
return true;
else
return false;
@@ -792,7 +792,7 @@ void Control::readSavegameDescriptions() {
char saveName[40];
Common::String pattern = "sword1.???";
Common::StringArray filenames = _saveFileMan->listSavefiles(pattern);
- sort(filenames.begin(), filenames.end()); // Sort (hopefully ensuring we are sorted numerically..)
+ sort(filenames.begin(), filenames.end()); // Sort (hopefully ensuring we are sorted numerically..)
_saveNames.clear();
@@ -811,7 +811,7 @@ void Control::readSavegameDescriptions() {
num++;
Common::InSaveFile *in = _saveFileMan->openForLoading(*file);
if (in) {
- in->readUint32LE(); // header
+ in->readUint32LE(); // header
in->read(saveName, 40);
_saveNames.push_back(saveName);
delete in;
@@ -860,9 +860,9 @@ void Control::checkForOldSaveGames() {
}
GUI::MessageDialog dialog0(
- _("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"), _("OK"), _("Cancel"));
+ _("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"), _("OK"), _("Cancel"));
int choice = dialog0.runModal();
if (choice == GUI::kMessageCancel) {
@@ -889,8 +889,8 @@ void Control::checkForOldSaveGames() {
}
} while ((ch != 10) && (ch != 255) && (!inf->eos()));
- if (pos > 1) // if the slot has a description
- convertSaveGame(slot, (char*)saveName);
+ if (pos > 1) // if the slot has a description
+ convertSaveGame(slot, (char *)saveName);
slot++;
} while ((ch != 255) && (!inf->eos()));
@@ -906,12 +906,12 @@ void Control::showSavegameNames() {
uint8 textMode = TEXT_LEFT_ALIGN;
uint16 ycoord = _saveButtons[cnt].y + 2;
uint8 str[40];
- sprintf((char*)str, "%d. %s", cnt + _saveScrollPos + 1, _saveNames[cnt + _saveScrollPos].c_str());
+ sprintf((char *)str, "%d. %s", cnt + _saveScrollPos + 1, _saveNames[cnt + _saveScrollPos].c_str());
if (cnt + _saveScrollPos == _selectedSavegame) {
textMode |= TEXT_RED_FONT;
ycoord += 2;
if (_cursorVisible)
- strcat((char*)str, "_");
+ strcat((char *)str, "_");
}
renderText(str, _saveButtons[cnt].x + 6, ycoord, textMode);
}
@@ -1013,7 +1013,7 @@ void Control::renderText(const uint8 *str, uint16 x, uint16 y, uint8 mode) {
uint8 *dst = _screenBuf + y * SCREEN_WIDTH + destX;
FrameHeader *chSpr = _resMan->fetchFrame(font, *str - 32);
- uint8 *sprData = (uint8*)chSpr + sizeof(FrameHeader);
+ uint8 *sprData = (uint8 *)chSpr + sizeof(FrameHeader);
uint8 *HIFbuf = NULL;
if (SwordEngine::isPsx()) { //Text fonts are compressed in psx version
@@ -1056,7 +1056,7 @@ void Control::renderVolumeBar(uint8 id, uint8 volL, uint8 volR) {
uint8 vol = (chCnt == 0) ? volL : volR;
FrameHeader *frHead = _resMan->fetchFrame(_resMan->openFetchRes(SR_VLIGHT), (vol + 15) >> 4);
uint8 *destMem = _screenBuf + destY * SCREEN_WIDTH + destX;
- uint8 *srcMem = (uint8*)frHead + sizeof(FrameHeader);
+ uint8 *srcMem = (uint8 *)frHead + sizeof(FrameHeader);
uint16 barHeight = _resMan->getUint16(frHead->height);
uint8 *psxVolBuf = NULL;
@@ -1135,7 +1135,7 @@ void Control::saveGameToFile(uint8 slot) {
outf->writeUint32LE(Logic::_scriptVars[cnt]);
uint32 playerSize = (sizeof(Object) - 12000) / 4;
- uint32 *playerRaw = (uint32*)cpt;
+ uint32 *playerRaw = (uint32 *)cpt;
for (uint32 cnt2 = 0; cnt2 < playerSize; cnt2++)
outf->writeUint32LE(playerRaw[cnt2]);
outf->finalize();
@@ -1163,7 +1163,7 @@ bool Control::restoreGameFromFile(uint8 slot) {
return false;
}
- inf->skip(40); // skip description
+ inf->skip(40); // skip description
uint8 saveVersion = inf->readByte();
if (saveVersion > SAVEGAME_VERSION) {
@@ -1176,8 +1176,8 @@ bool Control::restoreGameFromFile(uint8 slot) {
Graphics::skipThumbnail(*inf);
- inf->readUint32BE(); // save date
- inf->readUint16BE(); // save time
+ inf->readUint32BE(); // save date
+ inf->readUint16BE(); // save time
if (saveVersion < 2) { // Before version 2 we didn't had play time feature
g_engine->setTotalPlayTime(0);
@@ -1185,14 +1185,14 @@ bool Control::restoreGameFromFile(uint8 slot) {
g_engine->setTotalPlayTime(inf->readUint32BE() * 1000);
}
- _restoreBuf = (uint8*)malloc(
- TOTAL_SECTIONS * 2 +
- NUM_SCRIPT_VARS * 4 +
- (sizeof(Object) - 12000));
+ _restoreBuf = (uint8 *)malloc(
+ TOTAL_SECTIONS * 2 +
+ NUM_SCRIPT_VARS * 4 +
+ (sizeof(Object) - 12000));
- uint16 *liveBuf = (uint16*)_restoreBuf;
- uint32 *scriptBuf = (uint32*)(_restoreBuf + 2 * TOTAL_SECTIONS);
- uint32 *playerBuf = (uint32*)(_restoreBuf + 2 * TOTAL_SECTIONS + 4 * NUM_SCRIPT_VARS);
+ uint16 *liveBuf = (uint16 *)_restoreBuf;
+ uint32 *scriptBuf = (uint32 *)(_restoreBuf + 2 * TOTAL_SECTIONS);
+ uint32 *playerBuf = (uint32 *)(_restoreBuf + 2 * TOTAL_SECTIONS + 4 * NUM_SCRIPT_VARS);
for (cnt = 0; cnt < TOTAL_SECTIONS; cnt++)
liveBuf[cnt] = inf->readUint16LE();
@@ -1215,7 +1215,7 @@ bool Control::restoreGameFromFile(uint8 slot) {
return true;
}
-bool Control::convertSaveGame(uint8 slot, char* desc) {
+bool Control::convertSaveGame(uint8 slot, char *desc) {
char oldFileName[15];
char newFileName[40];
sprintf(oldFileName, "SAVEGAME.%03d", slot);
@@ -1230,8 +1230,8 @@ bool Control::convertSaveGame(uint8 slot, char* desc) {
delete testSave;
Common::String msg = Common::String::format(_("Target new save game already exists!\n"
- "Would you like to keep the old save game (%s) or the new one (%s)?\n"),
- oldFileName, newFileName);
+ "Would you like to keep the old save game (%s) or the new one (%s)?\n"),
+ oldFileName, newFileName);
GUI::MessageDialog dialog0(msg, _("Keep the old one"), _("Keep the new one"));
int choice = dialog0.runModal();
@@ -1299,17 +1299,17 @@ bool Control::convertSaveGame(uint8 slot, char* desc) {
void Control::doRestore() {
uint8 *bufPos = _restoreBuf;
- _objMan->loadLiveList((uint16*)bufPos);
+ _objMan->loadLiveList((uint16 *)bufPos);
bufPos += TOTAL_SECTIONS * 2;
for (uint16 cnt = 0; cnt < NUM_SCRIPT_VARS; cnt++) {
- Logic::_scriptVars[cnt] = *(uint32*)bufPos;
+ Logic::_scriptVars[cnt] = *(uint32 *)bufPos;
bufPos += 4;
}
uint32 playerSize = (sizeof(Object) - 12000) / 4;
- uint32 *playerRaw = (uint32*)_objMan->fetchObject(PLAYER);
+ uint32 *playerRaw = (uint32 *)_objMan->fetchObject(PLAYER);
Object *cpt = _objMan->fetchObject(PLAYER);
for (uint32 cnt2 = 0; cnt2 < playerSize; cnt2++) {
- *playerRaw = *(uint32*)bufPos;
+ *playerRaw = *(uint32 *)bufPos;
playerRaw++;
bufPos += 4;
}
diff --git a/engines/sword1/control.h b/engines/sword1/control.h
index c3550e6f02..a80ea05b03 100644
--- a/engines/sword1/control.h
+++ b/engines/sword1/control.h
@@ -101,7 +101,7 @@ public:
private:
int displayMessage(const char *altButton, const char *message, ...) GCC_PRINTF(3, 4);
- bool convertSaveGame(uint8 slot, char* desc);
+ bool convertSaveGame(uint8 slot, char *desc);
void showSavegameNames();
void deselectSaveslots();
uint8 *_restoreBuf;
@@ -142,7 +142,7 @@ private:
ControlButton *_buttons[MAX_BUTTONS];
static const ButtonInfo _deathButtons[3], _panelButtons[7], _saveButtons[16], _volumeButtons[4];
static const uint8 _languageStrings[8 * 20][43];
- const uint8 (*_lStrings)[43];
+ const uint8(*_lStrings)[43];
Common::SaveFileManager *_saveFileMan;
ObjectMan *_objMan;
ResMan *_resMan;
diff --git a/engines/sword1/detection.cpp b/engines/sword1/detection.cpp
index 4da636bce9..e4c068e667 100644
--- a/engines/sword1/detection.cpp
+++ b/engines/sword1/detection.cpp
@@ -48,7 +48,7 @@ static const PlainGameDescriptor sword1PSXDemoSettings =
// check these subdirectories (if present)
-static const char *g_dirNames[] = { "clusters", "speech", "english", "italian"};
+static const char *const g_dirNames[] = { "clusters", "speech", "english", "italian"};
#define NUM_COMMON_FILES_TO_CHECK 1
#define NUM_PC_FILES_TO_CHECK 3
@@ -59,7 +59,7 @@ static const char *g_dirNames[] = { "clusters", "speech", "english", "italian"};
#define NUM_MAC_DEMO_FILES_TO_CHECK 1
#define NUM_FILES_TO_CHECK NUM_COMMON_FILES_TO_CHECK + NUM_PC_FILES_TO_CHECK + NUM_MAC_FILES_TO_CHECK + NUM_PSX_FILES_TO_CHECK + NUM_DEMO_FILES_TO_CHECK + NUM_MAC_DEMO_FILES_TO_CHECK + NUM_PSX_DEMO_FILES_TO_CHECK
-static const char *g_filesToCheck[NUM_FILES_TO_CHECK] = { // these files have to be found
+static const char *const g_filesToCheck[NUM_FILES_TO_CHECK] = { // these files have to be found
"swordres.rif", // Mac, PC and PSX version
"general.clu", // PC and PSX version
"compacts.clu", // PC and PSX version
@@ -68,7 +68,7 @@ static const char *g_filesToCheck[NUM_FILES_TO_CHECK] = { // these files have to
"compacts.clm", // Mac version only
"scripts.clm", // Mac version only
"paris2.clm", // Mac version (full game only)
- "cows.mad", // this one should only exist in the demo version
+ "cows.mad", // this one should only exist in the demo version
"scripts.clm", // Mac version both demo and full game
"train.plx", // PSX version only
"speech.dat", // PSX version only
@@ -99,20 +99,20 @@ public:
bool SwordMetaEngine::hasFeature(MetaEngineFeature f) const {
return
- (f == kSupportsListSaves) ||
- (f == kSupportsLoadingDuringStartup) ||
- (f == kSupportsDeleteSave) ||
- (f == kSavesSupportMetaInfo) ||
- (f == kSavesSupportThumbnail) ||
- (f == kSavesSupportCreationDate) ||
- (f == kSavesSupportPlayTime);
+ (f == kSupportsListSaves) ||
+ (f == kSupportsLoadingDuringStartup) ||
+ (f == kSupportsDeleteSave) ||
+ (f == kSavesSupportMetaInfo) ||
+ (f == kSavesSupportThumbnail) ||
+ (f == kSavesSupportCreationDate) ||
+ (f == kSavesSupportPlayTime);
}
bool Sword1::SwordEngine::hasFeature(EngineFeature f) const {
return
- (f == kSupportsRTL) ||
- (f == kSupportsSavingDuringRuntime) ||
- (f == kSupportsLoadingDuringRuntime);
+ (f == kSupportsRTL) ||
+ (f == kSupportsSavingDuringRuntime) ||
+ (f == kSupportsLoadingDuringRuntime);
}
GameList SwordMetaEngine::getSupportedGames() const {
@@ -225,7 +225,7 @@ SaveStateList SwordMetaEngine::listSaves(const char *target) const {
char saveName[40];
Common::StringArray filenames = saveFileMan->listSavefiles("sword1.???");
- sort(filenames.begin(), filenames.end()); // Sort (hopefully ensuring we are sorted numerically..)
+ sort(filenames.begin(), filenames.end()); // Sort (hopefully ensuring we are sorted numerically..)
int slotNum = 0;
for (Common::StringArray::const_iterator file = filenames.begin(); file != filenames.end(); ++file) {
@@ -235,7 +235,7 @@ SaveStateList SwordMetaEngine::listSaves(const char *target) const {
if (slotNum >= 0 && slotNum <= 999) {
Common::InSaveFile *in = saveFileMan->openForLoading(*file);
if (in) {
- in->readUint32LE(); // header
+ in->readUint32LE(); // header
in->read(saveName, 40);
saveList.push_back(SaveStateDescriptor(slotNum, saveName));
delete in;
@@ -261,9 +261,9 @@ SaveStateDescriptor SwordMetaEngine::querySaveMetaInfos(const char *target, int
Common::InSaveFile *in = g_system->getSavefileManager()->openForLoading(fileName);
if (in) {
- in->skip(4); // header
+ in->skip(4); // header
in->read(name, sizeof(name));
- in->read(&versionSave, 1); // version
+ in->read(&versionSave, 1); // version
SaveStateDescriptor desc(slot, name);
@@ -323,7 +323,7 @@ Common::Error SwordEngine::loadGameState(int slot) {
reinitialize();
_control->doRestore();
reinitRes();
- return Common::kNoError; // TODO: return success/failure
+ return Common::kNoError; // TODO: return success/failure
}
bool SwordEngine::canLoadGameStateCurrently() {
@@ -333,7 +333,7 @@ bool SwordEngine::canLoadGameStateCurrently() {
Common::Error SwordEngine::saveGameState(int slot, const Common::String &desc) {
_control->setSaveDescription(slot, desc.c_str());
_control->saveGameToFile(slot);
- return Common::kNoError; // TODO: return success/failure
+ return Common::kNoError; // TODO: return success/failure
}
bool SwordEngine::canSaveGameStateCurrently() {
diff --git a/engines/sword1/eventman.cpp b/engines/sword1/eventman.cpp
index d95adebd86..113151bfd5 100644
--- a/engines/sword1/eventman.cpp
+++ b/engines/sword1/eventman.cpp
@@ -44,14 +44,14 @@ void EventManager::checkForEvent(Object *compact) {
if (compact->o_event_list[objCnt].o_event)
for (uint8 globCnt = 0; globCnt < TOTAL_EVENT_SLOTS; globCnt++) {
if (_eventPendingList[globCnt].delay &&
- (_eventPendingList[globCnt].eventNumber == compact->o_event_list[objCnt].o_event)) {
- compact->o_logic = LOGIC_script; //force into script mode
- _eventPendingList[globCnt].delay = 0; //started, so remove from queue
- compact->o_tree.o_script_level++;
- compact->o_tree.o_script_id[compact->o_tree.o_script_level] =
- compact->o_event_list[objCnt].o_event_script;
- compact->o_tree.o_script_pc[compact->o_tree.o_script_level] =
- compact->o_event_list[objCnt].o_event_script;
+ (_eventPendingList[globCnt].eventNumber == compact->o_event_list[objCnt].o_event)) {
+ compact->o_logic = LOGIC_script; //force into script mode
+ _eventPendingList[globCnt].delay = 0; //started, so remove from queue
+ compact->o_tree.o_script_level++;
+ compact->o_tree.o_script_id[compact->o_tree.o_script_level] =
+ compact->o_event_list[objCnt].o_event_script;
+ compact->o_tree.o_script_pc[compact->o_tree.o_script_level] =
+ compact->o_event_list[objCnt].o_event_script;
}
}
}
@@ -60,7 +60,7 @@ void EventManager::checkForEvent(Object *compact) {
bool EventManager::eventValid(int32 event) {
for (uint8 slot = 0; slot < TOTAL_EVENT_SLOTS; slot++)
if ((_eventPendingList[slot].eventNumber == event) &&
- (_eventPendingList[slot].delay))
+ (_eventPendingList[slot].delay))
return true;
return false;
}
@@ -76,15 +76,15 @@ int EventManager::fnCheckForEvent(Object *cpt, int32 id, int32 pause) {
if (cpt->o_event_list[objCnt].o_event)
for (uint8 globCnt = 0; globCnt < TOTAL_EVENT_SLOTS; globCnt++) {
if (_eventPendingList[globCnt].delay &&
- (_eventPendingList[globCnt].eventNumber == cpt->o_event_list[objCnt].o_event)) {
- cpt->o_logic = LOGIC_script; //force into script mode
- _eventPendingList[globCnt].delay = 0; //started, so remove from queue
- cpt->o_tree.o_script_level++;
- cpt->o_tree.o_script_id[cpt->o_tree.o_script_level] =
- cpt->o_event_list[objCnt].o_event_script;
- cpt->o_tree.o_script_pc[cpt->o_tree.o_script_level] =
- cpt->o_event_list[objCnt].o_event_script;
- return SCRIPT_STOP;
+ (_eventPendingList[globCnt].eventNumber == cpt->o_event_list[objCnt].o_event)) {
+ cpt->o_logic = LOGIC_script; //force into script mode
+ _eventPendingList[globCnt].delay = 0; //started, so remove from queue
+ cpt->o_tree.o_script_level++;
+ cpt->o_tree.o_script_id[cpt->o_tree.o_script_level] =
+ cpt->o_event_list[objCnt].o_event_script;
+ cpt->o_tree.o_script_pc[cpt->o_tree.o_script_level] =
+ cpt->o_event_list[objCnt].o_event_script;
+ return SCRIPT_STOP;
}
}
}
diff --git a/engines/sword1/logic.cpp b/engines/sword1/logic.cpp
index 5b42c9340e..d1c69c80ff 100644
--- a/engines/sword1/logic.cpp
+++ b/engines/sword1/logic.cpp
@@ -89,14 +89,14 @@ void Logic::initialize() {
delete _textMan;
_textMan = new Text(_objMan, _resMan,
- (SwordEngine::_systemVars.language == BS1_CZECH) ? true : false);
+ (SwordEngine::_systemVars.language == BS1_CZECH) ? true : false);
_screen->useTextManager(_textMan);
_textRunning = _speechRunning = false;
_speechFinished = true;
}
void Logic::newScreen(uint32 screen) {
- Object *compact = (Object*)_objMan->fetchObject(PLAYER);
+ Object *compact = (Object *)_objMan->fetchObject(PLAYER);
// work around script bug #911508
if (((screen == 25) || (_scriptVars[SCREEN] == 25)) && (_scriptVars[SAND_FLAG] == 4)) {
@@ -115,15 +115,15 @@ void Logic::newScreen(uint32 screen) {
if (SwordEngine::_systemVars.justRestoredGame) { // if we've just restored a game - we want George to be exactly as saved
fnAddHuman(NULL, 0, 0, 0, 0, 0, 0, 0);
if (_scriptVars[GEORGE_WALKING]) { // except that if George was walking when we saveed the game
- fnStandAt(compact, PLAYER, _scriptVars[CHANGE_X], _scriptVars[CHANGE_Y], _scriptVars[CHANGE_DIR], _scriptVars[CHANGE_STANCE], 0,0);
- fnIdle(compact,PLAYER,0,0,0,0,0,0);
+ fnStandAt(compact, PLAYER, _scriptVars[CHANGE_X], _scriptVars[CHANGE_Y], _scriptVars[CHANGE_DIR], _scriptVars[CHANGE_STANCE], 0, 0);
+ fnIdle(compact, PLAYER, 0, 0, 0, 0, 0, 0);
_scriptVars[GEORGE_WALKING] = 0;
}
SwordEngine::_systemVars.justRestoredGame = 0;
_music->startMusic(_scriptVars[CURRENT_MUSIC], 1);
} else { // if we haven't just restored a game, set George to stand, etc
compact->o_screen = _scriptVars[NEW_SCREEN]; //move the mega/player at this point between screens
- fnStandAt(compact, PLAYER, _scriptVars[CHANGE_X], _scriptVars[CHANGE_Y], _scriptVars[CHANGE_DIR], _scriptVars[CHANGE_STANCE], 0,0);
+ fnStandAt(compact, PLAYER, _scriptVars[CHANGE_X], _scriptVars[CHANGE_Y], _scriptVars[CHANGE_DIR], _scriptVars[CHANGE_STANCE], 0, 0);
fnChangeFloor(compact, PLAYER, _scriptVars[CHANGE_PLACE], 0, 0, 0, 0, 0);
}
}
@@ -227,7 +227,7 @@ void Logic::processLogic(Object *compact, uint32 id) {
case LOGIC_restart:
compact->o_tree.o_script_pc[compact->o_tree.o_script_level] = compact->o_tree.o_script_id[compact->o_tree.o_script_level];
compact->o_logic = LOGIC_script;
- logicRet=1;
+ logicRet = 1;
break;
case LOGIC_bookmark:
memcpy(&(compact->o_tree.o_script_level), &(compact->o_bookmark.o_script_level), sizeof(ScriptTree));
@@ -293,41 +293,41 @@ int Logic::logicArAnimate(Object *compact, uint32 id) {
compact->o_status |= STAT_SHRINK;
route = compact->o_route;
- walkPc =compact->o_walk_pc;
- compact->o_frame =route[walkPc].frame;
- compact->o_dir =route[walkPc].dir;
- compact->o_xcoord =route[walkPc].x;
- compact->o_ycoord =route[walkPc].y;
- compact->o_anim_x =compact->o_xcoord;
- compact->o_anim_y =compact->o_ycoord;
+ walkPc = compact->o_walk_pc;
+ compact->o_frame = route[walkPc].frame;
+ compact->o_dir = route[walkPc].dir;
+ compact->o_xcoord = route[walkPc].x;
+ compact->o_ycoord = route[walkPc].y;
+ compact->o_anim_x = compact->o_xcoord;
+ compact->o_anim_y = compact->o_ycoord;
if (((_scriptVars[GEORGE_WALKING] == 2) && (walkPc > 5) && (id == PLAYER) &&
- (route[walkPc - 1].step == 5) && (route[walkPc].step == 0)) ||
- ((_scriptVars[GEORGE_WALKING] == 3) && (id == PLAYER))) {
-
- compact->o_frame = 96 + compact->o_dir; //reset
- if ((compact->o_dir != 2) && (compact->o_dir != 6)) { // on verticals and diagonals stand where george is
- compact->o_xcoord = route[walkPc - 1].x;
- compact->o_ycoord = route[walkPc - 1].y;
- compact->o_anim_x = compact->o_xcoord;
- compact->o_anim_y = compact->o_ycoord;
- }
- compact->o_logic = LOGIC_script;
- compact->o_down_flag = 0; //0 means error
- _scriptVars[GEORGE_WALKING] = 0;
- route[compact->o_walk_pc+1].frame = 512; //end of sequence
- if (_scriptVars[MEGA_ON_GRID] == 2)
- _scriptVars[MEGA_ON_GRID] = 0;
+ (route[walkPc - 1].step == 5) && (route[walkPc].step == 0)) ||
+ ((_scriptVars[GEORGE_WALKING] == 3) && (id == PLAYER))) {
+
+ compact->o_frame = 96 + compact->o_dir; //reset
+ if ((compact->o_dir != 2) && (compact->o_dir != 6)) { // on verticals and diagonals stand where george is
+ compact->o_xcoord = route[walkPc - 1].x;
+ compact->o_ycoord = route[walkPc - 1].y;
+ compact->o_anim_x = compact->o_xcoord;
+ compact->o_anim_y = compact->o_ycoord;
+ }
+ compact->o_logic = LOGIC_script;
+ compact->o_down_flag = 0; //0 means error
+ _scriptVars[GEORGE_WALKING] = 0;
+ route[compact->o_walk_pc + 1].frame = 512; //end of sequence
+ if (_scriptVars[MEGA_ON_GRID] == 2)
+ _scriptVars[MEGA_ON_GRID] = 0;
}
compact->o_walk_pc++;
- if (route[compact->o_walk_pc].frame == 512) { //end of sequence
+ if (route[compact->o_walk_pc].frame == 512) { //end of sequence
compact->o_logic = LOGIC_script;
if (((_scriptVars[GEORGE_WALKING] == 2) || (_scriptVars[GEORGE_WALKING] == 1)) &&
- (id == PLAYER)) {
- _scriptVars[GEORGE_WALKING] = 0;
- if (_scriptVars[MEGA_ON_GRID] == 2)
- _scriptVars[MEGA_ON_GRID] = 0;
+ (id == PLAYER)) {
+ _scriptVars[GEORGE_WALKING] = 0;
+ if (_scriptVars[MEGA_ON_GRID] == 2)
+ _scriptVars[MEGA_ON_GRID] = 0;
}
}
return 0;
@@ -360,16 +360,16 @@ int Logic::speechDriver(Object *compact) {
_speechFinished = true;
}
if (compact->o_anim_resource) {
- uint8 *animData = ((uint8*)_resMan->openFetchRes(compact->o_anim_resource)) + sizeof(Header);
+ uint8 *animData = ((uint8 *)_resMan->openFetchRes(compact->o_anim_resource)) + sizeof(Header);
int32 numFrames = _resMan->readUint32(animData);
animData += 4;
compact->o_anim_pc++; // go to next frame of anim
if (_speechFinished || (compact->o_anim_pc >= numFrames) ||
- (_speechRunning && (_sound->amISpeaking() == 0)))
- compact->o_anim_pc = 0; //set to frame 0, closed mouth
+ (_speechRunning && (_sound->amISpeaking() == 0)))
+ compact->o_anim_pc = 0; //set to frame 0, closed mouth
- AnimUnit *animPtr = (AnimUnit*)(animData + sizeof(AnimUnit) * compact->o_anim_pc);
+ AnimUnit *animPtr = (AnimUnit *)(animData + sizeof(AnimUnit) * compact->o_anim_pc);
if (!(compact->o_status & STAT_SHRINK)) {
compact->o_anim_x = _resMan->getUint32(animPtr->animX);
compact->o_anim_y = _resMan->getUint32(animPtr->animY);
@@ -385,10 +385,10 @@ int Logic::fullAnimDriver(Object *compact) {
compact->o_logic = LOGIC_script;
return 1;
}
- uint8 *data = ((uint8*)_resMan->openFetchRes(compact->o_anim_resource)) + sizeof(Header);
+ uint8 *data = ((uint8 *)_resMan->openFetchRes(compact->o_anim_resource)) + sizeof(Header);
uint32 numFrames = _resMan->readUint32(data);
data += 4;
- AnimUnit *animPtr = (AnimUnit*)(data + compact->o_anim_pc * sizeof(AnimUnit));
+ AnimUnit *animPtr = (AnimUnit *)(data + compact->o_anim_pc * sizeof(AnimUnit));
compact->o_anim_x = compact->o_xcoord = _resMan->getUint32(animPtr->animX);
compact->o_anim_y = compact->o_ycoord = _resMan->getUint32(animPtr->animY);
@@ -407,9 +407,9 @@ int Logic::animDriver(Object *compact) {
compact->o_logic = LOGIC_script;
return 1;
}
- uint8 *data = ((uint8*)_resMan->openFetchRes(compact->o_anim_resource)) + sizeof(Header);
+ uint8 *data = ((uint8 *)_resMan->openFetchRes(compact->o_anim_resource)) + sizeof(Header);
uint32 numFrames = _resMan->readUint32(data);
- AnimUnit *animPtr = (AnimUnit*)(data + 4 + compact->o_anim_pc * sizeof(AnimUnit));
+ AnimUnit *animPtr = (AnimUnit *)(data + 4 + compact->o_anim_pc * sizeof(AnimUnit));
if (!(compact->o_status & STAT_SHRINK)) {
compact->o_anim_x = _resMan->getUint32(animPtr->animX);
@@ -426,9 +426,9 @@ int Logic::animDriver(Object *compact) {
}
void Logic::updateScreenParams() {
- Object *compact = (Object*)_objMan->fetchObject(PLAYER);
+ Object *compact = (Object *)_objMan->fetchObject(PLAYER);
_screen->setScrolling((int16)(compact->o_xcoord - _scriptVars[FEET_X]),
- (int16)(compact->o_ycoord - _scriptVars[FEET_Y]));
+ (int16)(compact->o_ycoord - _scriptVars[FEET_Y]));
}
int Logic::scriptManager(Object *compact, uint32 id) {
@@ -465,7 +465,7 @@ void Logic::runMouseScript(Object *cpt, int32 scriptId) {
}
int Logic::interpretScript(Object *compact, int id, Header *scriptModule, int scriptBase, int scriptNum) {
- int32 *scriptCode = (int32*)(((uint8*)scriptModule) + sizeof(Header));
+ int32 *scriptCode = (int32 *)(((uint8 *)scriptModule) + sizeof(Header));
int32 stack[MAX_STACK_SIZE];
int32 stackIdx = 0;
int32 offset;
@@ -609,7 +609,7 @@ int Logic::interpretScript(Object *compact, int id, Header *scriptModule, int sc
debug(9, "IT_SCRIPTEND");
return 0;
case IT_POPVAR: // pop a variable
- debug(9, "IT_POPVAR: ScriptVars[%d] = %d", scriptCode[pc], stack[stackIdx-1]);
+ debug(9, "IT_POPVAR: ScriptVars[%d] = %d", scriptCode[pc], stack[stackIdx - 1]);
varNum = scriptCode[pc++];
if (SwordEngine::_systemVars.isDemo && SwordEngine::isPc()) {
if (varNum >= 397) // BS1 Demo has different number of script variables
@@ -622,15 +622,15 @@ int Logic::interpretScript(Object *compact, int id, Header *scriptModule, int sc
case IT_POPLONGOFFSET:
offset = scriptCode[pc++];
debug(9, "IT_POPLONGOFFSET: Cpt[%d] = %d", offset, stack[stackIdx - 1]);
- *((int32 *)((uint8*)compact + offset)) = stack[--stackIdx];
+ *((int32 *)((uint8 *)compact + offset)) = stack[--stackIdx];
break;
case IT_PUSHLONGOFFSET:
offset = scriptCode[pc++];
- debug(9, "IT_PUSHLONGOFFSET: PUSH Cpt[%d] (==%d)", offset, *((int32 *)((uint8*)compact + offset)));
- stack[stackIdx++] = *((int32 *)((uint8*)compact + offset));
+ debug(9, "IT_PUSHLONGOFFSET: PUSH Cpt[%d] (==%d)", offset, *((int32 *)((uint8 *)compact + offset)));
+ stack[stackIdx++] = *((int32 *)((uint8 *)compact + offset));
break;
case IT_SKIPONFALSE:
- debug(9, "IT_SKIPONFALSE: %d (%s)", scriptCode[pc], (stack[stackIdx-1] ? "IS TRUE (NOT SKIPPED)" : "IS FALSE (SKIPPED)"));
+ debug(9, "IT_SKIPONFALSE: %d (%s)", scriptCode[pc], (stack[stackIdx - 1] ? "IS TRUE (NOT SKIPPED)" : "IS FALSE (SKIPPED)"));
if (stack[--stackIdx])
pc++;
else
@@ -645,12 +645,12 @@ int Logic::interpretScript(Object *compact, int id, Header *scriptModule, int sc
{
int switchValue = stack[--stackIdx];
int switchCount = scriptCode[pc++];
- int doneSwitch=0;
+ int doneSwitch = 0;
- for (int cnt = 0; (cnt < switchCount) && (doneSwitch==0); cnt++) {
+ for (int cnt = 0; (cnt < switchCount) && (doneSwitch == 0); cnt++) {
if (switchValue == scriptCode[pc]) {
- pc += scriptCode[pc+1];
- doneSwitch=1;
+ pc += scriptCode[pc + 1];
+ doneSwitch = 1;
} else
pc += 2;
}
@@ -659,7 +659,7 @@ int Logic::interpretScript(Object *compact, int id, Header *scriptModule, int sc
}
break;
case IT_SKIPONTRUE: // skip if expression true
- debug(9, "IT_SKIPONTRUE: %d (%s)", scriptCode[pc], (stack[stackIdx-1] ? "IS TRUE (SKIPPED)" : "IS FALSE (NOT SKIPPED)"));
+ debug(9, "IT_SKIPONTRUE: %d (%s)", scriptCode[pc], (stack[stackIdx - 1] ? "IS TRUE (SKIPPED)" : "IS FALSE (NOT SKIPPED)"));
stackIdx--;
if (stack[stackIdx])
pc += scriptCode[pc];
@@ -667,7 +667,7 @@ int Logic::interpretScript(Object *compact, int id, Header *scriptModule, int sc
pc++;
break;
case IT_PRINTF:
- debug(0, "IT_PRINTF(%d)",stack[stackIdx]);
+ debug(0, "IT_PRINTF(%d)", stack[stackIdx]);
break;
case IT_RESTARTSCRIPT:
debug(9, "IT_RESTARTSCRIPT");
@@ -676,16 +676,16 @@ int Logic::interpretScript(Object *compact, int id, Header *scriptModule, int sc
case IT_POPWORDOFFSET:
offset = scriptCode[pc++];
debug(9, "IT_POPWORDOFFSET: Cpt[%d] = %d", offset, stack[stackIdx - 1] & 0xFFFF);
- *((int32 *)((uint8*)compact + offset)) = stack[--stackIdx] & 0xffff;
+ *((int32 *)((uint8 *)compact + offset)) = stack[--stackIdx] & 0xffff;
break;
case IT_PUSHWORDOFFSET:
offset = scriptCode[pc++];
- debug(9, "IT_PUSHWORDOFFSET: PUSH Cpt[%d] == %d", offset, (*((int32 *)((uint8*)compact + offset))) & 0xffff);
- stack[stackIdx++] = (*((int32 *)((uint8*)compact + offset))) & 0xffff;
+ debug(9, "IT_PUSHWORDOFFSET: PUSH Cpt[%d] == %d", offset, (*((int32 *)((uint8 *)compact + offset))) & 0xffff);
+ stack[stackIdx++] = (*((int32 *)((uint8 *)compact + offset))) & 0xffff;
break;
default:
- error("Invalid operator %d",scriptCode[pc-1]);
- return 0; // for compilers that don't support NORETURN
+ error("Invalid operator %d", scriptCode[pc - 1]);
+ return 0; // for compilers that don't support NORETURN
}
}
}
@@ -831,7 +831,7 @@ int Logic::fnAnim(Object *cpt, int32 id, int32 cdt, int32 spr, int32 e, int32 f,
AnimSet *animTab;
if (cdt && (!spr)) {
- animTab = (AnimSet*)((uint8*)_resMan->openFetchRes(cdt) + sizeof(Header));
+ animTab = (AnimSet *)((uint8 *)_resMan->openFetchRes(cdt) + sizeof(Header));
animTab += cpt->o_dir;
cpt->o_anim_resource = _resMan->getUint32(animTab->cdt);
@@ -865,13 +865,13 @@ int Logic::fnSetFrame(Object *cpt, int32 id, int32 cdt, int32 spr, int32 frameNo
AnimUnit *animPtr;
- uint8 *data = (uint8*)_resMan->openFetchRes(cdt);
+ uint8 *data = (uint8 *)_resMan->openFetchRes(cdt);
data += sizeof(Header);
if (frameNo == LAST_FRAME)
frameNo = _resMan->readUint32(data) - 1;
data += 4;
- animPtr = (AnimUnit*)(data + frameNo * sizeof(AnimUnit));
+ animPtr = (AnimUnit *)(data + frameNo * sizeof(AnimUnit));
cpt->o_anim_x = _resMan->getUint32(animPtr->animX);
cpt->o_anim_y = _resMan->getUint32(animPtr->animY);
@@ -895,13 +895,13 @@ int Logic::fnFullAnim(Object *cpt, int32 id, int32 anim, int32 graphic, int32 e,
}
int Logic::fnFullSetFrame(Object *cpt, int32 id, int32 cdt, int32 spr, int32 frameNo, int32 f, int32 z, int32 x) {
- uint8 *data = (uint8*)_resMan->openFetchRes(cdt) + sizeof(Header);
+ uint8 *data = (uint8 *)_resMan->openFetchRes(cdt) + sizeof(Header);
if (frameNo == LAST_FRAME)
frameNo = _resMan->readUint32(data) - 1;
data += 4;
- AnimUnit *animPtr = (AnimUnit*)(data + sizeof(AnimUnit) * frameNo);
+ AnimUnit *animPtr = (AnimUnit *)(data + sizeof(AnimUnit) * frameNo);
cpt->o_anim_x = cpt->o_xcoord = _resMan->getUint32(animPtr->animX);
cpt->o_anim_y = cpt->o_ycoord = _resMan->getUint32(animPtr->animY);
cpt->o_frame = _resMan->getUint32(animPtr->animFrame);
@@ -1115,7 +1115,7 @@ int Logic::fnISpeak(Object *cpt, int32 id, int32 cdt, int32 textNo, int32 spr, i
// first setup the talk animation
if (cdt && (!spr)) { // if 'cdt' is non-zero but 'spr' is zero - 'cdt' is an anim table tag
- AnimSet *animTab = (AnimSet*)((uint8*)_resMan->openFetchRes(cdt) + sizeof(Header));
+ AnimSet *animTab = (AnimSet *)((uint8 *)_resMan->openFetchRes(cdt) + sizeof(Header));
animTab += cpt->o_dir;
cpt->o_anim_resource = _resMan->getUint32(animTab->cdt);
@@ -1152,10 +1152,10 @@ int Logic::fnISpeak(Object *cpt, int32 id, int32 cdt, int32 textNo, int32 spr, i
char *text = _objMan->lockText(textNo);
cpt->o_speech_time = strlen(text) + 5;
- uint32 textCptId = _textMan->lowTextManager((uint8*)text, cpt->o_speech_width, (uint8)cpt->o_speech_pen);
+ uint32 textCptId = _textMan->lowTextManager((uint8 *)text, cpt->o_speech_width, (uint8)cpt->o_speech_pen);
_objMan->unlockText(textNo);
- Object * textCpt = _objMan->fetchObject(textCptId);
+ Object *textCpt = _objMan->fetchObject(textCptId);
textCpt->o_screen = cpt->o_screen;
textCpt->o_target = textCptId;
@@ -1189,8 +1189,8 @@ int Logic::fnISpeak(Object *cpt, int32 id, int32 cdt, int32 textNo, int32 spr, i
textTopMargin = SCREEN_TOP_EDGE + TEXT_MARGIN + _scriptVars[SCROLL_OFFSET_Y];
textBottomMargin = SCREEN_BOTTOM_EDGE - TEXT_MARGIN + _scriptVars[SCROLL_OFFSET_Y] - textSpriteHeight;
- textCpt->o_anim_x = textCpt->o_xcoord = inRange(textLeftMargin, textX, textRightMargin);
- textCpt->o_anim_y = textCpt->o_ycoord = inRange(textTopMargin, textY, textBottomMargin);
+ textCpt->o_anim_x = textCpt->o_xcoord = CLIP<uint16>(textX, textLeftMargin, textRightMargin);
+ textCpt->o_anim_y = textCpt->o_ycoord = CLIP<uint16>(textY, textTopMargin, textBottomMargin);
}
return SCRIPT_STOP;
}
@@ -1247,7 +1247,7 @@ int Logic::fnChangeSpeechText(Object *cpt, int32 id, int32 tar, int32 width, int
//The game is halted for debugging. Maybe we'll remove this later.
int Logic::fnTalkError(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x) {
error("fnTalkError for id %d, instruction %d", id, cpt->o_down_flag);
- return SCRIPT_STOP; // for compilers that don't support NORETURN
+ return SCRIPT_STOP; // for compilers that don't support NORETURN
}
int Logic::fnStartTalk(Object *cpt, int32 id, int32 target, int32 d, int32 e, int32 f, int32 z, int32 x) {
@@ -1414,12 +1414,12 @@ int Logic::fnWalk(Object *cpt, int32 id, int32 x, int32 y, int32 dir, int32 stan
int32 target = _scriptVars[CLICK_ID];
// exceptions: compacts that use hand pointers but are not actually exits
if ((target != LEFT_SCROLL_POINTER) && (target != RIGHT_SCROLL_POINTER) &&
- (target != FLOOR_63) && (target != ROOF_63) && (target != GUARD_ROOF_63) &&
- (target != LEFT_TREE_POINTER_71) && (target != RIGHT_TREE_POINTER_71)) {
+ (target != FLOOR_63) && (target != ROOF_63) && (target != GUARD_ROOF_63) &&
+ (target != LEFT_TREE_POINTER_71) && (target != RIGHT_TREE_POINTER_71)) {
target = _objMan->fetchObject(_scriptVars[CLICK_ID])->o_mouse_on;
if ((target >= SCR_exit0) && (target <= SCR_exit9)) {
- fnStandAt(cpt,id,x,y,dir,stance,0,0);
+ fnStandAt(cpt, id, x, y, dir, stance, 0, 0);
return SCRIPT_STOP;
}
}
@@ -1439,13 +1439,13 @@ int Logic::fnTurn(Object *cpt, int32 id, int32 dir, int32 stance, int32 c, int32
dir = 9;
int route = _router->routeFinder(id, cpt, cpt->o_xcoord, cpt->o_ycoord, dir);
- if (route)
- cpt->o_down_flag = 1; //1 means ok
+ if (route)
+ cpt->o_down_flag = 1; //1 means ok
else
- cpt->o_down_flag = 0; //0 means error
+ cpt->o_down_flag = 0; //0 means error
cpt->o_logic = LOGIC_AR_animate;
- cpt->o_walk_pc = 0; //reset
+ cpt->o_walk_pc = 0; //reset
return SCRIPT_STOP;
}
@@ -1602,7 +1602,7 @@ int Logic::fnStopMusic(Object *cpt, int32 id, int32 a, int32 b, int32 c, int32 d
int Logic::fnInnerSpace(Object *cpt, int32 id, int32 a, int32 b, int32 c, int32 d, int32 z, int32 x) {
error("fnInnerSpace() not working");
- return SCRIPT_STOP; // for compilers that don't support NORETURN
+ return SCRIPT_STOP; // for compilers that don't support NORETURN
}
int Logic::fnSetScreen(Object *cpt, int32 id, int32 target, int32 screen, int32 c, int32 d, int32 z, int32 x) {
@@ -1689,10 +1689,6 @@ int Logic::fnBlack(Object *cpt, int32 id, int32 a, int32 b, int32 c, int32 d, in
return SCRIPT_CONT;
}
-uint16 Logic::inRange(uint16 a, uint16 b, uint16 c) {
- return (a > b)? a : (((b > c) ? c : b));
-}
-
void Logic::startPosCallFn(uint8 fnId, uint32 param1, uint32 param2, uint32 param3) {
Object *obj = NULL;
switch (fnId) {
@@ -1789,7 +1785,7 @@ void Logic::startPositions(uint32 pos) {
if (pos == 0)
pos = 1;
Object *compact = _objMan->fetchObject(PLAYER);
- fnEnterSection(compact, PLAYER, pos, 0, 0, 0, 0, 0); // (automatically opens the compact resource for that section)
+ fnEnterSection(compact, PLAYER, pos, 0, 0, 0, 0, 0); // (automatically opens the compact resource for that section)
SwordEngine::_systemVars.controlPanelMode = CP_NORMAL;
SwordEngine::_systemVars.wantFade = true;
}
diff --git a/engines/sword1/logic.h b/engines/sword1/logic.h
index 13ddbc989b..a146d340cf 100644
--- a/engines/sword1/logic.h
+++ b/engines/sword1/logic.h
@@ -35,7 +35,7 @@ class OSystem;
namespace Sword1 {
#define NON_ZERO_SCRIPT_VARS 95
-#define NUM_SCRIPT_VARS 1179
+#define NUM_SCRIPT_VARS 1179
class SwordEngine;
class Text;
@@ -63,7 +63,7 @@ public:
static uint32 _scriptVars[NUM_SCRIPT_VARS];
// public for mouse (menu looking)
- int cfnPresetScript (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int cfnPresetScript(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
private:
SwordEngine *_vm;
ObjectMan *_objMan;
@@ -97,118 +97,116 @@ private:
void setupMcodeTable();
const BSMcodeTable *_mcodeTable;
- uint16 inRange(uint16 a, uint16 b, uint16 c);
-
//- mcodeTable:
- int fnBackground (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnForeground (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnSort (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnNoSprite (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnMegaSet (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnAnim (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnSetFrame (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnFullAnim (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnFullSetFrame (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnFadeDown (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnFadeUp (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnCheckFade (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnBackground(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnForeground(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnSort(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnNoSprite(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnMegaSet(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnAnim(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnSetFrame(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnFullAnim(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnFullSetFrame(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnFadeDown(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnFadeUp(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnCheckFade(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
int fnSetSpritePalette(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
int fnSetWholePalette(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
int fnSetFadeTargetPalette(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
int fnSetPaletteToFade(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
int fnSetPaletteToCut(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnPlaySequence (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
-
- int fnIdle (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnPause (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnPauseSeconds (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnQuit (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnKillId (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnSuicide (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnNewScript (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnSubScript (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnRestartScript (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnSetBookmark (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnGotoBookmark (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnSendSync (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnWaitSync (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnPlaySequence(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+
+ int fnIdle(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnPause(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnPauseSeconds(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnQuit(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnKillId(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnSuicide(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnNewScript(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnSubScript(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnRestartScript(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnSetBookmark(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnGotoBookmark(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnSendSync(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnWaitSync(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
int cfnClickInteract(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int cfnSetScript (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
-
- int fnInteract (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnIssueEvent (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnCheckForEvent (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnWipeHands (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnISpeak (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnTheyDo (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnTheyDoWeWait (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnWeWait (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int cfnSetScript(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+
+ int fnInteract(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnIssueEvent(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnCheckForEvent(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnWipeHands(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnISpeak(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnTheyDo(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnTheyDoWeWait(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnWeWait(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
int fnChangeSpeechText(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnTalkError (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnStartTalk (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnTalkError(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnStartTalk(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
int fnCheckForTextLine(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
int fnAddTalkWaitStatusBit(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
int fnRemoveTalkWaitStatusBit(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnNoHuman (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnAddHuman (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnBlankMouse (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnNormalMouse (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnLockMouse (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnUnlockMouse (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnNoHuman(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnAddHuman(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnBlankMouse(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnNormalMouse(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnLockMouse(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnUnlockMouse(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
int fnSetMousePointer(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
int fnSetMouseLuggage(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnMouseOn (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnMouseOff (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnChooser (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnEndChooser (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnStartMenu (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnEndMenu (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
-
- int cfnReleaseMenu (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
-
- int fnAddSubject (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnAddObject (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnRemoveObject (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnEnterSection (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnLeaveSection (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnChangeFloor (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnWalk (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnTurn (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnStand (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnStandAt (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnFace (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnFaceXy (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnIsFacing (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnGetTo (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnGetToError (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnGetPos (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnGetGamepadXy (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnPlayFx (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnStopFx (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnPlayMusic (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnStopMusic (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnInnerSpace (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnRandom (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnSetScreen (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnPreload (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnCheckCD (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnRestartGame (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnQuitGame (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnDeathScreen (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnSetParallax (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnTdebug (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
-
- int fnRedFlash (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnBlueFlash (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnYellow (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnGreen (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnPurple (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnBlack (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnMouseOn(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnMouseOff(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnChooser(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnEndChooser(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnStartMenu(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnEndMenu(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+
+ int cfnReleaseMenu(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+
+ int fnAddSubject(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnAddObject(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnRemoveObject(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnEnterSection(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnLeaveSection(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnChangeFloor(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnWalk(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnTurn(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnStand(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnStandAt(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnFace(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnFaceXy(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnIsFacing(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnGetTo(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnGetToError(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnGetPos(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnGetGamepadXy(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnPlayFx(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnStopFx(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnPlayMusic(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnStopMusic(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnInnerSpace(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnRandom(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnSetScreen(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnPreload(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnCheckCD(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnRestartGame(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnQuitGame(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnDeathScreen(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnSetParallax(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnTdebug(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+
+ int fnRedFlash(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnBlueFlash(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnYellow(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnGreen(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnPurple(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+ int fnBlack(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
static const uint32 _scriptVarInit[NON_ZERO_SCRIPT_VARS][2];
- static const uint8 *_startData[];
- static const uint8 *_helperData[];
+ static const uint8 *const _startData[];
+ static const uint8 *const _helperData[];
void startPosCallFn(uint8 fnId, uint32 param1, uint32 param2, uint32 param3);
void runStartScript(const uint8 *data);
};
diff --git a/engines/sword1/memman.cpp b/engines/sword1/memman.cpp
index 9fd763084a..19809249b5 100644
--- a/engines/sword1/memman.cpp
+++ b/engines/sword1/memman.cpp
@@ -40,7 +40,7 @@ MemMan::~MemMan() {
void MemMan::alloc(MemHandle *bsMem, uint32 pSize, uint16 pCond) {
_alloced += pSize;
- bsMem->data = (void*)malloc(pSize);
+ bsMem->data = (void *)malloc(pSize);
if (!bsMem->data)
error("MemMan::alloc(): Can't alloc %d bytes of memory.", pSize);
bsMem->cond = pCond;
diff --git a/engines/sword1/memman.h b/engines/sword1/memman.h
index 3f822189eb..7f84720248 100644
--- a/engines/sword1/memman.h
+++ b/engines/sword1/memman.h
@@ -35,9 +35,9 @@ struct MemHandle {
MemHandle *next, *prev;
};
// mem conditions:
-#define MEM_FREED 0
-#define MEM_CAN_FREE 1
-#define MEM_DONT_FREE 2
+#define MEM_FREED 0
+#define MEM_CAN_FREE 1
+#define MEM_DONT_FREE 2
#define MAX_ALLOC (6*1024*1024) // max amount of mem we want to alloc().
diff --git a/engines/sword1/menu.cpp b/engines/sword1/menu.cpp
index 3a99602fec..f61e10106a 100644
--- a/engines/sword1/menu.cpp
+++ b/engines/sword1/menu.cpp
@@ -85,7 +85,7 @@ void MenuIcon::setSelect(bool pSel) {
void MenuIcon::draw(const byte *fadeMask, int8 fadeStatus) {
uint16 x = _menuPos * 40;
- uint16 y = (_menuType == MENU_TOP)?(0):(440);
+ uint16 y = (_menuType == MENU_TOP) ? (0) : (440);
_screen->showFrame(x, y, _resId, _frame + (_selected ? 1 : 0), fadeMask, fadeStatus);
}
@@ -193,7 +193,7 @@ uint8 Menu::checkMenuClick(uint8 menuType) {
_mouse->setLuggage(0, 0);
Logic::_scriptVars[OBJECT_HELD] = 0; // reselected => deselect it
} else { // the player is clicking another item on this one.
- // run its use-script, if there is one
+ // run its use-script, if there is one
Logic::_scriptVars[SECOND_ITEM] = _menuList[cnt];
_mouse->setLuggage(0, 0);
}
diff --git a/engines/sword1/mouse.cpp b/engines/sword1/mouse.cpp
index cbf951aebc..4a62995d96 100644
--- a/engines/sword1/mouse.cpp
+++ b/engines/sword1/mouse.cpp
@@ -47,7 +47,7 @@ Mouse::~Mouse() {
setLuggage(0, 0);
setPointer(0, 0);
- for (uint8 cnt = 0; cnt < 17; cnt++) // close mouse cursor resources
+ for (uint8 cnt = 0; cnt < 17; cnt++) // close mouse cursor resources
_resMan->resClose(MSE_POINTER + cnt);
}
@@ -60,7 +60,7 @@ void Mouse::initialize() {
_mouseOverride = false;
_currentPtrId = _currentLuggageId = 0;
- for (uint8 cnt = 0; cnt < 17; cnt++) // force res manager to keep mouse
+ for (uint8 cnt = 0; cnt < 17; cnt++) // force res manager to keep mouse
_resMan->resOpen(MSE_POINTER + cnt); // cursors in memory all the time
CursorMan.showMouse(false);
@@ -112,7 +112,7 @@ void Mouse::engine(uint16 x, uint16 y, uint16 eventFlags) {
_mouse.y = y;
if (!(Logic::_scriptVars[MOUSE_STATUS] & 1)) { // no human?
_numObjs = 0;
- return; // no human, so we don't want the mouse engine
+ return; // no human, so we don't want the mouse engine
}
if (!Logic::_scriptVars[TOP_MENU_DISABLED]) {
@@ -144,12 +144,12 @@ void Mouse::engine(uint16 x, uint16 y, uint16 eventFlags) {
for (uint16 priority = 0; (priority < 10) && (!touchedId); priority++) {
for (uint16 cnt = 0; (cnt < _numObjs) && (!touchedId); cnt++) {
if ((_objList[cnt].compact->o_priority == priority) &&
- (Logic::_scriptVars[MOUSE_X] >= (uint32)_objList[cnt].compact->o_mouse_x1) &&
- (Logic::_scriptVars[MOUSE_X] <= (uint32)_objList[cnt].compact->o_mouse_x2) &&
- (Logic::_scriptVars[MOUSE_Y] >= (uint32)_objList[cnt].compact->o_mouse_y1) &&
- (Logic::_scriptVars[MOUSE_Y] <= (uint32)_objList[cnt].compact->o_mouse_y2)) {
- touchedId = _objList[cnt].id;
- clicked = cnt;
+ (Logic::_scriptVars[MOUSE_X] >= (uint32)_objList[cnt].compact->o_mouse_x1) &&
+ (Logic::_scriptVars[MOUSE_X] <= (uint32)_objList[cnt].compact->o_mouse_x2) &&
+ (Logic::_scriptVars[MOUSE_Y] >= (uint32)_objList[cnt].compact->o_mouse_y1) &&
+ (Logic::_scriptVars[MOUSE_Y] <= (uint32)_objList[cnt].compact->o_mouse_y2)) {
+ touchedId = _objList[cnt].id;
+ clicked = cnt;
}
}
}
@@ -160,7 +160,7 @@ void Mouse::engine(uint16 x, uint16 y, uint16 eventFlags) {
_getOff = 0;
}
if (touchedId) { // there's something new selected, now.
- if (_objList[clicked].compact->o_mouse_on) //run its get on
+ if (_objList[clicked].compact->o_mouse_on) //run its get on
_logic->runMouseScript(_objList[clicked].compact, _objList[clicked].compact->o_mouse_on);
_getOff = _objList[clicked].compact->o_mouse_off; //setup get-off for later
@@ -197,7 +197,7 @@ void Mouse::createPointer(uint32 ptrId, uint32 luggageId) {
if (ptrId) {
MousePtr *lugg = NULL;
- MousePtr *ptr = (MousePtr*)_resMan->openFetchRes(ptrId);
+ MousePtr *ptr = (MousePtr *)_resMan->openFetchRes(ptrId);
uint16 noFrames = _resMan->getLEUint16(ptr->numFrames);
uint16 ptrSizeX = _resMan->getLEUint16(ptr->sizeX);
uint16 ptrSizeY = _resMan->getLEUint16(ptr->sizeY);
@@ -210,7 +210,7 @@ void Mouse::createPointer(uint32 ptrId, uint32 luggageId) {
ptrSizeY *= 2;
if (luggageId) {
- lugg = (MousePtr*)_resMan->openFetchRes(luggageId);
+ lugg = (MousePtr *)_resMan->openFetchRes(luggageId);
luggSizeX = _resMan->getLEUint16(lugg->sizeX);
luggSizeY = _resMan->getLEUint16(lugg->sizeY);
@@ -223,18 +223,18 @@ void Mouse::createPointer(uint32 ptrId, uint32 luggageId) {
resSizeX = ptrSizeX;
resSizeY = ptrSizeY;
}
- _currentPtr = (MousePtr*)malloc(sizeof(MousePtr) + resSizeX * resSizeY * noFrames);
+ _currentPtr = (MousePtr *)malloc(sizeof(MousePtr) + resSizeX * resSizeY * noFrames);
_currentPtr->hotSpotX = _resMan->getLEUint16(ptr->hotSpotX);
_currentPtr->hotSpotY = _resMan->getLEUint16(ptr->hotSpotY);
_currentPtr->numFrames = noFrames;
_currentPtr->sizeX = resSizeX;
_currentPtr->sizeY = resSizeY;
- uint8 *ptrData = (uint8*)_currentPtr + sizeof(MousePtr);
+ uint8 *ptrData = (uint8 *)_currentPtr + sizeof(MousePtr);
memset(ptrData, 255, resSizeX * resSizeY * noFrames);
if (luggageId) {
uint8 *dstData = ptrData + resSizeX - luggSizeX;
for (uint32 frameCnt = 0; frameCnt < noFrames; frameCnt++) {
- uint8 *luggSrc = (uint8*)lugg + sizeof(MousePtr);
+ uint8 *luggSrc = (uint8 *)lugg + sizeof(MousePtr);
dstData += (resSizeY - luggSizeY) * resSizeX;
for (uint32 cnty = 0; cnty < (uint32)(SwordEngine::isPsx() ? luggSizeY / 2 : luggSizeY); cnty++) {
for (uint32 cntx = 0; cntx < luggSizeX; cntx++)
@@ -256,7 +256,7 @@ void Mouse::createPointer(uint32 ptrId, uint32 luggageId) {
}
uint8 *dstData = ptrData;
- uint8 *srcData = (uint8*)ptr + sizeof(MousePtr);
+ uint8 *srcData = (uint8 *)ptr + sizeof(MousePtr);
for (uint32 frameCnt = 0; frameCnt < noFrames; frameCnt++) {
for (uint32 cnty = 0; cnty < (uint32)(SwordEngine::isPsx() ? ptrSizeY / 2 : ptrSizeY); cnty++) {
for (uint32 cntx = 0; cntx < ptrSizeX; cntx++)
@@ -264,7 +264,7 @@ void Mouse::createPointer(uint32 ptrId, uint32 luggageId) {
dstData[cntx] = srcData[cntx];
if (SwordEngine::isPsx()) {
- dstData +=resSizeX;
+ dstData += resSizeX;
for (uint32 cntx = 0; cntx < ptrSizeX; cntx++)
if (srcData[cntx])
dstData[cntx] = srcData[cntx];
@@ -309,7 +309,7 @@ void Mouse::animate() {
if (_activeFrame == _frame)
return;
- uint8 *ptrData = (uint8*)_currentPtr + sizeof(MousePtr);
+ uint8 *ptrData = (uint8 *)_currentPtr + sizeof(MousePtr);
ptrData += _frame * _currentPtr->sizeX * _currentPtr->sizeY;
CursorMan.replaceCursor(ptrData, _currentPtr->sizeX, _currentPtr->sizeY, _currentPtr->hotSpotX, _currentPtr->hotSpotY, 255);
diff --git a/engines/sword1/mouse.h b/engines/sword1/mouse.h
index 44a6f76ad7..b2a844d0a9 100644
--- a/engines/sword1/mouse.h
+++ b/engines/sword1/mouse.h
@@ -34,22 +34,22 @@ namespace Sword1 {
#define MAX_MOUSE 30
-#define BS1L_BUTTON_DOWN 2
-#define BS1L_BUTTON_UP 4
-#define BS1R_BUTTON_DOWN 8
-#define BS1R_BUTTON_UP 16
-#define BS1_WHEEL_UP 32
-#define BS1_WHEEL_DOWN 64
-#define MOUSE_BOTH_BUTTONS (BS1L_BUTTON_DOWN | BS1R_BUTTON_DOWN)
-#define MOUSE_DOWN_MASK (BS1L_BUTTON_DOWN | BS1R_BUTTON_DOWN)
-#define MOUSE_UP_MASK (BS1L_BUTTON_UP | BS1R_BUTTON_UP)
+#define BS1L_BUTTON_DOWN 2
+#define BS1L_BUTTON_UP 4
+#define BS1R_BUTTON_DOWN 8
+#define BS1R_BUTTON_UP 16
+#define BS1_WHEEL_UP 32
+#define BS1_WHEEL_DOWN 64
+#define MOUSE_BOTH_BUTTONS (BS1L_BUTTON_DOWN | BS1R_BUTTON_DOWN)
+#define MOUSE_DOWN_MASK (BS1L_BUTTON_DOWN | BS1R_BUTTON_DOWN)
+#define MOUSE_UP_MASK (BS1L_BUTTON_UP | BS1R_BUTTON_UP)
struct MouseObj {
int id;
Object *compact;
};
-#include "common/pack-start.h" // START STRUCT PACKING
+#include "common/pack-start.h" // START STRUCT PACKING
struct MousePtr {
uint16 numFrames;
@@ -60,7 +60,7 @@ struct MousePtr {
uint8 dummyData[0x30];
} PACKED_STRUCT;
-#include "common/pack-end.h" // END STRUCT PACKING
+#include "common/pack-end.h" // END STRUCT PACKING
class Logic;
class Menu;
diff --git a/engines/sword1/music.cpp b/engines/sword1/music.cpp
index b4656ff89f..c34630aceb 100644
--- a/engines/sword1/music.cpp
+++ b/engines/sword1/music.cpp
@@ -35,7 +35,7 @@
#include "audio/decoders/mp3.h"
#include "audio/decoders/vorbis.h"
#include "audio/decoders/wave.h"
-#include "audio/decoders/vag.h"
+#include "audio/decoders/xa.h"
#define SMP_BUFSIZE 8192
@@ -110,7 +110,7 @@ bool MusicHandle::play(const Common::String &filename, bool loop) {
return true;
}
-bool MusicHandle::playPSX(uint16 id, bool loop) {
+bool MusicHandle::playPSX(uint16 id) {
stop();
if (!_file.isOpen())
@@ -131,7 +131,7 @@ bool MusicHandle::playPSX(uint16 id, bool loop) {
// not over file size
if ((size != 0) && (size != 0xffffffff) && ((int32)(offset + size) <= _file.size())) {
_file.seek(offset, SEEK_SET);
- _audioSource = Audio::makeLoopingAudioStream(Audio::makeVagStream(_file.readStream(size)), loop ? 0 : 1);
+ _audioSource = Audio::makeXAStream(_file.readStream(size), 11025);
fadeUp();
} else {
_audioSource = NULL;
@@ -297,7 +297,7 @@ void Music::startMusic(int32 tuneId, int32 loopFlag) {
the mutex before, to have the soundthread playing normally.
As the corresponding _converter is NULL, the handle will be ignored by the playing thread */
if (SwordEngine::isPsx()) {
- if (_handles[newStream].playPSX(tuneId, loopFlag != 0)) {
+ if (_handles[newStream].playPSX(tuneId)) {
_mutex.lock();
_converter[newStream] = Audio::makeRateConverter(_handles[newStream].getRate(), _mixer->getOutputRate(), _handles[newStream].isStereo(), false);
_mutex.unlock();
diff --git a/engines/sword1/music.h b/engines/sword1/music.h
index 4207019c13..f1366202d7 100644
--- a/engines/sword1/music.h
+++ b/engines/sword1/music.h
@@ -44,7 +44,7 @@ public:
MusicHandle() : _fading(0), _audioSource(NULL) {}
virtual int readBuffer(int16 *buffer, const int numSamples);
bool play(const Common::String &filename, bool loop);
- bool playPSX(uint16 id, bool loop);
+ bool playPSX(uint16 id);
void stop();
void fadeUp();
void fadeDown();
diff --git a/engines/sword1/object.h b/engines/sword1/object.h
index 4f5371fa72..0dab5519bd 100644
--- a/engines/sword1/object.h
+++ b/engines/sword1/object.h
@@ -27,98 +27,98 @@
namespace Sword1 {
-#define O_TOTAL_EVENTS 5
-#define O_WALKANIM_SIZE 600 //max number of nodes in router output
-#define O_GRID_SIZE 200
-#define EXTRA_GRID_SIZE 20
+#define O_TOTAL_EVENTS 5
+#define O_WALKANIM_SIZE 600 //max number of nodes in router output
+#define O_GRID_SIZE 200
+#define EXTRA_GRID_SIZE 20
-#include "common/pack-start.h" // START STRUCT PACKING
+#include "common/pack-start.h" // START STRUCT PACKING
-struct OEventSlot { //receiving event list in the compact -
- int32 o_event; //array of these with O_TOTAL_EVENTS elements
- int32 o_event_script;
-} PACKED_STRUCT; // size = 2*int32 = 8 bytes
+struct OEventSlot { //receiving event list in the compact -
+ int32 o_event; //array of these with O_TOTAL_EVENTS elements
+ int32 o_event_script;
+} PACKED_STRUCT; // size = 2*int32 = 8 bytes
-#define TOTAL_script_levels 5
+#define TOTAL_script_levels 5
-struct ScriptTree { //this is a logic tree, used by OBJECTs
- int32 o_script_level; //logic level
- int32 o_script_id[TOTAL_script_levels]; //script id's (are unique to each level)
- int32 o_script_pc[TOTAL_script_levels]; //pc of script for each (if script_manager)
-} PACKED_STRUCT; // size = 11*int32 = 44 bytes
+struct ScriptTree { //this is a logic tree, used by OBJECTs
+ int32 o_script_level; //logic level
+ int32 o_script_id[TOTAL_script_levels]; //script id's (are unique to each level)
+ int32 o_script_pc[TOTAL_script_levels]; //pc of script for each (if script_manager)
+} PACKED_STRUCT; // size = 11*int32 = 44 bytes
struct TalkOffset {
- int32 x;
- int32 y;
-} PACKED_STRUCT; // size = 2*int32 = 8 bytes
+ int32 x;
+ int32 y;
+} PACKED_STRUCT; // size = 2*int32 = 8 bytes
struct WalkData {
- int32 frame;
- int32 x;
- int32 y;
- int32 step;
- int32 dir;
-} PACKED_STRUCT; // size = 5*int32 = 20 bytes
+ int32 frame;
+ int32 x;
+ int32 y;
+ int32 step;
+ int32 dir;
+} PACKED_STRUCT; // size = 5*int32 = 20 bytes
struct Object {
- int32 o_type; // 0 broad description of type - object, floor, etc.
- int32 o_status; // 4 bit flags for logic, graphics, mouse, etc.
- int32 o_logic; // 8 logic type
- int32 o_place; // 12 where is the mega character
- int32 o_down_flag; // 16 pass back down with this - with C possibly both are unnecessary?
- int32 o_target; // 20 target object for the GTM *these are linked to script
- int32 o_screen; // 24 physical screen/section
- int32 o_frame; // 28 frame number &
- int32 o_resource; // 32 id of spr file it comes from
- int32 o_sync; // 36 receive sync here
- int32 o_pause; // 40 logic_engine() pauses these cycles
- int32 o_xcoord; // 44
- int32 o_ycoord; // 48
- int32 o_mouse_x1; // 52 top-left of mouse area is (x1,y1)
- int32 o_mouse_y1; // 56
- int32 o_mouse_x2; // 60 bottom-right of area is (x2,y2) (these coords are inclusive)
- int32 o_mouse_y2; // 64
- int32 o_priority; // 68
- int32 o_mouse_on; // 72
- int32 o_mouse_off; // 76
- int32 o_mouse_click; // 80
- int32 o_interact; // 84
- int32 o_get_to_script; // 88
- int32 o_scale_a; // 92 used by floors
- int32 o_scale_b; // 96
- int32 o_anim_x; // 100
- int32 o_anim_y; // 104
-
- ScriptTree o_tree; // 108 size = 44 bytes
- ScriptTree o_bookmark; // 152 size = 44 bytes
-
- int32 o_dir; // 196
- int32 o_speech_pen; // 200
- int32 o_speech_width; // 204
- int32 o_speech_time; // 208
- int32 o_text_id; // 212 working back from o_ins1
- int32 o_tag; // 216
- int32 o_anim_pc; // 220 position within an animation structure
- int32 o_anim_resource; // 224 cdt or anim table
-
- int32 o_walk_pc; // 228
-
- TalkOffset talk_table[6]; // 232 size = 6*8 bytes = 48
-
- OEventSlot o_event_list[O_TOTAL_EVENTS]; // 280 size = 5*8 bytes = 40
-
- int32 o_ins1; // 320
- int32 o_ins2; // 324
- int32 o_ins3; // 328
-
- int32 o_mega_resource; // 332
- int32 o_walk_resource; // 336
-
- WalkData o_route[O_WALKANIM_SIZE]; // 340 size = 600*20 bytes = 12000
- // mega size = 12340 bytes (+ 8 byte offset table + 20 byte header = 12368)
+ int32 o_type; // 0 broad description of type - object, floor, etc.
+ int32 o_status; // 4 bit flags for logic, graphics, mouse, etc.
+ int32 o_logic; // 8 logic type
+ int32 o_place; // 12 where is the mega character
+ int32 o_down_flag; // 16 pass back down with this - with C possibly both are unnecessary?
+ int32 o_target; // 20 target object for the GTM *these are linked to script
+ int32 o_screen; // 24 physical screen/section
+ int32 o_frame; // 28 frame number &
+ int32 o_resource; // 32 id of spr file it comes from
+ int32 o_sync; // 36 receive sync here
+ int32 o_pause; // 40 logic_engine() pauses these cycles
+ int32 o_xcoord; // 44
+ int32 o_ycoord; // 48
+ int32 o_mouse_x1; // 52 top-left of mouse area is (x1,y1)
+ int32 o_mouse_y1; // 56
+ int32 o_mouse_x2; // 60 bottom-right of area is (x2,y2) (these coords are inclusive)
+ int32 o_mouse_y2; // 64
+ int32 o_priority; // 68
+ int32 o_mouse_on; // 72
+ int32 o_mouse_off; // 76
+ int32 o_mouse_click; // 80
+ int32 o_interact; // 84
+ int32 o_get_to_script; // 88
+ int32 o_scale_a; // 92 used by floors
+ int32 o_scale_b; // 96
+ int32 o_anim_x; // 100
+ int32 o_anim_y; // 104
+
+ ScriptTree o_tree; // 108 size = 44 bytes
+ ScriptTree o_bookmark; // 152 size = 44 bytes
+
+ int32 o_dir; // 196
+ int32 o_speech_pen; // 200
+ int32 o_speech_width; // 204
+ int32 o_speech_time; // 208
+ int32 o_text_id; // 212 working back from o_ins1
+ int32 o_tag; // 216
+ int32 o_anim_pc; // 220 position within an animation structure
+ int32 o_anim_resource; // 224 cdt or anim table
+
+ int32 o_walk_pc; // 228
+
+ TalkOffset talk_table[6]; // 232 size = 6*8 bytes = 48
+
+ OEventSlot o_event_list[O_TOTAL_EVENTS]; // 280 size = 5*8 bytes = 40
+
+ int32 o_ins1; // 320
+ int32 o_ins2; // 324
+ int32 o_ins3; // 328
+
+ int32 o_mega_resource; // 332
+ int32 o_walk_resource; // 336
+
+ WalkData o_route[O_WALKANIM_SIZE]; // 340 size = 600*20 bytes = 12000
+ // mega size = 12340 bytes (+ 8 byte offset table + 20 byte header = 12368)
} PACKED_STRUCT;
-#include "common/pack-end.h" // END STRUCT PACKING
+#include "common/pack-end.h" // END STRUCT PACKING
} // End of namespace Sword1
diff --git a/engines/sword1/objectman.cpp b/engines/sword1/objectman.cpp
index 8de29615d5..ed994a97fa 100644
--- a/engines/sword1/objectman.cpp
+++ b/engines/sword1/objectman.cpp
@@ -39,15 +39,15 @@ void ObjectMan::initialize() {
uint16 cnt;
for (cnt = 0; cnt < TOTAL_SECTIONS; cnt++)
_liveList[cnt] = 0; // we don't need to close the files here. When this routine is
- // called, the memory was flushed() anyways, so these resources
- // already *are* closed.
+ // called, the memory was flushed() anyways, so these resources
+ // already *are* closed.
_liveList[128] = _liveList[129] = _liveList[130] = _liveList[131] = _liveList[133] =
- _liveList[134] = _liveList[145] = _liveList[146] = _liveList[TEXT_sect] = 1;
+ _liveList[134] = _liveList[145] = _liveList[146] = _liveList[TEXT_sect] = 1;
for (cnt = 0; cnt < TOTAL_SECTIONS; cnt++) {
if (_liveList[cnt])
- _cptData[cnt] = (uint8*)_resMan->cptResOpen(_objectList[cnt]) + sizeof(Header);
+ _cptData[cnt] = (uint8 *)_resMan->cptResOpen(_objectList[cnt]) + sizeof(Header);
else
_cptData[cnt] = NULL;
}
@@ -66,7 +66,7 @@ bool ObjectMan::sectionAlive(uint16 section) {
void ObjectMan::megaEntering(uint16 section) {
_liveList[section]++;
if (_liveList[section] == 1)
- _cptData[section] = ((uint8*)_resMan->cptResOpen(_objectList[section])) + sizeof(Header);
+ _cptData[section] = ((uint8 *)_resMan->cptResOpen(_objectList[section])) + sizeof(Header);
}
void ObjectMan::megaLeaving(uint16 section, int id) {
@@ -87,7 +87,7 @@ uint8 ObjectMan::fnCheckForTextLine(uint32 textId) {
return 0; // section does not exist
uint8 lang = SwordEngine::_systemVars.language;
- uint32 *textData = (uint32*)((uint8*)_resMan->openFetchRes(_textList[textId / ITM_PER_SEC][lang]) + sizeof(Header));
+ uint32 *textData = (uint32 *)((uint8 *)_resMan->openFetchRes(_textList[textId / ITM_PER_SEC][lang]) + sizeof(Header));
if ((textId & ITM_ID) < _resMan->readUint32(textData)) {
textData++;
if (textData[textId & ITM_ID])
@@ -99,7 +99,7 @@ uint8 ObjectMan::fnCheckForTextLine(uint32 textId) {
char *ObjectMan::lockText(uint32 textId) {
uint8 lang = SwordEngine::_systemVars.language;
- char *addr = (char*)_resMan->openFetchRes(_textList[textId / ITM_PER_SEC][lang]);
+ char *addr = (char *)_resMan->openFetchRes(_textList[textId / ITM_PER_SEC][lang]);
if (addr == 0)
return _missingSubTitleStr;
addr += sizeof(Header);
@@ -107,12 +107,12 @@ char *ObjectMan::lockText(uint32 textId) {
warning("ObjectMan::lockText(%d): only %d texts in file", textId & ITM_ID, _resMan->readUint32(addr));
textId = 0; // get first line instead
}
- uint32 offset = _resMan->readUint32(addr + ((textId & ITM_ID) + 1)* 4);
+ uint32 offset = _resMan->readUint32(addr + ((textId & ITM_ID) + 1) * 4);
if (offset == 0) {
// Workaround bug for missing sentence in some langages in Syria (see bug #1977094).
// We use the hardcoded text in this case.
if (textId == 2950145)
- return const_cast<char*>(_translationId2950145[lang]);
+ return const_cast<char *>(_translationId2950145[lang]);
warning("ObjectMan::lockText(%d): text number has no text lines", textId);
return _missingSubTitleStr;
@@ -125,7 +125,7 @@ void ObjectMan::unlockText(uint32 textId) {
}
uint32 ObjectMan::lastTextNumber(int section) {
- uint8 *data = (uint8*)_resMan->openFetchRes(_textList[section][SwordEngine::_systemVars.language]) + sizeof(Header);
+ uint8 *data = (uint8 *)_resMan->openFetchRes(_textList[section][SwordEngine::_systemVars.language]) + sizeof(Header);
uint32 result = _resMan->readUint32(data) - 1;
_resMan->resClose(_textList[section][SwordEngine::_systemVars.language]);
return result;
@@ -137,17 +137,17 @@ Object *ObjectMan::fetchObject(uint32 id) {
error("fetchObject: section %d is not open", id / ITM_PER_SEC);
id &= ITM_ID;
// DON'T do endian conversion here. it's already done.
- return (Object*)(addr + *(uint32*)(addr + (id + 1)*4));
+ return (Object *)(addr + * (uint32 *)(addr + (id + 1) * 4));
}
uint32 ObjectMan::fetchNoObjects(int section) {
if (_cptData[section] == NULL)
error("fetchNoObjects: section %d is not open", section);
- return *(uint32*)_cptData[section];
+ return *(uint32 *)_cptData[section];
}
void ObjectMan::closeSection(uint32 screen) {
- if (_liveList[screen] == 0) // close the section that PLAYER has just left, if it's empty now
+ if (_liveList[screen] == 0) // close the section that PLAYER has just left, if it's empty now
_resMan->resClose(_objectList[screen]);
}
@@ -159,7 +159,7 @@ void ObjectMan::loadLiveList(uint16 *src) {
}
_liveList[cnt] = src[cnt];
if (_liveList[cnt])
- _cptData[cnt] = ((uint8*)_resMan->cptResOpen(_objectList[cnt])) + sizeof(Header);
+ _cptData[cnt] = ((uint8 *)_resMan->cptResOpen(_objectList[cnt])) + sizeof(Header);
}
}
@@ -179,7 +179,7 @@ char ObjectMan::_missingSubTitleStr[] = " ";
// is not needed. The English version of the game does not include Portuguese
// so I cannot check.)
-const char *ObjectMan::_translationId2950145[7] = {
+const char *const ObjectMan::_translationId2950145[7] = {
"Oh?", // English (not needed)
"Quoi?", // French
"Oh?", // German
diff --git a/engines/sword1/objectman.h b/engines/sword1/objectman.h
index 23047c14ea..ca3c7c1526 100644
--- a/engines/sword1/objectman.h
+++ b/engines/sword1/objectman.h
@@ -54,12 +54,12 @@ public:
void loadLiveList(uint16 *src);
private:
ResMan *_resMan;
- static const uint32 _objectList[TOTAL_SECTIONS]; //a table of pointers to object files
- static const uint32 _textList[TOTAL_SECTIONS][7]; //a table of pointers to text files
- uint16 _liveList[TOTAL_SECTIONS]; //which sections are active
+ static const uint32 _objectList[TOTAL_SECTIONS]; //a table of pointers to object files
+ static const uint32 _textList[TOTAL_SECTIONS][7]; //a table of pointers to text files
+ uint16 _liveList[TOTAL_SECTIONS]; //which sections are active
uint8 *_cptData[TOTAL_SECTIONS];
static char _missingSubTitleStr[];
- static const char *_translationId2950145[7]; //translation for textId 2950145 (missing from cluster file for some langages)
+ static const char *const _translationId2950145[7]; //translation for textId 2950145 (missing from cluster file for some langages)
};
} // End of namespace Sword1
diff --git a/engines/sword1/resman.cpp b/engines/sword1/resman.cpp
index 807679a40e..878ba8eceb 100644
--- a/engines/sword1/resman.cpp
+++ b/engines/sword1/resman.cpp
@@ -31,14 +31,14 @@
#include "gui/message.h"
namespace Sword1 {
- void guiFatalError(char *msg) {
- // Displays a dialog on-screen before terminating the engine.
- // TODO: We really need to setup a special palette for cases when
- // the engine is erroring before setting one... otherwise invisible cursor :)
-
- GUI::MessageDialog dialog(msg);
- dialog.runModal();
- error("%s", msg);
+void guiFatalError(char *msg) {
+ // Displays a dialog on-screen before terminating the engine.
+ // TODO: We really need to setup a special palette for cases when
+ // the engine is erroring before setting one... otherwise invisible cursor :)
+
+ GUI::MessageDialog dialog(msg);
+ dialog.runModal();
+ error("%s", msg);
}
#define MAX_PATH_LEN 260
@@ -62,7 +62,7 @@ ResMan::~ResMan() {
for (uint32 resCnt = 0; resCnt < group->noRes; resCnt++) {
if (group->resHandle[resCnt].cond == MEM_DONT_FREE) {
warning("ResMan::~ResMan: Resource %02X.%04X.%02X is still open",
- clusCnt + 1, grpCnt, resCnt);
+ clusCnt + 1, grpCnt, resCnt);
}
}
}
@@ -92,7 +92,7 @@ void ResMan::loadCluDescript(const char *fileName) {
_prj.clu = new Clu[_prj.noClu];
memset(_prj.clu, 0, _prj.noClu * sizeof(Clu));
- uint32 *cluIndex = (uint32*)malloc(_prj.noClu * 4);
+ uint32 *cluIndex = (uint32 *)malloc(_prj.noClu * 4);
file.read(cluIndex, _prj.noClu * 4);
for (uint32 clusCnt = 0; clusCnt < _prj.noClu; clusCnt++)
@@ -107,7 +107,7 @@ void ResMan::loadCluDescript(const char *fileName) {
memset(cluster->grp, 0, cluster->noGrp * sizeof(Grp));
cluster->refCount = 0;
- uint32 *grpIndex = (uint32*)malloc(cluster->noGrp * 4);
+ uint32 *grpIndex = (uint32 *)malloc(cluster->noGrp * 4);
file.read(grpIndex, cluster->noGrp * 4);
for (uint32 grpCnt = 0; grpCnt < cluster->noGrp; grpCnt++)
@@ -117,7 +117,7 @@ void ResMan::loadCluDescript(const char *fileName) {
group->resHandle = new MemHandle[group->noRes];
group->offset = new uint32[group->noRes];
group->length = new uint32[group->noRes];
- uint32 *resIdIdx = (uint32*)malloc(group->noRes * 4);
+ uint32 *resIdIdx = (uint32 *)malloc(group->noRes * 4);
file.read(resIdIdx, group->noRes * 4);
for (uint32 resCnt = 0; resCnt < group->noRes; resCnt++) {
@@ -227,7 +227,7 @@ Header *ResMan::lockScript(uint32 scrID) {
#else
openScriptResourceLittleEndian(scrID);
#endif
- return (Header*)resHandle(scrID)->data;
+ return (Header *)resHandle(scrID)->data;
}
void ResMan::unlockScript(uint32 scrID) {
@@ -276,23 +276,23 @@ void ResMan::resClose(uint32 id) {
} else {
handle->refCount--;
if (!handle->refCount)
- _memMan->setCondition( handle, MEM_CAN_FREE);
+ _memMan->setCondition(handle, MEM_CAN_FREE);
}
}
FrameHeader *ResMan::fetchFrame(void *resourceData, uint32 frameNo) {
- uint8 *frameFile = (uint8*)resourceData;
+ uint8 *frameFile = (uint8 *)resourceData;
uint8 *idxData = frameFile + sizeof(Header);
if (_isBigEndian) {
if (frameNo >= READ_BE_UINT32(idxData))
error("fetchFrame:: frame %d doesn't exist in resource.", frameNo);
- frameFile += READ_BE_UINT32(idxData + (frameNo+1) * 4);
+ frameFile += READ_BE_UINT32(idxData + (frameNo + 1) * 4);
} else {
if (frameNo >= READ_LE_UINT32(idxData))
error("fetchFrame:: frame %d doesn't exist in resource.", frameNo);
- frameFile += READ_LE_UINT32(idxData + (frameNo+1) * 4);
+ frameFile += READ_LE_UINT32(idxData + (frameNo + 1) * 4);
}
- return (FrameHeader*)frameFile;
+ return (FrameHeader *)frameFile;
}
Common::File *ResMan::resFile(uint32 id) {
@@ -310,9 +310,9 @@ Common::File *ResMan::resFile(uint32 id) {
// Supposes that big endian means mac cluster file and little endian means PC cluster file.
// This works, but we may want to separate the file name from the endianess or try .CLM extension if opening.clu file fail.
if (_isBigEndian)
- sprintf(fileName, "%s.CLM", _prj.clu[(id >> 24)-1].label);
+ sprintf(fileName, "%s.CLM", _prj.clu[(id >> 24) - 1].label);
else
- sprintf(fileName, "%s.CLU", _prj.clu[(id >> 24)-1].label);
+ sprintf(fileName, "%s.CLU", _prj.clu[(id >> 24) - 1].label);
cluster->file->open(fileName);
if (!cluster->file->isOpen()) {
char msg[512];
@@ -392,7 +392,7 @@ void ResMan::openCptResourceBigEndian(uint32 id) {
if (!handle)
return;
uint32 totSize = handle->size;
- uint32 *data = (uint32*)((uint8*)handle->data + sizeof(Header));
+ uint32 *data = (uint32 *)((uint8 *)handle->data + sizeof(Header));
totSize -= sizeof(Header);
if (totSize & 3)
error("Illegal compact size for id %d: %d", id, totSize);
@@ -420,7 +420,7 @@ void ResMan::openCptResourceLittleEndian(uint32 id) {
if (!handle)
return;
uint32 totSize = handle->size;
- uint32 *data = (uint32*)((uint8*)handle->data + sizeof(Header));
+ uint32 *data = (uint32 *)((uint8 *)handle->data + sizeof(Header));
totSize -= sizeof(Header);
if (totSize & 3)
error("Illegal compact size for id %d: %d", id, totSize);
@@ -448,11 +448,11 @@ void ResMan::openScriptResourceBigEndian(uint32 id) {
if (!handle)
return;
// uint32 totSize = handle->size;
- Header *head = (Header*)handle->data;
+ Header *head = (Header *)handle->data;
head->comp_length = FROM_LE_32(head->comp_length);
head->decomp_length = FROM_LE_32(head->decomp_length);
head->version = FROM_LE_16(head->version);
- uint32 *data = (uint32*)((uint8*)handle->data + sizeof(Header));
+ uint32 *data = (uint32 *)((uint8 *)handle->data + sizeof(Header));
uint32 size = handle->size - sizeof(Header);
if (size & 3)
error("Odd size during script endian conversion. Resource ID =%d, size = %d", id, size);
@@ -480,11 +480,11 @@ void ResMan::openScriptResourceLittleEndian(uint32 id) {
if (!handle)
return;
// uint32 totSize = handle->size;
- Header *head = (Header*)handle->data;
+ Header *head = (Header *)handle->data;
head->comp_length = FROM_BE_32(head->comp_length);
head->decomp_length = FROM_BE_32(head->decomp_length);
head->version = FROM_BE_16(head->version);
- uint32 *data = (uint32*)((uint8*)handle->data + sizeof(Header));
+ uint32 *data = (uint32 *)((uint8 *)handle->data + sizeof(Header));
uint32 size = handle->size - sizeof(Header);
if (size & 3)
error("Odd size during script endian conversion. Resource ID =%d, size = %d", id, size);
@@ -498,34 +498,34 @@ void ResMan::openScriptResourceLittleEndian(uint32 id) {
uint32 ResMan::_srIdList[29] = { // the file numbers differ for the control panel file IDs, so we need this array
- OTHER_SR_FONT, // SR_FONT
- 0x04050000, // SR_BUTTON
- OTHER_SR_REDFONT, // SR_REDFONT
- 0x04050001, // SR_PALETTE
- 0x04050002, // SR_PANEL_ENGLISH
- 0x04050003, // SR_PANEL_FRENCH
- 0x04050004, // SR_PANEL_GERMAN
- 0x04050005, // SR_PANEL_ITALIAN
- 0x04050006, // SR_PANEL_SPANISH
- 0x04050007, // SR_PANEL_AMERICAN
- 0x04050008, // SR_TEXT_BUTTON
- 0x04050009, // SR_SPEED
- 0x0405000A, // SR_SCROLL1
- 0x0405000B, // SR_SCROLL2
- 0x0405000C, // SR_CONFIRM
- 0x0405000D, // SR_VOLUME
- 0x0405000E, // SR_VLIGHT
- 0x0405000F, // SR_VKNOB
- 0x04050010, // SR_WINDOW
- 0x04050011, // SR_SLAB1
- 0x04050012, // SR_SLAB2
- 0x04050013, // SR_SLAB3
- 0x04050014, // SR_SLAB4
- 0x04050015, // SR_BUTUF
- 0x04050016, // SR_BUTUS
- 0x04050017, // SR_BUTDS
- 0x04050018, // SR_BUTDF
- 0x04050019, // SR_DEATHPANEL
+ OTHER_SR_FONT, // SR_FONT
+ 0x04050000, // SR_BUTTON
+ OTHER_SR_REDFONT, // SR_REDFONT
+ 0x04050001, // SR_PALETTE
+ 0x04050002, // SR_PANEL_ENGLISH
+ 0x04050003, // SR_PANEL_FRENCH
+ 0x04050004, // SR_PANEL_GERMAN
+ 0x04050005, // SR_PANEL_ITALIAN
+ 0x04050006, // SR_PANEL_SPANISH
+ 0x04050007, // SR_PANEL_AMERICAN
+ 0x04050008, // SR_TEXT_BUTTON
+ 0x04050009, // SR_SPEED
+ 0x0405000A, // SR_SCROLL1
+ 0x0405000B, // SR_SCROLL2
+ 0x0405000C, // SR_CONFIRM
+ 0x0405000D, // SR_VOLUME
+ 0x0405000E, // SR_VLIGHT
+ 0x0405000F, // SR_VKNOB
+ 0x04050010, // SR_WINDOW
+ 0x04050011, // SR_SLAB1
+ 0x04050012, // SR_SLAB2
+ 0x04050013, // SR_SLAB3
+ 0x04050014, // SR_SLAB4
+ 0x04050015, // SR_BUTUF
+ 0x04050016, // SR_BUTUS
+ 0x04050017, // SR_BUTDS
+ 0x04050018, // SR_BUTDF
+ 0x04050019, // SR_DEATHPANEL
0,
};
diff --git a/engines/sword1/resman.h b/engines/sword1/resman.h
index 82074e5740..49d974c1db 100644
--- a/engines/sword1/resman.h
+++ b/engines/sword1/resman.h
@@ -33,11 +33,11 @@ namespace Sword1 {
#define MAX_LABEL_SIZE (31+1)
#if defined(__PSP__)
-#define MAX_OPEN_CLUS 4 // the PSP can't have more than 8 files open simultaneously
- // since we also need filehandles for music and sometimes savegames
- // set the maximum number of open clusters to 4.
+#define MAX_OPEN_CLUS 4 // the PSP can't have more than 8 files open simultaneously
+ // since we also need filehandles for music and sometimes savegames
+ // set the maximum number of open clusters to 4.
#else
-#define MAX_OPEN_CLUS 8 // don't open more than 8 files at once
+#define MAX_OPEN_CLUS 8 // don't open more than 8 files at once
#endif
struct Grp {
@@ -77,10 +77,10 @@ public:
FrameHeader *fetchFrame(void *resourceData, uint32 frameNo);
uint16 getUint16(uint16 value) {
- return (_isBigEndian) ? FROM_BE_16(value): FROM_LE_16(value);
+ return (_isBigEndian) ? FROM_BE_16(value) : FROM_LE_16(value);
}
uint32 getUint32(uint32 value) {
- return (_isBigEndian) ? FROM_BE_32(value): FROM_LE_32(value);
+ return (_isBigEndian) ? FROM_BE_32(value) : FROM_LE_32(value);
}
uint16 getLEUint16(uint16 value) {
return FROM_LE_16(value);
@@ -89,24 +89,24 @@ public:
return FROM_LE_32(value);
}
uint16 readUint16(const void *ptr) {
- return (_isBigEndian) ? READ_BE_UINT16(ptr): READ_LE_UINT16(ptr);
+ return (_isBigEndian) ? READ_BE_UINT16(ptr) : READ_LE_UINT16(ptr);
}
uint32 readUint32(const void *ptr) {
- return (_isBigEndian) ? READ_BE_UINT32(ptr):READ_LE_UINT32(ptr);
+ return (_isBigEndian) ? READ_BE_UINT32(ptr) : READ_LE_UINT32(ptr);
}
uint32 readLEUint32(const void *ptr) {
return READ_LE_UINT32(ptr);
}
uint16 toUint16(uint16 value) {
- return (_isBigEndian) ? TO_BE_16(value): TO_LE_16(value);
+ return (_isBigEndian) ? TO_BE_16(value) : TO_LE_16(value);
}
uint32 toUint32(uint32 value) {
- return (_isBigEndian) ? TO_BE_32(value): TO_LE_32(value);
+ return (_isBigEndian) ? TO_BE_32(value) : TO_LE_32(value);
}
private:
- uint32 resLength(uint32 id);
+ uint32 resLength(uint32 id);
MemHandle *resHandle(uint32 id);
uint32 resOffset(uint32 id);
Common::File *resFile(uint32 id);
@@ -120,7 +120,7 @@ private:
void freeCluDescript();
Prj _prj;
MemMan *_memMan;
- static const uint32 _scriptList[TOTAL_SECTIONS]; //a table of resource tags
+ static const uint32 _scriptList[TOTAL_SECTIONS]; //a table of resource tags
static uint32 _srIdList[29];
Clu *_openCluStart, *_openCluEnd;
int _openClus;
diff --git a/engines/sword1/router.cpp b/engines/sword1/router.cpp
index aaf475912d..ef07a0bf02 100644
--- a/engines/sword1/router.cpp
+++ b/engines/sword1/router.cpp
@@ -33,25 +33,25 @@
namespace Sword1 {
/****************************************************************************
- * JROUTER.C polygon router with modular walks
- * using a tree of modules
- * 21 july 94
+ * JROUTER.C polygon router with modular walks
+ * using a tree of modules
+ * 21 july 94
* 3 november 94
- * System currently works by scanning grid data and coming up with a ROUTE
+ * System currently works by scanning grid data and coming up with a ROUTE
* as a series of way points(nodes), the smoothest eight directional PATH
- * through these nodes is then found, and a WALK created to fit the PATH.
+ * through these nodes is then found, and a WALK created to fit the PATH.
*
- * Two funtions are called by the user, RouteFinder creates a route as a
- * module list, HardWalk creates an animation list from the module list.
- * The split is only provided to allow the possibility of turning the
- * autorouter over two game cycles.
+ * Two funtions are called by the user, RouteFinder creates a route as a
+ * module list, HardWalk creates an animation list from the module list.
+ * The split is only provided to allow the possibility of turning the
+ * autorouter over two game cycles.
****************************************************************************
*
* Routine timings on osborne 486
*
- * Read floor resource (file already loaded) 112 pixels
+ * Read floor resource (file already loaded) 112 pixels
*
- * Read mega resource (file already loaded) 112 pixels
+ * Read mega resource (file already loaded) 112 pixels
*
*
*
@@ -59,16 +59,16 @@ namespace Sword1 {
*
* Modified 12 Oct 95
*
- * Target Points within 1 pixel of a line are ignored ???
+ * Target Points within 1 pixel of a line are ignored ???
*
- * Modules split into Points within 1 pixel of a line are ignored ???
+ * Modules split into Points within 1 pixel of a line are ignored ???
*
****************************************************************************/
-#define NO_DIRECTIONS 8
-#define SLOW_IN 3
-#define SLOW_OUT 7
-#define ROUTE_END_FLAG 255
+#define NO_DIRECTIONS 8
+#define SLOW_IN 3
+#define SLOW_OUT 7
+#define ROUTE_END_FLAG 255
Router::Router(ObjectMan *pObjMan, ResMan *pResMan) {
_objMan = pObjMan;
@@ -85,9 +85,9 @@ Router::Router(ObjectMan *pObjMan, ResMan *pResMan) {
int32 Router::routeFinder(int32 id, Object *megaObject, int32 x, int32 y, int32 dir) {
/*********************************************************************
- * RouteFinder.C polygon router with modular walks
- * 21 august 94
- * 3 november 94
+ * RouteFinder.C polygon router with modular walks
+ * 21 august 94
+ * 3 november 94
* routeFinder creates a list of modules that enables HardWalk to
* create an animation list.
*
@@ -99,11 +99,11 @@ int32 Router::routeFinder(int32 id, Object *megaObject, int32 x, int32 y, int32
*
* 30 november 94 return values modified
*
- * return 0 = failed to find a route
+ * return 0 = failed to find a route
*
- * 1 = found a route
+ * 1 = found a route
*
- * 2 = mega already at target
+ * 2 = mega already at target
*
*********************************************************************/
@@ -117,7 +117,7 @@ int32 Router::routeFinder(int32 id, Object *megaObject, int32 x, int32 y, int32
walkAnim = megaObject->o_route;
- _framesPerStep = _nWalkFrames/2;
+ _framesPerStep = _nWalkFrames / 2;
_framesPerChar = _nWalkFrames * NO_DIRECTIONS;
// offset pointers added Oct 30 95 JPS
@@ -145,12 +145,12 @@ int32 Router::routeFinder(int32 id, Object *megaObject, int32 x, int32 y, int32
slowOutFrames = 0;
}
-// **************************************************************************
-// All route data now loaded start finding a route
-// **************************************************************************
-// **************************************************************************
-// check if we can get a route through the floor changed 12 Oct95 JPS
-// **************************************************************************
+ // **************************************************************************
+ // All route data now loaded start finding a route
+ // **************************************************************************
+ // **************************************************************************
+ // check if we can get a route through the floor changed 12 Oct95 JPS
+ // **************************************************************************
routeFlag = getRoute();
@@ -220,26 +220,26 @@ int32 Router::routeFinder(int32 id, Object *megaObject, int32 x, int32 y, int32
break;
}
- return routeFlag; // send back null route
+ return routeFlag; // send back null route
}
int32 Router::getRoute() {
/*********************************************************************
- * GetRoute.C extract a path from walk grid
- * 12 october 94
+ * GetRoute.C extract a path from walk grid
+ * 12 october 94
*
* GetRoute currently works by scanning grid data and coming up with
* a ROUTE as a series of way points(nodes).
*
* static routeData _route[O_ROUTE_SIZE];
*
- * return 0 = failed to find a route
+ * return 0 = failed to find a route
*
- * 1 = found a route
+ * 1 = found a route
*
- * 2 = mega already at target
+ * 2 = mega already at target
*
- * 3 = failed to find a route because target was on a line
+ * 3 = failed to find a route because target was on a line
*
*********************************************************************/
@@ -459,7 +459,7 @@ void Router::smoothCheck(int32 &k, int32 best, int32 p, int32 dirS, int32 dirD)
// set up sd0-ss2 to reflect possible movement in each direction
- if (dirS == 0 || dirS == 4) { // vert and diag
+ if (dirS == 0 || dirS == 4) { // vert and diag
ddx = ldx;
ddy = (ldx * _diagonaly) / _diagonalx;
dsy = ldy - ddy;
@@ -492,7 +492,7 @@ void Router::smoothCheck(int32 &k, int32 best, int32 p, int32 dirS, int32 dirD)
}
switch (best) {
- case 0: // halfsquare, diagonal, halfsquare
+ case 0: // halfsquare, diagonal, halfsquare
_smoothPath[k].x = x + dsx / 2;
_smoothPath[k].y = y + dsy / 2;
_smoothPath[k].dir = dirS;
@@ -512,7 +512,7 @@ void Router::smoothCheck(int32 &k, int32 best, int32 p, int32 dirS, int32 dirD)
k++;
break;
- case 1: // square, diagonal
+ case 1: // square, diagonal
_smoothPath[k].x = x + dsx;
_smoothPath[k].y = y + dsy;
_smoothPath[k].dir = dirS;
@@ -526,7 +526,7 @@ void Router::smoothCheck(int32 &k, int32 best, int32 p, int32 dirS, int32 dirD)
k++;
break;
- case 2: // diagonal square
+ case 2: // diagonal square
_smoothPath[k].x = x + ddx;
_smoothPath[k].y = y + ddy;
_smoothPath[k].dir = dirD;
@@ -540,7 +540,7 @@ void Router::smoothCheck(int32 &k, int32 best, int32 p, int32 dirS, int32 dirD)
k++;
break;
- default: // halfdiagonal, square, halfdiagonal
+ default: // halfdiagonal, square, halfdiagonal
_smoothPath[k].x = x + ddx / 2;
_smoothPath[k].y = y + ddy / 2;
_smoothPath[k].dir = dirD;
@@ -627,17 +627,17 @@ void Router::slidyWalkAnimator(WalkData *walkAnim) {
* fits the smoothPath and uses foot slipping to fit whole steps into
* the route
*
- * Parameters: georgeg, mouseg
- * Returns: rout
+ * Parameters: georgeg, mouseg
+ * Returns: rout
*
* produce a module list from the line data
*********************************************************************/
int32 p;
- int32 lastDir;
- int32 lastRealDir;
- int32 currentDir;
- int32 turnDir;
+ int32 lastDir;
+ int32 lastRealDir;
+ int32 currentDir;
+ int32 turnDir;
int32 scale;
int32 step;
int32 module;
@@ -677,7 +677,7 @@ void Router::slidyWalkAnimator(WalkData *walkAnim) {
// START THE WALK WITH THE FIRST STANDFRAME THIS MAY CAUSE A DELAY
// BUT IT STOPS THE PLAYER MOVING FOR COLLISIONS ARE DETECTED
//****************************************************************************
- module = _framesPerChar + lastDir;
+ module = _framesPerChar + lastDir;
walkAnim[stepCount].frame = module;
walkAnim[stepCount].step = 0;
walkAnim[stepCount].dir = lastDir;
@@ -694,7 +694,7 @@ void Router::slidyWalkAnimator(WalkData *walkAnim) {
// get the direction to turn
turnDir = currentDir - lastDir;
if (turnDir < 0)
- turnDir += NO_DIRECTIONS;
+ turnDir += NO_DIRECTIONS;
if (turnDir > 4)
turnDir = -1;
@@ -704,10 +704,10 @@ void Router::slidyWalkAnimator(WalkData *walkAnim) {
// rotate to new walk direction
// for george and nico put in a head turn at the start
if ((megaId == GEORGE) || (megaId == NICO)) {
- if (turnDir < 0) { // new frames for turn frames 29oct95jps
- module = turnFramesLeft + lastDir;
+ if (turnDir < 0) { // new frames for turn frames 29oct95jps
+ module = turnFramesLeft + lastDir;
} else {
- module = turnFramesRight + lastDir;
+ module = turnFramesRight + lastDir;
}
walkAnim[stepCount].frame = module;
walkAnim[stepCount].step = 0;
@@ -720,14 +720,14 @@ void Router::slidyWalkAnimator(WalkData *walkAnim) {
// rotate till were facing new dir then go back 45 degrees
while (lastDir != currentDir) {
lastDir += turnDir;
- if (turnDir < 0) { // new frames for turn frames 29oct95jps
+ if (turnDir < 0) { // new frames for turn frames 29oct95jps
if (lastDir < 0)
- lastDir += NO_DIRECTIONS;
- module = turnFramesLeft + lastDir;
+ lastDir += NO_DIRECTIONS;
+ module = turnFramesLeft + lastDir;
} else {
if (lastDir > 7)
- lastDir -= NO_DIRECTIONS;
- module = turnFramesRight + lastDir;
+ lastDir -= NO_DIRECTIONS;
+ module = turnFramesRight + lastDir;
}
walkAnim[stepCount].frame = module;
walkAnim[stepCount].step = 0;
@@ -760,17 +760,17 @@ void Router::slidyWalkAnimator(WalkData *walkAnim) {
lastDir = currentDir;
lastCount = stepCount;
}
- //calculate average amount to lose in each step on the way to the next _node
+ //calculate average amount to lose in each step on the way to the next _node
currentDir = _modularPath[p].dir;
if (currentDir < NO_DIRECTIONS) {
- module = currentDir * _framesPerStep * 2 + _slidyWalkAnimatorState * _framesPerStep;
+ module = currentDir * _framesPerStep * 2 + _slidyWalkAnimatorState * _framesPerStep;
_slidyWalkAnimatorState = !_slidyWalkAnimatorState;
moduleEnd = module + _framesPerStep;
step = 0;
scale = (_scaleA * moduleY + _scaleB);
do {
- module16X += _dx[module]*scale;
- module16Y += _dy[module]*scale;
+ module16X += _dx[module] * scale;
+ module16Y += _dy[module] * scale;
moduleX = module16X >> 16;
moduleY = module16Y >> 16;
walkAnim[stepCount].frame = module;
@@ -781,53 +781,53 @@ void Router::slidyWalkAnimator(WalkData *walkAnim) {
stepCount += 1;
step += 1;
module += 1;
- } while ( module < moduleEnd);
+ } while (module < moduleEnd);
stepX = _modX[_modularPath[p].dir];
stepY = _modY[_modularPath[p].dir];
- errorX = _modularPath[p].x - moduleX;
+ errorX = _modularPath[p].x - moduleX;
errorX = errorX * stepX;
- errorY = _modularPath[p].y - moduleY;
+ errorY = _modularPath[p].y - moduleY;
errorY = errorY * stepY;
if ((errorX < 0) || (errorY < 0)) {
- _modularPath[p].num = 0; // the end of the path
+ _modularPath[p].num = 0; // the end of the path
// okay those last steps took us past our target but do we want to scoot or moonwalk
frames = stepCount - lastCount;
- errorX = _modularPath[p].x - walkAnim[stepCount-1].x;
- errorY = _modularPath[p].y - walkAnim[stepCount-1].y;
+ errorX = _modularPath[p].x - walkAnim[stepCount - 1].x;
+ errorY = _modularPath[p].y - walkAnim[stepCount - 1].y;
if (frames > _framesPerStep) {
- lastErrorX = _modularPath[p].x - walkAnim[stepCount-7].x;
- lastErrorY = _modularPath[p].y - walkAnim[stepCount-7].y;
- if (stepX==0) {
- if (3*ABS(lastErrorY) < ABS(errorY)) { //the last stop was closest
+ lastErrorX = _modularPath[p].x - walkAnim[stepCount - 7].x;
+ lastErrorY = _modularPath[p].y - walkAnim[stepCount - 7].y;
+ if (stepX == 0) {
+ if (3 * ABS(lastErrorY) < ABS(errorY)) { //the last stop was closest
stepCount -= _framesPerStep;
_slidyWalkAnimatorState = !_slidyWalkAnimatorState;
}
} else {
- if (3*ABS(lastErrorX) < ABS(errorX)) { //the last stop was closest
+ if (3 * ABS(lastErrorX) < ABS(errorX)) { //the last stop was closest
stepCount -= _framesPerStep;
_slidyWalkAnimatorState = !_slidyWalkAnimatorState;
}
}
}
- errorX = _modularPath[p].x - walkAnim[stepCount-1].x;
- errorY = _modularPath[p].y - walkAnim[stepCount-1].y;
+ errorX = _modularPath[p].x - walkAnim[stepCount - 1].x;
+ errorY = _modularPath[p].y - walkAnim[stepCount - 1].y;
// okay we've reached the end but we still have an error
if (errorX != 0) {
frameCount = 0;
frames = stepCount - lastCount;
do {
frameCount += 1;
- walkAnim[lastCount + frameCount - 1].x += errorX*frameCount/frames;
- } while (frameCount<frames);
+ walkAnim[lastCount + frameCount - 1].x += errorX * frameCount / frames;
+ } while (frameCount < frames);
}
if (errorY != 0) {
frameCount = 0;
frames = stepCount - lastCount;
do {
frameCount += 1;
- walkAnim[lastCount + frameCount-1].y += errorY*frameCount/frames;
- } while (frameCount<frames);
+ walkAnim[lastCount + frameCount - 1].y += errorY * frameCount / frames;
+ } while (frameCount < frames);
}
// Now is the time to put in the turn frames for the last turn
if (frames < _framesPerStep)
@@ -858,8 +858,8 @@ void Router::slidyWalkAnimator(WalkData *walkAnim) {
// all turns checked
lastCount = stepCount;
- moduleX = walkAnim[stepCount-1].x;
- moduleY = walkAnim[stepCount-1].y;
+ moduleX = walkAnim[stepCount - 1].x;
+ moduleY = walkAnim[stepCount - 1].y;
module16X = moduleX << 16;
module16Y = moduleY << 16;
}
@@ -879,9 +879,9 @@ void Router::slidyWalkAnimator(WalkData *walkAnim) {
// We've done the walk now put in any turns at the end
- if (_targetDir == NO_DIRECTIONS) { // stand in the last direction
- module = standFrames + lastRealDir;
- _targetDir = lastRealDir;
+ if (_targetDir == NO_DIRECTIONS) { // stand in the last direction
+ module = standFrames + lastRealDir;
+ _targetDir = lastRealDir;
walkAnim[stepCount].frame = module;
walkAnim[stepCount].step = 0;
walkAnim[stepCount].dir = lastRealDir;
@@ -891,7 +891,7 @@ void Router::slidyWalkAnimator(WalkData *walkAnim) {
}
if (_targetDir == 9) {
if (stepCount == 0) {
- module = _framesPerChar + lastRealDir;
+ module = _framesPerChar + lastRealDir;
walkAnim[stepCount].frame = module;
walkAnim[stepCount].step = 0;
walkAnim[stepCount].dir = lastRealDir;
@@ -913,10 +913,10 @@ void Router::slidyWalkAnimator(WalkData *walkAnim) {
// rotate to target direction
// for george and nico put in a head turn at the start
if ((megaId == GEORGE) || (megaId == NICO)) {
- if (turnDir < 0) { // new frames for turn frames 29oct95jps
- module = turnFramesLeft + lastDir;
+ if (turnDir < 0) { // new frames for turn frames 29oct95jps
+ module = turnFramesLeft + lastDir;
} else {
- module = turnFramesRight + lastDir;
+ module = turnFramesRight + lastDir;
}
walkAnim[stepCount].frame = module;
walkAnim[stepCount].step = 0;
@@ -929,14 +929,14 @@ void Router::slidyWalkAnimator(WalkData *walkAnim) {
// rotate if we need to
while (lastRealDir != _targetDir) {
lastRealDir += turnDir;
- if (turnDir < 0) { // new frames for turn frames 29oct95jps
+ if (turnDir < 0) { // new frames for turn frames 29oct95jps
if (lastRealDir < 0)
- lastRealDir += NO_DIRECTIONS;
- module = turnFramesLeft + lastRealDir;
+ lastRealDir += NO_DIRECTIONS;
+ module = turnFramesLeft + lastRealDir;
} else {
if (lastRealDir > 7)
- lastRealDir -= NO_DIRECTIONS;
- module = turnFramesRight + lastRealDir;
+ lastRealDir -= NO_DIRECTIONS;
+ module = turnFramesRight + lastRealDir;
}
walkAnim[stepCount].frame = module;
walkAnim[stepCount].step = 0;
@@ -945,10 +945,10 @@ void Router::slidyWalkAnimator(WalkData *walkAnim) {
walkAnim[stepCount].y = moduleY;
stepCount += 1;
}
- module = standFrames + lastRealDir;
- walkAnim[stepCount-1].frame = module;
+ module = standFrames + lastRealDir;
+ walkAnim[stepCount - 1].frame = module;
} else { // just stand at the end
- module = standFrames + lastRealDir;
+ module = standFrames + lastRealDir;
walkAnim[stepCount].frame = module;
walkAnim[stepCount].step = 0;
walkAnim[stepCount].dir = lastRealDir;
@@ -962,7 +962,7 @@ void Router::slidyWalkAnimator(WalkData *walkAnim) {
walkAnim[stepCount].frame = 512;
stepCount += 1;
walkAnim[stepCount].frame = 512;
-// Tdebug("RouteFinder RouteSize is %d", stepCount);
+ //Tdebug("RouteFinder RouteSize is %d", stepCount);
return;
}
@@ -1071,7 +1071,7 @@ int32 Router::solidWalkAnimator(WalkData *walkAnim) {
// start at the begining for a change
lastDir = _modularPath[0].dir;
currentDir = _modularPath[1].dir;
- module = _framesPerChar + lastDir;
+ module = _framesPerChar + lastDir;
moduleX = _startX;
moduleY = _startY;
module16X = moduleX << 16;
@@ -1100,7 +1100,7 @@ int32 Router::solidWalkAnimator(WalkData *walkAnim) {
// get the direction to turn
turnDir = currentDir - lastDir;
if (turnDir < 0)
- turnDir += NO_DIRECTIONS;
+ turnDir += NO_DIRECTIONS;
if (turnDir > 4)
turnDir = -1;
@@ -1110,10 +1110,10 @@ int32 Router::solidWalkAnimator(WalkData *walkAnim) {
// rotate to new walk direction
// for george and nico put in a head turn at the start
if ((megaId == GEORGE) || (megaId == NICO)) {
- if (turnDir < 0) { // new frames for turn frames 29oct95jps
- module = turnFramesLeft + lastDir;
+ if (turnDir < 0) { // new frames for turn frames 29oct95jps
+ module = turnFramesLeft + lastDir;
} else {
- module = turnFramesRight + lastDir;
+ module = turnFramesRight + lastDir;
}
walkAnim[stepCount].frame = module;
walkAnim[stepCount].step = 0;
@@ -1126,14 +1126,14 @@ int32 Router::solidWalkAnimator(WalkData *walkAnim) {
// rotate till were facing new dir then go back 45 degrees
while (lastDir != currentDir) {
lastDir += turnDir;
- if (turnDir < 0) { // new frames for turn frames 29oct95jps
+ if (turnDir < 0) { // new frames for turn frames 29oct95jps
if (lastDir < 0)
lastDir += NO_DIRECTIONS;
- module = turnFramesLeft + lastDir;
+ module = turnFramesLeft + lastDir;
} else {
if (lastDir > 7)
lastDir -= NO_DIRECTIONS;
- module = turnFramesRight + lastDir;
+ module = turnFramesRight + lastDir;
}
walkAnim[stepCount].frame = module;
walkAnim[stepCount].step = 0;
@@ -1213,19 +1213,19 @@ int32 Router::solidWalkAnimator(WalkData *walkAnim) {
int32 p;
- for (p = 1; _modularPath[p].dir < NO_DIRECTIONS; ++p) {
+ for (p = 1; _modularPath[p].dir < NO_DIRECTIONS; ++p) {
while (_modularPath[p].num > 0) {
currentDir = _modularPath[p].dir;
if (currentDir < NO_DIRECTIONS) {
- module = currentDir * _framesPerStep * 2 + left * _framesPerStep;
+ module = currentDir * _framesPerStep * 2 + left * _framesPerStep;
left = !left;
moduleEnd = module + _framesPerStep;
step = 0;
scale = (_scaleA * moduleY + _scaleB);
do {
- module16X += _dx[module]*scale;
- module16Y += _dy[module]*scale;
+ module16X += _dx[module] * scale;
+ module16Y += _dy[module] * scale;
moduleX = module16X >> 16;
moduleY = module16Y >> 16;
walkAnim[stepCount].frame = module;
@@ -1236,22 +1236,22 @@ int32 Router::solidWalkAnimator(WalkData *walkAnim) {
stepCount += 1;
module += 1;
step += 1;
- } while ( module < moduleEnd);
- errorX = _modularPath[p].x - moduleX;
+ } while (module < moduleEnd);
+ errorX = _modularPath[p].x - moduleX;
errorX = errorX * _modX[_modularPath[p].dir];
- errorY = _modularPath[p].y - moduleY;
+ errorY = _modularPath[p].y - moduleY;
errorY = errorY * _modY[_modularPath[p].dir];
if ((errorX < 0) || (errorY < 0)) {
_modularPath[p].num = 0;
stepCount -= _framesPerStep;
left = !left;
// Okay this is the end of a section
- moduleX = walkAnim[stepCount-1].x;
- moduleY = walkAnim[stepCount-1].y;
+ moduleX = walkAnim[stepCount - 1].x;
+ moduleY = walkAnim[stepCount - 1].y;
module16X = moduleX << 16;
module16Y = moduleY << 16;
- _modularPath[p].x =moduleX;
- _modularPath[p].y =moduleY;
+ _modularPath[p].x = moduleX;
+ _modularPath[p].y = moduleY;
// Now is the time to put in the turn frames for the last turn
if ((stepCount - lastCount) < _framesPerStep) { // no step taken
currentDir = 99;// this ensures that we don't put in turn frames for this walk or the next
@@ -1350,10 +1350,10 @@ int32 Router::solidWalkAnimator(WalkData *walkAnim) {
stepCount += 1;
}
}
- module = _framesPerChar + _modularPath[p-1].dir;
+ module = _framesPerChar + _modularPath[p - 1].dir;
walkAnim[stepCount].frame = module;
walkAnim[stepCount].step = 0;
- walkAnim[stepCount].dir = _modularPath[p-1].dir;
+ walkAnim[stepCount].dir = _modularPath[p - 1].dir;
walkAnim[stepCount].x = moduleX;
walkAnim[stepCount].y = moduleY;
stepCount += 1;
@@ -1395,7 +1395,7 @@ int32 Router::solidWalkAnimator(WalkData *walkAnim) {
bool Router::scan(int32 level) {
/*********************************************************************
- * Called successively from routeFinder until no more changes take
+ * Called successively from routeFinder until no more changes take
* place in the grid array, ie he best path has been found
*
* Scans through every point in the node array and checks if there is
@@ -1447,7 +1447,7 @@ bool Router::scan(int32 level) {
}
-int32 Router::newCheck(int32 status, int32 x1 , int32 y1 , int32 x2 ,int32 y2) {
+int32 Router::newCheck(int32 status, int32 x1, int32 y1, int32 x2, int32 y2) {
/*********************************************************************
* newCheck routine checks if the route between two points can be
* achieved without crossing any of the bars in the Bars array.
@@ -1531,7 +1531,7 @@ int32 Router::newCheck(int32 status, int32 x1 , int32 y1 , int32 x2 ,int32 y2) {
step2 = check(x1 + ldx / 2, y1, x1 + ldx / 2 + dlx, y2);
if (step2 != 0) {
step3 = check(x1 + ldx / 2 + dlx, y2, x2, y2);
- if (step3 != 0) {
+ if (step3 != 0) {
steps = step1 + step2 + step3;
options |= 1;
}
@@ -1565,8 +1565,8 @@ int32 Router::newCheck(int32 status, int32 x1 , int32 y1 , int32 x2 ,int32 y2) {
ldx = 0;
// options are square, diagonal a code 1 route
- step1 = check(x1 ,y1, x1, y1 + ldy);
- if (step1 != 0) {
+ step1 = check(x1 , y1, x1, y1 + ldy);
+ if (step1 != 0) {
step2 = check(x1, y1 + ldy, x2, y2);
if (step2 != 0) {
steps = step1 + step2;
@@ -1608,7 +1608,7 @@ int32 Router::newCheck(int32 status, int32 x1 , int32 y1 , int32 x2 ,int32 y2) {
step2 = check(x1 + dlx / 2, y1 + dly / 2, x1 + dlx / 2, y1 + ldy + dly / 2);
if (step2 != 0) {
step3 = check(x1 + dlx / 2, y1 + ldy + dly / 2, x2, y2);
- if (step3 != 0) {
+ if (step3 != 0) {
steps = step1 + step2 + step3;
options |= 8;
}
@@ -1659,7 +1659,7 @@ bool Router::lineCheck(int32 x1, int32 y1, int32 x2, int32 y2) {
int32 dirx = x2 - x1;
int32 diry = y2 - y1;
- int32 co = (y1 * dirx) - (x1 * diry); // new line equation
+ int32 co = (y1 * dirx) - (x1 * diry); // new line equation
for (int i = 0; i < _nBars && linesCrossed; i++) {
// skip if not on module
@@ -1668,7 +1668,7 @@ bool Router::lineCheck(int32 x1, int32 y1, int32 x2, int32 y2) {
// but all this arithmetic we must have loads of time
// slope it he slope between the two lines
- int32 slope = (_bars[i].dx * diry) - (_bars[i].dy *dirx);
+ int32 slope = (_bars[i].dx * diry) - (_bars[i].dy * dirx);
// assuming parallel lines don't cross
if (slope != 0) {
// calculate x intercept and check its on both
@@ -1818,50 +1818,50 @@ int32 Router::checkTarget(int32 x, int32 y) {
// ****************************************************************************
int32 Router::LoadWalkResources(Object *megaObject, int32 x, int32 y, int32 dir) {
- WalkGridHeader floorHeader;
- int32 i;
- uint8 *fPolygrid;
- uint8 *fMegaWalkData;
+ WalkGridHeader floorHeader;
+ int32 i;
+ uint8 *fPolygrid;
+ uint8 *fMegaWalkData;
- int32 floorId;
- int32 walkGridResourceId;
+ int32 floorId;
+ int32 walkGridResourceId;
Object *floorObject;
- int32 cnt;
+ int32 cnt;
uint32 cntu;
// load in floor grid for current mega
floorId = megaObject->o_place;
- //floorObject = (object *) Lock_object(floorId);
+ //floorObject = (object *)Lock_object(floorId);
floorObject = _objMan->fetchObject(floorId);
walkGridResourceId = floorObject->o_resource;
//Unlock_object(floorId);
- //ResOpen(walkGridResourceId); // mouse wiggle
- //fPolygrid = ResLock(walkGridResourceId); // mouse wiggle
- fPolygrid = (uint8*)_resMan->openFetchRes(walkGridResourceId);
+ //ResOpen(walkGridResourceId); // mouse wiggle
+ //fPolygrid = ResLock(walkGridResourceId); // mouse wiggle
+ fPolygrid = (uint8 *)_resMan->openFetchRes(walkGridResourceId);
fPolygrid += sizeof(Header);
- memcpy(&floorHeader,fPolygrid,sizeof(WalkGridHeader));
+ memcpy(&floorHeader, fPolygrid, sizeof(WalkGridHeader));
fPolygrid += sizeof(WalkGridHeader);
_nBars = _resMan->getUint32(floorHeader.numBars);
if (_nBars >= O_GRID_SIZE) {
- #ifdef DEBUG //check for id > number in file,
+#ifdef DEBUG //check for id > number in file,
error("RouteFinder Error too many _bars %d", _nBars);
- #endif
+#endif
_nBars = 0;
}
- _nNodes = _resMan->getUint32(floorHeader.numNodes)+1; //array starts at 0 begins at a start _node has nnodes nodes and a target _node
+ _nNodes = _resMan->getUint32(floorHeader.numNodes) + 1; //array starts at 0 begins at a start _node has nnodes nodes and a target _node
if (_nNodes >= O_GRID_SIZE) {
- #ifdef DEBUG //check for id > number in file,
- error("RouteFinder Error too many nodes %d", _nNodes);
- #endif
+#ifdef DEBUG //check for id > number in file,
+ error("RouteFinder Error too many nodes %d", _nNodes);
+#endif
_nNodes = 0;
}
@@ -1883,37 +1883,37 @@ int32 Router::LoadWalkResources(Object *megaObject, int32 x, int32 y, int32 dir)
/*j = 1;// leave _node 0 for start _node
do {
- memmove(&_node[j].x,fPolygrid,2*sizeof(int16));
- fPolygrid += 2*sizeof(int16);
- j ++;
+ memmove(&_node[j].x,fPolygrid,2*sizeof(int16));
+ fPolygrid += 2*sizeof(int16);
+ j ++;
} while (j < _nNodes);//array starts at 0*/
for (cnt = 1; cnt < _nNodes; cnt++) {
_node[cnt].x = _resMan->readUint16(fPolygrid); fPolygrid += 2;
_node[cnt].y = _resMan->readUint16(fPolygrid); fPolygrid += 2;
}
- //ResUnlock(walkGridResourceId); // mouse wiggle
- //ResClose(walkGridResourceId); // mouse wiggle
+ //ResUnlock(walkGridResourceId); // mouse wiggle
+ //ResClose(walkGridResourceId); // mouse wiggle
_resMan->resClose(walkGridResourceId);
// floor grid loaded
-// copy the mega structure into the local variables for use in all subroutines
+ // copy the mega structure into the local variables for use in all subroutines
_startX = megaObject->o_xcoord;
_startY = megaObject->o_ycoord;
_startDir = megaObject->o_dir;
_targetX = x;
- _targetY= y;
+ _targetY = y;
_targetDir = dir;
_scaleA = megaObject->o_scale_a;
_scaleB = megaObject->o_scale_b;
- //ResOpen(megaObject->o_mega_resource); // mouse wiggle
- //fMegaWalkData = ResLock(megaObject->o_mega_resource); // mouse wiggle
- fMegaWalkData = (uint8*)_resMan->openFetchRes(megaObject->o_mega_resource);
+ //ResOpen(megaObject->o_mega_resource); // mouse wiggle
+ //fMegaWalkData = ResLock(megaObject->o_mega_resource); // mouse wiggle
+ fMegaWalkData = (uint8 *)_resMan->openFetchRes(megaObject->o_mega_resource);
// Apparently this resource is in little endian in both the Mac and the PC version
_nWalkFrames = fMegaWalkData[0];
@@ -1945,28 +1945,28 @@ int32 Router::LoadWalkResources(Object *megaObject, int32 x, int32 y, int32 dir)
memmove(&_modY[0],fMegaWalkData,NO_DIRECTIONS*sizeof(int32));
fMegaWalkData += NO_DIRECTIONS*sizeof(int32);*/
- //ResUnlock(megaObject->o_mega_resource); // mouse wiggle
- //ResClose(megaObject->o_mega_resource); // mouse wiggle
+ //ResUnlock(megaObject->o_mega_resource); // mouse wiggle
+ //ResClose(megaObject->o_mega_resource); // mouse wiggle
_resMan->resClose(megaObject->o_mega_resource);
_diagonalx = _modX[3]; //36
_diagonaly = _modY[3]; //8
-// mega data ready
+ // mega data ready
-// finish setting grid by putting mega _node at begining
-// and target _node at end and reset current values
+ // finish setting grid by putting mega _node at begining
+ // and target _node at end and reset current values
_node[0].x = _startX;
_node[0].y = _startY;
_node[0].level = 1;
_node[0].prev = 0;
_node[0].dist = 0;
- i=1;
+ i = 1;
do {
_node[i].level = 0;
_node[i].prev = 0;
_node[i].dist = 9999;
- i=i+1;
+ i = i + 1;
} while (i < _nNodes);
_node[_nNodes].x = _targetX;
_node[_nNodes].y = _targetY;
@@ -2088,12 +2088,12 @@ void Router::extractRoute() {
#define DIAGONALY 8
int whatTarget(int32 startX, int32 startY, int32 destX, int32 destY) {
int tar_dir;
-//setting up
- int deltaX = destX-startX;
- int deltaY = destY-startY;
+ //setting up
+ int deltaX = destX - startX;
+ int deltaY = destY - startY;
int signX = (deltaX > 0);
int signY = (deltaY > 0);
- int slope;
+ int slope;
if ((ABS(deltaY) * DIAGONALX) < (ABS(deltaX) * DIAGONALY / 2))
slope = 0;// its flat
@@ -2103,22 +2103,22 @@ int whatTarget(int32 startX, int32 startY, int32 destX, int32 destY) {
slope = 1;// its diagonal
if (slope == 0) { //flat
- if (signX == 1) // going right
+ if (signX == 1) // going right
tar_dir = 2;
else
tar_dir = 6;
} else if (slope == 2) { //vertical
- if (signY == 1) // going down
+ if (signY == 1) // going down
tar_dir = 4;
else
tar_dir = 0;
} else if (signX == 1) { //right diagonal
- if (signY == 1) // going down
+ if (signY == 1) // going down
tar_dir = 3;
else
tar_dir = 1;
} else { //left diagonal
- if (signY == 1) // going down
+ if (signY == 1) // going down
tar_dir = 5;
else
tar_dir = 7;
diff --git a/engines/sword1/router.h b/engines/sword1/router.h
index 31c4291eed..82724b1e6e 100644
--- a/engines/sword1/router.h
+++ b/engines/sword1/router.h
@@ -27,7 +27,7 @@
namespace Sword1 {
-#include "common/pack-start.h" // START STRUCT PACKING
+#include "common/pack-start.h" // START STRUCT PACKING
struct BarData {
int16 x1;
@@ -38,9 +38,9 @@ struct BarData {
int16 ymin;
int16 xmax;
int16 ymax;
- int16 dx; // x2 - x1
- int16 dy; // y2 - y1
- int32 co; // co = (y1*dx) - (x1*dy) from an equation for a line y*dx = x*dy + co
+ int16 dx; // x2 - x1
+ int16 dy; // y2 - y1
+ int32 co; // co = (y1*dx) - (x1*dy) from an equation for a line y*dx = x*dy + co
} PACKED_STRUCT;
struct NodeData {
@@ -51,13 +51,13 @@ struct NodeData {
int16 dist;
} PACKED_STRUCT;
-#include "common/pack-end.h" // END STRUCT PACKING
+#include "common/pack-end.h" // END STRUCT PACKING
struct FloorData {
- int32 nbars;
- BarData *bars;
- int32 nnodes;
- NodeData *node;
+ int32 nbars;
+ BarData *bars;
+ int32 nnodes;
+ NodeData *node;
};
struct RouteData {
@@ -115,24 +115,24 @@ private:
int32 megaId;
- RouteData _route[O_ROUTE_SIZE];
- PathData _smoothPath[O_ROUTE_SIZE];
- PathData _modularPath[O_ROUTE_SIZE];
- int32 _routeLength;
-
- int32 _framesPerStep, _framesPerChar;
- uint8 _nWalkFrames, _nTurnFrames;
- int32 _dx[NO_DIRECTIONS + MAX_FRAMES_PER_CHAR];
- int32 _dy[NO_DIRECTIONS + MAX_FRAMES_PER_CHAR];
- int32 _modX[NO_DIRECTIONS];
- int32 _modY[NO_DIRECTIONS];
- int32 _diagonalx, _diagonaly;
- int32 standFrames;
- int32 turnFramesLeft, turnFramesRight;
- int32 walkFramesLeft, walkFramesRight; // left/right walking turn
- int32 slowInFrames, slowOutFrames;
-
- bool _slidyWalkAnimatorState;
+ RouteData _route[O_ROUTE_SIZE];
+ PathData _smoothPath[O_ROUTE_SIZE];
+ PathData _modularPath[O_ROUTE_SIZE];
+ int32 _routeLength;
+
+ int32 _framesPerStep, _framesPerChar;
+ uint8 _nWalkFrames, _nTurnFrames;
+ int32 _dx[NO_DIRECTIONS + MAX_FRAMES_PER_CHAR];
+ int32 _dy[NO_DIRECTIONS + MAX_FRAMES_PER_CHAR];
+ int32 _modX[NO_DIRECTIONS];
+ int32 _modY[NO_DIRECTIONS];
+ int32 _diagonalx, _diagonaly;
+ int32 standFrames;
+ int32 turnFramesLeft, turnFramesRight;
+ int32 walkFramesLeft, walkFramesRight; // left/right walking turn
+ int32 slowInFrames, slowOutFrames;
+
+ bool _slidyWalkAnimatorState;
int32 LoadWalkResources(Object *mega, int32 x, int32 y, int32 dir);
int32 getRoute();
diff --git a/engines/sword1/screen.cpp b/engines/sword1/screen.cpp
index 1da89a1091..ae128b8c05 100644
--- a/engines/sword1/screen.cpp
+++ b/engines/sword1/screen.cpp
@@ -78,13 +78,9 @@ void Screen::useTextManager(Text *pTextMan) {
_textMan = pTextMan;
}
-int32 Screen::inRange(int32 a, int32 b, int32 c) { // return b(!) so that: a <= b <= c
- return (a > b) ? (a) : ((b < c) ? b : c);
-}
-
void Screen::setScrolling(int16 offsetX, int16 offsetY) {
- offsetX = inRange(0, offsetX, Logic::_scriptVars[MAX_SCROLL_OFFSET_X]);
- offsetY = inRange(0, offsetY, Logic::_scriptVars[MAX_SCROLL_OFFSET_Y]);
+ offsetX = CLIP<int32>(offsetX, 0, Logic::_scriptVars[MAX_SCROLL_OFFSET_X]);
+ offsetY = CLIP<int32>(offsetY, 0, Logic::_scriptVars[MAX_SCROLL_OFFSET_Y]);
if (Logic::_scriptVars[SCROLL_FLAG] == 2) { // first time on this screen - need absolute scroll immediately!
_oldScrollX = Logic::_scriptVars[SCROLL_OFFSET_X] = (uint32)offsetX;
@@ -101,18 +97,18 @@ void Screen::setScrolling(int16 offsetX, int16 offsetY) {
_oldScrollY = Logic::_scriptVars[SCROLL_OFFSET_Y];
int dx = offsetX - Logic::_scriptVars[SCROLL_OFFSET_X];
int dy = offsetY - Logic::_scriptVars[SCROLL_OFFSET_Y];
- int scrlDistX = inRange(-MAX_SCROLL_DISTANCE, (((SCROLL_FRACTION - 1) + ABS(dx)) / SCROLL_FRACTION) * ((dx > 0) ? 1 : -1), MAX_SCROLL_DISTANCE);
- int scrlDistY = inRange(-MAX_SCROLL_DISTANCE, (((SCROLL_FRACTION - 1) + ABS(dy)) / SCROLL_FRACTION) * ((dy > 0) ? 1 : -1), MAX_SCROLL_DISTANCE);
+ int scrlDistX = CLIP<int32>((((SCROLL_FRACTION - 1) + ABS(dx)) / SCROLL_FRACTION) * ((dx > 0) ? 1 : -1), -MAX_SCROLL_DISTANCE, MAX_SCROLL_DISTANCE);
+ int scrlDistY = CLIP<int32>((((SCROLL_FRACTION - 1) + ABS(dy)) / SCROLL_FRACTION) * ((dy > 0) ? 1 : -1), -MAX_SCROLL_DISTANCE, MAX_SCROLL_DISTANCE);
if ((scrlDistX != 0) || (scrlDistY != 0))
_fullRefresh = true;
- Logic::_scriptVars[SCROLL_OFFSET_X] = inRange(0, Logic::_scriptVars[SCROLL_OFFSET_X] + scrlDistX, Logic::_scriptVars[MAX_SCROLL_OFFSET_X]);
- Logic::_scriptVars[SCROLL_OFFSET_Y] = inRange(0, Logic::_scriptVars[SCROLL_OFFSET_Y] + scrlDistY, Logic::_scriptVars[MAX_SCROLL_OFFSET_Y]);
+ Logic::_scriptVars[SCROLL_OFFSET_X] = CLIP<int32>(Logic::_scriptVars[SCROLL_OFFSET_X] + scrlDistX, 0, Logic::_scriptVars[MAX_SCROLL_OFFSET_X]);
+ Logic::_scriptVars[SCROLL_OFFSET_Y] = CLIP<int32>(Logic::_scriptVars[SCROLL_OFFSET_Y] + scrlDistY, 0, Logic::_scriptVars[MAX_SCROLL_OFFSET_Y]);
} else {
// SCROLL_FLAG == 0, this usually means that the screen is smaller than 640x400 and doesn't need scrolling at all
// however, it can also mean that the gamescript overwrote the scrolling flag to take care of scrolling directly,
// (see bug report #1345130) so we ignore the offset arguments in this case
- Logic::_scriptVars[SCROLL_OFFSET_X] = inRange(0, Logic::_scriptVars[SCROLL_OFFSET_X], Logic::_scriptVars[MAX_SCROLL_OFFSET_X]);
- Logic::_scriptVars[SCROLL_OFFSET_Y] = inRange(0, Logic::_scriptVars[SCROLL_OFFSET_Y], Logic::_scriptVars[MAX_SCROLL_OFFSET_Y]);
+ Logic::_scriptVars[SCROLL_OFFSET_X] = CLIP<int32>(Logic::_scriptVars[SCROLL_OFFSET_X], 0, Logic::_scriptVars[MAX_SCROLL_OFFSET_X]);
+ Logic::_scriptVars[SCROLL_OFFSET_Y] = CLIP<int32>(Logic::_scriptVars[SCROLL_OFFSET_Y], 0, Logic::_scriptVars[MAX_SCROLL_OFFSET_Y]);
if ((Logic::_scriptVars[SCROLL_OFFSET_X] != _oldScrollX) || (Logic::_scriptVars[SCROLL_OFFSET_Y] != _oldScrollY)) {
_fullRefresh = true;
_oldScrollX = Logic::_scriptVars[SCROLL_OFFSET_X];
@@ -134,13 +130,13 @@ void Screen::fadeUpPalette() {
}
void Screen::fnSetPalette(uint8 start, uint16 length, uint32 id, bool fadeUp) {
- uint8 *palData = (uint8*)_resMan->openFetchRes(id);
+ uint8 *palData = (uint8 *)_resMan->openFetchRes(id);
if (start == 0) // force color 0 to black
palData[0] = palData[1] = palData[2] = 0;
if (SwordEngine::isMac()) { // see bug #1701058
if (start != 0 && start + length == 256) // and force color 255 to black as well
- palData[(length-1)*3+0] = palData[(length-1)*3+1] = palData[(length-1)*3+2] = 0;
+ palData[(length - 1) * 3 + 0] = palData[(length - 1) * 3 + 1] = palData[(length - 1) * 3 + 2] = 0;
}
for (uint32 cnt = 0; cnt < length; cnt++) {
@@ -172,7 +168,7 @@ bool Screen::showScrollFrame() {
if ((!_fullRefresh) || Logic::_scriptVars[NEW_PALETTE] || _updatePalette)
return false; // don't draw an additional frame if we aren't scrolling or have to change the palette
if ((_oldScrollX == Logic::_scriptVars[SCROLL_OFFSET_X]) &&
- (_oldScrollY == Logic::_scriptVars[SCROLL_OFFSET_Y]))
+ (_oldScrollY == Logic::_scriptVars[SCROLL_OFFSET_Y]))
return false; // check again if we *really* are scrolling.
uint16 avgScrlX = (uint16)(_oldScrollX + Logic::_scriptVars[SCROLL_OFFSET_X]) / 2;
@@ -322,25 +318,25 @@ void Screen::newScreen(uint32 screen) {
if (SwordEngine::isPsx())
flushPsxCache();
- _screenBuf = (uint8*)malloc(_scrnSizeX * _scrnSizeY);
- _screenGrid = (uint8*)malloc(_gridSizeX * _gridSizeY);
+ _screenBuf = (uint8 *)malloc(_scrnSizeX * _scrnSizeY);
+ _screenGrid = (uint8 *)malloc(_gridSizeX * _gridSizeY);
memset(_screenGrid, 0, _gridSizeX * _gridSizeY);
for (cnt = 0; cnt < _roomDefTable[_currentScreen].totalLayers; cnt++) {
// open and lock all resources, will be closed in quitScreen()
- _layerBlocks[cnt] = (uint8*)_resMan->openFetchRes(_roomDefTable[_currentScreen].layers[cnt]);
+ _layerBlocks[cnt] = (uint8 *)_resMan->openFetchRes(_roomDefTable[_currentScreen].layers[cnt]);
if (cnt > 0)
_layerBlocks[cnt] += sizeof(Header);
}
for (cnt = 0; cnt < _roomDefTable[_currentScreen].totalLayers - 1; cnt++) {
// there's no grid for the background layer, so it's totalLayers - 1
- _layerGrid[cnt] = (uint16*)_resMan->openFetchRes(_roomDefTable[_currentScreen].grids[cnt]);
+ _layerGrid[cnt] = (uint16 *)_resMan->openFetchRes(_roomDefTable[_currentScreen].grids[cnt]);
_layerGrid[cnt] += 14;
}
_parallax[0] = _parallax[1] = NULL;
if (_roomDefTable[_currentScreen].parallax[0])
- _parallax[0] = (uint8*)_resMan->openFetchRes(_roomDefTable[_currentScreen].parallax[0]);
+ _parallax[0] = (uint8 *)_resMan->openFetchRes(_roomDefTable[_currentScreen].parallax[0]);
if (_roomDefTable[_currentScreen].parallax[1])
- _parallax[1] = (uint8*)_resMan->openFetchRes(_roomDefTable[_currentScreen].parallax[1]);
+ _parallax[1] = (uint8 *)_resMan->openFetchRes(_roomDefTable[_currentScreen].parallax[1]);
_updatePalette = true;
_fullRefresh = true;
@@ -393,13 +389,13 @@ void Screen::draw() {
src++;
dest++;
}
- }
+ }
} else if (!(SwordEngine::isPsx())) {
memcpy(_screenBuf, _layerBlocks[0], _scrnSizeX * _scrnSizeY);
} else { //We are using PSX version
if (_currentScreen == 45 || _currentScreen == 55 ||
- _currentScreen == 57 || _currentScreen == 63 || _currentScreen == 71) { // Width shrinked backgrounds
+ _currentScreen == 57 || _currentScreen == 63 || _currentScreen == 71) { // Width shrinked backgrounds
if (!_psxCache.decodedBackground)
_psxCache.decodedBackground = psxShrinkedBackgroundToIndexed(_layerBlocks[0], _scrnSizeX, _scrnSizeY);
} else {
@@ -431,7 +427,7 @@ void Screen::draw() {
if (!_psxCache.extPlxCache) {
Common::File parallax;
parallax.open("TRAIN.PLX");
- _psxCache.extPlxCache = (uint8*) malloc(parallax.size());
+ _psxCache.extPlxCache = (uint8 *)malloc(parallax.size());
parallax.read(_psxCache.extPlxCache, parallax.size());
parallax.close();
}
@@ -456,7 +452,7 @@ void Screen::processImage(uint32 id) {
else
frameHead = _resMan->fetchFrame(_resMan->openFetchRes(compact->o_resource), compact->o_frame);
- uint8 *sprData = ((uint8*)frameHead) + sizeof(FrameHeader);
+ uint8 *sprData = ((uint8 *)frameHead) + sizeof(FrameHeader);
uint16 spriteX = compact->o_anim_x;
uint16 spriteY = compact->o_anim_y;
@@ -474,8 +470,8 @@ void Screen::processImage(uint32 id) {
uint8 *tonyBuf = NULL;
uint8 *hifBuf = NULL;
if (SwordEngine::isPsx() && compact->o_type != TYPE_TEXT) { // PSX sprites are compressed with HIF
- hifBuf = (uint8*)malloc(_resMan->readUint16(&frameHead->width) * _resMan->readUint16(&frameHead->height)/2);
- memset(hifBuf, 0x00, (_resMan->readUint16(&frameHead->width) * _resMan->readUint16(&frameHead->height)/2));
+ hifBuf = (uint8 *)malloc(_resMan->readUint16(&frameHead->width) * _resMan->readUint16(&frameHead->height) / 2);
+ memset(hifBuf, 0x00, (_resMan->readUint16(&frameHead->width) * _resMan->readUint16(&frameHead->height) / 2));
decompressHIF(sprData, hifBuf);
sprData = hifBuf;
} else if (frameHead->runTimeComp[3] == '7') { // RLE7 encoded?
@@ -485,7 +481,7 @@ void Screen::processImage(uint32 id) {
decompressRLE0(sprData, _resMan->readUint32(&frameHead->compSize), _rleBuffer);
sprData = _rleBuffer;
} else if (frameHead->runTimeComp[1] == 'I') { // new type
- tonyBuf = (uint8*)malloc(_resMan->readUint16(&frameHead->width) * _resMan->readUint16(&frameHead->height));
+ tonyBuf = (uint8 *)malloc(_resMan->readUint16(&frameHead->width) * _resMan->readUint16(&frameHead->height));
decompressTony(sprData, _resMan->readUint32(&frameHead->compSize), tonyBuf);
sprData = tonyBuf;
}
@@ -538,16 +534,16 @@ void Screen::processImage(uint32 id) {
if ((sprSizeX > 0) && (sprSizeY > 0)) {
if ((!(SwordEngine::isPsx()) || (compact->o_type == TYPE_TEXT)
- || (compact->o_resource == LVSFLY) || (!(compact->o_resource == GEORGE_MEGA) && (sprSizeX < 260))))
+ || (compact->o_resource == LVSFLY) || (!(compact->o_resource == GEORGE_MEGA) && (sprSizeX < 260))))
drawSprite(sprData + incr, spriteX, spriteY, sprSizeX, sprSizeY, sprPitch);
else if (((sprSizeX >= 260) && (sprSizeX < 450)) || ((compact->o_resource == GMWRITH) && (sprSizeX < 515)) // a psx shrinked sprite (1/2 width)
- || ((compact->o_resource == GMPOWER) && (sprSizeX < 515))) // some needs to be hardcoded, headers don't give useful infos
+ || ((compact->o_resource == GMPOWER) && (sprSizeX < 515))) // some needs to be hardcoded, headers don't give useful infos
drawPsxHalfShrinkedSprite(sprData + incr, spriteX, spriteY, sprSizeX / 2, sprSizeY, sprPitch / 2);
else if (sprSizeX >= 450) // A PSX double shrinked sprite (1/3 width)
drawPsxFullShrinkedSprite(sprData + incr, spriteX, spriteY, sprSizeX / 3, sprSizeY, sprPitch / 3);
else // This is for psx half shrinked, walking george and remaining sprites
drawPsxHalfShrinkedSprite(sprData + incr, spriteX, spriteY, sprSizeX, sprSizeY, sprPitch);
- if (!(compact->o_status&STAT_FORE) && !(SwordEngine::isPsx() && (compact->o_resource == MOUBUSY))) // Check fixes moue sprite being masked by layer, happens only on psx
+ if (!(compact->o_status & STAT_FORE) && !(SwordEngine::isPsx() && (compact->o_resource == MOUBUSY))) // Check fixes moue sprite being masked by layer, happens only on psx
verticalMask(spriteX, spriteY, sprSizeX, sprSizeY);
}
@@ -636,8 +632,8 @@ void Screen::renderParallax(uint8 *data) {
if (SwordEngine::isPsx()) //Parallax headers are different in PSX version
fetchPsxParallaxSize(data, &paraSizeX, &paraSizeY);
else {
- header = (ParallaxHeader*)data;
- lineIndexes = (uint32*)(data + sizeof(ParallaxHeader));
+ header = (ParallaxHeader *)data;
+ lineIndexes = (uint32 *)(data + sizeof(ParallaxHeader));
paraSizeX = _resMan->getUint16(header->sizeX);
paraSizeY = _resMan->getUint16(header->sizeY);
}
@@ -832,7 +828,7 @@ void Screen::addToGraphicList(uint8 listId, uint32 objId) {
_sortList[_sortLength].id = objId;
_sortList[_sortLength].y = cpt->o_anim_y; // gives feet coords if boxed mega, otherwise top of sprite box
if (!(cpt->o_status & STAT_SHRINK)) { // not a boxed mega using shrinking
- Header *frameRaw = (Header*)_resMan->openFetchRes(cpt->o_resource);
+ Header *frameRaw = (Header *)_resMan->openFetchRes(cpt->o_resource);
FrameHeader *frameHead = _resMan->fetchFrame(frameRaw, cpt->o_frame);
_sortList[_sortLength].y += _resMan->readUint16(&frameHead->height) - 1; // now pointing to base of sprite
_resMan->resClose(cpt->o_resource);
@@ -845,7 +841,7 @@ void Screen::addToGraphicList(uint8 listId, uint32 objId) {
}
}
-uint8* Screen::psxBackgroundToIndexed(uint8 *psxBackground, uint32 bakXres, uint32 bakYres) {
+uint8 *Screen::psxBackgroundToIndexed(uint8 *psxBackground, uint32 bakXres, uint32 bakYres) {
uint32 xresInTiles = bakXres / 16;
uint32 yresInTiles = ((bakYres / 2) % 16) ? (bakYres / 32) + 1 : (bakYres / 32);
uint32 totTiles = xresInTiles * yresInTiles;
@@ -867,7 +863,7 @@ uint8* Screen::psxBackgroundToIndexed(uint8 *psxBackground, uint32 bakXres, uint
if (isCompressed)
decompressHIF(psxBackground + tileOffset - 4, decomp_tile); //Decompress the tile into decomp_tile
else
- memcpy(decomp_tile, psxBackground + tileOffset - 4, 16*16);
+ memcpy(decomp_tile, psxBackground + tileOffset - 4, 16 * 16);
if (currentTile > 0 && !(currentTile % xresInTiles)) { //Finished a line of tiles, going down
tileYpos++;
@@ -887,7 +883,7 @@ uint8* Screen::psxBackgroundToIndexed(uint8 *psxBackground, uint32 bakXres, uint
}
// needed because some psx backgrounds are half width and half height
-uint8* Screen::psxShrinkedBackgroundToIndexed(uint8 *psxBackground, uint32 bakXres, uint32 bakYres) {
+uint8 *Screen::psxShrinkedBackgroundToIndexed(uint8 *psxBackground, uint32 bakXres, uint32 bakYres) {
uint32 xresInTiles = ((bakXres / 2) % 16) ? (bakXres / 32) + 1 : (bakXres / 32);
uint32 yresInTiles = ((bakYres / 2) % 16) ? (bakYres / 32) + 1 : (bakYres / 32);
uint32 totTiles = xresInTiles * yresInTiles;
@@ -899,7 +895,7 @@ uint8* Screen::psxShrinkedBackgroundToIndexed(uint8 *psxBackground, uint32 bakXr
uint8 *fullres_buffer = (uint8 *)malloc(bakXres * (yresInTiles + 1) * 32);
memset(fullres_buffer, 0, bakXres * (yresInTiles + 1) * 32);
- bool isCompressed = (READ_LE_UINT32(psxBackground) == MKTAG('C','O','M','P'));
+ bool isCompressed = (READ_LE_UINT32(psxBackground) == MKTAG('C', 'O', 'M', 'P'));
totTiles -= xresInTiles;
psxBackground += 4; //We skip the id tag
@@ -1182,7 +1178,7 @@ void Screen::spriteClipAndSet(uint16 *pSprX, uint16 *pSprY, uint16 *pSprWidth, u
if (*pSprWidth && *pSprHeight) {
// sprite will be drawn, so mark it in the grid buffer
uint16 gridH = (*pSprHeight + (sprY & (SCRNGRID_Y - 1)) + (SCRNGRID_Y - 1)) / SCRNGRID_Y;
- uint16 gridW = (*pSprWidth + (sprX & (SCRNGRID_X - 1)) + (SCRNGRID_X - 1)) / SCRNGRID_X;
+ uint16 gridW = (*pSprWidth + (sprX & (SCRNGRID_X - 1)) + (SCRNGRID_X - 1)) / SCRNGRID_X;
if (SwordEngine::isPsx()) {
gridH *= 2; // This will correct the PSX sprite being cut at half height
@@ -1229,10 +1225,10 @@ void Screen::showFrame(uint16 x, uint16 y, uint32 resId, uint32 frameNo, const b
if (resId != 0xffffffff) {
FrameHeader *frameHead = _resMan->fetchFrame(_resMan->openFetchRes(resId), frameNo);
- uint8 *frameData = ((uint8*)frameHead) + sizeof(FrameHeader);
+ uint8 *frameData = ((uint8 *)frameHead) + sizeof(FrameHeader);
if (SwordEngine::isPsx()) { //We need to decompress PSX frames
- uint8 *frameBufferPSX = (uint8 *)malloc(_resMan->getUint16(frameHead->width) * _resMan->getUint16(frameHead->height)/2);
+ uint8 *frameBufferPSX = (uint8 *)malloc(_resMan->getUint16(frameHead->width) * _resMan->getUint16(frameHead->height) / 2);
decompressHIF(frameData, frameBufferPSX);
for (i = 0; i < _resMan->getUint16(frameHead->height) / 2; i++) {
diff --git a/engines/sword1/screen.h b/engines/sword1/screen.h
index ff4df8c7c6..7586e937a7 100644
--- a/engines/sword1/screen.h
+++ b/engines/sword1/screen.h
@@ -38,14 +38,14 @@ struct SortSpr {
};
struct RoomDef {
- int totalLayers;
- int sizeX;
- int sizeY;
- int gridWidth; //number of 16*16 grid blocks across - including off screen edges.
- uint32 layers[4];
- uint32 grids[3];
- uint32 palettes[2];
- uint32 parallax[2];
+ int totalLayers;
+ int sizeX;
+ int sizeY;
+ int gridWidth; //number of 16*16 grid blocks across - including off screen edges.
+ uint32 layers[4];
+ uint32 grids[3];
+ uint32 palettes[2];
+ uint32 parallax[2];
};
struct PSXDataCache { // Cache for PSX screen, to avoid decompressing background at every screen update
@@ -68,7 +68,7 @@ struct PSXDataCache { // Cache for PSX screen, to avoid decompressing background
class ResMan;
class ObjectMan;
class Text; // Text objects use sprites that are created internally at run-time
- // the buffer belongs to Text, so we need a reference here.
+ // the buffer belongs to Text, so we need a reference here.
class Screen {
public:
@@ -118,15 +118,14 @@ private:
void drawSprite(uint8 *sprData, uint16 sprX, uint16 sprY, uint16 sprWidth, uint16 sprHeight, uint16 sprPitch);
void drawPsxHalfShrinkedSprite(uint8 *sprData, uint16 sprX, uint16 sprY, uint16 sprWidth, uint16 sprHeight, uint16 sprPitch);
void drawPsxFullShrinkedSprite(uint8 *sprData, uint16 sprX, uint16 sprY, uint16 sprWidth, uint16 sprHeight, uint16 sprPitch);
- uint8* psxBackgroundToIndexed(uint8 *psxBackground, uint32 bakXres, uint32 bakYres);
- uint8* psxShrinkedBackgroundToIndexed(uint8 *psxBackground, uint32 bakXres, uint32 bakYres);
+ uint8 *psxBackgroundToIndexed(uint8 *psxBackground, uint32 bakXres, uint32 bakYres);
+ uint8 *psxShrinkedBackgroundToIndexed(uint8 *psxBackground, uint32 bakXres, uint32 bakYres);
void fetchPsxParallaxSize(uint8 *psxParallax, uint16 *paraSizeX, uint16 *paraSizeY);
void drawPsxParallax(uint8 *psxParallax, uint16 paraScrlX, uint16 scrnScrlX, uint16 scrnWidth);
void decompressRLE7(uint8 *src, uint32 compSize, uint8 *dest);
void decompressRLE0(uint8 *src, uint32 compSize, uint8 *dest);
void decompressTony(uint8 *src, uint32 compSize, uint8 *dest);
void fastShrink(uint8 *src, uint32 width, uint32 height, uint32 scale, uint8 *dest);
- int32 inRange(int32 a, int32 b, int32 c);
void fadePalette();
void flushPsxCache();
@@ -163,7 +162,7 @@ private:
uint8 _fadingStep;
int8 _fadingDirection; // 1 for fade up, -1 for fade down
bool _isBlack; // if the logic already faded down the palette, this is set to show the
- // mainloop that no further fading is necessary.
+ // mainloop that no further fading is necessary.
};
} // End of namespace Sword1
diff --git a/engines/sword1/sound.cpp b/engines/sword1/sound.cpp
index f7ab9ca1de..b74cd8c393 100644
--- a/engines/sword1/sound.cpp
+++ b/engines/sword1/sound.cpp
@@ -38,7 +38,7 @@
#include "audio/decoders/raw.h"
#include "audio/decoders/vorbis.h"
#include "audio/decoders/wave.h"
-#include "audio/decoders/vag.h"
+#include "audio/decoders/xa.h"
namespace Sword1 {
@@ -124,10 +124,10 @@ void Sound::checkSpeechFileEndianness() {
size = 2000;
else
size /= 2;
- int16 prev_be_value = (int16)SWAP_BYTES_16(*((uint16*)(data)));
+ int16 prev_be_value = (int16)SWAP_BYTES_16(*((uint16 *)(data)));
for (uint32 i = 1; i < size; ++i) {
- le_diff_sum += fabs((double)(data[i] - data[i-1]));
- int16 be_value = (int16)SWAP_BYTES_16(*((uint16*)(data + i)));
+ le_diff_sum += fabs((double)(data[i] - data[i - 1]));
+ int16 be_value = (int16)SWAP_BYTES_16(*((uint16 *)(data + i)));
be_diff_sum += fabs((double)(be_value - prev_be_value));
prev_be_value = be_value;
}
@@ -187,7 +187,7 @@ void Sound::engine() {
} else {
if (!_mixer->isSoundHandleActive(_fxQueue[cnt2].handle)) { // sound finished
_resMan->resClose(_fxList[_fxQueue[cnt2].id].sampleId);
- if (cnt2 != _endOfQueue-1)
+ if (cnt2 != _endOfQueue - 1)
_fxQueue[cnt2] = _fxQueue[_endOfQueue - 1];
_endOfQueue--;
}
@@ -201,8 +201,8 @@ void Sound::fnStopFx(int32 fxNo) {
if (_fxQueue[cnt].id == (uint32)fxNo) {
if (!_fxQueue[cnt].delay) // sound was started
_resMan->resClose(_fxList[_fxQueue[cnt].id].sampleId);
- if (cnt != _endOfQueue-1)
- _fxQueue[cnt] = _fxQueue[_endOfQueue-1];
+ if (cnt != _endOfQueue - 1)
+ _fxQueue[cnt] = _fxQueue[_endOfQueue - 1];
_endOfQueue--;
return;
}
@@ -243,35 +243,36 @@ void Sound::quitScreen() {
}
void Sound::playSample(QueueElement *elem) {
- uint8 *sampleData = (uint8*)_resMan->fetchRes(_fxList[elem->id].sampleId);
+ uint8 *sampleData = (uint8 *)_resMan->fetchRes(_fxList[elem->id].sampleId);
for (uint16 cnt = 0; cnt < MAX_ROOMS_PER_FX; cnt++) {
if (_fxList[elem->id].roomVolList[cnt].roomNo) {
if ((_fxList[elem->id].roomVolList[cnt].roomNo == (int)Logic::_scriptVars[SCREEN]) ||
- (_fxList[elem->id].roomVolList[cnt].roomNo == -1)) {
-
- uint8 volL = (_fxList[elem->id].roomVolList[cnt].leftVol * 10 * _sfxVolL) / 255;
- uint8 volR = (_fxList[elem->id].roomVolList[cnt].rightVol * 10 * _sfxVolR) / 255;
- int8 pan = (volR - volL) / 2;
- uint8 volume = (volR + volL) / 2;
-
- if (SwordEngine::isPsx()) {
- uint32 size = READ_LE_UINT32(sampleData);
- Audio::AudioStream *audStream = Audio::makeLoopingAudioStream(Audio::makeVagStream(new Common::MemoryReadStream(sampleData + 4, size-4)), (_fxList[elem->id].type == FX_LOOP) ? 0 : 1);
- _mixer->playStream(Audio::Mixer::kSFXSoundType, &elem->handle, audStream, elem->id, volume, pan);
- } else {
- uint32 size = READ_LE_UINT32(sampleData + 0x28);
- uint8 flags;
- if (READ_LE_UINT16(sampleData + 0x22) == 16)
- flags = Audio::FLAG_16BITS | Audio::FLAG_LITTLE_ENDIAN;
- else
- flags = Audio::FLAG_UNSIGNED;
- if (READ_LE_UINT16(sampleData + 0x16) == 2)
- flags |= Audio::FLAG_STEREO;
- Audio::AudioStream *stream = Audio::makeLoopingAudioStream(
- Audio::makeRawStream(sampleData + 0x2C, size, 11025, flags, DisposeAfterUse::NO),
- (_fxList[elem->id].type == FX_LOOP) ? 0 : 1);
- _mixer->playStream(Audio::Mixer::kSFXSoundType, &elem->handle, stream, elem->id, volume, pan);
- }
+ (_fxList[elem->id].roomVolList[cnt].roomNo == -1)) {
+
+ uint8 volL = (_fxList[elem->id].roomVolList[cnt].leftVol * 10 * _sfxVolL) / 255;
+ uint8 volR = (_fxList[elem->id].roomVolList[cnt].rightVol * 10 * _sfxVolR) / 255;
+ int8 pan = (volR - volL) / 2;
+ uint8 volume = (volR + volL) / 2;
+
+ if (SwordEngine::isPsx()) {
+ // We ignore FX_LOOP as XA has its own looping mechanism
+ uint32 size = READ_LE_UINT32(sampleData);
+ Audio::AudioStream *audStream = Audio::makeXAStream(new Common::MemoryReadStream(sampleData + 4, size - 4), 11025);
+ _mixer->playStream(Audio::Mixer::kSFXSoundType, &elem->handle, audStream, elem->id, volume, pan);
+ } else {
+ uint32 size = READ_LE_UINT32(sampleData + 0x28);
+ uint8 flags;
+ if (READ_LE_UINT16(sampleData + 0x22) == 16)
+ flags = Audio::FLAG_16BITS | Audio::FLAG_LITTLE_ENDIAN;
+ else
+ flags = Audio::FLAG_UNSIGNED;
+ if (READ_LE_UINT16(sampleData + 0x16) == 2)
+ flags |= Audio::FLAG_STEREO;
+ Audio::AudioStream *stream = Audio::makeLoopingAudioStream(
+ Audio::makeRawStream(sampleData + 0x2C, size, 11025, flags, DisposeAfterUse::NO),
+ (_fxList[elem->id].type == FX_LOOP) ? 0 : 1);
+ _mixer->playStream(Audio::Mixer::kSFXSoundType, &elem->handle, stream, elem->id, volume, pan);
+ }
}
} else
break;
@@ -293,7 +294,7 @@ bool Sound::startSpeech(uint16 roomNo, uint16 localNo) {
uint16 i;
if (!file.open("speech.lis")) {
- warning ("Could not open speech.lis");
+ warning("Could not open speech.lis");
return false;
}
@@ -305,12 +306,12 @@ bool Sound::startSpeech(uint16 roomNo, uint16 localNo) {
file.close();
if (locIndex == 0xFFFFFFFF) {
- warning ("Could not find room %d in speech.lis", roomNo);
+ warning("Could not find room %d in speech.lis", roomNo);
return false;
}
if (!file.open("speech.inf")) {
- warning ("Could not open speech.inf");
+ warning("Could not open speech.inf");
return false;
}
@@ -332,7 +333,7 @@ bool Sound::startSpeech(uint16 roomNo, uint16 localNo) {
}
if (locIndex == 0xFFFFFFFF) {
- warning ("Could not find local number %d in room %d in speech.inf", roomNo, localNo);
+ warning("Could not find local number %d in room %d in speech.inf", roomNo, localNo);
return false;
}
@@ -364,7 +365,7 @@ bool Sound::startSpeech(uint16 roomNo, uint16 localNo) {
_cowFile.seek(index * 2048);
Common::SeekableReadStream *tmp = _cowFile.readStream(sampleSize);
assert(tmp);
- stream = Audio::makeVagStream(tmp);
+ stream = Audio::makeXAStream(tmp, 11025);
_mixer->playStream(Audio::Mixer::kSpeechSoundType, &_speechHandle, stream, SOUND_SPEECH_ID, speechVol, speechPan);
// with compressed audio, we can't calculate the wave volume.
// so default to talking.
@@ -420,7 +421,7 @@ bool Sound::startSpeech(uint16 roomNo, uint16 localNo) {
}
int16 *Sound::uncompressSpeech(uint32 index, uint32 cSize, uint32 *size) {
- uint8 *fBuf = (uint8*)malloc(cSize);
+ uint8 *fBuf = (uint8 *)malloc(cSize);
_cowFile.seek(index);
_cowFile.read(fBuf, cSize);
uint32 headerPos = 0;
@@ -455,7 +456,7 @@ int16 *Sound::uncompressSpeech(uint32 index, uint32 cSize, uint32 *size) {
resSize >>= 1;
} else {
resSize = 0;
- srcData = (int16*)fBuf;
+ srcData = (int16 *)fBuf;
srcPos = headerPos >> 1;
while (srcPos < cSize) {
length = (int16)READ_LE_UINT16(srcData + srcPos);
@@ -471,10 +472,10 @@ int16 *Sound::uncompressSpeech(uint32 index, uint32 cSize, uint32 *size) {
}
}
assert(!(headerPos & 1));
- srcData = (int16*)fBuf;
+ srcData = (int16 *)fBuf;
srcPos = headerPos >> 1;
uint32 dstPos = 0;
- int16 *dstData = (int16*)malloc(resSize * 2);
+ int16 *dstData = (int16 *)malloc(resSize * 2);
int32 samplesLeft = resSize;
while (srcPos < cSize && samplesLeft > 0) {
length = (int16)(_bigEndianSpeech ? READ_BE_UINT16(srcData + srcPos) : READ_LE_UINT16(srcData + srcPos));
@@ -485,7 +486,7 @@ int16 *Sound::uncompressSpeech(uint32 index, uint32 cSize, uint32 *size) {
length = samplesLeft;
int16 value;
if (_bigEndianSpeech) {
- value = (int16)SWAP_BYTES_16(*((uint16*)(srcData + srcPos)));
+ value = (int16)SWAP_BYTES_16(*((uint16 *)(srcData + srcPos)));
} else {
value = srcData[srcPos];
}
@@ -497,7 +498,7 @@ int16 *Sound::uncompressSpeech(uint32 index, uint32 cSize, uint32 *size) {
length = samplesLeft;
if (_bigEndianSpeech) {
for (uint16 cnt = 0; cnt < (uint16)length; cnt++)
- dstData[dstPos++] = (int16)SWAP_BYTES_16(*((uint16*)(srcData + (srcPos++))));
+ dstData[dstPos++] = (int16)SWAP_BYTES_16(*((uint16 *)(srcData + (srcPos++))));
} else {
memcpy(dstData + dstPos, srcData + srcPos, length * 2);
dstPos += length;
@@ -510,7 +511,7 @@ int16 *Sound::uncompressSpeech(uint32 index, uint32 cSize, uint32 *size) {
memset(dstData + dstPos, 0, samplesLeft * 2);
}
if (_cowMode == CowDemo) // demo has wave output size embedded in the compressed data
- *(uint32*)dstData = 0;
+ *(uint32 *)dstData = 0;
free(fBuf);
*size = resSize * 2;
calcWaveVolume(dstData, resSize);
@@ -606,7 +607,7 @@ void Sound::initCowSystem() {
_currentCowFile = SwordEngine::_systemVars.currentCD;
if (!_cowFile.isOpen()) {
if (!_cowFile.open("speech.dat"))
- error ("Could not open speech.dat");
+ error("Could not open speech.dat");
_cowMode = CowPSX;
}
}
@@ -625,7 +626,7 @@ void Sound::initCowSystem() {
// Get data from the external table file
Common::File tableFile;
if (!tableFile.open("speech.tab"))
- error ("Could not open speech.tab");
+ error("Could not open speech.tab");
_cowHeaderSize = tableFile.size();
_cowHeader = (uint32 *)malloc(_cowHeaderSize);
if (_cowHeaderSize & 3)
@@ -634,7 +635,7 @@ void Sound::initCowSystem() {
_cowHeader[cnt] = tableFile.readUint32LE();
} else {
_cowHeaderSize = _cowFile.readUint32LE();
- _cowHeader = (uint32*)malloc(_cowHeaderSize);
+ _cowHeader = (uint32 *)malloc(_cowHeaderSize);
if (_cowHeaderSize & 3)
error("Unexpected cow header size %d", _cowHeaderSize);
for (uint32 cnt = 0; cnt < (_cowHeaderSize / 4) - 1; cnt++)
diff --git a/engines/sword1/sound.h b/engines/sword1/sound.h
index a6313f85eb..112ae5b6aa 100644
--- a/engines/sword1/sound.h
+++ b/engines/sword1/sound.h
@@ -36,9 +36,9 @@ class Mixer;
namespace Sword1 {
-#define TOTAL_FX_PER_ROOM 7 // total loop & random fx per room (see fx_list.c)
-#define MAX_ROOMS_PER_FX 7 // max no. of rooms in the fx's room,vol list
-#define MAX_FXQ_LENGTH 32 // max length of sound queue - ie. max number of fx that can be stored up/playing together
+#define TOTAL_FX_PER_ROOM 7 // total loop & random fx per room (see fx_list.c)
+#define MAX_ROOMS_PER_FX 7 // max no. of rooms in the fx's room,vol list
+#define MAX_FXQ_LENGTH 32 // max length of sound queue - ie. max number of fx that can be stored up/playing together
#define FX_SPOT 1
#define FX_LOOP 2
@@ -105,15 +105,15 @@ private:
bool _waveVolume[WAVE_VOL_TAB_LENGTH];
uint16 _waveVolPos;
Common::File _cowFile;
- uint32 *_cowHeader;
- uint32 _cowHeaderSize;
- uint8 _currentCowFile;
- CowMode _cowMode;
+ uint32 *_cowHeader;
+ uint32 _cowHeaderSize;
+ uint8 _currentCowFile;
+ CowMode _cowMode;
Audio::SoundHandle _speechHandle, _fxHandle;
Common::RandomSource _rnd;
QueueElement _fxQueue[MAX_FXQ_LENGTH];
- uint8 _endOfQueue;
+ uint8 _endOfQueue;
Audio::Mixer *_mixer;
ResMan *_resMan;
bool _bigEndianSpeech;
diff --git a/engines/sword1/staticres.cpp b/engines/sword1/staticres.cpp
index 402e349576..60c6877232 100644
--- a/engines/sword1/staticres.cpp
+++ b/engines/sword1/staticres.cpp
@@ -7055,7 +7055,7 @@ const uint8 g_genWhiteCoat[] = {
INIT_SEQ_END
};
-const uint8 *Logic::_startData[] = {
+const uint8 *const Logic::_startData[] = {
g_startPos0,
g_startPos1,
g_startPos2,
@@ -7139,7 +7139,7 @@ const uint8 *Logic::_startData[] = {
g_startPos80
};
-const uint8 *Logic::_helperData[] = {
+const uint8 *const Logic::_helperData[] = {
g_genIreland,
g_genSyria,
g_genSpain,
diff --git a/engines/sword1/sword1.cpp b/engines/sword1/sword1.cpp
index 23dff4dec2..865e025786 100644
--- a/engines/sword1/sword1.cpp
+++ b/engines/sword1/sword1.cpp
@@ -48,9 +48,9 @@ SystemVars SwordEngine::_systemVars;
SwordEngine::SwordEngine(OSystem *syst)
: Engine(syst) {
- if (!scumm_stricmp(ConfMan.get("gameid").c_str(), "sword1demo") ||
- !scumm_stricmp(ConfMan.get("gameid").c_str(), "sword1psxdemo") ||
- !scumm_stricmp(ConfMan.get("gameid").c_str(), "sword1macdemo"))
+ if (!scumm_stricmp(ConfMan.get("gameid").c_str(), "sword1demo") ||
+ !scumm_stricmp(ConfMan.get("gameid").c_str(), "sword1psxdemo") ||
+ !scumm_stricmp(ConfMan.get("gameid").c_str(), "sword1macdemo"))
_features = GF_DEMO;
else
_features = 0;
@@ -85,11 +85,11 @@ Common::Error SwordEngine::init() {
initGraphics(640, 480, true);
- if ( 0 == scumm_stricmp(ConfMan.get("gameid").c_str(), "sword1mac") ||
- 0 == scumm_stricmp(ConfMan.get("gameid").c_str(), "sword1macdemo") )
+ if (0 == scumm_stricmp(ConfMan.get("gameid").c_str(), "sword1mac") ||
+ 0 == scumm_stricmp(ConfMan.get("gameid").c_str(), "sword1macdemo"))
_systemVars.platform = Common::kPlatformMacintosh;
- else if (0 == scumm_stricmp(ConfMan.get("gameid").c_str(), "sword1psx") ||
- 0 == scumm_stricmp(ConfMan.get("gameid").c_str(), "sword1psxdemo") )
+ else if (0 == scumm_stricmp(ConfMan.get("gameid").c_str(), "sword1psx") ||
+ 0 == scumm_stricmp(ConfMan.get("gameid").c_str(), "sword1psxdemo"))
_systemVars.platform = Common::kPlatformPSX;
else
_systemVars.platform = Common::kPlatformWindows;
@@ -240,7 +240,7 @@ void SwordEngine::flagsToBool(bool *dest, uint8 flags) {
}
}
-static const char *errorMsgs[] = {
+static const char *const errorMsgs[] = {
"The file \"%s\" is missing and the game doesn't work without it.\n"
"Please copy it from CD %d and try starting the game again.\n"
"The Readme file also contains further information.",
@@ -279,18 +279,18 @@ const CdFile SwordEngine::_pcCdFileList[] = {
{ "text.clu", FLAG_CD1 | FLAG_DEMO },
{ "cows.mad", FLAG_DEMO },
{ "speech1.clu", FLAG_SPEECH1 },
- { "speech2.clu", FLAG_SPEECH2 }
+ { "speech2.clu", FLAG_SPEECH2 }
#ifdef USE_FLAC
- ,{ "speech1.clf", FLAG_SPEECH1 },
- { "speech2.clf", FLAG_SPEECH2 }
+ , { "speech1.clf", FLAG_SPEECH1 },
+ { "speech2.clf", FLAG_SPEECH2 }
#endif
#ifdef USE_VORBIS
- ,{ "speech1.clv", FLAG_SPEECH1 },
- { "speech2.clv", FLAG_SPEECH2 }
+ , { "speech1.clv", FLAG_SPEECH1 },
+ { "speech2.clv", FLAG_SPEECH2 }
#endif
#ifdef USE_MAD
- ,{ "speech1.cl3", FLAG_SPEECH1 },
- { "speech2.cl3", FLAG_SPEECH2 }
+ , { "speech1.cl3", FLAG_SPEECH1 },
+ { "speech2.cl3", FLAG_SPEECH2 }
#endif
};
@@ -311,18 +311,18 @@ const CdFile SwordEngine::_macCdFileList[] = {
{ "swordres.rif", FLAG_CD1 | FLAG_DEMO | FLAG_IMMED },
{ "text.clm", FLAG_CD1 | FLAG_DEMO },
{ "speech1.clu", FLAG_SPEECH1 },
- { "speech2.clu", FLAG_SPEECH2 }
+ { "speech2.clu", FLAG_SPEECH2 }
#ifdef USE_FLAC
,{ "speech1.clf", FLAG_SPEECH1 },
- { "speech2.clf", FLAG_SPEECH2 }
+ { "speech2.clf", FLAG_SPEECH2 }
#endif
#ifdef USE_VORBIS
,{ "speech1.clv", FLAG_SPEECH1 },
- { "speech2.clv", FLAG_SPEECH2 }
+ { "speech2.clv", FLAG_SPEECH2 }
#endif
#ifdef USE_MAD
,{ "speech1.cl3", FLAG_SPEECH1 },
- { "speech2.cl3", FLAG_SPEECH2 }
+ { "speech2.cl3", FLAG_SPEECH2 }
#endif
};
@@ -364,7 +364,7 @@ void SwordEngine::showFileErrorMsg(uint8 type, bool *fileExists) {
int msgId = (type == TYPE_IMMED) ? 0 : 2;
if (missCnt == 1) {
sprintf(msg, errorMsgs[msgId],
- _macCdFileList[missNum].name, (_macCdFileList[missNum].flags & FLAG_CD2) ? 2 : 1);
+ _macCdFileList[missNum].name, (_macCdFileList[missNum].flags & FLAG_CD2) ? 2 : 1);
warning("%s", msg);
} else {
char *pos = msg + sprintf(msg, errorMsgs[msgId + 1], missCnt);
@@ -407,7 +407,7 @@ void SwordEngine::showFileErrorMsg(uint8 type, bool *fileExists) {
int msgId = (type == TYPE_IMMED) ? 0 : 2;
if (missCnt == 1) {
sprintf(msg, errorMsgs[msgId],
- _pcCdFileList[missNum].name, (_pcCdFileList[missNum].flags & FLAG_CD2) ? 2 : 1);
+ _pcCdFileList[missNum].name, (_pcCdFileList[missNum].flags & FLAG_CD2) ? 2 : 1);
warning("%s", msg);
} else {
char *pos = msg + sprintf(msg, errorMsgs[msgId + 1], missCnt);
@@ -454,9 +454,9 @@ void SwordEngine::checkCdFiles() { // check if we're running from cd, hdd or wha
if (Common::File::exists(_psxCdFileList[fcnt].name)) {
fileExists[fcnt] = true;
flagsToBool(foundTypes, _psxCdFileList[fcnt].flags);
- if (!(_psxCdFileList[fcnt].flags & FLAG_DEMO))
+ if (!(_psxCdFileList[fcnt].flags & FLAG_DEMO))
isFullVersion = true;
- cd2FilesFound = true;
+ cd2FilesFound = true;
} else {
flagsToBool(missingTypes, _psxCdFileList[fcnt].flags);
fileExists[fcnt] = false;
@@ -486,9 +486,9 @@ void SwordEngine::checkCdFiles() { // check if we're running from cd, hdd or wha
if (foundTypes[TYPE_SPEECH2]) // same for speech2
missingTypes[TYPE_SPEECH2] = false;
- if (isFullVersion) // if this is the full version...
+ if (isFullVersion) // if this is the full version...
missingTypes[TYPE_DEMO] = false; // then we don't need demo files...
- else // and vice versa
+ else // and vice versa
missingTypes[TYPE_SPEECH1] = missingTypes[TYPE_SPEECH2] = missingTypes[TYPE_CD1] = missingTypes[TYPE_CD2] = false;
bool somethingMissing = false;
@@ -526,13 +526,13 @@ void SwordEngine::checkCdFiles() { // check if we're running from cd, hdd or wha
showFileErrorMsg(TYPE_IMMED, fileExists);
} else if ((!missingTypes[TYPE_CD1]) && !cd2FilesFound) {
/* we have all the data from cd one, but not a single one from CD2.
- I'm not sure how we should handle this, for now I'll just assume that the
- user has set up the extrapath correctly and copied the necessary files to HDD.
- A quite optimistic assumption, I'd say. Maybe we should change this for the release
- to warn the user? */
+ I'm not sure how we should handle this, for now I'll just assume that the
+ user has set up the extrapath correctly and copied the necessary files to HDD.
+ A quite optimistic assumption, I'd say. Maybe we should change this for the release
+ to warn the user? */
warning("CD2 data files not found. I hope you know what you're doing and that\n"
- "you have set up the extrapath and additional data correctly.\n"
- "If you didn't, you should better read the ScummVM readme file");
+ "you have set up the extrapath and additional data correctly.\n"
+ "If you didn't, you should better read the ScummVM readme file");
_systemVars.runningFromCd = true;
_systemVars.playSpeech = true;
} else if (missingTypes[TYPE_CD1] || missingTypes[TYPE_CD2]) {
@@ -542,13 +542,13 @@ void SwordEngine::checkCdFiles() { // check if we're running from cd, hdd or wha
// not so important, but there won't be any voices
if (missingTypes[TYPE_SPEECH1] && missingTypes[TYPE_SPEECH2])
warning("Unable to find the speech files. The game will work, but you won't hear any voice output.\n"
- "Please copy the SPEECH.CLU files from both CDs and rename them to SPEECH1.CLU and SPEECH2.CLU,\n"
- "corresponding to the CD number.\n"
- "Please read the ScummVM Readme file for more information");
+ "Please copy the SPEECH.CLU files from both CDs and rename them to SPEECH1.CLU and SPEECH2.CLU,\n"
+ "corresponding to the CD number.\n"
+ "Please read the ScummVM Readme file for more information");
else
warning("Unable to find the speech file from CD %d.\n"
- "You won't hear any voice output in that part of the game.\n"
- "Please read the ScummVM Readme file for more information", missingTypes[TYPE_SPEECH1] ? 1 : 2);
+ "You won't hear any voice output in that part of the game.\n"
+ "Please read the ScummVM Readme file for more information", missingTypes[TYPE_SPEECH1] ? 1 : 2);
} else if (missingTypes[TYPE_DEMO]) {
// for the demo version, we simply expect to have all files immediately
showFileErrorMsg(TYPE_IMMED, fileExists);
@@ -618,9 +618,9 @@ void SwordEngine::checkCd() {
_music->startMusic(0, 0); //
_sound->closeCowSystem(); // close music and sound files before changing CDs
_systemVars.currentCD = needCd; // askForCd will ask the player to insert _systemVars.currentCd,
- _control->askForCd(); // so it has to be updated before calling it.
+ _control->askForCd(); // so it has to be updated before calling it.
}
- } else { // we're running from HDD, we don't have to care about music files and Sound will take care of
+ } else { // we're running from HDD, we don't have to care about music files and Sound will take care of
if (needCd) // switching sound.clu files on Sound::newScreen by itself, so there's nothing to be done.
_systemVars.currentCD = needCd;
else if (_systemVars.currentCD == 0)
@@ -673,7 +673,7 @@ uint8 SwordEngine::mainLoop() {
// The control panel is triggered by F5 or ESC.
else if (((_keyPressed.keycode == Common::KEYCODE_F5 || _keyPressed.keycode == Common::KEYCODE_ESCAPE)
- && (Logic::_scriptVars[MOUSE_STATUS] & 1)) || (_systemVars.controlPanelMode)) {
+ && (Logic::_scriptVars[MOUSE_STATUS] & 1)) || (_systemVars.controlPanelMode)) {
retCode = _control->runPanel();
if (retCode == CONTROL_NOTHING_DONE)
_screen->fullRefresh();
diff --git a/engines/sword1/sword1.h b/engines/sword1/sword1.h
index 2d6db21d19..e973c12754 100644
--- a/engines/sword1/sword1.h
+++ b/engines/sword1/sword1.h
@@ -63,16 +63,16 @@ class Music;
class Control;
struct SystemVars {
- bool runningFromCd;
- uint32 currentCD; // starts at zero, then either 1 or 2 depending on section being played
- uint32 justRestoredGame; // see main() in sword.c & New_screen() in gtm_core.c
-
- uint8 controlPanelMode; // 1 death screen version of the control panel, 2 = successful end of game, 3 = force restart
- bool forceRestart;
- bool wantFade; // when true => fade during scene change, else cut.
- uint8 playSpeech;
- uint8 showText;
- uint8 language;
+ bool runningFromCd;
+ uint32 currentCD; // starts at zero, then either 1 or 2 depending on section being played
+ uint32 justRestoredGame; // see main() in sword.c & New_screen() in gtm_core.c
+
+ uint8 controlPanelMode; // 1 death screen version of the control panel, 2 = successful end of game, 3 = force restart
+ bool forceRestart;
+ bool wantFade; // when true => fade during scene change, else cut.
+ uint8 playSpeech;
+ uint8 showText;
+ uint8 language;
bool isDemo;
Common::Platform platform;
};
@@ -131,18 +131,18 @@ private:
uint16 _mouseState;
Common::KeyState _keyPressed;
- ResMan *_resMan;
- ObjectMan *_objectMan;
- Screen *_screen;
- Mouse *_mouse;
- Logic *_logic;
- Sound *_sound;
- Menu *_menu;
- Music *_music;
- Control *_control;
+ ResMan *_resMan;
+ ObjectMan *_objectMan;
+ Screen *_screen;
+ Mouse *_mouse;
+ Logic *_logic;
+ Sound *_sound;
+ Menu *_menu;
+ Music *_music;
+ Control *_control;
static const uint8 _cdList[TOTAL_SECTIONS];
- static const CdFile _pcCdFileList[];
- static const CdFile _macCdFileList[];
+ static const CdFile _pcCdFileList[];
+ static const CdFile _macCdFileList[];
static const CdFile _psxCdFileList[];
};
diff --git a/engines/sword1/sworddefs.h b/engines/sword1/sworddefs.h
index 15736dcae0..db4146f37e 100644
--- a/engines/sword1/sworddefs.h
+++ b/engines/sword1/sworddefs.h
@@ -29,13 +29,13 @@ namespace Sword1 {
#define LOOPED 1
-#define FRAME_RATE 12 // number of frames per second (max rate)
-#define SCREEN_WIDTH 640
-#define SCREEN_DEPTH 400
-#define SCREEN_LEFT_EDGE 128
-#define SCREEN_RIGHT_EDGE (128+SCREEN_WIDTH-1)
-#define SCREEN_TOP_EDGE 128
-#define SCREEN_BOTTOM_EDGE (128+SCREEN_DEPTH-1)
+#define FRAME_RATE 12 // number of frames per second (max rate)
+#define SCREEN_WIDTH 640
+#define SCREEN_DEPTH 400
+#define SCREEN_LEFT_EDGE 128
+#define SCREEN_RIGHT_EDGE (128+SCREEN_WIDTH-1)
+#define SCREEN_TOP_EDGE 128
+#define SCREEN_BOTTOM_EDGE (128+SCREEN_DEPTH-1)
#define TYPE_FLOOR 1
#define TYPE_MOUSE 2
#define TYPE_SPRITE 3
@@ -81,22 +81,22 @@ namespace Sword1 {
#define TOTAL_subjects (375-256+1)
#define BASE_SUBJECT 256
-#define TOTAL_SECTIONS 150 //number of sections, rooms + mega sections
-#define TOTAL_ROOMS 100 //total number of rooms
-#define ITM_PER_SEC 0x10000 //65536 items per section -> was originally called "SIZE"
-#define ITM_ID 0xFFFF //& with this -> originally "NuSIZE"
+#define TOTAL_SECTIONS 150 //number of sections, rooms + mega sections
+#define TOTAL_ROOMS 100 //total number of rooms
+#define ITM_PER_SEC 0x10000 //65536 items per section -> was originally called "SIZE"
+#define ITM_ID 0xFFFF //& with this -> originally "NuSIZE"
-#define MAX_text_obs 2 //text compacts
-#define TEXT_sect 149 //text compacts exist in section 149, probably after all the megas
+#define MAX_text_obs 2 //text compacts
+#define TEXT_sect 149 //text compacts exist in section 149, probably after all the megas
-#include "common/pack-start.h" // START STRUCT PACKING
+#include "common/pack-start.h" // START STRUCT PACKING
struct Header {
char type[6];
uint16 version;
- uint32 comp_length;
- char compression[4];
- uint32 decomp_length;
+ uint32 comp_length;
+ char compression[4];
+ uint32 decomp_length;
} PACKED_STRUCT;
struct FrameHeader {
@@ -132,7 +132,7 @@ struct WalkGridHeader {
int32 numNodes;
} PACKED_STRUCT;
-#include "common/pack-end.h" // END STRUCT PACKING
+#include "common/pack-end.h" // END STRUCT PACKING
enum fileTypes {
TYPE_CD1 = 0,
@@ -144,12 +144,12 @@ enum fileTypes {
};
enum fileFlags {
- FLAG_CD1 = (1 << TYPE_CD1), // this file is on cd1
- FLAG_CD2 = (1 << TYPE_CD2), // this file is on cd2
- FLAG_DEMO = (1 << TYPE_DEMO), // file for the demo version
- FLAG_IMMED = (1 << TYPE_IMMED), // this file is needed immediately, game won't start without it
- FLAG_SPEECH1 = (1 << TYPE_SPEECH1),
- FLAG_SPEECH2 = (1 << TYPE_SPEECH2)
+ FLAG_CD1 = (1 << TYPE_CD1), // this file is on cd1
+ FLAG_CD2 = (1 << TYPE_CD2), // this file is on cd2
+ FLAG_DEMO = (1 << TYPE_DEMO), // file for the demo version
+ FLAG_IMMED = (1 << TYPE_IMMED), // this file is needed immediately, game won't start without it
+ FLAG_SPEECH1 = (1 << TYPE_SPEECH1),
+ FLAG_SPEECH2 = (1 << TYPE_SPEECH2)
};
struct CdFile {
@@ -167,29 +167,29 @@ enum Language {
BS1_PORT
};
-#define SAM 2162689
-#define PLAYER 8388608
-#define GEORGE 8388608
-#define NICO 8454144
-#define BENOIR 8585216
-#define ROSSO 8716288
-#define DUANE 8781824
-#define MOUE 9502720
-#define ALBERT 9568256
+#define SAM 2162689
+#define PLAYER 8388608
+#define GEORGE 8388608
+#define NICO 8454144
+#define BENOIR 8585216
+#define ROSSO 8716288
+#define DUANE 8781824
+#define MOUE 9502720
+#define ALBERT 9568256
-#define STAND 0
-#define UP 0
-#define UP_RIGHT 1
-#define U_R 1
-#define RIGHT 2
-#define DOWN_RIGHT 3
-#define D_R 3
-#define DOWN 4
-#define DOWN_LEFT 5
-#define D_L 5
-#define LEFT 6
-#define UP_LEFT 7
-#define U_L 7
+#define STAND 0
+#define UP 0
+#define UP_RIGHT 1
+#define U_R 1
+#define RIGHT 2
+#define DOWN_RIGHT 3
+#define D_R 3
+#define DOWN 4
+#define DOWN_LEFT 5
+#define D_L 5
+#define LEFT 6
+#define UP_LEFT 7
+#define U_L 7
#define BEER_TOWEL 3
#define HOTEL_KEY 4
@@ -373,10 +373,10 @@ enum Language {
#define IT_MINUS 12
#define IT_AND 13
#define IT_OR 14
-#define IT_GTE 15 // >=
-#define IT_LTE 16 // <=
-#define IT_DEVIDE 17 // <=
-#define IT_GT 18 // >
+#define IT_GTE 15 // >=
+#define IT_LTE 16 // <=
+#define IT_DEVIDE 17 // <=
+#define IT_GT 18 // >
#define IT_SCRIPTEND 20
#define IT_POPVAR 21
diff --git a/engines/sword1/text.cpp b/engines/sword1/text.cpp
index 2d4b07020f..3bd2fdb2e6 100644
--- a/engines/sword1/text.cpp
+++ b/engines/sword1/text.cpp
@@ -35,7 +35,7 @@ namespace Sword1 {
#define OVERLAP 3
#define SPACE ' '
-#define MAX_LINES 30
+#define MAX_LINES 30
Text::Text(ObjectMan *pObjMan, ResMan *pResMan, bool czechVersion) {
@@ -43,7 +43,7 @@ Text::Text(ObjectMan *pObjMan, ResMan *pResMan, bool czechVersion) {
_resMan = pResMan;
_textCount = 0;
_fontId = (czechVersion) ? CZECH_GAME_FONT : GAME_FONT;
- _font = (uint8*)_resMan->openFetchRes(_fontId);
+ _font = (uint8 *)_resMan->openFetchRes(_fontId);
_joinWidth = charWidth(SPACE) - 2 * OVERLAP;
_charHeight = _resMan->getUint16(_resMan->fetchFrame(_font, 0)->height); // all chars have the same height
@@ -86,16 +86,16 @@ void Text::makeTextSprite(uint8 slot, const uint8 *text, uint16 maxWidth, uint8
uint16 sprHeight = _charHeight * numLines;
uint32 sprSize = sprWidth * sprHeight;
assert(!_textBlocks[slot]); // if this triggers, the speechDriver failed to call Text::releaseText.
- _textBlocks[slot] = (FrameHeader*)malloc(sprSize + sizeof(FrameHeader));
+ _textBlocks[slot] = (FrameHeader *)malloc(sprSize + sizeof(FrameHeader));
memcpy(_textBlocks[slot]->runTimeComp, "Nu ", 4);
- _textBlocks[slot]->compSize = 0;
- _textBlocks[slot]->width = _resMan->toUint16(sprWidth);
- _textBlocks[slot]->height = _resMan->toUint16(sprHeight);
- _textBlocks[slot]->offsetX = 0;
- _textBlocks[slot]->offsetY = 0;
+ _textBlocks[slot]->compSize = 0;
+ _textBlocks[slot]->width = _resMan->toUint16(sprWidth);
+ _textBlocks[slot]->height = _resMan->toUint16(sprHeight);
+ _textBlocks[slot]->offsetX = 0;
+ _textBlocks[slot]->offsetY = 0;
- uint8 *linePtr = ((uint8*)_textBlocks[slot]) + sizeof(FrameHeader);
+ uint8 *linePtr = ((uint8 *)_textBlocks[slot]) + sizeof(FrameHeader);
memset(linePtr, NO_COL, sprSize);
for (lineCnt = 0; lineCnt < numLines; lineCnt++) {
uint8 *sprPtr = linePtr + (sprWidth - lines[lineCnt].width) / 2; // center the text
@@ -132,7 +132,7 @@ uint16 Text::analyzeSentence(const uint8 *text, uint16 maxWidth, LineInfo *line)
text++;
wordWidth += OVERLAP; // no overlap on final letter of word!
- if (firstWord) { // first word on first line, so no separating SPACE needed
+ if (firstWord) { // first word on first line, so no separating SPACE needed
line[0].width = wordWidth;
line[0].length = wordLength;
firstWord = false;
@@ -144,7 +144,7 @@ uint16 Text::analyzeSentence(const uint8 *text, uint16 maxWidth, LineInfo *line)
if (line[lineNo].width + spaceNeeded <= maxWidth) {
line[lineNo].width += spaceNeeded;
line[lineNo].length += 1 + wordLength; // NB. space+word characters
- } else { // put word (without separating SPACE) at start of next line
+ } else { // put word (without separating SPACE) at start of next line
lineNo++;
assert(lineNo < MAX_LINES);
line[lineNo].width = wordWidth;
@@ -152,21 +152,21 @@ uint16 Text::analyzeSentence(const uint8 *text, uint16 maxWidth, LineInfo *line)
}
}
}
- return lineNo+1; // return no of lines
+ return lineNo + 1; // return no of lines
}
uint16 Text::copyChar(uint8 ch, uint8 *sprPtr, uint16 sprWidth, uint8 pen) {
FrameHeader *chFrame = _resMan->fetchFrame(_font, ch - SPACE);
- uint8 *chData = ((uint8*)chFrame) + sizeof(FrameHeader);
+ uint8 *chData = ((uint8 *)chFrame) + sizeof(FrameHeader);
uint8 *dest = sprPtr;
uint8 *decBuf = NULL;
uint8 *decChr;
uint16 frameHeight = 0;
if (SwordEngine::isPsx()) {
- frameHeight = _resMan->getUint16(chFrame->height)/2;
+ frameHeight = _resMan->getUint16(chFrame->height) / 2;
if (_fontId == CZECH_GAME_FONT) { //Czech game fonts are compressed
- decBuf = (uint8*) malloc((_resMan->getUint16(chFrame->width))*(_resMan->getUint16(chFrame->height)/2));
+ decBuf = (uint8 *)malloc((_resMan->getUint16(chFrame->width)) * (_resMan->getUint16(chFrame->height) / 2));
Screen::decompressHIF(chData, decBuf);
decChr = decBuf;
} else //Normal game fonts are not compressed
diff --git a/engines/sword1/text.h b/engines/sword1/text.h
index 2224fbcac5..4dcb9e26a7 100644
--- a/engines/sword1/text.h
+++ b/engines/sword1/text.h
@@ -30,17 +30,17 @@ namespace Sword1 {
#define MAX_TEXT_OBS 3
-#define BORDER_COL 200
+#define BORDER_COL 200
#define BORDER_COL_PSX 199
-#define LETTER_COL 193
-#define NO_COL 0 // sprite background - 0 for transparency
+#define LETTER_COL 193
+#define NO_COL 0 // sprite background - 0 for transparency
class ObjectMan;
class ResMan;
struct LineInfo {
- uint16 width; // width of line in pixels
- uint16 length; // length of line in characters
+ uint16 width; // width of line in pixels
+ uint16 length; // length of line in characters
};
class Text {
diff --git a/engines/sword2/music.cpp b/engines/sword2/music.cpp
index 63116e954a..1bb08fd36f 100644
--- a/engines/sword2/music.cpp
+++ b/engines/sword2/music.cpp
@@ -39,7 +39,7 @@
#include "audio/decoders/vorbis.h"
#include "audio/decoders/flac.h"
#include "audio/decoders/wave.h"
-#include "audio/decoders/vag.h"
+#include "audio/decoders/xa.h"
#include "audio/rate.h"
#include "sword2/sword2.h"
@@ -267,7 +267,7 @@ Audio::AudioStream *makePSXCLUStream(Common::File *file, int size) {
byte *buffer = (byte *)malloc(size);
file->read(buffer, size);
- return Audio::makeVagStream(new Common::MemoryReadStream(buffer, size, DisposeAfterUse::YES));
+ return Audio::makeXAStream(new Common::MemoryReadStream(buffer, size, DisposeAfterUse::YES), 11025);
}
// ----------------------------------------------------------------------------
diff --git a/engines/sword2/sound.cpp b/engines/sword2/sound.cpp
index 19e244e61c..aea33e99e3 100644
--- a/engines/sword2/sound.cpp
+++ b/engines/sword2/sound.cpp
@@ -47,7 +47,7 @@
#include "sword2/sound.h"
#include "audio/decoders/wave.h"
-#include "audio/decoders/vag.h"
+#include "audio/decoders/xa.h"
#define Debug_Printf _vm->_debugger->DebugPrintf
@@ -234,7 +234,7 @@ void Sound::playMovieSound(int32 res, int type) {
Audio::RewindableAudioStream *input = 0;
if (Sword2Engine::isPsx()) {
- input = Audio::makeVagStream(stream);
+ input = Audio::makeXAStream(stream, 11025);
} else {
input = Audio::makeWAVStream(stream, DisposeAfterUse::YES);
}
@@ -361,7 +361,7 @@ int32 Sound::playFx(Audio::SoundHandle *handle, byte *data, uint32 len, uint8 vo
Audio::RewindableAudioStream *input = 0;
if (Sword2Engine::isPsx())
- input = Audio::makeVagStream(stream);
+ input = Audio::makeXAStream(stream, 11025);
else
input = Audio::makeWAVStream(stream, DisposeAfterUse::YES);
diff --git a/engines/tinsel/sound.cpp b/engines/tinsel/sound.cpp
index bf48dd1511..130928d885 100644
--- a/engines/tinsel/sound.cpp
+++ b/engines/tinsel/sound.cpp
@@ -41,8 +41,9 @@
#include "audio/decoders/flac.h"
#include "audio/decoders/mp3.h"
#include "audio/decoders/raw.h"
-#include "audio/decoders/vag.h"
#include "audio/decoders/vorbis.h"
+#include "audio/decoders/xa.h"
+
#include "gui/message.h"
@@ -106,8 +107,8 @@ bool SoundManager::playSample(int id, Audio::Mixer::SoundType type, Audio::Sound
error(FILE_IS_CORRUPT, _vm->getSampleFile(sampleLanguage));
if (TinselV1PSX) {
- // Read the stream and create a VAG Audio stream
- Audio::AudioStream *vagStream = Audio::makeVagStream(_sampleStream.readStream(sampleLen), 44100);
+ // Read the stream and create a XA ADPCM audio stream
+ Audio::AudioStream *xaStream = Audio::makeXAStream(_sampleStream.readStream(sampleLen), 44100);
// FIXME: Should set this in a different place ;)
_vm->_mixer->setVolumeForSoundType(Audio::Mixer::kSFXSoundType, _vm->_config->_soundVolume);
@@ -115,7 +116,7 @@ bool SoundManager::playSample(int id, Audio::Mixer::SoundType type, Audio::Sound
_vm->_mixer->setVolumeForSoundType(Audio::Mixer::kSpeechSoundType, _vm->_config->_voiceVolume);
// Play the audio stream
- _vm->_mixer->playStream(type, &curChan.handle, vagStream);
+ _vm->_mixer->playStream(type, &curChan.handle, xaStream);
} else {
// allocate a buffer
byte *sampleBuf = (byte *)malloc(sampleLen);
diff --git a/engines/tinsel/tinsel.cpp b/engines/tinsel/tinsel.cpp
index 80f02ff8d1..635845ab26 100644
--- a/engines/tinsel/tinsel.cpp
+++ b/engines/tinsel/tinsel.cpp
@@ -778,7 +778,7 @@ static const GameSettings tinselSettings[] = {
// For the languages, refer to the LANGUAGE enum in dw.h
-const char *TinselEngine::_sampleIndices[][3] = {
+const char *const TinselEngine::_sampleIndices[][3] = {
{ "english.idx", "english1.idx", "english2.idx" }, // English
{ "french.idx", "french1.idx", "french2.idx" }, // French
{ "german.idx", "german1.idx", "german2.idx" }, // German
@@ -789,7 +789,7 @@ const char *TinselEngine::_sampleIndices[][3] = {
{ "english.idx", "english1.idx", "english2.idx" }, // Japanese (FIXME: not sure if this is correct)
{ "us.idx", "us1.idx", "us2.idx" } // US English
};
-const char *TinselEngine::_sampleFiles[][3] = {
+const char *const TinselEngine::_sampleFiles[][3] = {
{ "english.smp", "english1.smp", "english2.smp" }, // English
{ "french.smp", "french1.smp", "french2.smp" }, // French
{ "german.smp", "german1.smp", "german2.smp" }, // German
@@ -800,7 +800,7 @@ const char *TinselEngine::_sampleFiles[][3] = {
{ "english.smp", "english1.smp", "english2.smp" }, // Japanese (FIXME: not sure if this is correct)
{ "us.smp", "us1.smp", "us2.smp" }, // US English
};
-const char *TinselEngine::_textFiles[][3] = {
+const char *const TinselEngine::_textFiles[][3] = {
{ "english.txt", "english1.txt", "english2.txt" }, // English
{ "french.txt", "french1.txt", "french2.txt" }, // French
{ "german.txt", "german1.txt", "german2.txt" }, // German
diff --git a/engines/tinsel/tinsel.h b/engines/tinsel/tinsel.h
index e18216cdf7..59344c44f4 100644
--- a/engines/tinsel/tinsel.h
+++ b/engines/tinsel/tinsel.h
@@ -156,9 +156,9 @@ class TinselEngine : public Engine {
Console *_console;
Scheduler *_scheduler;
- static const char *_sampleIndices[][3];
- static const char *_sampleFiles[][3];
- static const char *_textFiles[][3];
+ static const char *const _sampleIndices[][3];
+ static const char *const _sampleFiles[][3];
+ static const char *const _textFiles[][3];
protected:
diff --git a/engines/toon/anim.cpp b/engines/toon/anim.cpp
index 07d51ef1b9..a529001af5 100644
--- a/engines/toon/anim.cpp
+++ b/engines/toon/anim.cpp
@@ -693,7 +693,7 @@ AnimationManager::AnimationManager(ToonEngine *vm) : _vm(vm) {
bool AnimationManager::hasInstance(AnimationInstance* instance) {
for (uint32 i = 0; i < _instances.size(); i++) {
- if(_instances[i] == instance)
+ if (_instances[i] == instance)
return true;
}
return false;
@@ -709,7 +709,7 @@ 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)
+ if (_instances[i] == instance)
return;
}
diff --git a/engines/toon/audio.cpp b/engines/toon/audio.cpp
index 4a4a84e62c..5b2d06b74d 100644
--- a/engines/toon/audio.cpp
+++ b/engines/toon/audio.cpp
@@ -65,7 +65,7 @@ void AudioManager::muteMusic(bool muted) {
}
void AudioManager::muteVoice(bool muted) {
- if(voiceStillPlaying() && _channels[2]) {
+ if (voiceStillPlaying() && _channels[2]) {
_channels[2]->setVolume(muted ? 0 : 255);
}
_voiceMuted = muted;
@@ -272,7 +272,7 @@ AudioStreamInstance::~AudioStreamInstance() {
int AudioStreamInstance::readBuffer(int16 *buffer, const int numSamples) {
debugC(5, kDebugAudio, "readBuffer(buffer, %d)", numSamples);
- if(_stopped)
+ if (_stopped)
return 0;
handleFade(numSamples);
@@ -598,7 +598,7 @@ void AudioManager::updateAmbientSFX()
for (int32 i = 0; i < 4; i++) {
AudioAmbientSFX* ambient = &_ambientSFXs[i];
if (ambient->_enabled && (ambient->_channel < 0 || !(_channels[ambient->_channel] && _channels[ambient->_channel]->isPlaying()))) {
- if(ambient->_mode == 1) {
+ if (ambient->_mode == 1) {
if (_vm->randRange(0, 32767) < ambient->_delay) {
ambient->_channel = playSFX(ambient->_id, ambient->_volume, false);
}
diff --git a/engines/toon/picture.cpp b/engines/toon/picture.cpp
index 295e304765..6367165d6f 100644
--- a/engines/toon/picture.cpp
+++ b/engines/toon/picture.cpp
@@ -323,7 +323,7 @@ void Picture::drawLineOnMask(int32 x, int32 y, int32 x2, int32 y2, bool walkable
int32 rx = bx >> 16;
int32 ry = by >> 16;
- if( rx >= 0 && rx < _width-1 && ry >= 0 && ry < _height) { // sanity check: some lines in the game
+ if ( rx >= 0 && rx < _width-1 && ry >= 0 && ry < _height) { // sanity check: some lines in the game
// were drawing outside the screen causing corruption
if (!walkable) {
_data[_width * ry + rx] &= 0xe0;
diff --git a/engines/toon/resource.cpp b/engines/toon/resource.cpp
index cef916c7de..384a363d7d 100644
--- a/engines/toon/resource.cpp
+++ b/engines/toon/resource.cpp
@@ -41,7 +41,7 @@ Resources::~Resources() {
delete temp;
}
- while(!_pakFiles.empty()) {
+ while (!_pakFiles.empty()) {
PakFile *temp = _pakFiles.back();
_pakFiles.pop_back();
delete temp;
diff --git a/engines/toon/script_func.cpp b/engines/toon/script_func.cpp
index 005a299502..b6a374ab5c 100644
--- a/engines/toon/script_func.cpp
+++ b/engines/toon/script_func.cpp
@@ -223,7 +223,7 @@ ScriptFunc::ScriptFunc(ToonEngine *vm) {
}
ScriptFunc::~ScriptFunc(void) {
- while(!_opcodes.empty()) {
+ while (!_opcodes.empty()) {
const OpcodeV2 *temp = _opcodes.back();
_opcodes.pop_back();
delete temp;
@@ -990,7 +990,7 @@ int32 ScriptFunc::sys_Cmd_Set_Scene_Animation_Active_Flag(EMCState *state) {
if (sceneAnim->_active) {
sceneAnim->_animInstance->setVisible(activeFlag > 0);
- if(activeFlag) {
+ if (activeFlag) {
_vm->getAnimationManager()->addInstance(sceneAnim->_animInstance);
}
}
diff --git a/engines/toon/tools.cpp b/engines/toon/tools.cpp
index c2ee8acf8a..added39940 100644
--- a/engines/toon/tools.cpp
+++ b/engines/toon/tools.cpp
@@ -383,7 +383,7 @@ int32 RncDecoder::unpackM1(const void *input, uint16 inputSize, void *output) {
uint16 b;
if (_inputByteLeft <= 2)
b = 0;
- else if(_inputByteLeft == 3)
+ else if (_inputByteLeft == 3)
b = *(_srcPtr + 2);
else
b = READ_LE_UINT16(_srcPtr + 2);
diff --git a/engines/toon/toon.cpp b/engines/toon/toon.cpp
index cff6c24469..4631e5f0d0 100644
--- a/engines/toon/toon.cpp
+++ b/engines/toon/toon.cpp
@@ -191,11 +191,11 @@ void ToonEngine::parseInput() {
_audioManager->stopCurrentVoice();
}
if (event.kbd.keycode == Common::KEYCODE_F5 && !hasModifier) {
- if(canSaveGameStateCurrently())
+ if (canSaveGameStateCurrently())
saveGame(-1, Common::String());
}
if (event.kbd.keycode == Common::KEYCODE_F6 && !hasModifier) {
- if(canLoadGameStateCurrently())
+ if (canLoadGameStateCurrently())
loadGame(-1);
}
if (event.kbd.ascii == 't' && !hasModifier) {
@@ -509,7 +509,7 @@ void ToonEngine::copyToVirtualScreen(bool updateScreen) {
Common::Rect rect = _oldDirtyRects[i];
rect.translate(-state()->_currentScrollValue, 0);
offX = 0;
- if(rect.right <= 0)
+ if (rect.right <= 0)
continue;
if (rect.left < 0) {
offX = -rect.left;
@@ -663,7 +663,7 @@ bool ToonEngine::showMainmenu(bool &loadedGame) {
while (!clickRelease) {
- if(_dirtyAll) {
+ if (_dirtyAll) {
mainmenuPicture->draw(*_mainSurface, 0, 0, 0, 0);
addDirtyRect(0, 0, TOON_SCREEN_WIDTH, TOON_SCREEN_HEIGHT);
} else {
@@ -936,7 +936,7 @@ ToonEngine::~ToonEngine() {
delete _animationManager;
delete _moviePlayer;
- if(_mainSurface) {
+ if (_mainSurface) {
_mainSurface->free();
delete _mainSurface;
}
@@ -4677,7 +4677,7 @@ void ToonEngine::makeLineWalkable(int32 x, int32 y, int32 x2, int32 y2) {
}
void ToonEngine::playRoomMusic() {
- if(_gameState->_inConversation) {
+ if (_gameState->_inConversation) {
const char* music = getSpecialConversationMusic(_gameState->_currentConversationId);
if (music) {
_audioManager->playMusic(_gameState->_locations[_gameState->_currentScene]._name, music);
diff --git a/engines/tsage/blue_force/blueforce_dialogs.cpp b/engines/tsage/blue_force/blueforce_dialogs.cpp
new file mode 100644
index 0000000000..e074f8884d
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_dialogs.cpp
@@ -0,0 +1,434 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "common/translation.h"
+
+#include "gui/dialog.h"
+#include "gui/widget.h"
+
+#include "tsage/tsage.h"
+#include "tsage/core.h"
+#include "tsage/dialogs.h"
+#include "tsage/staticres.h"
+#include "tsage/globals.h"
+#include "tsage/blue_force/blueforce_dialogs.h"
+#include "tsage/ringworld/ringworld_logic.h"
+
+namespace TsAGE {
+
+namespace BlueForce {
+
+/**
+ * This dialog implements the right-click dialog
+ */
+RightClickDialog::RightClickDialog() : GfxDialog() {
+ // Setup button areas
+ _rectList1[0] = Rect(7, 50, 41, 67);
+ _rectList1[1] = Rect(13, 27, 50, 50);
+ _rectList1[2] = Rect(49, 27, 84, 50);
+ _rectList1[3] = Rect(56, 50, 90, 67);
+ _rectList1[4] = Rect(26, 68, 69, 99);
+
+ _rectList3[0] = Rect(12, 49, 27, 64);
+ _rectList3[1] = Rect(27, 31, 42, 46);
+ _rectList3[2] = Rect(56, 31, 71, 46);
+ _rectList3[3] = Rect(72, 50, 87, 65);
+ _rectList3[4] = Rect(41, 81, 56, 96);
+
+ // Set the palette and change the cursor
+ GfxSurface cursor = surfaceFromRes(1, 5, 9);
+ BF_GLOBALS._events.setCursor(cursor);
+
+ setPalette();
+
+ // Get the dialog image
+ _surface = surfaceFromRes(1, 1, 1);
+
+ // Set the dialog position
+ Rect dialogRect;
+ dialogRect.resize(_surface, 0, 0, 100);
+ dialogRect.center(_globals->_events._mousePos.x, _globals->_events._mousePos.y);
+
+ // Ensure the dialog will be entirely on-screen
+ Rect screenRect = _globals->gfxManager()._bounds;
+ screenRect.collapse(4, 4);
+ dialogRect.contain(screenRect);
+
+ // Load selected button images
+ _btnImages.setVisage(1, 2);
+
+ _bounds = dialogRect;
+ _gfxManager._bounds = _bounds;
+
+ _highlightedAction = -1;
+ _selectedAction = -1;
+}
+
+RightClickDialog::~RightClickDialog() {
+}
+
+void RightClickDialog::draw() {
+ // Save the covered background area
+ _savedArea = Surface_getArea(_globals->_gfxManagerInstance.getSurface(), _bounds);
+
+ // Draw the dialog image
+ _globals->gfxManager().copyFrom(_surface, _bounds.left, _bounds.top);
+
+ // Pre-process rect lists
+ for (int idx = 0; idx < 5; ++idx) {
+ _rectList2[idx] = _rectList1[idx];
+ _rectList4[idx] = _rectList3[idx];
+
+ _rectList2[idx].translate(_bounds.left, _bounds.top);
+ _rectList4[idx].translate(_bounds.left, _bounds.top);
+ }
+}
+
+bool RightClickDialog::process(Event &event) {
+ switch (event.eventType) {
+ case EVENT_MOUSE_MOVE: {
+ // Check whether a button is highlighted
+ int buttonIndex = 0;
+ while ((buttonIndex < 5) && !_rectList1[buttonIndex].contains(event.mousePos))
+ ++buttonIndex;
+ if (buttonIndex == 5)
+ buttonIndex = -1;
+
+ // If selection has changed, handle it
+ if (buttonIndex != _highlightedAction) {
+ if (_highlightedAction != -1) {
+ // Another button was previously selected, so restore dialog
+ _gfxManager.copyFrom(_surface, 0, 0);
+ }
+
+ if (buttonIndex != -1) {
+ // Draw newly selected button
+ GfxSurface btn = _btnImages.getFrame(buttonIndex + 1);
+ _gfxManager.copyFrom(btn, _rectList3[buttonIndex].left, _rectList3[buttonIndex].top);
+ }
+
+ _highlightedAction = buttonIndex;
+ }
+
+ event.handled = true;
+ return true;
+ }
+
+ case EVENT_BUTTON_DOWN:
+ // Specify the selected action
+ _selectedAction = (_highlightedAction == -1) ? 5 : _highlightedAction;
+ event.handled = true;
+ return true;
+
+ default:
+ break;
+ }
+
+ return false;
+}
+
+void RightClickDialog::execute() {
+ // Draw the dialog
+ draw();
+
+ // Dialog event handler loop
+ _gfxManager.activate();
+
+ while (!_vm->shouldQuit() && (_selectedAction == -1)) {
+ Event evt;
+ while (_globals->_events.getEvent(evt, EVENT_MOUSE_MOVE | EVENT_BUTTON_DOWN)) {
+ evt.mousePos.x -= _bounds.left;
+ evt.mousePos.y -= _bounds.top;
+
+ process(evt);
+ }
+
+ g_system->delayMillis(10);
+ g_system->updateScreen();
+ }
+
+ // Execute the specified action
+ CursorType cursorNum = CURSOR_NONE;
+ switch (_selectedAction) {
+ case 0:
+ // Walk action
+ cursorNum = BF_GLOBALS._player._canWalk ? CURSOR_WALK : CURSOR_USE;
+ break;
+ case 1:
+ // Use action
+ cursorNum = CURSOR_USE;
+ break;
+ case 2:
+ // Look action
+ cursorNum = CURSOR_LOOK;
+ break;
+ case 3:
+ // Talk action
+ cursorNum = CURSOR_TALK;
+ break;
+ case 4:
+ // Options dialog
+ break;
+ }
+
+ if (cursorNum != CURSOR_NONE)
+ BF_GLOBALS._events.setCursor(cursorNum);
+
+ _gfxManager.deactivate();
+}
+
+/*--------------------------------------------------------------------------*/
+
+AmmoBeltDialog::AmmoBeltDialog() : GfxDialog() {
+ _cursorNum = BF_GLOBALS._events.getCursor();
+ _inDialog = -1;
+ _closeFlag = false;
+
+ // Get the dialog image
+ _surface = surfaceFromRes(9, 5, 2);
+
+ // Set the dialog position
+ _dialogRect.resize(_surface, 0, 0, 100);
+ _dialogRect.center(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2);
+
+ _bounds = _dialogRect;
+ _gfxManager._bounds = _bounds;
+ _savedArea = NULL;
+
+ // Set up area rects
+ _gunRect.set(0, 0, 82, 48);
+ _clip1Rect.set(90, 6, _bounds.width(), 39);
+ _clip2Rect.set(90, 40, _bounds.width(), _bounds.height());
+ _loadedRect.set(50, 40, 60, 50);
+}
+
+AmmoBeltDialog::~AmmoBeltDialog() {
+ BF_GLOBALS._events.setCursor(_cursorNum);
+}
+
+void AmmoBeltDialog::execute() {
+ // Draw the dialog
+ draw();
+
+ // Dialog event handler loop
+ _gfxManager.activate();
+
+ while (!_vm->shouldQuit() && !_closeFlag) {
+ Event evt;
+ while (_globals->_events.getEvent(evt, EVENT_MOUSE_MOVE | EVENT_BUTTON_DOWN)) {
+ evt.mousePos.x -= _bounds.left;
+ evt.mousePos.y -= _bounds.top;
+
+ process(evt);
+ }
+
+ g_system->delayMillis(10);
+ g_system->updateScreen();
+ }
+
+ _gfxManager.deactivate();
+}
+
+bool AmmoBeltDialog::process(Event &event) {
+ switch (event.eventType) {
+ case EVENT_MOUSE_MOVE: {
+ // Handle updating cursor depending on whether cursor is in dialog or not
+ int inDialog = Rect(0, 0, _bounds.width(), _bounds.height()).contains(event.mousePos);
+ if (inDialog != _inDialog) {
+ // Update cursor
+ BF_GLOBALS._events.setCursor(inDialog ? CURSOR_USE : CURSOR_EXIT);
+ _inDialog = inDialog;
+ }
+ return true;
+ }
+
+ case EVENT_BUTTON_DOWN:
+ if (!_inDialog)
+ // Clicked outside dialog, so flag to close it
+ _closeFlag = true;
+ else {
+ int v = (BF_GLOBALS.getFlag(fGunLoaded) ? 1 : 0) * (BF_GLOBALS.getFlag(fLoadedSpare) ? 2 : 1);
+
+ // Handle first clip
+ if ((v != 1) && _clip1Rect.contains(event.mousePos)) {
+ if (BF_GLOBALS.getFlag(fGunLoaded)) {
+ event.mousePos.x = event.mousePos.y = 0;
+ }
+
+ BF_GLOBALS.setFlag(fGunLoaded);
+ BF_GLOBALS.clearFlag(fLoadedSpare);
+ }
+
+ // Handle second clip
+ if ((v != 2) && _clip2Rect.contains(event.mousePos)) {
+ if (BF_GLOBALS.getFlag(fGunLoaded)) {
+ event.mousePos.x = event.mousePos.y = 0;
+ }
+
+ BF_GLOBALS.setFlag(fGunLoaded);
+ BF_GLOBALS.setFlag(fLoadedSpare);
+ }
+
+ if (_gunRect.contains(event.mousePos) && BF_GLOBALS.getFlag(fGunLoaded)) {
+ BF_GLOBALS.clearFlag(fGunLoaded);
+ v = (BF_GLOBALS.getFlag(fGunLoaded) ? 1 : 0) * (BF_GLOBALS.getFlag(fLoadedSpare) ? 2 : 1);
+
+ if (v != 2)
+ BF_GLOBALS.clearFlag(fLoadedSpare);
+ }
+
+ draw();
+ }
+
+ return true;
+
+ case EVENT_KEYPRESS:
+ if ((event.kbd.keycode == Common::KEYCODE_ESCAPE) || (event.kbd.keycode == Common::KEYCODE_RETURN)) {
+ // Escape pressed, so flag to close dialog
+ _closeFlag = true;
+ return true;
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ return false;
+}
+
+void AmmoBeltDialog::draw() {
+ Rect bounds = _bounds;
+
+ if (!_savedArea) {
+ // Save the covered background area
+ _savedArea = Surface_getArea(_globals->_gfxManagerInstance.getSurface(), _bounds);
+ } else {
+ bounds.moveTo(0, 0);
+ }
+
+ // Draw the dialog image
+ _globals->gfxManager().copyFrom(_surface, bounds.left, bounds.top);
+
+ // Setup clip flags
+ bool clip1 = true, clip2 = true;
+ bool gunLoaded = BF_GLOBALS.getFlag(fGunLoaded);
+ if (gunLoaded) {
+ // A clip is currently loaded. Hide the appropriate clip
+ if (BF_GLOBALS.getFlag(fLoadedSpare))
+ clip2 = false;
+ else
+ clip1 = false;
+ }
+
+ // Draw the first clip if necessary
+ if (clip1) {
+ GfxSurface clipSurface = surfaceFromRes(9, 6, BF_GLOBALS._clip1Bullets);
+ _clip1Rect.resize(clipSurface, _clip1Rect.left, _clip1Rect.top, 100);
+ _globals->gfxManager().copyFrom(clipSurface, bounds.left + _clip1Rect.left,
+ bounds.top + _clip1Rect.top);
+ }
+
+ // Draw the second clip if necessary
+ if (clip2) {
+ GfxSurface clipSurface = surfaceFromRes(9, 6, BF_GLOBALS._clip2Bullets);
+ _clip2Rect.resize(clipSurface, _clip2Rect.left, _clip2Rect.top, 100);
+ _globals->gfxManager().copyFrom(clipSurface, bounds.left + _clip2Rect.left,
+ bounds.top + _clip2Rect.top);
+ }
+
+ // If a clip is loaded, draw the 'loaded' portion of the gun
+ if (gunLoaded) {
+ GfxSurface loadedSurface = surfaceFromRes(9, 7, 1);
+ _loadedRect.resize(loadedSurface, _loadedRect.left, _loadedRect.top, 100);
+ _globals->gfxManager().copyFrom(loadedSurface, bounds.left + _loadedRect.left,
+ bounds.top + _loadedRect.top);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+RadioConvDialog::RadioConvDialog() : ModalDialog() {
+ int idx;
+
+ // Set up the list of buttons
+ int maxWidth = 0;
+ for (idx = 0; idx < 8; ++idx) {
+ _buttons[idx].setText(RADIO_BTN_LIST[idx]);
+ maxWidth = MAX(maxWidth, (int)_buttons[idx]._bounds.width());
+
+ add(&_buttons[idx]);
+ }
+
+ // Set up the button positions and add them to the dialog
+ for (idx = 0; idx < 8; ++idx) {
+ _buttons[idx]._bounds.moveTo((idx % 2) * maxWidth + 2,
+ idx / 2 * _buttons[idx]._bounds.height() + 2);
+ _buttons[idx]._bounds.setWidth(maxWidth);
+
+ add(&_buttons[idx]);
+ }
+
+ // Set the dialog size and position
+ setDefaults();
+ setTopLeft(8, 92);
+
+ BF_GLOBALS._events.setCursor(CURSOR_ARROW);
+}
+
+RadioConvDialog::~RadioConvDialog() {
+ BF_GLOBALS._events.setCursor(CURSOR_WALK);
+}
+
+int RadioConvDialog::execute() {
+ GfxButton *btn = ModalDialog::execute();
+
+ // Get which button was pressed
+ int btnIndex = -1;
+ for (int idx = 0; idx < 8; ++idx) {
+ if (btn == &_buttons[idx]) {
+ btnIndex = idx;
+ break;
+ }
+ }
+
+ return btnIndex;
+}
+
+int RadioConvDialog::show() {
+ // Show the dialog
+ RadioConvDialog *dlg = new RadioConvDialog();
+ dlg->draw();
+
+ int btnIndex = dlg->execute();
+
+ // Close the dialog
+ dlg->remove();
+ delete dlg;
+
+ return btnIndex;
+}
+
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/blue_force/blueforce_dialogs.h b/engines/tsage/blue_force/blueforce_dialogs.h
new file mode 100644
index 0000000000..e9ce29c019
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_dialogs.h
@@ -0,0 +1,92 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef TSAGE_BLUEFORCE_DIALOGS_H
+#define TSAGE_BLUEFORCE_DIALOGS_H
+
+#include "gui/options.h"
+#include "tsage/dialogs.h"
+#include "tsage/events.h"
+#include "tsage/graphics.h"
+#include "common/list.h"
+#include "common/rect.h"
+#include "common/system.h"
+
+namespace TsAGE {
+
+namespace BlueForce {
+
+using namespace TsAGE;
+
+class RightClickDialog : public GfxDialog {
+private:
+ GfxSurface _surface;
+ Visage _btnImages;
+ Rect _rectList1[5];
+ Rect _rectList2[5];
+ Rect _rectList3[5];
+ Rect _rectList4[5];
+
+ int _highlightedAction;
+ int _selectedAction;
+public:
+ RightClickDialog();
+ ~RightClickDialog();
+
+ virtual void draw();
+ virtual bool process(Event &event);
+ void execute();
+};
+
+class AmmoBeltDialog : public GfxDialog {
+private:
+ GfxSurface _surface;
+ Visage _cursorImages;
+ Rect _dialogRect, _loadedRect, _gunRect, _clip1Rect, _clip2Rect;
+ CursorType _cursorNum;
+ int _inDialog;
+ bool _closeFlag;
+public:
+ AmmoBeltDialog();
+ ~AmmoBeltDialog();
+
+ virtual void draw();
+ virtual bool process(Event &event);
+ void execute();
+};
+
+class RadioConvDialog : public ModalDialog {
+private:
+ GfxButton _buttons[8];
+public:
+ RadioConvDialog();
+ virtual ~RadioConvDialog();
+ int execute();
+
+ static int show();
+};
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
+
+#endif
diff --git a/engines/tsage/blue_force/blueforce_logic.cpp b/engines/tsage/blue_force/blueforce_logic.cpp
index 46c9307632..0a64e90304 100644
--- a/engines/tsage/blue_force/blueforce_logic.cpp
+++ b/engines/tsage/blue_force/blueforce_logic.cpp
@@ -21,10 +21,14 @@
*/
#include "tsage/blue_force/blueforce_logic.h"
+#include "tsage/blue_force/blueforce_dialogs.h"
#include "tsage/blue_force/blueforce_scenes0.h"
#include "tsage/blue_force/blueforce_scenes1.h"
+#include "tsage/blue_force/blueforce_scenes3.h"
+#include "tsage/blue_force/blueforce_scenes6.h"
#include "tsage/scenes.h"
#include "tsage/tsage.h"
+#include "tsage/graphics.h"
#include "tsage/staticres.h"
namespace TsAGE {
@@ -33,7 +37,7 @@ namespace BlueForce {
void BlueForceGame::start() {
// Start the game
- _globals->_sceneManager.changeScene(50);
+ _globals->_sceneManager.changeScene(300);
_globals->_events.setCursor(CURSOR_WALK);
}
@@ -45,9 +49,11 @@ Scene *BlueForceGame::createScene(int sceneNumber) {
// Tsunami Title Screen
return new Scene20();
case 50:
+ // Map screen
return new Scene50();
case 60:
- error("Scene group 0 not implemented");
+ // Motorcycle
+ return new Scene60();
/* Scene Group #1 */
case 100:
// Tsnunami Title Screen #2
@@ -64,8 +70,10 @@ Scene *BlueForceGame::createScene(int sceneNumber) {
case 150:
case 160:
case 180:
- case 190:
error("Scene group 1 not implemented");
+ case 190:
+ // Front of Police Station
+ return new Scene190();
case 200:
case 210:
case 220:
@@ -76,8 +84,14 @@ Scene *BlueForceGame::createScene(int sceneNumber) {
case 280:
error("Scene group 2 not implemented");
case 300:
+ // Outside Police Station
+ return new Scene300();
case 315:
+ // Inside Police Station
+ return new Scene315();
case 325:
+ // Police Station Conference Room
+ return new Scene325();
case 330:
case 340:
case 342:
@@ -104,6 +118,8 @@ Scene *BlueForceGame::createScene(int sceneNumber) {
case 600:
case 620:
case 666:
+ // Death scene
+ return new Scene666();
case 690:
error("Scene group 6 not implemented");
case 710:
@@ -131,6 +147,56 @@ Scene *BlueForceGame::createScene(int sceneNumber) {
}
}
+void BlueForceGame::rightClick() {
+ RightClickDialog *dlg = new RightClickDialog();
+ dlg->execute();
+ delete dlg;
+}
+
+void BlueForceGame::processEvent(Event &event) {
+ if (event.eventType == EVENT_KEYPRESS) {
+ switch (event.kbd.keycode) {
+ case Common::KEYCODE_F1:
+ // F1 - Help
+ MessageDialog::show(HELP_MSG, OK_BTN_STRING);
+ break;
+
+ case Common::KEYCODE_F2:
+ // F2 - Sound Options
+ SoundDialog::execute();
+ break;
+
+ case Common::KEYCODE_F3:
+ // F3 - Quit
+ quitGame();
+ event.handled = false;
+ break;
+
+ case Common::KEYCODE_F4:
+ // F4 - Restart
+ restartGame();
+ _globals->_events.setCursorFromFlag();
+ break;
+
+ case Common::KEYCODE_F7:
+ // F7 - Restore
+ restoreGame();
+ _globals->_events.setCursorFromFlag();
+ break;
+
+ case Common::KEYCODE_F10:
+ // F10 - Pause
+ GfxDialog::setPalette();
+ MessageDialog::show(GAME_PAUSED_MSG, OK_BTN_STRING);
+ _globals->_events.setCursorFromFlag();
+ break;
+
+ default:
+ break;
+ }
+ }
+}
+
/*--------------------------------------------------------------------------*/
AObjectArray::AObjectArray(): EventHandler() {
@@ -212,6 +278,13 @@ void Timer::remove() {
((Scene100 *)BF_GLOBALS._sceneManager._scene)->removeTimer(this);
}
+void Timer::synchronize(Serializer &s) {
+ EventHandler::synchronize(s);
+ SYNC_POINTER(_tickAction);
+ SYNC_POINTER(_endAction);
+ s.syncAsUint32LE(_endFrame);
+}
+
void Timer::signal() {
assert(_endAction);
Action *action = _endAction;
@@ -231,24 +304,49 @@ void Timer::dispatch() {
}
}
-void Timer::set(uint32 delay, Action *action) {
+void Timer::set(uint32 delay, Action *endAction) {
assert(delay != 0);
_endFrame = BF_GLOBALS._sceneHandler->getFrameDifference() + delay;
- _endAction = action;
+ _endAction = endAction;
((SceneExt *)BF_GLOBALS._sceneManager._scene)->addTimer(this);
}
/*--------------------------------------------------------------------------*/
-void SceneItemType1::process(Event &event) {
- if (_action)
- _action->process(event);
+TimerExt::TimerExt(): Timer() {
+ _action = NULL;
+}
+
+void TimerExt::set(uint32 delay, Action *endAction, Action *newAction) {
+ _newAction = newAction;
+ Timer::set(delay, endAction);
+}
+
+void TimerExt::synchronize(Serializer &s) {
+ EventHandler::synchronize(s);
+ SYNC_POINTER(_action);
+}
+
+void TimerExt::remove() {
+ _action = NULL;
+ remove();
}
-void SceneItemType1::startMove(SceneObject *sceneObj, va_list va) {
- warning("TODO: sub_1621C");
+void TimerExt::signal() {
+ Action *endAction = _endAction;
+ Action *newAction = _newAction;
+ remove();
+
+ // If the end action doesn't have an action anymore, set it to the specified new action
+ assert(endAction);
+ if (!endAction->_action)
+ endAction->setAction(newAction);
+}
+
+void TimerExt::dispatch() {
+
}
/*--------------------------------------------------------------------------*/
@@ -258,17 +356,172 @@ void SceneItemType2::startMove(SceneObject *sceneObj, va_list va) {
/*--------------------------------------------------------------------------*/
-SceneExt::SceneExt(): Scene() {
- warning("TODO: dword_503AA/dword_503AE/dword_53030");
+void NamedObject::postInit(SceneObjectList *OwnerList) {
+ _lookLineNum = _talkLineNum = _useLineNum = -1;
+ SceneObject::postInit();
+}
+
+void NamedObject::synchronize(Serializer &s) {
+ SceneObject::synchronize(s);
+ s.syncAsSint16LE(_resNum);
+ s.syncAsSint16LE(_lookLineNum);
+ s.syncAsSint16LE(_talkLineNum);
+ s.syncAsSint16LE(_useLineNum);
+}
+
+bool NamedObject::startAction(CursorType action, Event &event) {
+ bool handled = true;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ if (_lookLineNum == -1)
+ handled = false;
+ else
+ SceneItem::display2(_resNum, _lookLineNum);
+ break;
+ case CURSOR_USE:
+ if (_useLineNum == -1)
+ handled = false;
+ else
+ SceneItem::display2(_resNum, _useLineNum);
+ break;
+ case CURSOR_TALK:
+ if (_talkLineNum == -1)
+ handled = false;
+ else
+ SceneItem::display2(_resNum, _talkLineNum);
+ break;
+ default:
+ handled = false;
+ break;
+ }
+
+ if (!handled)
+ ((SceneExt *)BF_GLOBALS._sceneManager._scene)->display(action);
+ return handled;
+}
+
+void NamedObject::setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item) {
+ _resNum = resNum;
+ _lookLineNum = lookLineNum;
+ _talkLineNum = talkLineNum;
+ _useLineNum = useLineNum;
+
+ switch (mode) {
+ case 2:
+ _globals->_sceneItems.push_front(this);
+ break;
+ case 4:
+ _globals->_sceneItems.addBefore(item, this);
+ break;
+ case 5:
+ _globals->_sceneItems.addAfter(item, this);
+ break;
+ default:
+ _globals->_sceneItems.push_back(this);
+ break;
+ }
+}
+
+
+/*--------------------------------------------------------------------------*/
+
+CountdownObject::CountdownObject(): NamedObject() {
+ _countDown = 0;
+}
+
+void CountdownObject::synchronize(Serializer &s) {
+ SceneObject::synchronize(s);
+ s.syncAsSint16LE(_countDown);
+}
+
+void CountdownObject::dispatch() {
+ int frameNum = _frame;
+ SceneObject::dispatch();
+
+ if ((frameNum != _frame) && (_countDown > 0)) {
+ if (--_countDown == 0) {
+ animate(ANIM_MODE_NONE, 0);
+ _frame = 1;
+ }
+ }
+}
+
+void CountdownObject::fixCountdown(int mode, ...) {
+ if (mode == 8) {
+ va_list va;
+ va_start(va, mode);
+
+ _countDown = va_arg(va, int);
+ animate(ANIM_MODE_8, _countDown, NULL);
+ va_end(va);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+FollowerObject::FollowerObject(): NamedObject() {
+ _object = NULL;
+}
+
+void FollowerObject::synchronize(Serializer &s) {
+ NamedObject::synchronize(s);
+ SYNC_POINTER(_object);
+}
+
+void FollowerObject::remove() {
+ NamedObject::remove();
+ _object = NULL;
+}
+
+void FollowerObject::dispatch() {
+ SceneObject::dispatch();
+ assert(_object);
+
+ if ((_object->_flags & OBJFLAG_HIDE) || ((_object->_visage != 307) &&
+ ((_object->_visage != 308) || (_object->_strip != 1)))) {
+ hide();
+ } else if ((_object->_visage != 308) || (_object->_strip != 1)) {
+ show();
+ setStrip(_object->_strip);
+ setPosition(_object->_position, _object->_yDiff);
+ }
+}
+
+void FollowerObject::reposition() {
+ assert(_object);
+ setStrip(_object->_strip);
+ setPosition(_object->_position, _object->_yDiff);
+ reposition();
+}
+
+void FollowerObject::setup(SceneObject *object, int visage, int frameNum, int yDiff) {
+ SceneObject::postInit();
+ _object = object;
+ _yDiff = yDiff;
+ setVisage(visage);
+ setFrame(frameNum);
- _field372 = 0;
- _field37A = 0;
- _field37C = NULL;
+ dispatch();
+}
+
+/*--------------------------------------------------------------------------*/
+
+SceneExt::SceneExt(): Scene() {
+ _stripManager._onBegin = SceneExt::startStrip;
+ _stripManager._onEnd = SceneExt::endStrip;
+
+ _field372 = _field37A = 0;
+ _savedPlayerEnabled = false;
+ _savedUiEnabled = false;
+ _savedCanWalk = false;
+ _eventHandler = NULL;
+ _cursorVisage.setVisage(1, 8);
}
void SceneExt::postInit(SceneObjectList *OwnerList) {
Scene::postInit(OwnerList);
- if (BF_GLOBALS._v4CEA2) {
+ if (BF_GLOBALS._dayNumber) {
// Blank out the bottom portion of the screen
BF_GLOBALS._interfaceY = BF_INTERFACE_Y;
@@ -287,7 +540,7 @@ void SceneExt::dispatch() {
_timerList.dispatch();
if (_field37A) {
- if ((--_field37A == 0) && BF_GLOBALS._v4CEA2) {
+ if ((--_field37A == 0) && BF_GLOBALS._dayNumber) {
if (BF_GLOBALS._v4E238 && (BF_GLOBALS._v4CF9E == 1)) {
warning("sub_1B052");
}
@@ -306,19 +559,110 @@ void SceneExt::loadScene(int sceneNum) {
_v51C34.bottom = 300;
}
+void SceneExt::checkGun() {
+ // Remove a bullet from the currently loaded clip
+ if (BF_GLOBALS.getFlag(fLoadedSpare) && (BF_GLOBALS._clip2Bullets > 0)) {
+ if (--BF_GLOBALS._clip2Bullets == 0)
+ BF_GLOBALS.clearFlag(fGunLoaded);
+ } else {
+ if (BF_GLOBALS._clip1Bullets > 0)
+ --BF_GLOBALS._clip1Bullets;
+
+ if (!BF_GLOBALS._clip1Bullets)
+ BF_GLOBALS.clearFlag(fGunLoaded);
+ }
+
+ BF_GLOBALS._sound3.play(4);
+}
+
+bool SceneExt::display(CursorType action) {
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(9000, BF_GLOBALS._randomSource.getRandomNumber(2));
+ break;
+ case CURSOR_USE:
+ SceneItem::display2(9000, BF_GLOBALS._randomSource.getRandomNumber(2) + 6);
+ break;
+ case CURSOR_TALK:
+ SceneItem::display2(9000, BF_GLOBALS._randomSource.getRandomNumber(2) + 3);
+ break;
+ case INV_COLT45:
+ gunDisplay();
+ break;
+ default:
+ if (action < BF_LAST_INVENT)
+ SceneItem::display2(9002, (int)action);
+ else
+ return false;
+ break;
+ }
+
+ return true;
+}
+
+void SceneExt::fadeOut() {
+ uint32 black = 0;
+ BF_GLOBALS._scenePalette.fade((const byte *)&black, false, 100);
+}
+
+void SceneExt::gunDisplay() {
+ if (!BF_GLOBALS.getFlag(gunDrawn)) {
+ // Gun not drawn
+ SceneItem::display2(1, BF_GLOBALS.getFlag(fCanDrawGun) ? 0 : 4);
+ } else if (!BF_GLOBALS.getFlag(fGunLoaded)) {
+ // Gun not loaded
+ SceneItem::display2(1, 1);
+ } else if (!BF_GLOBALS.getHasBullets()) {
+ // Out of ammunition
+ SceneItem::display2(1, 2);
+ } else {
+ // Check scene for whether gun can fire
+ checkGun();
+ }
+}
+
+void SceneExt::startStrip() {
+ SceneExt *scene = (SceneExt *)BF_GLOBALS._sceneManager._scene;
+ scene->_field372 = 1;
+ scene->_savedPlayerEnabled = BF_GLOBALS._player._enabled;
+
+ if (scene->_savedPlayerEnabled) {
+ scene->_savedUiEnabled = BF_GLOBALS._player._uiEnabled;
+ scene->_savedCanWalk = BF_GLOBALS._player._canWalk;
+ BF_GLOBALS._player.disableControl();
+
+ if (!BF_GLOBALS._v50696 && BF_GLOBALS._uiElements._active)
+ BF_GLOBALS._uiElements.hide();
+ }
+}
+
+void SceneExt::endStrip() {
+ SceneExt *scene = (SceneExt *)BF_GLOBALS._sceneManager._scene;
+ scene->_field372 = 0;
+
+ if (scene->_savedPlayerEnabled) {
+ BF_GLOBALS._player.enableControl();
+ BF_GLOBALS._player._uiEnabled = scene->_savedUiEnabled;
+ BF_GLOBALS._player._canWalk = scene->_savedCanWalk;
+
+ if (!BF_GLOBALS._v50696 && BF_GLOBALS._uiElements._active)
+ BF_GLOBALS._uiElements.show();
+ }
+}
+
/*--------------------------------------------------------------------------*/
-GameScene::GameScene() {
+GroupedScene::GroupedScene() {
}
-void GameScene::postInit(SceneObjectList *OwnerList) {
+void GroupedScene::postInit(SceneObjectList *OwnerList) {
_field794 = 0;
_field412 = 1;
SceneExt::postInit(OwnerList);
}
-void GameScene::remove() {
+void GroupedScene::remove() {
SceneExt::remove();
if (_field794 == 1) {
for (SynchronizedList<SceneObject *>::iterator i = BF_GLOBALS._sceneObjects->begin();
@@ -340,16 +684,271 @@ void SceneHandlerExt::postInit(SceneObjectList *OwnerList) {
SceneHandler::postInit(OwnerList);
// Load the low end palette data
- GLOBALS._scenePalette.loadPalette(2);
- GLOBALS._scenePalette.refresh();
+ BF_GLOBALS._scenePalette.loadPalette(2);
+ BF_GLOBALS._scenePalette.refresh();
}
void SceneHandlerExt::process(Event &event) {
+ if (BF_GLOBALS._uiElements._active) {
+ BF_GLOBALS._uiElements.process(event);
+ if (event.handled)
+ return;
+ }
+
+ // If the strip proxy is currently being controlled by the strip manager,
+ // then pass all events to it first
+ if (BF_GLOBALS._stripProxy._action) {
+ BF_GLOBALS._stripProxy._action->process(event);
+ if (event.handled)
+ return;
+ }
+
SceneHandler::process(event);
+}
+
+void SceneHandlerExt::playerAction(Event &event) {
+ if (BF_GLOBALS._events.getCursor() == INV_DOG_WHISTLE) {
+ SceneItem::display2(1, 6);
+ event.handled = true;
+ }
+}
- // TODO: All the new stuff from Blue Force
+void SceneHandlerExt::processEnd(Event &event) {
+ // Check for a fallback text display for the given cursor/item being used in the scene
+ if (!event.handled && BF_GLOBALS._sceneManager._scene) {
+ CursorType cursor = BF_GLOBALS._events.getCursor();
+ if (((SceneExt *)BF_GLOBALS._sceneManager._scene)->display(cursor))
+ event.handled = true;
+ }
}
+/*--------------------------------------------------------------------------*/
+
+BlueForceInvObjectList::BlueForceInvObjectList():
+ _none(9, 5, 1),
+ _colt45(9, 1, 1),
+ _ammoClip(9, 4, 2),
+ _spareClip(9, 4, 3),
+ _handcuffs(9, 1, 4),
+ _greensGun(9, 1, 5),
+ _ticketBook(9, 1, 6),
+ _mirandaCard(9, 1, 7),
+ _forestRap(9, 1, 8),
+ _greenId(9, 1, 9),
+ _baseballCard(9, 1, 10),
+ _bookingGreen(9, 1, 11),
+ _flare(9, 1, 12),
+ _cobbRap(9, 1, 13),
+ _bullet22(9, 1, 14),
+ _autoRifle(9, 1, 15),
+ _wig(9, 1, 16),
+ _frankieId(9, 1, 17),
+ _tyroneId(9, 1, 18),
+ _snub22(9, 1, 19),
+ _bug(1, 1, 1),
+ _bookingFrankie(9, 2, 1),
+ _bookingGang(9, 2, 2),
+ _fbiTeletype(9, 2, 3),
+ _daNote(9, 2, 4),
+ _printOut(9, 2, 5),
+ _warehouseKeys(9, 2, 6),
+ _centerPunch(9, 2, 7),
+ _tranqGun(9, 2, 8),
+ _hook(9, 2, 9),
+ _rags(9, 2, 10),
+ _jar(9, 2, 11),
+ _screwdriver(9, 2, 12),
+ _dFloppy(9, 2, 13),
+ _blankDisk(9, 2, 14),
+ _stick(9, 2, 15),
+ _crate1(9, 2, 16),
+ _crate2(9, 2, 17),
+ _shoebox(9, 2, 18),
+ _badge(9, 2, 19),
+ _bug2(1, 1, 1),
+ _rentalCoupon(9, 3, 1),
+ _nickel(9, 3, 2),
+ _lyleCard(9, 3, 3),
+ _carterNote(9, 3, 4),
+ _mugshot(9, 3, 5),
+ _clipping(9, 3, 6),
+ _microfilm(9, 3, 7),
+ _waveKeys(9, 3, 8),
+ _rentalKeys(9, 3, 9),
+ _napkin(9, 3, 10),
+ _dmvPrintout(9, 3, 11),
+ _fishingNet(9, 3, 12),
+ _id(9, 3, 13),
+ _bullets9mm(9, 3, 14),
+ _schedule(9, 3, 15),
+ _grenades(9, 3, 16),
+ _yellowCord(9, 3, 17),
+ _halfYellowCord(9, 3, 18),
+ _blackCord(9, 3, 19),
+ _bug3(1, 1, 1),
+ _halfBlackCord(9, 4, 1),
+ _warrant(9, 4, 2),
+ _jacket(9, 4, 3),
+ _greensKnife(9, 4, 4),
+ _dogWhistle(9, 4, 5),
+ _ammoBelt(9, 1, 2),
+ _lastInvent(9, 4, 7) {
+
+ // Add the items to the list
+ _itemList.push_back(&_none);
+ _itemList.push_back(&_colt45);
+ _itemList.push_back(&_ammoClip);
+ _itemList.push_back(&_spareClip);
+ _itemList.push_back(&_handcuffs);
+ _itemList.push_back(&_greensGun);
+ _itemList.push_back(&_ticketBook);
+ _itemList.push_back(&_mirandaCard);
+ _itemList.push_back(&_forestRap);
+ _itemList.push_back(&_greenId);
+ _itemList.push_back(&_baseballCard);
+ _itemList.push_back(&_bookingGreen);
+ _itemList.push_back(&_flare);
+ _itemList.push_back(&_cobbRap);
+ _itemList.push_back(&_bullet22);
+ _itemList.push_back(&_autoRifle);
+ _itemList.push_back(&_wig);
+ _itemList.push_back(&_frankieId);
+ _itemList.push_back(&_tyroneId);
+ _itemList.push_back(&_snub22);
+ _itemList.push_back(&_bug);
+ _itemList.push_back(&_bookingFrankie);
+ _itemList.push_back(&_bookingGang);
+ _itemList.push_back(&_fbiTeletype);
+ _itemList.push_back(&_daNote);
+ _itemList.push_back(&_printOut);
+ _itemList.push_back(&_warehouseKeys);
+ _itemList.push_back(&_centerPunch);
+ _itemList.push_back(&_tranqGun);
+ _itemList.push_back(&_hook);
+ _itemList.push_back(&_rags);
+ _itemList.push_back(&_jar);
+ _itemList.push_back(&_screwdriver);
+ _itemList.push_back(&_dFloppy);
+ _itemList.push_back(&_blankDisk);
+ _itemList.push_back(&_stick);
+ _itemList.push_back(&_crate1);
+ _itemList.push_back(&_crate2);
+ _itemList.push_back(&_shoebox);
+ _itemList.push_back(&_badge);
+ _itemList.push_back(&_bug2);
+ _itemList.push_back(&_rentalCoupon);
+ _itemList.push_back(&_nickel);
+ _itemList.push_back(&_lyleCard);
+ _itemList.push_back(&_carterNote);
+ _itemList.push_back(&_mugshot);
+ _itemList.push_back(&_clipping);
+ _itemList.push_back(&_microfilm);
+ _itemList.push_back(&_waveKeys);
+ _itemList.push_back(&_rentalKeys);
+ _itemList.push_back(&_napkin);
+ _itemList.push_back(&_dmvPrintout);
+ _itemList.push_back(&_fishingNet);
+ _itemList.push_back(&_id);
+ _itemList.push_back(&_bullets9mm);
+ _itemList.push_back(&_schedule);
+ _itemList.push_back(&_grenades);
+ _itemList.push_back(&_yellowCord);
+ _itemList.push_back(&_halfYellowCord);
+ _itemList.push_back(&_blackCord);
+ _itemList.push_back(&_bug3);
+ _itemList.push_back(&_halfBlackCord);
+ _itemList.push_back(&_warrant);
+ _itemList.push_back(&_jacket);
+ _itemList.push_back(&_greensKnife);
+ _itemList.push_back(&_dogWhistle);
+ _itemList.push_back(&_ammoBelt);
+ _itemList.push_back(&_lastInvent);
+}
+
+void BlueForceInvObjectList::reset() {
+ // Reset all object scene numbers
+ SynchronizedList<InvObject *>::iterator i;
+ for (i = _itemList.begin(); i != _itemList.end(); ++i) {
+ (*i)->_sceneNumber = 0;
+ }
+
+ // Set up default inventory
+ setObjectScene(INV_COLT45, 1);
+ setObjectScene(INV_HANDCUFFS, 1);
+ setObjectScene(INV_AMMO_BELT, 1);
+ setObjectScene(INV_ID, 1);
+
+ // Set default room for other objects
+ setObjectScene(INV_TICKET_BOOK, 60);
+ setObjectScene(INV_MIRANDA_CARD, 60);
+ setObjectScene(INV_FOREST_RAP, 320);
+ setObjectScene(INV_GREEN_ID, 370);
+ setObjectScene(INV_BASEBALL_CARD, 840);
+ setObjectScene(INV_BOOKING_GREEN, 390);
+ setObjectScene(INV_FLARE, 355);
+ setObjectScene(INV_COBB_RAP, 810);
+ setObjectScene(INV_22_BULLET, 415);
+ setObjectScene(INV_AUTO_RIFLE, 415);
+ setObjectScene(INV_WIG, 415);
+ setObjectScene(INV_FRANKIE_ID, 410);
+ setObjectScene(INV_TYRONE_ID, 410);
+ setObjectScene(INV_22_SNUB, 410);
+ setObjectScene(INV_FBI_TELETYPE, 320);
+ setObjectScene(INV_DA_NOTE, 320);
+ setObjectScene(INV_PRINT_OUT, 570);
+ setObjectScene(INV_WHAREHOUSE_KEYS, 360);
+ setObjectScene(INV_CENTER_PUNCH, 0);
+ setObjectScene(INV_TRANQ_GUN, 830);
+ setObjectScene(INV_HOOK, 350);
+ setObjectScene(INV_RAGS, 870);
+ setObjectScene(INV_JAR, 870);
+ setObjectScene(INV_SCREWDRIVER, 355);
+ setObjectScene(INV_D_FLOPPY, 570);
+ setObjectScene(INV_BLANK_DISK, 560);
+ setObjectScene(INV_STICK, 710);
+ setObjectScene(INV_CRATE1, 710);
+ setObjectScene(INV_CRATE2, 870);
+ setObjectScene(INV_SHOEBOX, 270);
+ setObjectScene(INV_BADGE, 560);
+ setObjectScene(INV_RENTAL_COUPON, 0);
+ setObjectScene(INV_NICKEL, 560);
+ setObjectScene(INV_LYLE_CARD, 270);
+ setObjectScene(INV_CARTER_NOTE, 830);
+ setObjectScene(INV_MUG_SHOT, 810);
+ setObjectScene(INV_CLIPPING, 810);
+ setObjectScene(INV_MICROFILM, 810);
+ setObjectScene(INV_WAVE_KEYS, 840);
+ setObjectScene(INV_RENTAL_KEYS, 840);
+ setObjectScene(INV_NAPKIN, 115);
+ setObjectScene(INV_DMV_PRINTOUT, 810);
+ setObjectScene(INV_FISHING_NET, 830);
+ setObjectScene(INV_9MM_BULLETS, 930);
+ setObjectScene(INV_SCHEDULE, 930);
+ setObjectScene(INV_GRENADES, 355);
+ setObjectScene(INV_GREENS_KNIFE, 370);
+ setObjectScene(INV_JACKET, 880);
+ setObjectScene(INV_DOG_WHISTLE, 880);
+ setObjectScene(INV_YELLOW_CORD, 910);
+ setObjectScene(INV_BLACK_CORD, 910);
+}
+
+void BlueForceInvObjectList::setObjectScene(int objectNum, int sceneNumber) {
+ // Find the appropriate object
+ int num = objectNum;
+ SynchronizedList<InvObject *>::iterator i = _itemList.begin();
+ while (num-- > 0) ++i;
+ (*i)->_sceneNumber = sceneNumber;
+
+ // If the item is the currently active one, default back to the use cursor
+ if (BF_GLOBALS._events.getCursor() == objectNum)
+ BF_GLOBALS._events.setCursor(CURSOR_USE);
+
+ // Update the user interface if necessary
+ BF_GLOBALS._uiElements.updateInventory();
+}
+
+/*--------------------------------------------------------------------------*/
+
} // End of namespace BlueForce
} // End of namespace TsAGE
diff --git a/engines/tsage/blue_force/blueforce_logic.h b/engines/tsage/blue_force/blueforce_logic.h
index 9ab8a87a0c..8a827a3214 100644
--- a/engines/tsage/blue_force/blueforce_logic.h
+++ b/engines/tsage/blue_force/blueforce_logic.h
@@ -29,18 +29,20 @@
#include "tsage/scenes.h"
#include "tsage/globals.h"
-#define BF_INTERFACE_Y 168
-
namespace TsAGE {
namespace BlueForce {
using namespace TsAGE;
+#define BF_INVENTORY (*((::TsAGE::BlueForce::BlueForceInvObjectList *)_globals->_inventory))
+
class BlueForceGame: public Game {
public:
virtual void start();
virtual Scene *createScene(int sceneNumber);
+ virtual void rightClick();
+ virtual void processEvent(Event &event);
};
#define OBJ_ARRAY_SIZE 10
@@ -69,30 +71,90 @@ public:
uint32 _endFrame;
public:
Timer();
- void set(uint32 delay, Action *action);
+ void set(uint32 delay, Action *endAction);
+ virtual Common::String getClassName() { return "Timer"; }
+ virtual void synchronize(Serializer &s);
virtual void remove();
virtual void signal();
virtual void dispatch();
};
-class SceneItemType1: public SceneItem {
+class TimerExt: public Timer {
+public:
+ Action *_newAction;
+public:
+ TimerExt();
+ void set(uint32 delay, Action *endAction, Action *action);
+
+ virtual Common::String getClassName() { return "TimerExt"; }
+ virtual void synchronize(Serializer &s);
+ virtual void remove();
+ virtual void signal();
+ virtual void dispatch();
+};
+
+class SceneItemType2: public SceneHotspot {
public:
- virtual void process(Event &event);
virtual void startMove(SceneObject *sceneObj, va_list va);
};
-class SceneItemType2: public SceneItemType1 {
+class NamedObject: public SceneObject {
public:
- virtual void startMove(SceneObject *sceneObj, va_list va);
+ int _resNum;
+ int _lookLineNum, _talkLineNum, _useLineNum;
+
+ virtual Common::String getClassName() { return "NamedObject"; }
+ virtual void synchronize(Serializer &s);
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual bool startAction(CursorType action, Event &event);
+
+ void setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item);
};
+class CountdownObject: public NamedObject {
+public:
+ int _countDown;
+ CountdownObject();
+ void fixCountdown(int mode, ...);
+
+ virtual Common::String getClassName() { return "CountdownObject"; }
+ virtual void synchronize(Serializer &s);
+ virtual void dispatch();
+};
+
+class FollowerObject: public NamedObject {
+public:
+ SceneObject *_object;
+ FollowerObject();
+
+ virtual Common::String getClassName() { return "SceneObjectExt4"; }
+ virtual void synchronize(Serializer &s);
+ virtual void remove();
+ virtual void dispatch();
+ virtual void reposition();
+
+ void setup(SceneObject *object, int visage, int frameNum, int yDiff);
+};
+
+enum ExitFrame { EXITFRAME_N = 1, EXITFRAME_NE = 2, EXITFRAME_E = 3, EXITFRAME_SE = 4,
+ EXITFRAME_S = 5, EXITFRAME_SW = 6, EXITFRAME_W = 7, EXITFRAME_NW = 8 };
+
class SceneExt: public Scene {
+private:
+ void gunDisplay();
+ static void startStrip();
+ static void endStrip();
public:
AObjectArray _timerList, _objArray2;
int _field372;
+ bool _savedPlayerEnabled;
+ bool _savedUiEnabled;
+ bool _savedCanWalk;
int _field37A;
- EventHandler *_field37C;
+
+ EventHandler *_eventHandler;
+ Visage _cursorVisage;
Rect _v51C34;
public:
@@ -103,18 +165,20 @@ public:
virtual void process(Event &event);
virtual void dispatch();
virtual void loadScene(int sceneNum);
- virtual void proc13() { warning("TODO: SceneExt::proc13"); }
+ virtual void checkGun();
void addTimer(Timer *timer) { _timerList.add(timer); }
void removeTimer(Timer *timer) { _timerList.remove(timer); }
+ bool display(CursorType action);
+ void fadeOut();
};
-class GameScene: public SceneExt {
+class GroupedScene: public SceneExt {
public:
int _field412;
int _field794;
public:
- GameScene();
+ GroupedScene();
virtual void postInit(SceneObjectList *OwnerList = NULL);
virtual void remove();
@@ -124,10 +188,87 @@ class SceneHandlerExt: public SceneHandler {
public:
virtual void postInit(SceneObjectList *OwnerList = NULL);
virtual void process(Event &event);
+
+ virtual void playerAction(Event &event);
+ virtual void processEnd(Event &event);
};
-class BlueAnimatedSpeaker: public Speaker {
+class BlueForceInvObjectList : public InvObjectList {
public:
+ InvObject _none;
+ InvObject _colt45;
+ InvObject _ammoClip;
+ InvObject _spareClip;
+ InvObject _handcuffs;
+ InvObject _greensGun;
+ InvObject _ticketBook;
+ InvObject _mirandaCard;
+ InvObject _forestRap;
+ InvObject _greenId;
+ InvObject _baseballCard;
+ InvObject _bookingGreen;
+ InvObject _flare;
+ InvObject _cobbRap;
+ InvObject _bullet22;
+ InvObject _autoRifle;
+ InvObject _wig;
+ InvObject _frankieId;
+ InvObject _tyroneId;
+ InvObject _snub22;
+ InvObject _bug;
+ InvObject _bookingFrankie;
+ InvObject _bookingGang;
+ InvObject _fbiTeletype;
+ InvObject _daNote;
+ InvObject _printOut;
+ InvObject _warehouseKeys;
+ InvObject _centerPunch;
+ InvObject _tranqGun;
+ InvObject _hook;
+ InvObject _rags;
+ InvObject _jar;
+ InvObject _screwdriver;
+ InvObject _dFloppy;
+ InvObject _blankDisk;
+ InvObject _stick;
+ InvObject _crate1;
+ InvObject _crate2;
+ InvObject _shoebox;
+ InvObject _badge;
+ InvObject _bug2;
+ InvObject _rentalCoupon;
+ InvObject _nickel;
+ InvObject _lyleCard;
+ InvObject _carterNote;
+ InvObject _mugshot;
+ InvObject _clipping;
+ InvObject _microfilm;
+ InvObject _waveKeys;
+ InvObject _rentalKeys;
+ InvObject _napkin;
+ InvObject _dmvPrintout;
+ InvObject _fishingNet;
+ InvObject _id;
+ InvObject _bullets9mm;
+ InvObject _schedule;
+ InvObject _grenades;
+ InvObject _yellowCord;
+ InvObject _halfYellowCord;
+ InvObject _blackCord;
+ InvObject _bug3;
+ InvObject _halfBlackCord;
+ InvObject _warrant;
+ InvObject _jacket;
+ InvObject _greensKnife;
+ InvObject _dogWhistle;
+ InvObject _ammoBelt;
+ InvObject _lastInvent;
+
+ BlueForceInvObjectList();
+ void reset();
+ void setObjectScene(int objectNum, int sceneNumber);
+
+ virtual Common::String getClassName() { return "BlueForceInvObjectList"; }
};
} // End of namespace BlueForce
diff --git a/engines/tsage/blue_force/blueforce_scenes0.cpp b/engines/tsage/blue_force/blueforce_scenes0.cpp
index f1b714ec6c..9ba1db8688 100644
--- a/engines/tsage/blue_force/blueforce_scenes0.cpp
+++ b/engines/tsage/blue_force/blueforce_scenes0.cpp
@@ -21,6 +21,7 @@
*/
#include "tsage/blue_force/blueforce_scenes0.h"
+#include "tsage/blue_force/blueforce_dialogs.h"
#include "tsage/scenes.h"
#include "tsage/tsage.h"
#include "tsage/staticres.h"
@@ -191,6 +192,7 @@ void Scene20::postInit(SceneObjectList *OwnerList) {
_object8.changeZoom(100);
setAction(&_action1);
+ BF_GLOBALS._dialogCenter.y = 165;
}
/*--------------------------------------------------------------------------
@@ -263,34 +265,36 @@ void Scene50::Tooltip::highlight(bool btnDown) {
update();
if (btnDown) {
- if ((BF_GLOBALS._bikiniHutState == 14) && BF_GLOBALS.getFlag(98))
+ if ((BF_GLOBALS._bookmark == bCalledToDrunkStop) && BF_GLOBALS.getFlag(beenToJRDay2))
scene->_sceneNumber = 600;
- else if (BF_GLOBALS._bikiniHutState == 5)
+ else if (BF_GLOBALS._bookmark == bBookedGreen)
scene->_sceneNumber = 410;
else {
- BF_GLOBALS._v4CEF4 = _newSceneNumber;
+ BF_GLOBALS._driveToScene = _newSceneNumber;
- switch (BF_GLOBALS._v4CEF2) {
+ switch (BF_GLOBALS._driveFromScene) {
case 330:
case 340:
case 342:
BF_GLOBALS._player.disableControl();
- if (_locationId != BF_GLOBALS._mapLocationId) {
+ BF_GLOBALS._mapLocationId = _locationId;
+
+ if (BF_GLOBALS._driveToScene == 330) {
scene->_sceneNumber = 330;
} else {
- scene->_sceneNumber = (BF_GLOBALS._v4CEA2 != 1) || (BF_GLOBALS._bikiniHutState < 1) ||
- (BF_GLOBALS._bikiniHutState >= 2) ? 342 : 340;
+ scene->_sceneNumber = (BF_GLOBALS._dayNumber != 1) || (BF_GLOBALS._bookmark < bStartOfGame) ||
+ (BF_GLOBALS._bookmark >= bCalledToDomesticViolence) ? 342 : 340;
}
break;
case 410:
case 551:
- if (BF_GLOBALS.getFlag((BF_GLOBALS._v4CEF2 == 410) ? 41 : 40)) {
+ if (BF_GLOBALS.getFlag((BF_GLOBALS._driveFromScene == 410) ? fSearchedTruck : didDrunk)) {
BF_GLOBALS._mapLocationId = _locationId;
BF_GLOBALS._player.disableControl();
scene->_sceneNumber = _newSceneNumber;
} else {
- BF_GLOBALS._v4CEA8 = 4;
+ BF_GLOBALS._deathReason = 4;
BF_GLOBALS._sceneManager.changeScene(666);
return;
}
@@ -298,7 +302,7 @@ void Scene50::Tooltip::highlight(bool btnDown) {
case 300:
if (_locationId == 1) {
- BF_GLOBALS._v4CEF4 = 300;
+ BF_GLOBALS._driveToScene = 300;
_newSceneNumber = 300;
}
// Deliberate fall through to default
@@ -354,7 +358,7 @@ void Scene50::postInit(SceneObjectList *OwnerList) {
_location5.set(Rect(383, 57, 402, 70), 380, CITY_HALL_JAIL, 32);
_location7.set(Rect(128, 32, 143, 42), 800, JAMISON_RYAN, 128);
_location9.set(Rect(349, 125, 359, 132),
- (BF_GLOBALS._bikiniHutState == 13) || (BF_GLOBALS._bikiniHutState == 14) ? 551 : 550,
+ (BF_GLOBALS._bookmark == bInspectionDone) || (BF_GLOBALS._bookmark == bCalledToDrunkStop) ? 551 : 550,
BIKINI_HUT, 16);
_item.setBounds(Rect(0, 0, SCREEN_WIDTH * 2, SCREEN_HEIGHT));
@@ -424,7 +428,7 @@ void Scene50::remove() {
void Scene50::signal() {
if (_sceneMode == 1) {
// Destination selected
- if ((BF_GLOBALS._v4CEF2 == 551) && (_sceneNumber != BF_GLOBALS._v4CEF2)) {
+ if ((BF_GLOBALS._driveFromScene == 551) && (_sceneNumber != BF_GLOBALS._driveFromScene)) {
BF_GLOBALS.setFlag(109);
BF_GLOBALS.setFlag(115);
BF_GLOBALS.setFlag(121);
@@ -432,21 +436,21 @@ void Scene50::signal() {
BF_GLOBALS.setFlag(133);
}
- if ((BF_GLOBALS._v4CEF2 == 410) && (_sceneNumber != BF_GLOBALS._v4CEF2)) {
+ if ((BF_GLOBALS._driveFromScene == 410) && (_sceneNumber != BF_GLOBALS._driveFromScene)) {
BF_GLOBALS.setFlag(125);
}
- if ((BF_GLOBALS._v4CEF2 == 340) && (_sceneNumber != BF_GLOBALS._v4CEF2)) {
+ if ((BF_GLOBALS._driveFromScene == 340) && (_sceneNumber != BF_GLOBALS._driveFromScene)) {
BF_GLOBALS.setFlag(123);
}
- if ((BF_GLOBALS._v4CEF2 == 380) && (_sceneNumber != BF_GLOBALS._v4CEF2)) {
- if (BF_GLOBALS._bikiniHutState >= 4)
+ if ((BF_GLOBALS._driveFromScene == 380) && (_sceneNumber != BF_GLOBALS._driveFromScene)) {
+ if (BF_GLOBALS._bookmark >= bLauraToParamedics)
BF_GLOBALS.setFlag(129);
- if (BF_GLOBALS._bikiniHutState >= 6)
+ if (BF_GLOBALS._bookmark >= bStoppedFrankie)
BF_GLOBALS.setFlag(131);
- if (BF_GLOBALS._bikiniHutState == 3) {
- BF_GLOBALS._v4CEA8 = 19;
+ if (BF_GLOBALS._bookmark == bArrestedGreen) {
+ BF_GLOBALS._deathReason = 19;
_sceneNumber = 666;
}
}
@@ -496,6 +500,613 @@ void Scene50::process(Event &event) {
}
}
+/*--------------------------------------------------------------------------
+ * Scene 60 - Motorcycle
+ *
+ *--------------------------------------------------------------------------*/
+
+bool Scene60::Item2::startAction(CursorType action, Event &event) {
+ Scene60 *scene = (Scene60 *)BF_GLOBALS._sceneManager._scene;
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(60, 15);
+ break;
+ default:
+ switch (BF_GLOBALS._dayNumber) {
+ case 1:
+ if (BF_GLOBALS.getFlag(onDuty) && check1())
+ return true;
+ break;
+ case 2:
+ if (BF_GLOBALS.getFlag(onDuty) && check2())
+ return true;
+ }
+
+ BF_GLOBALS._sound1.play(BF_GLOBALS.getFlag(fWithLyle) ? 80 : 31);
+ BF_GLOBALS._sound1.holdAt(1);
+ scene->fadeOut();
+ BF_GLOBALS._sceneManager.changeScene(50);
+ break;
+ }
+
+ return true;
+}
+
+bool Scene60::Item2::check1() {
+ if (BF_GLOBALS._bookmark >= bStoppedFrankie) {
+ BF_GLOBALS._v5098C |= 1;
+ return false;
+ } else {
+ if ((BF_GLOBALS._bookmark == bBookedGreen) && BF_GLOBALS.getFlag(fArrivedAtGangStop)) {
+ BF_GLOBALS.set2Flags(f1035Frankie);
+ BF_GLOBALS._sceneManager.changeScene(410);
+ }
+
+ if (BF_GLOBALS._bookmark >= bLauraToParamedics) {
+ if (BF_GLOBALS.getFlag(fLeftTraceIn910)) {
+ if (BF_GLOBALS._bookmark < bBookedGreen) {
+ BF_GLOBALS._bookmark = bBookedGreen;
+ BF_GLOBALS.clearFlag(fCalledBackup);
+ BF_GLOBALS.set2Flags(f1035Frankie);
+ return false;
+ } else if (BF_GLOBALS._bookmark == bBookedGreen) {
+ if (!BF_GLOBALS.getFlag(fCalledBackup))
+ BF_GLOBALS.setFlag(f1035Frankie);
+
+ BF_GLOBALS._sceneManager.changeScene(410);
+ return true;
+ }
+ }
+
+ } else if (BF_GLOBALS._bookmark < bStartOfGame) {
+ // Should never reach here
+ } else if (BF_GLOBALS._bookmark < bCalledToDomesticViolence) {
+ if ((BF_GLOBALS._v5098C >> 1) & 1)
+ BF_GLOBALS.setFlag(fLateToMarina);
+ else
+ BF_GLOBALS._v5098C |= 2;
+ } else {
+ int v = ((BF_GLOBALS._v5098C >> 2) & 15 + 1) & 15;
+ BF_GLOBALS._v5098C = (BF_GLOBALS._v5098C & 0xC3) | (v << 2);
+
+ if ((v != 1) && (v != 2)) {
+ BF_GLOBALS._deathReason = 19;
+ BF_GLOBALS._sceneManager.changeScene(666);
+ return true;
+ }
+ }
+ }
+
+ BF_GLOBALS._v5098C |= 1;
+ return false;
+}
+
+bool Scene60::Item2::check2() {
+ switch (BF_GLOBALS._bookmark) {
+ case bInspectionDone:
+ if (BF_GLOBALS._v5098D & 1) {
+ BF_GLOBALS.setFlag(fLateToDrunkStop);
+ } else {
+ BF_GLOBALS._v5098D |= 1;
+ }
+ break;
+ case bCalledToDrunkStop:
+ BF_GLOBALS.setFlag(fHasDrivenFromDrunk);
+ break;
+ default:
+ break;
+ }
+
+ BF_GLOBALS._v5098C |= 0x80;
+ return false;
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene60::Item3::startAction(CursorType action, Event &event) {
+ Scene60 *scene = (Scene60 *)BF_GLOBALS._sceneManager._scene;
+ scene->fadeOut();
+ BF_GLOBALS._sceneManager.changeScene(scene->_newScene);
+ return true;
+}
+
+bool Scene60::Radio::startAction(CursorType action, Event &event) {
+ Scene60 *scene = (Scene60 *)BF_GLOBALS._sceneManager._scene;
+
+ switch(action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(60, 0);
+ break;
+ case CURSOR_USE:
+ case CURSOR_TALK:
+ scene->_sound.play(32);
+ scene->setAction(&scene->_action1);
+ break;
+ default:
+ SceneItem::display2(60, 1);
+ break;
+ }
+ return true;
+}
+
+bool Scene60::Compartment::startAction(CursorType action, Event &event) {
+ Scene60 *scene = (Scene60 *)BF_GLOBALS._sceneManager._scene;
+
+ switch(action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(60, 8);
+ break;
+ case CURSOR_USE:
+ if ((BF_INVENTORY.getObjectScene(INV_TICKET_BOOK) == 1) &&
+ (BF_INVENTORY.getObjectScene(INV_MIRANDA_CARD) == 1)) {
+ SceneItem::display2(60, 9);
+ }
+ break;
+ case CURSOR_TALK:
+ SceneItem::display2(60, 10);
+ break;
+ case INV_TICKET_BOOK:
+ SceneItem::display2(60, 11);
+ scene->_ticketBook.show();
+ BF_INVENTORY.setObjectScene(INV_TICKET_BOOK, 60);
+ BF_GLOBALS._events.setCursor(CURSOR_USE);
+ BF_GLOBALS._sceneItems.addBefore(&scene->_radio, &scene->_ticketBook);
+ break;
+ case INV_MIRANDA_CARD:
+ SceneItem::display2(60, 12);
+ scene->_mirandaCard.show();
+ BF_INVENTORY.setObjectScene(INV_MIRANDA_CARD, 60);
+ BF_GLOBALS._events.setCursor(CURSOR_USE);
+ BF_GLOBALS._sceneItems.addAfter(&scene->_compartmentDoor, &scene->_mirandaCard);
+ break;
+ default:
+ return NamedHotspot::startAction(action, event);
+ }
+
+ return true;
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene60::MirandaCard::startAction(CursorType action, Event &event) {
+ Scene60 *scene = (Scene60 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(60, 5);
+ return true;
+ case CURSOR_USE:
+ if (BF_INVENTORY.getObjectScene(INV_MIRANDA_CARD) == 60) {
+ SceneItem::display2(60, 6);
+ BF_INVENTORY.setObjectScene(INV_MIRANDA_CARD, 1);
+ if (!BF_GLOBALS.getFlag(fGotPointsForTktBook)) {
+ BF_GLOBALS._uiElements.addScore(10);
+ BF_GLOBALS.setFlag(fGotPointsForTktBook);
+ }
+
+ scene->_mirandaCard.hide();
+ BF_GLOBALS._sceneItems.remove(&scene->_mirandaCard);
+ }
+ return true;
+ case CURSOR_TALK:
+ SceneItem::display2(60, 7);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ break;
+ }
+}
+
+bool Scene60::TicketBook::startAction(CursorType action, Event &event) {
+ Scene60 *scene = (Scene60 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(60, 2);
+ return true;
+ case CURSOR_USE:
+ if (BF_INVENTORY.getObjectScene(INV_TICKET_BOOK) == 60) {
+ scene->_ticketBook.hide();
+ BF_GLOBALS._sceneItems.remove(&scene->_ticketBook);
+ SceneItem::display2(60, 3);
+ BF_INVENTORY.setObjectScene(INV_TICKET_BOOK, 1);
+ if (!BF_GLOBALS.getFlag(fShotNicoIn910)) {
+ BF_GLOBALS._uiElements.addScore(10);
+ BF_GLOBALS.setFlag(fShotNicoIn910);
+ }
+ }
+ return true;
+ case CURSOR_TALK:
+ SceneItem::display2(60, 4);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ break;
+ }
+}
+
+bool Scene60::CompartmentDoor::startAction(CursorType action, Event &event) {
+ Scene60 *scene = (Scene60 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(60, 13);
+ return true;
+ case CURSOR_USE:
+ if (_flag) {
+ _flag = false;
+ BF_GLOBALS._player.disableControl();
+ Common::Point pt(308, 165);
+ NpcMover *mover = new NpcMover();
+ addMover(mover, &pt, scene);
+ } else {
+ _flag = true;
+ BF_GLOBALS._player.disableControl();
+ Common::Point pt(288, 165);
+ NpcMover *mover = new NpcMover();
+ addMover(mover, &pt, scene);
+ }
+ return true;
+ case CURSOR_TALK:
+ SceneItem::display2(60, 14);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene60::Action1::signal() {
+ Scene60 *scene = (Scene60 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ setDelay(2);
+ break;
+ case 1:
+ scene->_stripManager.start(634, this);
+ break;
+ case 2:
+ _state = useRadio();
+ setDelay(4);
+ break;
+ case 3:
+ switch (_state) {
+ case 1:
+ if (BF_GLOBALS.removeFlag(fCan1004Marina)) {
+ BF_GLOBALS._uiElements.addScore(10);
+ _state = 606;
+ } else if (BF_GLOBALS.removeFlag(fCan1004Drunk)) {
+ BF_GLOBALS._uiElements.addScore(10);
+ _state = 606;
+ } else {
+ _state = 611;
+ }
+ break;
+ case 2:
+ _state = 612;
+ break;
+ case 3:
+ if (BF_GLOBALS.removeFlag(f1015Marina)) {
+ BF_GLOBALS._uiElements.addScore(10);
+ _state = 613;
+ } else if (BF_GLOBALS.removeFlag(f1015Frankie)) {
+ BF_GLOBALS._uiElements.addScore(10);
+ _state = 614;
+ } else if (BF_GLOBALS.removeFlag(f1015Drunk)) {
+ BF_GLOBALS._uiElements.addScore(10);
+ _state = 615;
+ } else {
+ _state = 616;
+ }
+ break;
+ case 4:
+ if (BF_GLOBALS.removeFlag(f1027Marina)) {
+ BF_GLOBALS._uiElements.addScore(10);
+ _actionIndex = 5;
+ _state = 617;
+ } else if (BF_GLOBALS.removeFlag(f1027Frankie)) {
+ BF_GLOBALS._uiElements.addScore(10);
+ _actionIndex = 5;
+ _state = 618;
+ } else if (BF_GLOBALS.removeFlag(f1015Drunk)) {
+ BF_GLOBALS._uiElements.addScore(10);
+ _actionIndex = 5;
+ _state = 619;
+ } else {
+ _state = 620;
+ }
+ break;
+ case 5:
+ if (BF_GLOBALS.removeFlag(f1035Marina)) {
+ BF_GLOBALS.setFlag(fCalledBackup);
+ BF_GLOBALS._uiElements.addScore(50);
+ _state = 621;
+ } else if (BF_GLOBALS.removeFlag(f1035Frankie)) {
+ BF_GLOBALS.setFlag(fCalledBackup);
+ BF_GLOBALS._uiElements.addScore(50);
+ _actionIndex = 5;
+ _state = 622;
+ } else if (BF_GLOBALS.removeFlag(f1035Drunk)) {
+ BF_GLOBALS._uiElements.addScore(10);
+ _state = 623;
+ } else {
+ _state = 624;
+ }
+ break;
+ case 6:
+ if (BF_GLOBALS.removeFlag(f1097Marina)) {
+ BF_GLOBALS._uiElements.addScore(10);
+ _state = 625;
+ } else if (BF_GLOBALS.removeFlag(f1097Frankie)) {
+ BF_GLOBALS._uiElements.addScore(10);
+ _actionIndex = 5;
+ _state = 626;
+ } else if (BF_GLOBALS.removeFlag(f1097Drunk)) {
+ BF_GLOBALS._uiElements.addScore(10);
+ _state = 627;
+ } else {
+ _state = 628;
+ }
+ break;
+ case 7:
+ if (BF_GLOBALS.removeFlag(f1098Marina)) {
+ BF_GLOBALS._uiElements.addScore(10);
+ _state = 629;
+ } else if (BF_GLOBALS.removeFlag(f1098Frankie)) {
+ BF_GLOBALS._uiElements.addScore(10);
+ _state = 630;
+ } else if (BF_GLOBALS.removeFlag(f1098Drunk)) {
+ BF_GLOBALS._uiElements.addScore(10);
+ _state = 631;
+ } else {
+ _state = 632;
+ }
+ break;
+ case 0:
+ default:
+ _state = 610;
+ break;
+ }
+
+ scene->_stripManager.start(_state, this);
+ break;
+ case 4:
+ remove();
+ case 5:
+ setDelay(120);
+ break;
+ case 6:
+ _actionIndex = 4;
+ scene->_stripManager.start(633, this);
+ break;
+ }
+}
+
+int Scene60::Action1::useRadio() {
+ return RadioConvDialog::show();
+}
+
+void Scene60::Action2::signal() {
+ Scene60 *scene = (Scene60 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._player.disableControl();
+ scene->_sound.play(32);
+ setDelay(2);
+ break;
+ case 1:
+ BF_GLOBALS._bookmark = bStartOfGame;
+ BF_GLOBALS.set2Flags(f1035Marina);
+ scene->_stripManager.start(60, this);
+ break;
+ case 2:
+ BF_GLOBALS._player.enableControl();
+ remove();
+ break;
+ }
+}
+
+void Scene60::Action3::signal() {
+ Scene60 *scene = (Scene60 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._player.disableControl();
+ scene->_sound.play(32);
+ setDelay(2);
+ break;
+ case 1:
+ BF_GLOBALS._bookmark = bInspectionDone;
+ BF_GLOBALS.set2Flags(f1035Drunk);
+ BF_GLOBALS.setFlag(fCan1004Drunk);
+ scene->_stripManager.start(71, this);
+ break;
+ case 2:
+ scene->_field1222 = true;
+ BF_GLOBALS._player.enableControl();
+ remove();
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+Scene60::Scene60(): SceneExt() {
+ _field1222 = false;
+ _newScene = 0;
+}
+
+void Scene60::postInit(SceneObjectList *OwnerList) {
+ _newScene = BF_GLOBALS._driveFromScene = BF_GLOBALS._sceneManager._previousScene;
+
+ // Set up which scene background to use
+ switch (_newScene) {
+ case 300:
+ _sceneNumber = 1301;
+ break;
+ case 380:
+ _sceneNumber = 1380;
+ break;
+ case 410:
+ _sceneNumber = 1410;
+ break;
+ case 551:
+ _sceneNumber = 1550;
+ break;
+ case 550:
+ _sceneNumber = 1555;
+ break;
+ case 580:
+ _sceneNumber = 1580;
+ break;
+ case 800:
+ _sceneNumber = 1810;
+ break;
+ default:
+ _sceneNumber = 60;
+ break;
+ }
+
+ if (_sceneNumber == 1550) {
+ if (BF_GLOBALS.getFlag(fHasDrivenFromDrunk))
+ _sceneNumber = 1555;
+ else {
+ _object1.postInit();
+ _object1.setVisage(1550);
+ _object1.animate(ANIM_MODE_2);
+ _object1.setPosition(Common::Point(158, 18));
+ }
+ }
+
+ loadScene(_sceneNumber);
+
+ if ((_sceneNumber == 1810) && (BF_GLOBALS._dayNumber > 1) &&
+ (BF_GLOBALS._dayNumber < 5) && !BF_GLOBALS.getFlag(fWithLyle) &&
+ ((BF_GLOBALS._dayNumber != 4) && (BF_GLOBALS._bookmark >= bEndDayThree))) {
+ _car.setup(1810, 1, 1, 164, 131, 1);
+ }
+
+ if ((_sceneNumber == 1410) && (BF_GLOBALS._bookmark == bBookedGreen) &&
+ !BF_GLOBALS.getFlag(fDriverOutOfTruck)) {
+ _object1.postInit();
+ _object1.setVisage(410);
+ _object1.setStrip(6);
+ _object1.setPosition(Common::Point(135, 47));
+ }
+
+ if (BF_GLOBALS.getFlag(fWithLyle)) {
+ _visage = 62;
+ _item2._sceneRegionId = 22;
+ } else if (BF_GLOBALS.getFlag(onDuty)) {
+ _visage = 63;
+ _item2._sceneRegionId = 20;
+ } else {
+ _visage = 61;
+ _item2._sceneRegionId = 28;
+ }
+ _dashboard.setup(_visage, 1, 1, 160, 168, 100);
+ _cursorId = CURSOR_USE;
+
+ if (_visage == 63) {
+ _compartmentDoor.postInit();
+ _compartmentDoor.setVisage(60);
+ _compartmentDoor.setStrip(1);
+ _compartmentDoor.setFrame(1);
+ _compartmentDoor.setPosition(Common::Point(288, 165));
+ _compartmentDoor.setPriority(250);
+ _compartmentDoor._flag = true;
+ BF_GLOBALS._sceneItems.push_back(&_compartmentDoor);
+
+ _mirandaCard.postInit();
+ _mirandaCard.setVisage(60);
+ _mirandaCard.setStrip(2);
+ _mirandaCard.setFrame(2);
+ _mirandaCard.setPosition(Common::Point(280, 160));
+
+ if (BF_INVENTORY.getObjectScene(INV_MIRANDA_CARD) == 60) {
+ _mirandaCard.show();
+ BF_GLOBALS._sceneItems.push_back(&_mirandaCard);
+ } else {
+ _mirandaCard.hide();
+ }
+
+ _ticketBook.postInit();
+ _ticketBook.setVisage(60);
+ _ticketBook.setStrip(2);
+ _ticketBook.setFrame(1);
+ _ticketBook.setPosition(Common::Point(289, 161));
+
+ if (BF_INVENTORY.getObjectScene(INV_TICKET_BOOK) == 60) {
+ _ticketBook.show();
+ BF_GLOBALS._sceneItems.push_back(&_ticketBook);
+ } else {
+ _ticketBook.hide();
+ }
+ }
+
+ _item3._sceneRegionId = 7;
+ _radio._sceneRegionId = 12;
+ _compartment._sceneRegionId = 14;
+
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+ _stripManager.addSpeaker(&_jakeRadioSpeaker);
+
+ if (BF_GLOBALS.getFlag(onDuty) && !BF_GLOBALS.getFlag(fWithLyle)) {
+ BF_GLOBALS._sceneItems.push_back(&_radio);
+ BF_GLOBALS._sceneItems.push_back(&_compartment);
+ }
+
+ BF_GLOBALS._sceneItems.push_back(&_item2);
+ BF_GLOBALS._sceneItems.push_back(&_item3);
+ BF_GLOBALS._player.enableControl();
+ BF_GLOBALS._events.setCursor(CURSOR_USE);
+
+ switch (BF_GLOBALS._dayNumber) {
+ case 1:
+ if (BF_GLOBALS.getFlag(onDuty) && (BF_GLOBALS._v5098C & 1) &&
+ (BF_GLOBALS._bookmark < bStartOfGame) && (BF_GLOBALS._sceneManager._previousScene != 342)) {
+ setAction(&_action2);
+ if (BF_GLOBALS._sceneManager._previousScene == 342)
+ _newScene = 340;
+ }
+ break;
+ case 2:
+ if (BF_GLOBALS.getFlag(onDuty) && ((BF_GLOBALS._v5098C >> 7) & 1) &&
+ (BF_GLOBALS._sceneManager._previousScene != 550) &&
+ (BF_GLOBALS._bookmark < bInspectionDone)) {
+ setAction(&_action3);
+ }
+ }
+}
+
+void Scene60::signal() {
+ ++_sceneMode;
+ BF_GLOBALS._player.enableControl();
+}
+
+void Scene60::dispatch() {
+ SceneExt::dispatch();
+
+ int idx = BF_GLOBALS._sceneRegions.indexOf(Common::Point(
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.left + BF_GLOBALS._events._mousePos.x,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + BF_GLOBALS._events._mousePos.y));
+
+ if (idx == _item3._sceneRegionId) {
+ if (BF_GLOBALS._events.getCursor() != CURSOR_EXIT) {
+ _cursorId = BF_GLOBALS._events.getCursor();
+ BF_GLOBALS._events.setCursor(CURSOR_EXIT);
+ }
+ } else {
+ if (BF_GLOBALS._events.getCursor() == CURSOR_EXIT) {
+ BF_GLOBALS._events.setCursor(_cursorId);
+ }
+ }
+}
+
} // End of namespace BlueForce
} // End of namespace TsAGE
diff --git a/engines/tsage/blue_force/blueforce_scenes0.h b/engines/tsage/blue_force/blueforce_scenes0.h
index 5c98184ed8..963f8b25a8 100644
--- a/engines/tsage/blue_force/blueforce_scenes0.h
+++ b/engines/tsage/blue_force/blueforce_scenes0.h
@@ -25,6 +25,7 @@
#include "common/scummsys.h"
#include "tsage/blue_force/blueforce_logic.h"
+#include "tsage/blue_force/blueforce_speakers.h"
#include "tsage/converse.h"
#include "tsage/events.h"
#include "tsage/core.h"
@@ -96,6 +97,90 @@ public:
virtual void process(Event &event);
};
+class Scene60 : public SceneExt {
+ /* Items */
+ class Item2: public NamedHotspot {
+ private:
+ bool check1();
+ bool check2();
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item3: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Radio: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Compartment: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Objects */
+ class MirandaCard: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class TicketBook: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class CompartmentDoor: public NamedObject {
+ public:
+ bool _flag;
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Actions */
+ class Action1: public ActionExt {
+ private:
+ int useRadio();
+ public:
+ virtual void signal();
+ };
+ class Action2: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action3: public Action {
+ public:
+ virtual void signal();
+ };
+public:
+ SequenceManager _sequenceManager;
+ Action1 _action1;
+ Action2 _action2;
+ Action3 _action3;
+ NamedObject _object1;
+ MirandaCard _mirandaCard;
+ TicketBook _ticketBook;
+ CompartmentDoor _compartmentDoor;
+ SceneObject _dashboard;
+ AltSceneObject _car;
+ NamedHotspot _item1;
+ Item2 _item2;
+ Item3 _item3;
+ Radio _radio;
+ Compartment _compartment;
+ SpeakerGameText _gameTextSpeaker;
+ SpeakerJakeRadio _jakeRadioSpeaker;
+ ASound _sound;
+ int _newScene;
+ int _sceneNumber;
+ int _visage;
+ CursorType _cursorId;
+ bool _field1222;
+
+ Scene60();
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void dispatch();
+};
+
+
} // End of namespace BlueForce
} // End of namespace TsAGE
diff --git a/engines/tsage/blue_force/blueforce_scenes1.cpp b/engines/tsage/blue_force/blueforce_scenes1.cpp
index 650b63c24b..b4e41c20e3 100644
--- a/engines/tsage/blue_force/blueforce_scenes1.cpp
+++ b/engines/tsage/blue_force/blueforce_scenes1.cpp
@@ -176,7 +176,7 @@ void Scene100::postInit(SceneObjectList *OwnerList) {
_globals->_player.disableControl();
_index = 109;
- if (BF_GLOBALS._v4CEA2 < 6) {
+ if (BF_GLOBALS._dayNumber < 6) {
// Title
loadScene(100);
BF_GLOBALS._sound1.play(2);
@@ -191,7 +191,7 @@ void Scene100::postInit(SceneObjectList *OwnerList) {
void Scene100::signal() {
++_sceneMode;
- if (BF_GLOBALS._v4CEA2 < 6) {
+ if (BF_GLOBALS._dayNumber < 6) {
BF_GLOBALS._scenePalette.clearListeners();
BF_GLOBALS._scenePalette.loadPalette(100);
BF_GLOBALS._sceneManager.changeScene(_index);
@@ -346,11 +346,11 @@ void Scene109::Text::dispatch() {
/*--------------------------------------------------------------------------*/
-Scene109::Scene109(): GameScene() {
+Scene109::Scene109(): GroupedScene() {
}
void Scene109::postInit(SceneObjectList *OwnerList) {
- GameScene::postInit(OwnerList);
+ GroupedScene::postInit(OwnerList);
loadScene(999);
_protaginist2.postInit();
@@ -427,6 +427,281 @@ void Scene109::signal() {
}
}
+/*--------------------------------------------------------------------------
+ * Scene 190 - Front of Police Station
+ *
+ *--------------------------------------------------------------------------*/
+
+bool Scene190::Object4::startAction(CursorType action, Event &event) {
+ Scene190 *scene = (Scene190 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE: {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 13;
+ Common::Point pt(62, 96);
+ PlayerMover *mover = new PlayerMover();
+ BF_GLOBALS._player.addMover(mover, &pt, scene);
+ return true;
+ }
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene190::Item1::startAction(CursorType action, Event &event) {
+ Scene190 *scene = (Scene190 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ scene->setAction(&scene->_action1);
+ return true;
+ default:
+ return NamedHotspot::startAction(action, event);
+ }
+}
+
+bool Scene190::Item2::startAction(CursorType action, Event &event) {
+ Scene190 *scene = (Scene190 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ scene->_stripManager.start(1900, scene);
+ return true;
+ default:
+ return NamedHotspot::startAction(action, event);
+ }
+}
+
+bool Scene190::Exit::startAction(CursorType action, Event &event) {
+ Scene190 *scene = (Scene190 *)BF_GLOBALS._sceneManager._scene;
+
+ Common::Point pt(316, 91);
+ PlayerMover *mover = new PlayerMover();
+ BF_GLOBALS._player.addMover(mover, &pt, scene);
+ return true;
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene190::Action1::signal() {
+ Scene190 *scene = (Scene190 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._player.disableControl();
+ setDelay(2);
+ break;
+ case 1: {
+ ADD_MOVER(BF_GLOBALS._player, 165, 91);
+ break;
+ }
+ case 2:
+ scene->_sound.play(82);
+ scene->_object2.animate(ANIM_MODE_5, this);
+ break;
+ case 3:
+ ADD_MOVER(BF_GLOBALS._player, 180, 86);
+ break;
+ case 4:
+ scene->_sound.play(82);
+ scene->_object2.animate(ANIM_MODE_6, this);
+ break;
+ case 5:
+ BF_GLOBALS._sound1.fadeOut2(NULL);
+ BF_GLOBALS._sceneManager.changeScene(315);
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+Scene190::Scene190(): SceneExt() {
+ _fieldB52 = true;
+ _cursorVisage.setVisage(1, 8);
+}
+
+void Scene190::postInit(SceneObjectList *OwnerList) {
+ BF_GLOBALS._dialogCenter.y = 100;
+ if ((BF_GLOBALS._sceneManager._previousScene == 100) ||
+ (BF_GLOBALS._sceneManager._previousScene == 20)) {
+// clearScreen();
+ }
+ if (BF_GLOBALS._dayNumber == 0)
+ // If at start of game, change to first day
+ BF_GLOBALS._dayNumber = 1;
+
+ // Load the scene data
+ loadScene(190);
+ BF_GLOBALS._scenePalette.loadPalette(2);
+
+ _stripManager.addSpeaker(&_speaker);
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.disableControl();
+
+ // Initialise objects
+ _object2.postInit();
+ _object2.setVisage(190);
+ _object2.setStrip(1);
+ _object2.setPosition(Common::Point(179, 88));
+
+ _object3.postInit();
+ _object3.setVisage(190);
+ _object3.setStrip(2);
+ _object3.fixPriority(200);
+ _object3.setPosition(Common::Point(170, 31));
+ _object3.animate(ANIM_MODE_7, 0, NULL);
+ _object3.setDetails(190, 8, 26, 19, 1, NULL);
+
+ if (BF_GLOBALS.getFlag(fWithLyle)) {
+ BF_GLOBALS._player.setVisage(303);
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS._player._moveDiff = Common::Point(3, 1);
+
+ _object4.postInit();
+ _object4.setVisage(444);
+ _object4.setFrame(2);
+ _object4.setPosition(Common::Point(54, 114));
+ _object4.setDetails(190, -1, -1, -1, 1, NULL);
+
+ switch (BF_GLOBALS._sceneManager._previousScene) {
+ case 300: {
+ _sceneMode = 12;
+ BF_GLOBALS._player.setPosition(Common::Point(316, 91));
+ ADD_MOVER(BF_GLOBALS._player, 305, 91);
+ break;
+ }
+ case 315:
+ _sceneMode = 1901;
+ setAction(&_sequenceManager, this, 1901, &BF_GLOBALS._player, &_object2, NULL);
+ break;
+ case 50:
+ case 60:
+ default:
+ _fieldB52 = false;
+ BF_GLOBALS._player.setPosition(Common::Point(62, 96));
+ BF_GLOBALS._player._strip = 3;
+ BF_GLOBALS._player.enableControl();
+ break;
+ }
+ } else {
+ BF_GLOBALS._player.setVisage(BF_GLOBALS._player._visage);
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+
+ switch (BF_GLOBALS._sceneManager._previousScene) {
+ case 300: {
+ if (!BF_GLOBALS.getFlag(onBike)) {
+ BF_GLOBALS._player._moveDiff = Common::Point(3, 1);
+ _sceneMode = BF_GLOBALS.getFlag(onDuty) ? 11 : 12;
+ BF_GLOBALS._player.setVisage(BF_GLOBALS.getFlag(onDuty) ? 1304 : 303);
+ BF_GLOBALS._player.setPosition(Common::Point(316, 91));
+ ADD_MOVER(BF_GLOBALS._player, 305, 91);
+ } else {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = BF_GLOBALS.getFlag(onDuty) ? 193 : 191;
+ setAction(&_sequenceManager, this, 193, &BF_GLOBALS._player, NULL);
+ }
+ break;
+ }
+ case 315:
+ BF_GLOBALS._player._moveDiff = Common::Point(3, 1);
+ _sceneMode = BF_GLOBALS.getFlag(onDuty) ? 1900 : 1901;
+ setAction(&_sequenceManager, this, _sceneMode, &BF_GLOBALS._player, &_object2, NULL);
+ break;
+ case 50:
+ case 60:
+ default:
+ BF_GLOBALS.setFlag(onBike);
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = BF_GLOBALS.getFlag(onDuty) ? 192 : 190;
+ setAction(&_sequenceManager, this, _sceneMode, &BF_GLOBALS._player, NULL);
+ break;
+ }
+ }
+
+ if (BF_GLOBALS.getFlag(onBike)) {
+ BF_GLOBALS._sound1.play(BF_GLOBALS.getFlag(onDuty) ? 37 : 29);
+ } else if (BF_GLOBALS._sceneManager._previousScene != 300) {
+ BF_GLOBALS._sound1.play(33);
+ }
+
+ _exit.setDetails(Rect(310, 50, 320, 125), 190, -1, -1, -1, 1, NULL);
+ _item2.setDetails(Rect(108, 1, 111, 94), 190, 7, 11, 18, 1, NULL);
+ _item4.setDetails(2, 190, 5, 10, 16, 1);
+ _item3.setDetails(1, 190, 4, 10, 15, 1);
+ _item8.setDetails(6, 190, 20, 21, 22, 1);
+ _item1.setDetails(7, 190, 1, 10, -1, 1);
+ _item7.setDetails(5, 190, 0, 10, 12, 1);
+ _item6.setDetails(4, 190, 2, 10, 13, 1);
+ _item5.setDetails(3, 190, 3, 10, 14, 1);
+ _item9.setDetails(Rect(0, 0, 89, 68), 190, 6, 10, 17, 1, NULL);
+ _item10.setDetails(Rect(0, 0, SCREEN_WIDTH, BF_INTERFACE_Y), 190, 23, -1, -1, 1, NULL);
+}
+
+void Scene190::signal() {
+ switch (_sceneMode) {
+ case 10:
+ if ((BF_GLOBALS._dayNumber == 2) && (BF_GLOBALS._bookmark < bEndDayOne))
+ BF_GLOBALS._sound1.changeSound(49);
+ BF_GLOBALS._sceneManager.changeScene(300);
+ break;
+ case 11:
+ case 12:
+ case 1900:
+ case 1901:
+ BF_GLOBALS._player.enableControl();
+ _fieldB52 = false;
+ break;
+ case 13:
+ case 191:
+ case 193:
+ BF_GLOBALS._sceneManager.changeScene(60);
+ break;
+ case 190:
+ case 192:
+ BF_GLOBALS._sceneManager.changeScene(300);
+ break;
+ case 0:
+ default:
+ BF_GLOBALS._player.enableControl();
+ break;
+ }
+}
+
+void Scene190::process(Event &event) {
+ SceneExt::process(event);
+
+ if (BF_GLOBALS._player._enabled && !_eventHandler && (event.mousePos.y < (BF_INTERFACE_Y - 1))) {
+ // Check if the cursor is on an exit
+ if (_exit.contains(event.mousePos)) {
+ GfxSurface surface = _cursorVisage.getFrame(3);
+ BF_GLOBALS._events.setCursor(surface);
+ } else {
+ // In case an exit cursor was being shown, restore the previously selected cursor
+ CursorType cursorId = BF_GLOBALS._events.getCursor();
+ BF_GLOBALS._events.setCursor(cursorId);
+ }
+ }
+}
+
+void Scene190::dispatch() {
+ SceneExt::dispatch();
+
+ if (!_action && !_fieldB52 && (BF_GLOBALS._player._position.x >= 310)
+ && !BF_GLOBALS.getFlag(onBike)) {
+ // Handle walking off to the right side of the screen
+ BF_GLOBALS._player.disableControl();
+ _fieldB52 = true;
+ _sceneMode = 10;
+
+ ADD_MOVER(BF_GLOBALS._player, 330, BF_GLOBALS._player._position.y);
+ }
+}
+
} // End of namespace BlueForce
} // End of namespace TsAGE
diff --git a/engines/tsage/blue_force/blueforce_scenes1.h b/engines/tsage/blue_force/blueforce_scenes1.h
index 0769c6e3c6..3028dcc9f9 100644
--- a/engines/tsage/blue_force/blueforce_scenes1.h
+++ b/engines/tsage/blue_force/blueforce_scenes1.h
@@ -71,7 +71,7 @@ public:
Action1 _action1;
Action2 _action2;
ScenePalette _scenePalette;
- SceneObjectExt2 _object1, _object2, _object3, _object4, _object5;
+ NamedObject _object1, _object2, _object3, _object4, _object5;
int _index;
Scene100();
@@ -79,7 +79,7 @@ public:
virtual void signal();
};
-class Scene109: public GameScene {
+class Scene109: public GroupedScene {
/* Actions */
class Action1: public Action {
public:
@@ -115,7 +115,6 @@ public:
SceneObject _object1, _object2, _protaginist2, _protaginist1, _object5;
SceneObject _drunk, _object7, _bartender, _object9, _object10;
Text _text;
- BlueAnimatedSpeaker _speaker;
Action1 _action1;
Action _action2, _action3;
public:
@@ -125,6 +124,58 @@ public:
virtual void signal();
};
+class Scene190: public SceneExt {
+ /* Objects */
+ class Object4: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Items */
+ class Item1: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item2: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Exit: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Actions */
+ class Action1: public Action {
+ public:
+ virtual void signal();
+ };
+public:
+ SequenceManager _sequenceManager;
+ FollowerObject _object1;
+ NamedObject _object2, _object3;
+ Object4 _object4;
+ Item1 _item1;
+ Item2 _item2;
+ NamedHotspot _item3, _item4, _item5, _item6;
+ NamedHotspot _item7, _item8, _item9, _item10;
+ Exit _exit;
+ Action1 _action1;
+ ASoundExt _sound;
+ SpeakerGameText _speaker;
+ bool _fieldB52;
+
+ Scene190();
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void process(Event &event);
+ virtual void dispatch();
+ virtual void synchronize(Serializer &s) {
+ SceneExt::synchronize(s);
+ s.syncAsSint16LE(_fieldB52);
+ }
+};
+
} // End of namespace BlueForce
} // End of namespace TsAGE
diff --git a/engines/tsage/blue_force/blueforce_scenes3.cpp b/engines/tsage/blue_force/blueforce_scenes3.cpp
new file mode 100644
index 0000000000..cfed3fab11
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_scenes3.cpp
@@ -0,0 +1,1445 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "common/config-manager.h"
+#include "tsage/blue_force/blueforce_scenes3.h"
+#include "tsage/scenes.h"
+#include "tsage/tsage.h"
+#include "tsage/staticres.h"
+#include "tsage/globals.h"
+
+namespace TsAGE {
+
+namespace BlueForce {
+
+/*--------------------------------------------------------------------------
+ * Scene 300 - Outside Police Station
+ *
+ *--------------------------------------------------------------------------*/
+
+bool Scene300::Object::startAction(CursorType action, Event &event) {
+ if (action == CURSOR_TALK) {
+ Scene300 *scene = (Scene300 *)BF_GLOBALS._sceneManager._scene;
+ scene->_stripManager.start(_stripNumber, scene);
+ return true;
+ } else {
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene300::Object19::startAction(CursorType action, Event &event) {
+ if ((action != CURSOR_USE) || !BF_GLOBALS.getFlag(onDuty)) {
+ return NamedObject::startAction(action, event);
+ } else if ((BF_GLOBALS._dayNumber != 2) || (BF_GLOBALS._bookmark >= bEndDayOne)) {
+ Scene300 *scene = (Scene300 *)BF_GLOBALS._sceneManager._scene;
+ setAction(&scene->_action4);
+ } else {
+ SceneItem::display2(300, 33);
+ }
+
+ return true;
+}
+
+bool Scene300::Item1::startAction(CursorType action, Event &event) {
+ if (action == CURSOR_USE) {
+ Scene300 *scene = (Scene300 *)BF_GLOBALS._sceneManager._scene;
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 305;
+ scene->setAction(&scene->_sequenceManager1, scene, 305, &BF_GLOBALS._player,
+ &scene->_object8, NULL);
+ return true;
+ } else {
+ return NamedHotspot::startAction(action, event);
+ }
+}
+
+bool Scene300::Item2::startAction(CursorType action, Event &event) {
+ if ((action == CURSOR_LOOK) || (action == CURSOR_USE)) {
+ Scene300 *scene = (Scene300 *)BF_GLOBALS._sceneManager._scene;
+ scene->setAction(&scene->_sequenceManager1, scene, 304, &scene->_object11, NULL);
+ return true;
+ } else {
+ return NamedHotspot::startAction(action, event);
+ }
+}
+
+bool Scene300::Item14::startAction(CursorType action, Event &event) {
+ ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 151, 54);
+ return true;
+}
+
+bool Scene300::Item15::startAction(CursorType action, Event &event) {
+ ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 316, 90);
+ return true;
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene300::Action1::signal() {
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._player.disableControl();
+ setDelay(1);
+ break;
+ case 1:
+ if (BF_GLOBALS.getFlag(fWithLyle))
+ SceneItem::display2(666, 27);
+ else
+ SceneItem::display2(300, 0);
+ setDelay(1);
+ break;
+ case 2: {
+ ADD_PLAYER_MOVER_THIS(BF_GLOBALS._player, BF_GLOBALS._player._position.x - 8,
+ BF_GLOBALS._player._position.y);
+ break;
+ }
+ case 3:
+ BF_GLOBALS._player.enableControl();
+ remove();
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene300::Action2::signal() {
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._player.disableControl();
+ setDelay(1);
+ break;
+ case 1:
+ SceneItem::display2(300, 28);
+ setDelay(1);
+ break;
+ case 2: {
+ ADD_MOVER(BF_GLOBALS._player, BF_GLOBALS._player._position.x + 8,
+ BF_GLOBALS._player._position.y);
+ break;
+ }
+ case 3:
+ BF_GLOBALS._player.enableControl();
+ remove();
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene300::Action3::signal() {
+ Scene300 *scene = (Scene300 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._player.disableControl();
+ setDelay(1);
+ break;
+ case 1:
+ BF_GLOBALS._player.setAction(&scene->_sequenceManager1, this, 306, &BF_GLOBALS._player,
+ &scene->_object8, NULL);
+ break;
+ case 2:
+ SceneItem::display2(300, 35);
+ setDelay(1);
+ break;
+ case 3:
+ BF_GLOBALS._player.enableControl();
+ remove();
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene300::Action4::signal() {
+ Scene300 *scene = (Scene300 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._player.disableControl();
+ setDelay(1);
+ break;
+ case 1:
+ setAction(&scene->_sequenceManager1, this, 316, &BF_GLOBALS._player, &scene->_object19, NULL);
+ break;
+ case 2:
+ BF_GLOBALS._sceneManager.changeScene(60);
+ break;
+ case 3:
+ setAction(&scene->_sequenceManager1, this, 319, &scene->_object19, NULL);
+ break;
+ case 4:
+ BF_GLOBALS.setFlag(2);
+ BF_GLOBALS._sceneManager.changeScene(190);
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene300::Action5::signal() {
+ Scene300 *scene = (Scene300 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._player.disableControl();
+ scene->_field2760 = 1;
+ setDelay(1);
+ break;
+ case 1:
+ setAction(&scene->_sequenceManager1, this, 1306, &scene->_object1, &scene->_object8, NULL);
+ break;
+ case 2:
+ scene->_stripManager.start(3004, this);
+ break;
+ case 3: {
+ ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 186, 140);
+ break;
+ }
+ case 4:
+ remove();
+ break;
+ default:
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+Scene300::Scene300(): SceneExt(), _object13(3000), _object14(3001), _object15(3002),
+ _object16(3003) {
+ _field2760 = _field2762 = 0;
+}
+
+void Scene300::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(300);
+
+ // Add the speakers
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+ _stripManager.addSpeaker(&_sutterSpeaker);
+ _stripManager.addSpeaker(&_dougSpeaker);
+ _stripManager.addSpeaker(&_jakeSpeaker);
+
+ _field2762 = 0;
+ _item14.setDetails(Rect(144, 27, 160, 60), 300, -1, -1, -1, 1, NULL);
+ _item15.setDetails(Rect(310, 76, SCREEN_WIDTH, 105), 300, -1, -1, -1, 1, NULL);
+
+ // Setup the player
+ int playerVisage = BF_GLOBALS._player._visage;
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.setVisage(playerVisage);
+ BF_GLOBALS._player.setStrip(3);
+ BF_GLOBALS._player.setPosition(Common::Point(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2));
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS._player._moveDiff = Common::Point(3, 1);
+ BF_GLOBALS._player.disableControl();
+
+ _object8.postInit();
+ _object8.setVisage(301);
+ _object8.setStrip(2);
+ _object8.setPosition(Common::Point(300, 77));
+
+ if ((BF_GLOBALS._dayNumber != 2) || (BF_GLOBALS._bookmark < bEndDayOne)) {
+ _object17.postInit();
+ _object17.setVisage(301);
+ _object17.setStrip(1);
+ _object17.setPosition(Common::Point(87, 88));
+ _object17.setDetails(300, 11, 13, 2, 1, NULL);
+
+ _object18.postInit();
+ _object18.setVisage(301);
+ _object18.setStrip(1);
+ _object18.setPosition(Common::Point(137, 92));
+ _object18.setDetails(300, 11, 13, 3, 1, NULL);
+ }
+
+ _object19.postInit();
+ _object19.setVisage(301);
+ _object19.setStrip(1);
+ _object19.setPosition(Common::Point(175, 99));
+ _object19.setDetails(300, 11, 13, 34, 1, NULL);
+
+ _object11.postInit();
+ _object11.setVisage(301);
+ _object11.setStrip(8);
+ _object11.setPosition(Common::Point(265, 91));
+ _object11.hide();
+
+ switch (BF_GLOBALS._sceneManager._previousScene) {
+ case 50:
+ case 60:
+ BF_GLOBALS.clearFlag(onBike);
+ if (BF_GLOBALS.getFlag(onDuty)) {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 318;
+ setAction(&_sequenceManager1, this, 318, &BF_GLOBALS._player, &_object19, NULL);
+ } else {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 300;
+ setAction(&_sequenceManager1, this, 1300, &BF_GLOBALS._player, NULL);
+ }
+ break;
+ case 190:
+ _sceneMode = 0;
+ if (!BF_GLOBALS.getFlag(2)) {
+ _sceneMode = 7308;
+ BF_GLOBALS._player.setPosition(Common::Point(175, 50));
+ ADD_PLAYER_MOVER_THIS(BF_GLOBALS._player, 123, 71);
+
+ if ((BF_GLOBALS._dayNumber == 2) && (BF_GLOBALS._bookmark < bEndDayOne))
+ setup();
+ } else if (!BF_GLOBALS.getFlag(3)) {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 300;
+ setAction(&_sequenceManager1, this, 300, &BF_GLOBALS._player, NULL);
+ } else {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 318;
+ setAction(&_sequenceManager1, this, 318, &BF_GLOBALS._player, &_object19, NULL);
+ }
+ break;
+ case 315:
+ BF_GLOBALS._player.setPosition(Common::Point(305, 66));
+ if ((BF_GLOBALS._dayNumber != 2) || (BF_GLOBALS._bookmark >= bEndDayOne)) {
+ BF_GLOBALS._player.setVisage(BF_GLOBALS.getFlag(onDuty) ? 1304 : 303);
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ setAction(&_sequenceManager1, this, 306, &BF_GLOBALS._player, &_object8, NULL);
+ } else {
+ BF_GLOBALS._player.setVisage(1304);
+ setup();
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ setAction(&_sequenceManager1, this, 306, &BF_GLOBALS._player, &_object8, NULL);
+ }
+ break;
+ default:
+ _sceneMode = 0;
+ BF_GLOBALS._player.setVisage(1304);
+ BF_GLOBALS._player.disableControl();
+ setAction(&_sequenceManager1, this, 306, &BF_GLOBALS._player, &_object8, NULL);
+ break;
+ }
+
+ _item10.setDetails(4, 300, 7, 13, 16, 1);
+ _item11.setDetails(2, 300, 9, 13, 18, 1);
+ _item12.setDetails(5, 300, 10, 13, 19, 1);
+ _item13.setDetails(3, 300, 25, 26, 27, 1);
+ _item2.setDetails(Rect(266, 54, 272, 59), 300, -1, -1, -1, 1, NULL);
+ _item1.setDetails(Rect(262, 47, 299, 76), 300, 1, 13, -1, 1, NULL);
+ _item4.setDetails(Rect(0, 85, SCREEN_WIDTH - 1, BF_INTERFACE_Y - 1), 300, 6, 13, 15, 1, NULL);
+ _item7.setDetails(Rect(219, 46, 251, 74), 300, 22, 23, 24, 1, NULL);
+ _item8.setDetails(Rect(301, 53, 319, 78), 300, 22, 23, 24, 1, NULL);
+ _item5.setDetails(Rect(179, 44, 200, 55), 300, 8, 13, 17, 1, NULL);
+ _item6.setDetails(Rect(210, 46, 231, 55), 300, 8, 13, 17, 1, NULL);
+ _item3.setDetails(Rect(160, 0, SCREEN_WIDTH - 1, 75), 300, 4, 13, 14, 1, NULL);
+ _item9.setDetails(Rect(0, 0, SCREEN_WIDTH, BF_INTERFACE_Y), 300, 29, 30, 31, 1, NULL);
+}
+
+void Scene300::signal() {
+ switch (_sceneMode) {
+ case 300:
+ BF_GLOBALS._sound1.fadeSound(33);
+ BF_GLOBALS.clearFlag(onBike);
+ _sceneMode = 0;
+
+ if ((BF_GLOBALS._dayNumber != 1) || (BF_GLOBALS._bookmark != bNone)) {
+ signal();
+ } else {
+ _stripManager.start(3005, this);
+ }
+ break;
+ case 301:
+ if (_field2760) {
+ _sceneMode = 1302;
+ signal();
+ } else {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 1302;
+ setAction(&_sequenceManager1, this, 306, &_object1, &_object8, NULL);
+ }
+
+ _object12.show();
+ _object5.dispatch();
+ BF_GLOBALS._player.hide();
+ break;
+ case 303:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 2307;
+ setAction(&_sequenceManager1, this, 303, &_object13, &_object1, NULL);
+ break;
+ case 305:
+ if ((BF_GLOBALS._dayNumber == 4) || (BF_GLOBALS._dayNumber == 5)) {
+ _sceneMode = 0;
+ setAction(&_action3);
+ } else {
+ BF_GLOBALS._sound1.fadeOut2(NULL);
+ BF_GLOBALS._sceneManager.changeScene(315);
+ }
+ break;
+ case 309:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 3307;
+ setAction(&_sequenceManager1, this, 309, &_object14, &_object1, NULL);
+ break;
+ case 310:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 4307;
+ setAction(&_sequenceManager1, this, 310, &_object12, &_object1, NULL);
+ break;
+ case 311:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 5307;
+ setAction(&_sequenceManager1, this, 311, &_object15, &_object1, NULL);
+ break;
+ case 312:
+ case 5307:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 1305;
+ setAction(&_sequenceManager1, this, 312, &_object1, &_object16, NULL);
+ break;
+ case 317:
+ BF_GLOBALS.setFlag(2);
+ BF_GLOBALS._sceneManager.changeScene(60);
+ break;
+ case 318:
+ BF_GLOBALS.clearFlag(onBike);
+ _sceneMode = 0;
+ signal();
+ break;
+ case 1302:
+ _field2762 = 0;
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 1308;
+ setAction(&_sequenceManager1, this, 302, &_object1, NULL);
+ break;
+ case 1305:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 1313;
+ setAction(&_sequenceManager1, this, 305, &_object1, &_object8, NULL);
+ BF_GLOBALS._player.show();
+ _object12.hide();
+ break;
+ case 1307:
+ case 2308:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 303;
+ setAction(&_sequenceManager1, this, 308, &_object14, NULL);
+ break;
+ case 1308:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 1307;
+ setAction(&_sequenceManager1, this, 308, &_object13, NULL);
+ break;
+ case 1313:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ _object15.setAction(&_sequenceManager4, NULL, 315, &_object15, &_object16, NULL);
+ _object13.setAction(&_sequenceManager2, NULL, 313, &_object13, &_object17, NULL);
+ _object14.setAction(&_sequenceManager3, this, 314, &_object14, &_object18, NULL);
+
+ BF_GLOBALS._bookmark = bEndDayOne;
+ BF_GLOBALS._sound1.changeSound(33);
+ break;
+ case 2307:
+ case 3308:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 309;
+ setAction(&_sequenceManager1, this, 308, &_object12, NULL);
+ break;
+ case 3307:
+ _object9.postInit();
+ _object9.hide();
+ _object10.postInit();
+ _object10.hide();
+
+ if (BF_GLOBALS.getFlag(1)) {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 4308;
+ setAction(&_sequenceManager1, this, 6307, &_object2, &_object1, &_object9, &_object10, NULL);
+ } else {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 4308;
+ setAction(&_sequenceManager1, this, 7307, &_object12, &_object1, &_object9, &_object10, NULL);
+ }
+ break;
+ case 4307:
+ case 5308:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 311;
+ setAction(&_sequenceManager1, this, 308, &_object16, NULL);
+ break;
+ case 4308:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 310;
+ setAction(&_sequenceManager1, this, 308, &_object15, NULL);
+ break;
+ case 6308:
+ BF_GLOBALS._sceneManager.changeScene(190);
+ break;
+ case 7308:
+ if (_field2762) {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 301;
+ setAction(&_sequenceManager1, this, 301, &BF_GLOBALS._player, NULL);
+ } else {
+ BF_GLOBALS._player.enableControl();
+ }
+ break;
+ case 0:
+ default:
+ if (_field2762) {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 301;
+ setAction(&_sequenceManager1, this, 301, &BF_GLOBALS._player, NULL);
+ } else {
+ BF_GLOBALS._player.enableControl();
+ }
+ break;
+ }
+}
+
+void Scene300::process(Event &event) {
+ SceneExt::process(event);
+
+ if (BF_GLOBALS._player._enabled && !_eventHandler && (event.mousePos.y < (BF_INTERFACE_Y - 1))) {
+ // Check if the cursor is on an exit
+ if (_item14.contains(event.mousePos)) {
+ GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_NE);
+ BF_GLOBALS._events.setCursor(surface);
+ } else if (_item15.contains(event.mousePos)) {
+ GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_E);
+ BF_GLOBALS._events.setCursor(surface);
+ } else {
+ // In case an exit cursor was being shown, restore the previously selected cursor
+ CursorType cursorId = BF_GLOBALS._events.getCursor();
+ BF_GLOBALS._events.setCursor(cursorId);
+ }
+ }
+}
+
+void Scene300::dispatch() {
+ SceneExt::dispatch();
+
+ if (!_action) {
+ int regionIndex = BF_GLOBALS._player.getRegionIndex();
+ if ((regionIndex == 1) && (_field2762 == 1)) {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 301;
+ setAction(&_sequenceManager1, this, 301, &BF_GLOBALS._player, NULL);
+ }
+
+ if ((BF_GLOBALS._player._position.y < 59) && (BF_GLOBALS._player._position.x > 137) &&
+ (_sceneMode != 6308) && (_sceneMode != 7308)) {
+ BF_GLOBALS._v4CEA4 = 3;
+ _sceneMode = 6308;
+ BF_GLOBALS._player.disableControl();
+ ADD_MOVER(BF_GLOBALS._player, BF_GLOBALS._player._position.x + 20,
+ BF_GLOBALS._player._position.y - 5);
+ }
+
+ if (BF_GLOBALS._player._position.x <= 5)
+ setAction(&_action2);
+
+ if (BF_GLOBALS._player._position.x >= 315) {
+ if (BF_GLOBALS.getFlag(onDuty) || (BF_GLOBALS._bookmark == bNone) || !BF_GLOBALS.getFlag(fWithLyle)) {
+ setAction(&_action1);
+ } else {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 317;
+ setAction(&_sequenceManager1, this, 1301, &BF_GLOBALS._player, NULL);
+ }
+ }
+ }
+}
+
+void Scene300::setup() {
+ _object13.postInit();
+ _object13.setVisage(307);
+ _object13.setStrip(6);
+ _object13.setPosition(Common::Point(156, 134));
+ _object13._moveDiff = Common::Point(3, 1);
+ _object3.setup(&_object13, 306, 1, 29);
+
+ _object14.postInit();
+ _object14.setVisage(307);
+ _object14.setStrip(6);
+ _object14.setPosition(Common::Point(171, 137));
+ _object14._moveDiff = Common::Point(3, 1);
+ _object4.setup(&_object14, 306, 2, 29);
+
+ _object12.postInit();
+ _object12.setVisage(307);
+ _object12.setStrip(6);
+ _object12.setPosition(Common::Point(186, 140));
+ _object12._moveDiff = Common::Point(3, 1);
+ _object5.setup(&_object12, 306, 2, 29);
+ _object12.hide();
+
+ _object15.postInit();
+ _object15.setVisage(307);
+ _object15.setStrip(6);
+ _object15.setPosition(Common::Point(201, 142));
+ _object15._moveDiff = Common::Point(3, 1);
+ _object6.setup(&_object15, 306, 3, 29);
+
+ _object16.postInit();
+ _object16.setVisage(307);
+ _object16.setStrip(6);
+ _object16.setPosition(Common::Point(216, 145));
+ _object16._moveDiff = Common::Point(3, 1);
+ _object7.setup(&_object16, 306, 1, 29);
+
+ _object1.postInit();
+ _object1.setVisage(307);
+ _object1.setStrip(6);
+ _object1.setPosition(Common::Point(305, 66));
+ _object1._moveDiff = Common::Point(3, 1);
+ _object1.setObjectWrapper(new SceneObjectWrapper());
+ _object1.animate(ANIM_MODE_1, NULL);
+ _object2.setup(&_object1, 306, 4, 9);
+
+ BF_GLOBALS._sceneItems.addItems(&_object13, &_object14, &_object15, &_object16, NULL);
+ _timer.set(3600, this, &_action5);
+
+ _field2760 = 0;
+ _field2762 = 1;
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 315 - Inside Police Station
+ *
+ *--------------------------------------------------------------------------*/
+
+bool Scene315::Item1::startAction(CursorType action, Event &event) {
+ Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
+ scene->_currentCursor = action;
+
+ switch (action) {
+ case CURSOR_USE:
+ if (scene->_field1B60 || scene->_field1B64)
+ SceneItem::display2(320, 51);
+ else
+ NamedHotspot::startAction(action, event);
+ break;
+ case CURSOR_TALK:
+ if ((BF_GLOBALS._dayNumber == 2) && (BF_GLOBALS._sceneManager._previousScene == 325))
+ NamedHotspot::startAction(action, event);
+ else {
+ if (!BF_GLOBALS.getFlag(onDuty))
+ scene->_stripNumber = 3172;
+ else if (BF_GLOBALS.getFlag(fTalkedToBarry))
+ scene->_stripNumber = 3166;
+ else if (BF_GLOBALS.getFlag(fTalkedToLarry))
+ scene->_stripNumber = 3164;
+ else
+ scene->_stripNumber = 3165;
+
+ scene->setAction(&scene->_action1);
+ BF_GLOBALS.setFlag(fTalkedToBarry);
+ }
+ break;
+ case INV_GREENS_GUN:
+ case INV_GREENS_KNIFE:
+ BF_GLOBALS._player.disableControl();
+ if (BF_INVENTORY._bookingGreen._sceneNumber != 390) {
+ scene->_stripNumber = 3174;
+ scene->setAction(&scene->_action1);
+ } else {
+ ++scene->_field1B62;
+ scene->_stripNumber = (action == INV_GREENS_GUN) ? 3168 : 0;
+ scene->_sceneMode = 3152;
+ scene->setAction(&scene->_sequenceManager, scene, 3153, 1888, NULL);
+ }
+ break;
+ case INV_FOREST_RAP:
+ BF_GLOBALS._player.disableControl();
+ scene->_stripNumber = BF_GLOBALS.getFlag(onDuty) ? 3178 : 3173;
+ scene->setAction(&scene->_action1);
+ break;
+ case INV_GREEN_ID:
+ case INV_FRANKIE_ID:
+ case INV_TYRONE_ID:
+ BF_GLOBALS._player.disableControl();
+ scene->_stripNumber = 3175;
+ scene->setAction(&scene->_action1);
+ break;
+ case INV_BOOKING_GREEN:
+ case INV_BOOKING_FRANKIE:
+ case INV_BOOKING_GANG:
+ BF_GLOBALS._player.disableControl();
+ scene->_stripNumber = 3167;
+ scene->setAction(&scene->_action1);
+ break;
+ case INV_COBB_RAP:
+ if (BF_INVENTORY._mugshot._sceneNumber == 1)
+ NamedHotspot::startAction(action, event);
+ else {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 3169;
+ if (BF_GLOBALS._dayNumber > 2)
+ scene->_stripNumber = 3176;
+ else if (BF_GLOBALS.getFlag(onDuty))
+ scene->_stripNumber = 3177;
+ else
+ scene->_stripNumber = 3170;
+ scene->setAction(&scene->_action1);
+ }
+ break;
+ case INV_22_BULLET:
+ case INV_AUTO_RIFLE:
+ case INV_WIG:
+ case INV_22_SNUB:
+ BF_GLOBALS._player.disableControl();
+ if ((BF_GLOBALS.getFlag(fCuffedFrankie) && (BF_INVENTORY._bookingFrankie._sceneNumber == 0)) ||
+ (!BF_GLOBALS.getFlag(fCuffedFrankie) && (BF_INVENTORY._bookingGang._sceneNumber == 0))) {
+ scene->_stripNumber = 3174;
+ scene->setAction(&scene->_action1);
+ } else {
+ if (!scene->_field1B6C & (scene->_field1B66 == 1)) {
+ scene->_field1B6C = 1;
+ scene->_stripNumber = 3169;
+ } else {
+ scene->_stripNumber = 0;
+ }
+
+ scene->_sceneMode = 3153;
+ scene->setAction(&scene->_sequenceManager, scene, 3153, &BF_GLOBALS._player, NULL);
+ }
+ break;
+ default:
+ return NamedHotspot::startAction(action, event);
+ }
+
+ return true;
+}
+
+bool Scene315::Item2::startAction(CursorType action, Event &event) {
+ Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case INV_GREENS_GUN:
+ case INV_22_BULLET:
+ case INV_AUTO_RIFLE:
+ case INV_WIG:
+ case INV_22_SNUB:
+ SceneItem::display2(315, 30);
+ break;
+ case INV_GREEN_ID:
+ case INV_FRANKIE_ID:
+ case INV_TYRONE_ID:
+ BF_GLOBALS._player.disableControl();
+ scene->_stripNumber = 3175;
+ scene->setAction(&scene->_action1);
+ break;
+ case INV_BOOKING_GREEN:
+ case INV_BOOKING_FRANKIE:
+ case INV_BOOKING_GANG:
+ if (action == INV_BOOKING_GREEN)
+ ++scene->_field1B62;
+ else
+ ++scene->_field1B66;
+
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 12;
+ scene->setAction(&scene->_sequenceManager, scene, 3154, &BF_GLOBALS._player, NULL);
+ break;
+ default:
+ return NamedHotspot::startAction(action, event);
+ }
+
+ return true;
+}
+
+bool Scene315::Item4::startAction(CursorType action, Event &event) {
+ Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
+
+ if (action == CURSOR_LOOK) {
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._player.addMover(NULL);
+ scene->_object9.postInit();
+ scene->_object9.hide();
+ scene->_sceneMode = 3167;
+ scene->setAction(&scene->_sequenceManager, scene, 3167, &scene->_object9, this, NULL);
+ return true;
+ } else {
+ return NamedHotspot::startAction(action, event);
+ }
+}
+
+bool Scene315::Item5::startAction(CursorType action, Event &event) {
+ Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
+
+ if (action == CURSOR_LOOK) {
+ BF_GLOBALS._player.addMover(NULL);
+ scene->_stripManager.start(3154, &BF_GLOBALS._stripProxy);
+ return true;
+ } else {
+ return NamedHotspot::startAction(action, event);
+ }
+}
+
+bool Scene315::Item14::startAction(CursorType action, Event &event) {
+ Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
+
+ if ((action == INV_COLT45) && BF_GLOBALS.getFlag(onDuty)) {
+ if (!BF_GLOBALS.getFlag(onDuty))
+ SceneItem::display2(315, 27);
+ else if (BF_GLOBALS.getHasBullets()) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 3162;
+ scene->setAction(&scene->_sequenceManager, scene, 3162, &BF_GLOBALS._player, NULL);
+ } else if (BF_GLOBALS.getFlag(fGunLoaded))
+ SceneItem::display2(315, 46);
+ else {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 3159;
+ scene->setAction(&scene->_sequenceManager, scene, 3159, &BF_GLOBALS._player, NULL);
+ }
+ return true;
+ } else {
+ return NamedHotspot::startAction(action, event);
+ }
+}
+
+bool Scene315::Item15::startAction(CursorType action, Event &event) {
+ Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
+
+ if (action != CURSOR_USE)
+ return NamedHotspot::startAction(action, event);
+ else if (BF_INVENTORY._forestRap._sceneNumber == 1) {
+ SceneItem::display2(315, 37);
+ return true;
+ } else {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 3158;
+ scene->setAction(&scene->_sequenceManager, scene, 3158, &BF_GLOBALS._player, NULL);
+ return true;
+ }
+}
+
+bool Scene315::Item16::startAction(CursorType action, Event &event) {
+ ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 190, 75);
+ return true;
+}
+
+bool Scene315::Item17::startAction(CursorType action, Event &event) {
+ ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, event.mousePos.x, event.mousePos.y);
+ return true;
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene315::Object1::startAction(CursorType action, Event &event) {
+ Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ scene->_stripManager.start(3157, &BF_GLOBALS._stripProxy);
+ return true;
+ case CURSOR_USE:
+ if (!BF_GLOBALS.getFlag(fGotPointsForCleaningGun)) {
+ BF_GLOBALS._uiElements.addScore(10);
+ BF_GLOBALS.setFlag(fGotPointsForCleaningGun);
+ }
+ BF_GLOBALS._player.addMover(NULL);
+ scene->_stripManager.start(3159, &BF_GLOBALS._stripProxy);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ break;
+ }
+}
+
+bool Scene315::Object2::startAction(CursorType action, Event &event) {
+ Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ BF_GLOBALS._player.disableControl();
+ scene->_object9.postInit();
+ scene->_object9.hide();
+ scene->_sceneMode = 3157;
+ scene->setAction(&scene->_sequenceManager, scene, 3157, &BF_GLOBALS._player, &scene->_object9, NULL);
+ return true;
+ case CURSOR_USE:
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 3156;
+ scene->setAction(&scene->_sequenceManager, scene, BF_GLOBALS.getFlag(onDuty) ? 3156 : 3168,
+ &BF_GLOBALS._player, this, NULL);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene315::Object3::startAction(CursorType action, Event &event) {
+ Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ BF_GLOBALS._player.addMover(NULL);
+ scene->_stripManager.start(3156, &BF_GLOBALS._stripProxy);
+ return true;
+ case CURSOR_USE:
+ if (!BF_GLOBALS.getFlag(fGotPointsForMemo)) {
+ BF_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS.setFlag(fGotPointsForMemo);
+ }
+
+ BF_GLOBALS._player.addMover(NULL);
+ scene->_stripManager.start(3158, &BF_GLOBALS._stripProxy);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene315::Action1::signal() {
+ Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._player.disableControl();
+ ADD_PLAYER_MOVER_THIS(BF_GLOBALS._player, 128, 128);
+ break;
+ case 1:
+ BF_GLOBALS._player.changeAngle(315);
+ setDelay(2);
+ break;
+ case 2:
+ scene->_stripManager.start(scene->_stripNumber, this);
+ break;
+ case 3:
+ if (scene->_sceneMode == 3169) {
+ BF_GLOBALS._uiElements.addScore(30);
+ BF_INVENTORY.setObjectScene(INV_MUG_SHOT, 1);
+ }
+
+ remove();
+ BF_GLOBALS._player.enableControl();
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+Scene315::Scene315() {
+ BF_GLOBALS._v51C44 = 1;
+ _field1B6C = _field139C = 0;
+ if (BF_GLOBALS._dayNumber == 0)
+ BF_GLOBALS._dayNumber = 1;
+
+ BF_GLOBALS.clearFlag(fCanDrawGun);
+ _field1B68 = true;
+ _field1B6A = false;
+ _field1B60 = _field1B62 = 0;
+ _field1B64 = _field1B66 = 0;
+}
+
+void Scene315::synchronize(Serializer &s) {
+ SceneExt::synchronize(s);
+
+ s.syncAsSint16LE(_field1390);
+ s.syncAsSint16LE(_stripNumber);
+ s.syncAsSint16LE(_field1398);
+ s.syncAsSint16LE(_field1B60);
+ s.syncAsSint16LE(_field1B62);
+ s.syncAsSint16LE(_field1B64);
+ s.syncAsSint16LE(_field1B66);
+ s.syncAsSint16LE(_field1B6C);
+ s.syncAsSint16LE(_field139C);
+ s.syncAsByte(_field1B68);
+ s.syncAsByte(_field1B6A);
+ s.syncAsSint16LE(_currentCursor);
+}
+
+void Scene315::postInit(SceneObjectList *OwnerList) {
+ loadScene(315);
+
+ if (BF_GLOBALS._sceneManager._previousScene != 325)
+ BF_GLOBALS._sound1.fadeSound(11);
+
+ setZoomPercents(67, 72, 124, 100);
+
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+ _stripManager.addSpeaker(&_sutterSpeaker);
+ _stripManager.addSpeaker(&_harrisonSpeaker);
+ _stripManager.addSpeaker(&_jakeJacketSpeaker);
+ _stripManager.addSpeaker(&_jakeUniformSpeaker);
+ _stripManager.addSpeaker(&_jailerSpeaker);
+
+ _object8.postInit();
+ _object8.setVisage(315);
+ _object8.setPosition(Common::Point(272, 69));
+
+ if (BF_GLOBALS._bookmark >= bLauraToParamedics) {
+ _object3.postInit();
+ _object3.setVisage(315);
+ _object3.setPosition(Common::Point(167, 53));
+ _object3.setStrip(4);
+ _object3.setFrame(4);
+ _object3.fixPriority(82);
+ _object3.setDetails(315, -1, -1, -1, 1, NULL);
+ }
+
+ if (BF_GLOBALS._dayNumber == 1) {
+ if (BF_GLOBALS._bookmark >= bLauraToParamedics) {
+ _object1.postInit();
+ _object1.setVisage(315);
+ _object1.setPosition(Common::Point(156, 51));
+ _object1.setStrip(4);
+ _object1.setFrame(2);
+ _object1.fixPriority(82);
+ _object1.setDetails(315, -1, -1, -1, 1, NULL);
+ }
+ } else if ((BF_INVENTORY._daNote._sceneNumber != 1) && (BF_GLOBALS._dayNumber < 3)) {
+ _object2.postInit();
+ _object2.setVisage(315);
+ _object2.setStrip(3);
+ _object2.setFrame(2);
+ _object2.setPosition(Common::Point(304, 31));
+ _object2.fixPriority(70);
+ _object2.setDetails(315, 3, 4, -1, 1, NULL);
+ }
+
+ _item2.setDetails(12, 315, 35, -1, 36, 1);
+ _item5.setDetails(3, 315, -1, -1, -1, 1);
+ _item1.setDetails(4, 315, 10, 11, 12, 1);
+ _item3.setDetails(2, 315, 0, 1, 2, 1);
+ _item4.setDetails(Rect(190, 17, 208, 30), 315, -1, -1, -1, 1, NULL);
+ _item16.setDetails(Rect(184, 31, 211, 80), 315, -1, -1, -1, 1, NULL);
+ _item17.setDetails(Rect(0, 157, 190, 167), 315, -1, -1, -1, 1, NULL);
+
+ if (!BF_GLOBALS.getFlag(onDuty) && ((BF_GLOBALS._bookmark == bNone) || (BF_GLOBALS._bookmark == bLyleStoppedBy))) {
+ _field1398 = 1;
+ BF_GLOBALS.setFlag(onDuty);
+ } else {
+ _field1398 = 0;
+ }
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.changeZoom(-1);
+ BF_GLOBALS._player.disableControl();
+
+ if ((BF_GLOBALS._dayNumber != 2) || (BF_GLOBALS._sceneManager._previousScene != 325)) {
+ _object4.postInit();
+ _object4.setVisage(316);
+ _object4.setPosition(Common::Point(99, 82));
+ _object4.fixPriority(95);
+
+ _object5.postInit();
+ _object5.setVisage(395);
+ _object5.setStrip(2);
+ _object5.setPosition(Common::Point(96, 86));
+ }
+
+ // Set up evidence objects in inventory
+ if (BF_INVENTORY._bookingGreen.inInventory())
+ ++_field1B60;
+ if (BF_INVENTORY._greensGun.inInventory())
+ ++_field1B60;
+ if (BF_INVENTORY._greensKnife.inInventory())
+ ++_field1B60;
+
+ if (BF_INVENTORY._bullet22.inInventory())
+ ++_field1B64;
+ if (BF_INVENTORY._autoRifle.inInventory())
+ ++_field1B64;
+ if (BF_INVENTORY._wig.inInventory())
+ ++_field1B64;
+ if (BF_INVENTORY._bookingFrankie.inInventory())
+ ++_field1B64;
+ if (BF_INVENTORY._bookingGang.inInventory())
+ ++_field1B64;
+ if (BF_INVENTORY._snub22.inInventory())
+ ++_field1B64;
+
+ switch (BF_GLOBALS._sceneManager._previousScene) {
+ case 190:
+ if (_field1398)
+ _field1B6A = true;
+ _sceneMode = BF_GLOBALS.getFlag(onDuty) ? 3150 : 3165;
+ setAction(&_sequenceManager, this, _sceneMode, &BF_GLOBALS._player, NULL);
+ break;
+ case 325:
+ BF_GLOBALS._uiElements._active = false;
+ _object6.postInit();
+ _object7.postInit();
+ _object8.setFrame(8);
+ _sceneMode = (BF_GLOBALS._dayNumber == 1) ? 3152 : 3155;
+ setAction(&_sequenceManager, this, _sceneMode, &BF_GLOBALS._player, &_object6,
+ &_object7, &_object8, NULL);
+ break;
+ case 300:
+ default:
+ if (_field1398)
+ _field1B6A = true;
+ if (!BF_GLOBALS.getFlag(onDuty))
+ _sceneMode = 3166;
+ else if (!_field1398)
+ _sceneMode = 3164;
+ else
+ _sceneMode = 3163;
+
+ setAction(&_sequenceManager, this, _sceneMode, &BF_GLOBALS._player, NULL);
+ break;
+ }
+
+ if (_field1B6A) {
+ _object8.setFrame(8);
+ } else {
+ BF_GLOBALS._walkRegions.proc1(4);
+ }
+
+ _item15.setDetails(24, 315, 38, 39, 40, 1);
+ _item14.setDetails(14, 315, 24, 25, 26, 1);
+ _item7.setDetails(5, 315, 8, 9, -1, 1);
+ _item6.setDetails(6, 315, 5, 6, 7, 1);
+ _item10.setDetails(8, 315, 13, -1, -1, 1);
+ _item11.setDetails(9, 315, 14, -1, -1, 1);
+ _item8.setDetails(7, 315, 15, 16, 17, 1);
+ _item9.setDetails(10, 315, 18, 19, 20, 1);
+}
+
+void Scene315::signal() {
+ int ctr = 0;
+
+ switch (_sceneMode) {
+ case 0:
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 10:
+ if (_field1B62) {
+ if (_field1B62 >= _field1B60)
+ BF_GLOBALS.setFlag(fLeftTraceIn910);
+ else
+ ++ctr;
+ }
+
+ if (_field1B66) {
+ if (_field1B66 < _field1B64)
+ ++ctr;
+ else if (BF_GLOBALS._bookmark < bBookedFrankieEvidence)
+ BF_GLOBALS._bookmark = bBookedFrankieEvidence;
+ }
+
+ if (ctr) {
+ BF_GLOBALS._deathReason = 20;
+ BF_GLOBALS._sceneManager.changeScene(666);
+ } else {
+ BF_GLOBALS._sceneManager.changeScene(300);
+ }
+ BF_GLOBALS._sound1.fadeOut2(NULL);
+ break;
+ case 11:
+ if (_field1B62) {
+ if (_field1B62 >= _field1B60)
+ BF_GLOBALS.setFlag(fLeftTraceIn910);
+ else
+ ++ctr;
+ }
+
+ if (_field1B66) {
+ if (_field1B66 < _field1B64)
+ ++ctr;
+ else if (BF_GLOBALS._bookmark < bBookedFrankie)
+ BF_GLOBALS._bookmark = bBookedFrankie;
+ else if (BF_GLOBALS._bookmark < bBookedFrankieEvidence)
+ BF_GLOBALS._bookmark = bBookedFrankie;
+ }
+
+ if (ctr == 1) {
+ BF_GLOBALS._deathReason = 20;
+ BF_GLOBALS._sound1.fadeOut2(NULL);
+ } else if ((BF_GLOBALS._bookmark != bBookedFrankie) || !BF_GLOBALS.getFlag(onDuty)) {
+ BF_GLOBALS._sound1.fadeOut2(NULL);
+ BF_GLOBALS._sceneManager.changeScene(190);
+ } else {
+ BF_GLOBALS._bookmark = bBookedFrankieEvidence;
+ _field139C = 0;
+ BF_GLOBALS.clearFlag(onDuty);
+ BF_INVENTORY.setObjectScene(INV_TICKET_BOOK, 60);
+ BF_INVENTORY.setObjectScene(INV_MIRANDA_CARD, 60);
+ _sceneMode = 3165;
+ setAction(&_sequenceManager, this, 3165, &BF_GLOBALS._player, NULL);
+ }
+ break;
+ case 12:
+ BF_GLOBALS._uiElements.addScore(30);
+ BF_INVENTORY.setObjectScene((int)_currentCursor, 315);
+
+ if (!_field1B64 || (_field1B66 != _field1B64))
+ BF_GLOBALS._player.enableControl();
+ else {
+ _field139C = 1;
+ _stripNumber = 3171;
+ setAction(&_action1);
+ }
+ break;
+ case 3150:
+ case 3164:
+ case 3165:
+ case 3166:
+ BF_GLOBALS._player.enableControl();
+ _field1B68 = false;
+ break;
+ case 3151:
+ BF_GLOBALS._sceneManager.changeScene(325);
+ break;
+ case 3152:
+ BF_GLOBALS._walkRegions.proc1(4);
+ _object7.remove();
+ _object6.remove();
+
+ BF_GLOBALS._player.enableControl();
+ _field1B68 = false;
+ BF_GLOBALS._walkRegions.proc1(4);
+ BF_GLOBALS._uiElements._active = true;
+ BF_GLOBALS._uiElements.show();
+ break;
+ case 3153:
+ BF_GLOBALS._uiElements.addScore(30);
+ BF_INVENTORY.setObjectScene((int)_currentCursor, 315);
+
+ if (_stripNumber != 0)
+ setAction(&_action1);
+ else if (!_field1B64 || (_field1B66 != _field1B64))
+ BF_GLOBALS._player.enableControl();
+ else {
+ _stripNumber = 3171;
+ setAction(&_action1);
+ _field139C = 1;
+ }
+ break;
+ case 3155:
+ BF_GLOBALS._player.enableControl();
+ _field1B68 = false;
+ BF_GLOBALS._walkRegions.proc1(4);
+ BF_GLOBALS._uiElements._active = true;
+ BF_GLOBALS._uiElements.show();
+ break;
+ case 3156:
+ BF_GLOBALS._uiElements.addScore(10);
+ BF_INVENTORY.setObjectScene(INV_DA_NOTE, 1);
+ _object2.remove();
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 3157:
+ BF_GLOBALS._player.enableControl();
+ _object9.remove();
+ break;
+ case 3158:
+ BF_GLOBALS._player.enableControl();
+ BF_GLOBALS._uiElements.addScore(10);
+ BF_INVENTORY.setObjectScene(INV_FOREST_RAP, 1);
+ break;
+ case 3159:
+ if (!BF_GLOBALS.getFlag(fBookedGreenEvidence)) {
+ BF_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS.setFlag(fBookedGreenEvidence);
+ }
+ BF_GLOBALS.setFlag(gunClean);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 3161:
+ BF_GLOBALS._deathReason = 21;
+ BF_GLOBALS._sound1.fadeOut2(NULL);
+ BF_GLOBALS._sceneManager.changeScene(666);
+ break;
+ case 3162:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 3161;
+ setAction(&_sequenceManager, this, 3161, &BF_GLOBALS._player, NULL);
+ BF_GLOBALS.setFlag(fShotSuttersDesk);
+ break;
+ case 3163:
+ _sceneMode = 3150;
+ setAction(&_sequenceManager, this, 3150, &BF_GLOBALS._player, NULL);
+ break;
+ case 3167:
+ BF_GLOBALS._player.enableControl();
+ _object9.remove();
+ break;
+ case 3154:
+ default:
+ break;
+ }
+}
+
+void Scene315::process(Event &event) {
+ SceneExt::process(event);
+
+ if (BF_GLOBALS._player._enabled && !_eventHandler && (event.mousePos.y < (BF_INTERFACE_Y - 1))) {
+ // Check if the cursor is on an exit
+ if (_item17.contains(event.mousePos)) {
+ GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_SW);
+ BF_GLOBALS._events.setCursor(surface);
+ } else if ((BF_GLOBALS._bookmark != bBookedFrankie) && _item16.contains(event.mousePos)) {
+ GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_W);
+ BF_GLOBALS._events.setCursor(surface);
+ } else {
+ // In case an exit cursor was being shown, restore the previously selected cursor
+ CursorType cursorId = BF_GLOBALS._events.getCursor();
+ BF_GLOBALS._events.setCursor(cursorId);
+ }
+ }
+}
+
+void Scene315::dispatch() {
+ SceneExt::dispatch();
+
+ if (_field1B68)
+ return;
+
+ if (_field1B6A) {
+ if (BF_GLOBALS._player._position.y < 69) {
+ BF_GLOBALS._player.disableControl();
+ _field1B68 = true;
+ _sceneMode = 3151;
+ setAction(&_sequenceManager, this, 3151, &BF_GLOBALS._player, NULL);
+ } else if (BF_GLOBALS._player.getRegionIndex() == 1) {
+ BF_GLOBALS._player.disableControl();
+ _field1B68 = true;
+ SceneItem::display2(315, 28);
+ _sceneMode = 3150;
+ ADD_MOVER(BF_GLOBALS._player, BF_GLOBALS._player._position.x + 30,
+ BF_GLOBALS._player._position.y + 15);
+ } else if (BF_GLOBALS._player._position.y > 156) {
+ BF_GLOBALS._player.disableControl();
+ _field1B68 = true;
+ SceneItem::display2(315, 28);
+ _sceneMode = 3150;
+ ADD_MOVER(BF_GLOBALS._player, BF_GLOBALS._player._position.x + 30,
+ BF_GLOBALS._player._position.y - 24);
+ }
+ } else if (BF_GLOBALS._player.getRegionIndex() == 1) {
+ BF_GLOBALS._player.disableControl();
+ _field1B68 = true;
+ _sceneMode = 11;
+ ADD_MOVER(BF_GLOBALS._player, BF_GLOBALS._player._position.x - 30,
+ BF_GLOBALS._player._position.y - 5);
+ } else if (BF_GLOBALS._player._position.y > 156) {
+ BF_GLOBALS._player.disableControl();
+ _field1B68 = true;
+
+ if (_field139C) {
+ SceneItem::display2(315, 45);
+ _sceneMode = 3150;
+ ADD_MOVER(BF_GLOBALS._player, 112, 152);
+ } else {
+ _sceneMode = 10;
+ ADD_MOVER(BF_GLOBALS._player, BF_GLOBALS._player._position.x - 150,
+ BF_GLOBALS._player._position.y + 120);
+ }
+ }
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 325 - Police Station Conference Room
+ *
+ *--------------------------------------------------------------------------*/
+
+bool Scene325::Item1::startAction(CursorType action, Event &event) {
+ if (action == CURSOR_EXIT) {
+ BF_GLOBALS._events.setCursor(CURSOR_WALK);
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._sceneManager.changeScene(315);
+ return true;
+ } else {
+ return false;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene325::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(325);
+ BF_GLOBALS._interfaceY = 200;
+ BF_GLOBALS.clearFlag(fCanDrawGun);
+
+ if (BF_GLOBALS._dayNumber == 0)
+ BF_GLOBALS._dayNumber = 1;
+
+ // Add the speakers
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+ _stripManager.addSpeaker(&_PSutterSpeaker);
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.hide();
+
+ if (BF_GLOBALS._dayNumber == 1) {
+ _object1.postInit();
+ _object1.setVisage(325);
+ _object1.setStrip(8);
+ _object1.setPosition(Common::Point(128, 44));
+ } else {
+ _object1.postInit();
+ _object1.setVisage(325);
+ _object1.setStrip(8);
+ _object1.setFrame(2);
+ _object1.setPosition(Common::Point(132, 28));
+
+ _object2.postInit();
+ _object2.setVisage(325);
+ _object2.setStrip(8);
+ _object2.setFrame(3);
+ _object2.setPosition(Common::Point(270, 24));
+ }
+
+ _object3.postInit();
+ _object3.setVisage(335);
+ _object3.setStrip(4);
+ _object3.setPosition(Common::Point(202, 122));
+
+ _object4.postInit();
+ _object4.setVisage(335);
+ _object4.setStrip(2);
+ _object4.setPosition(Common::Point(283, 102));
+
+ _object5.postInit();
+ _object5.setVisage(335);
+ _object5.setStrip(1);
+ _object5.setPosition(Common::Point(135, 167));
+
+ _item1.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 560, -1, -1, -1, 1, NULL);
+ BF_GLOBALS._player.disableControl();
+
+ _sceneMode = (BF_GLOBALS._dayNumber == 1) ? 3250 : 3251;
+ setAction(&_sequenceManager, this, _sceneMode, &_object3, &_object4, &_object5, NULL);
+}
+
+void Scene325::signal() {
+ BF_GLOBALS._player._uiEnabled = 0;
+ BF_GLOBALS._player._canWalk = true;
+ BF_GLOBALS._player._enabled = true;
+ BF_GLOBALS._events.setCursor(CURSOR_EXIT);
+}
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/blue_force/blueforce_scenes3.h b/engines/tsage/blue_force/blueforce_scenes3.h
new file mode 100644
index 0000000000..18911d58fb
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_scenes3.h
@@ -0,0 +1,250 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef TSAGE_BLUEFORCE_SCENES3_H
+#define TSAGE_BLUEFORCE_SCENES3_H
+
+#include "common/scummsys.h"
+#include "tsage/blue_force/blueforce_logic.h"
+#include "tsage/blue_force/blueforce_speakers.h"
+#include "tsage/converse.h"
+#include "tsage/events.h"
+#include "tsage/core.h"
+#include "tsage/scenes.h"
+#include "tsage/globals.h"
+#include "tsage/sound.h"
+
+namespace TsAGE {
+
+namespace BlueForce {
+
+using namespace TsAGE;
+
+class Scene300: public SceneExt {
+ /* Objects */
+ class Object: public NamedObject {
+ public:
+ int _stripNumber;
+ public:
+ Object(int stripNumber) { _stripNumber = stripNumber; }
+
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Object19: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Items */
+ class Item1: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item2: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item14: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item15: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Actions */
+ class Action1: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action2: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action3: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action4: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action5: public Action {
+ public:
+ virtual void signal();
+ };
+private:
+ void setup();
+public:
+ SequenceManager _sequenceManager1, _sequenceManager2;
+ SequenceManager _sequenceManager3, _sequenceManager4;
+ NamedObject _object1;
+ FollowerObject _object2, _object3, _object4, _object5, _object6, _object7;
+ SceneObject _object8, _object9, _object10;
+ NamedObject _object11, _object12;
+ Object _object13, _object14, _object15, _object16;
+ NamedObject _object17, _object18;
+ Object19 _object19;
+ Item1 _item1;
+ Item2 _item2;
+ NamedHotspot _item3, _item4, _item5, _item6, _item7;
+ NamedHotspot _item8, _item9, _item10, _item11;
+ NamedHotspot _item12, _item13;
+ Item14 _item14;
+ Item15 _item15;
+ Action1 _action1;
+ Action2 _action2;
+ Action3 _action3;
+ Action4 _action4;
+ Action5 _action5;
+ SpeakerGameText _gameTextSpeaker;
+ SpeakerSutter _sutterSpeaker;
+ SpeakerDoug _dougSpeaker;
+ SpeakerJakeNoHead _jakeSpeaker;
+ TimerExt _timer;
+ int _field2760, _field2762;
+
+ Scene300();
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void process(Event &event);
+ virtual void dispatch();
+};
+
+class Scene315: public SceneExt {
+ /* Objects */
+ class Object1: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Object2: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Object3: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Items */
+ class Item1: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item2: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item4: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item5: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item14: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item15: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item16: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item17: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Actions */
+ class Action1: public Action {
+ public:
+ virtual void signal();
+ };
+public:
+ SequenceManager _sequenceManager;
+ SpeakerGameText _gameTextSpeaker;
+ SpeakerSutter _sutterSpeaker;
+ SpeakerHarrison _harrisonSpeaker;
+ SpeakerJakeJacket _jakeJacketSpeaker;
+ SpeakerJakeUniform _jakeUniformSpeaker;
+ SpeakerJailer _jailerSpeaker;
+ Item1 _item1;
+ Item2 _item2;
+ NamedHotspot _item3;
+ Item4 _item4;
+ Item5 _item5;
+ Object1 _object1;
+ Object2 _object2;
+ Object3 _object3;
+ SceneObject _object4, _object5, _object6;
+ SceneObject _object7, _object8, _object9;
+ NamedHotspot _item6, _item7, _item8, _item9;
+ NamedHotspot _item10, _item11, _item12, _item13;
+ Item14 _item14;
+ Item15 _item15;
+ Item16 _item16;
+ Item17 _item17;
+ Action1 _action1;
+ int _field1390;
+ int _stripNumber;
+ int _field1398;
+ int _field1B60, _field1B62, _field1B64;
+ int _field1B66, _field1B6C, _field139C;
+ bool _field1B68, _field1B6A;
+ CursorType _currentCursor;
+
+ Scene315();
+ virtual void synchronize(Serializer &s);
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void process(Event &event);
+ virtual void dispatch();
+};
+
+class Scene325: public SceneExt {
+ /* Items */
+ class Item1: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+public:
+ SequenceManager _sequenceManager;
+ SpeakerGameText _gameTextSpeaker;
+ SpeakerPSutter _PSutterSpeaker;
+ Item1 _item1;
+ NamedObject _object1, _object2, _object3, _object4, _object5;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+};
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
+
+#endif
diff --git a/engines/tsage/blue_force/blueforce_scenes6.cpp b/engines/tsage/blue_force/blueforce_scenes6.cpp
new file mode 100644
index 0000000000..e150a6e5b7
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_scenes6.cpp
@@ -0,0 +1,168 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "tsage/blue_force/blueforce_scenes6.h"
+#include "tsage/blue_force/blueforce_dialogs.h"
+#include "tsage/scenes.h"
+#include "tsage/tsage.h"
+#include "tsage/staticres.h"
+
+namespace TsAGE {
+
+namespace BlueForce {
+
+/*--------------------------------------------------------------------------
+ * Scene 666 - Death Scene
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene666::Action1::signal() {
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._player.hide();
+ setDelay(6);
+ break;
+ case 1:
+ BF_GLOBALS._game->restartGame();
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene666::Item1::startAction(CursorType action, Event &event) {
+ return true;
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene666::postInit(SceneObjectList *OwnerList) {
+ BF_GLOBALS._sound1.play(27);
+ SceneExt::postInit();
+ BF_GLOBALS._interfaceY = 200;
+ loadScene(999);
+ BF_GLOBALS._screenSurface.fillRect(BF_GLOBALS._screenSurface.getBounds(), 0);
+
+ if (BF_GLOBALS._dayNumber == 0) {
+ BF_GLOBALS._dayNumber = 1;
+ BF_GLOBALS._deathReason = BF_GLOBALS._randomSource.getRandomNumber(23);
+ }
+
+ BF_GLOBALS._scenePalette.loadPalette(BF_GLOBALS._sceneManager._previousScene);
+ BF_GLOBALS._uiElements._active = false;
+
+ _item1.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 666, -1, -1, -1, 1, NULL);
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._events.setCursor(CURSOR_WALK);
+
+ if (BF_GLOBALS._sceneManager._previousScene == 271) {
+ setAction(&_action1);
+ } else {
+ switch (BF_GLOBALS._deathReason) {
+ case 4:
+ case 18:
+ case 19:
+ case 20:
+ BF_GLOBALS._scenePalette.loadPalette(668);
+ BF_GLOBALS._player.setVisage(668);
+ BF_GLOBALS._player.setStrip2(1);
+ BF_GLOBALS._player.setPosition(Common::Point(77, 155));
+ BF_GLOBALS._player.animate(ANIM_MODE_5, this);
+ break;
+ case 5:
+ BF_GLOBALS._scenePalette.loadPalette(900);
+ BF_GLOBALS._scenePalette.refresh();
+ BF_GLOBALS._player.setVisage(666);
+ BF_GLOBALS._player.setPosition(Common::Point(60, 160));
+ signal();
+ break;
+ case 7:
+ case 11:
+ case 12:
+ case 22:
+ BF_GLOBALS._scenePalette.loadPalette(667);
+ BF_GLOBALS._scenePalette.refresh();
+
+ _object1.postInit();
+ _object2.postInit();
+ _object3.postInit();
+ setAction(&_sequenceManager, this, 6660, &BF_GLOBALS._player, &_object1, &_object2,
+ &_object3, NULL);
+ break;
+ case 13:
+ case 14:
+ BF_GLOBALS._scenePalette.loadPalette(665);
+ BF_GLOBALS._scenePalette.refresh();
+ BF_GLOBALS._player.setVisage(665);
+ BF_GLOBALS._player.setPosition(Common::Point(80, 140));
+ signal();
+ break;
+ case 24:
+ BF_GLOBALS._player.setVisage(664);
+ BF_GLOBALS._player.setPosition(Common::Point(70, 160));
+ signal();
+ break;
+ default:
+ BF_GLOBALS._scenePalette.loadPalette(669);
+ BF_GLOBALS._scenePalette.refresh();
+ BF_GLOBALS._player.setVisage(669);
+ BF_GLOBALS._player.setStrip(1);
+ BF_GLOBALS._player.setPosition(Common::Point(27, 27));
+ BF_GLOBALS._player.animate(ANIM_MODE_5, this);
+ break;
+ }
+ }
+}
+
+void Scene666::remove() {
+ BF_GLOBALS._sound1.fadeOut2(NULL);
+ BF_GLOBALS._scrollFollower = &BF_GLOBALS._player;
+ SceneExt::remove();
+ BF_GLOBALS._uiElements._active = true;
+}
+
+void Scene666::signal() {
+ BF_GLOBALS._player.enableControl();
+ Rect textRect, sceneBounds;
+
+ _text._color1 = 19;
+ _text._color2 = 9;
+ _text._color3 = 13;
+ _text._fontNumber = 4;
+ _text._width = 150;
+
+ Common::String msg = _resourceManager->getMessage(666, BF_GLOBALS._deathReason);
+ sceneBounds = BF_GLOBALS._sceneManager._scene->_sceneBounds;
+ sceneBounds.collapse(4, 2);
+ BF_GLOBALS.gfxManager()._font.getStringBounds(msg.c_str(), textRect, _text._width);
+ textRect.moveTo(160, 10);
+ textRect.contain(sceneBounds);
+
+ _text.setup(msg);
+ _text.setPosition(Common::Point(textRect.left, textRect.top));
+ _text.setPriority(255);
+ _text.show();
+}
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/blue_force/blueforce_scenes6.h b/engines/tsage/blue_force/blueforce_scenes6.h
new file mode 100644
index 0000000000..b7449c5e30
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_scenes6.h
@@ -0,0 +1,70 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef TSAGE_BLUEFORCE_SCENES6_H
+#define TSAGE_BLUEFORCE_SCENES6_H
+
+#include "common/scummsys.h"
+#include "tsage/blue_force/blueforce_logic.h"
+#include "tsage/blue_force/blueforce_speakers.h"
+#include "tsage/converse.h"
+#include "tsage/events.h"
+#include "tsage/core.h"
+#include "tsage/scenes.h"
+#include "tsage/globals.h"
+#include "tsage/sound.h"
+
+namespace TsAGE {
+
+namespace BlueForce {
+
+using namespace TsAGE;
+
+class Scene666 : public SceneExt {
+ /* Actions */
+ class Action1 : public Action {
+ public:
+ virtual void signal();
+ };
+
+ /* Items */
+ class Item1: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+public:
+ Action1 _action1;
+ SequenceManager _sequenceManager;
+ NamedObject _object1, _object2, _object3;
+ Item1 _item1;
+ SceneText _text;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void remove();
+ virtual void signal();
+};
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
+
+#endif
diff --git a/engines/tsage/blue_force/blueforce_speakers.cpp b/engines/tsage/blue_force/blueforce_speakers.cpp
new file mode 100644
index 0000000000..dc2511dedb
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_speakers.cpp
@@ -0,0 +1,320 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "tsage/blue_force/blueforce_speakers.h"
+#include "tsage/scenes.h"
+#include "tsage/tsage.h"
+#include "tsage/graphics.h"
+#include "tsage/staticres.h"
+
+namespace TsAGE {
+
+namespace BlueForce {
+
+VisualSpeaker::VisualSpeaker(): Speaker() {
+ _textWidth = 312;
+ _color1 = 19;
+ _hideObjects = false;
+ _removeObject1 = false;
+ _removeObject2 = false;
+ _xp = 160;
+ _fontNumber = 4;
+ _color2 = 82;
+ _offsetPos = Common::Point(4, 170);
+ _numFrames = 0;
+}
+
+void VisualSpeaker::remove() {
+ if (_removeObject2)
+ _object2.remove();
+ if (_removeObject1)
+ _object1.remove();
+
+ Speaker::remove();
+}
+
+void VisualSpeaker::synchronize(Serializer &s) {
+ Speaker::synchronize(s);
+
+ s.syncAsByte(_removeObject1);
+ s.syncAsByte(_removeObject2);
+ s.syncAsSint16LE(_xp);
+ s.syncAsSint16LE(_numFrames);
+ s.syncAsSint16LE(_offsetPos.x);
+ s.syncAsSint16LE(_offsetPos.y);
+}
+
+void VisualSpeaker::proc12(Action *action) {
+ Speaker::proc12(action);
+ _textPos = Common::Point(_offsetPos.x + BF_GLOBALS._sceneManager._scene->_sceneBounds.left,
+ _offsetPos.y + BF_GLOBALS._sceneManager._scene->_sceneBounds.top);
+ _numFrames = 0;
+}
+
+void VisualSpeaker::setText(const Common::String &msg) {
+ _objectList.draw();
+ BF_GLOBALS._sceneObjects->draw();
+
+ _sceneText._color1 = _color1;
+ _sceneText._color2 = _color2;
+ _sceneText._color3 = _color3;
+ _sceneText._width = _textWidth;
+ _sceneText._fontNumber = _fontNumber;
+ _sceneText._textMode = _textMode;
+ _sceneText.setup(msg);
+
+ // Get the string bounds
+ GfxFont f;
+ f.setFontNumber(_fontNumber);
+ Rect bounds;
+ f.getStringBounds(msg.c_str(), bounds, _textWidth);
+
+ // Set the position for the text
+ switch (_textMode) {
+ case ALIGN_LEFT:
+ case ALIGN_JUSTIFIED:
+ _sceneText.setPosition(_textPos);
+ break;
+ case ALIGN_CENTER:
+ _sceneText.setPosition(Common::Point(_textPos.x + (_textWidth - bounds.width()) / 2, _textPos.y));
+ break;
+ case ALIGN_RIGHT:
+ _sceneText.setPosition(Common::Point(_textPos.x + _textWidth - bounds.width(), _textPos.y));
+ break;
+ default:
+ break;
+ }
+
+ // Ensure the text is in the foreground
+ _sceneText.fixPriority(256);
+
+ // Count the number of words (by spaces) in the string
+ const char *s = msg.c_str();
+ int spaceCount = 0;
+ while (*s) {
+ if (*s++ == ' ')
+ ++spaceCount;
+ }
+
+ _numFrames = spaceCount * 3 + 2;
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerGameText::SpeakerGameText(): VisualSpeaker() {
+ _speakerName = "GAMETEXT";
+ _color1 = 8;
+ _color2 = 19;
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerSutter::SpeakerSutter() {
+ _speakerName = "SUTTER";
+ _color1 = 20;
+ _color2 = 22;
+ _textMode = ALIGN_CENTER;
+}
+
+void SpeakerSutter::setText(const Common::String &msg) {
+ _removeObject1 = _removeObject2 = true;
+
+ _object1.postInit();
+ _object1.setVisage(329);
+ _object1.setStrip2(2);
+ _object1.fixPriority(254);
+ _object1.changeZoom(100);
+ _object1.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 45,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ _object2.postInit();
+ _object2.setVisage(329);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 45,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerDoug::SpeakerDoug(): VisualSpeaker() {
+ _color1 = 32;
+ _speakerName = "DOUG";
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerJakeNoHead::SpeakerJakeNoHead(): VisualSpeaker() {
+ _color1 = 13;
+ _speakerName = "JAKE_NO_HEAD";
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerHarrison::SpeakerHarrison(): VisualSpeaker() {
+ _color1 = 32;
+ _speakerName = "HARRISON";
+}
+
+void SpeakerHarrison::setText(const Common::String &msg) {
+ _removeObject1 = _removeObject2 = true;
+
+ _object1.postInit();
+ _object1.setVisage(325);
+ _object1.setStrip2(7);
+ _object1.fixPriority(254);
+ _object1.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 277,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ _object2.postInit();
+ _object2.fixPriority(255);
+ _object2.setVisage(325);
+ _object2.setStrip2(6);
+ _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 277,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerJakeJacket::SpeakerJakeJacket(): VisualSpeaker() {
+ _color1 = 13;
+ _color2 = 7;
+ _speakerName = "JAKEJACKET";
+}
+
+void SpeakerJakeJacket::setText(const Common::String &msg) {
+ _removeObject1 = _removeObject2 = true;
+
+ _object1.postInit();
+ _object1.setVisage(1001);
+ _object1.setStrip2(4);
+ _object1.fixPriority(254);
+ _object1.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + _xp,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ _object2.postInit();
+ _object2.setVisage(1001);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + _xp,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerJakeUniform::SpeakerJakeUniform(): VisualSpeaker() {
+ _color1 = 13;
+ _color2 = 7;
+ _speakerName = "JAKEUNIFORM";
+}
+
+void SpeakerJakeUniform::setText(const Common::String &msg) {
+ _removeObject1 = _removeObject2 = true;
+
+ _object1.postInit();
+ _object1.setVisage(1001);
+ _object1.setStrip2(3);
+ _object1.fixPriority(254);
+ _object1.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 45,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ _object2.postInit();
+ _object2.setVisage(1001);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 45,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerJailer::SpeakerJailer(): VisualSpeaker() {
+ _color1 = 13;
+ _color2 = 7;
+ _speakerName = "JAILER";
+}
+
+void SpeakerJailer::setText(const Common::String &msg) {
+ _removeObject1 = _removeObject2 = true;
+
+ _object1.postInit();
+ _object1.setVisage(395);
+ _object1.setStrip(6);
+ _object1.fixPriority(254);
+ _object1.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 40,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ _object2.postInit();
+ _object2.setVisage(395);
+ _object2.setStrip(5);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 40,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerPSutter::SpeakerPSutter(): VisualSpeaker() {
+ _color1 = 20;
+ _color2 = 22;
+ _speakerName = "PSUTTER";
+}
+
+void SpeakerPSutter::setText(const Common::String &msg) {
+ _removeObject2 = true;
+
+ _object2.postInit();
+ _object2.setVisage(335);
+ _object2.setStrip2(3);
+ _object2.fixPriority(200);
+ _object2.setPosition(Common::Point(202, 48));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerJakeRadio::SpeakerJakeRadio(): VisualSpeaker() {
+ _color1 = 13;
+ _color2 = 7;
+ _speakerName = "JAKE_RADIO";
+}
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/blue_force/blueforce_speakers.h b/engines/tsage/blue_force/blueforce_speakers.h
new file mode 100644
index 0000000000..c05938506a
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_speakers.h
@@ -0,0 +1,139 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef TSAGE_BLUEFORCE_SPEAKERS_H
+#define TSAGE_BLUEFORCE_SPEAKERS_H
+
+#include "common/scummsys.h"
+#include "tsage/converse.h"
+#include "tsage/events.h"
+#include "tsage/core.h"
+#include "tsage/scenes.h"
+#include "tsage/globals.h"
+#include "tsage/blue_force/blueforce_logic.h"
+
+namespace TsAGE {
+
+namespace BlueForce {
+
+using namespace TsAGE;
+
+class VisualSpeaker: public Speaker {
+public:
+ NamedObject _object1;
+ CountdownObject _object2;
+ bool _removeObject1, _removeObject2;
+ int _xp;
+ int _numFrames;
+ Common::Point _offsetPos;
+public:
+ VisualSpeaker();
+
+ virtual Common::String getClassName() { return "VisualSpeaker"; }
+ virtual void synchronize(Serializer &s);
+ virtual void remove();
+ virtual void proc12(Action *action);
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerGameText: public VisualSpeaker {
+public:
+ SpeakerGameText();
+
+ virtual Common::String getClassName() { return "SpeakerGameText"; }
+};
+
+class SpeakerSutter: public VisualSpeaker {
+public:
+ SpeakerSutter();
+
+ virtual Common::String getClassName() { return "SpeakerSutter"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerDoug: public VisualSpeaker {
+public:
+ SpeakerDoug();
+
+ virtual Common::String getClassName() { return "SpeakerDoug"; }
+};
+
+class SpeakerJakeNoHead: public VisualSpeaker {
+public:
+ SpeakerJakeNoHead();
+
+ virtual Common::String getClassName() { return "SpeakerJakeNoHead"; }
+};
+
+class SpeakerHarrison: public VisualSpeaker {
+public:
+ SpeakerHarrison();
+
+ virtual Common::String getClassName() { return "SpeakerHarrison"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerJakeJacket: public VisualSpeaker {
+public:
+ SpeakerJakeJacket();
+
+ virtual Common::String getClassName() { return "SpeakerJakeJacket"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerJakeUniform: public VisualSpeaker {
+public:
+ SpeakerJakeUniform();
+
+ virtual Common::String getClassName() { return "SpeakerJakeUniform"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerJailer: public VisualSpeaker {
+public:
+ SpeakerJailer();
+
+ virtual Common::String getClassName() { return "SpeakerJailer"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerPSutter: public VisualSpeaker {
+public:
+ SpeakerPSutter();
+
+ virtual Common::String getClassName() { return "SpeakerPSutter"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerJakeRadio: public VisualSpeaker {
+public:
+ SpeakerJakeRadio();
+
+ virtual Common::String getClassName() { return "SpeakerJakeRadio"; }
+};
+
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
+
+#endif
diff --git a/engines/tsage/blue_force/blueforce_ui.cpp b/engines/tsage/blue_force/blueforce_ui.cpp
new file mode 100644
index 0000000000..8f40d2b565
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_ui.cpp
@@ -0,0 +1,476 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "tsage/blue_force/blueforce_ui.h"
+#include "tsage/blue_force/blueforce_dialogs.h"
+#include "tsage/blue_force/blueforce_logic.h"
+#include "tsage/tsage.h"
+#include "tsage/core.h"
+
+namespace TsAGE {
+
+namespace BlueForce {
+
+void StripProxy::process(Event &event) {
+ if (_action)
+ _action->process(event);
+}
+
+/*--------------------------------------------------------------------------*/
+
+void UIElement::synchronize(Serializer &s) {
+ AltSceneObject::synchronize(s);
+ s.syncAsSint16LE(_field88);
+ s.syncAsSint16LE(_enabled);
+ s.syncAsSint16LE(_frameNum);
+}
+
+void UIElement::setup(int visage, int stripNum, int frameNum, int posX, int posY, int priority) {
+ _field88 = 0;
+ _frameNum = frameNum;
+ _enabled = true;
+
+ SceneObject::setup(visage, stripNum, frameNum, posX, posY, priority);
+}
+
+void UIElement::setEnabled(bool flag) {
+ if (_enabled != flag) {
+ _enabled = flag;
+ setFrame(_enabled ? _frameNum : _frameNum + 2);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+void UIQuestion::process(Event &event) {
+ if (event.eventType == EVENT_BUTTON_DOWN) {
+ CursorType currentCursor = GLOBALS._events.getCursor();
+ GLOBALS._events.hideCursor();
+ showDescription(currentCursor);
+
+ event.handled = true;
+ }
+}
+
+void UIQuestion::showDescription(CursorType cursor) {
+ if (cursor == INV_FOREST_RAP) {
+ // Forest rap item has a graphical display
+ showItem(5, 1, 1);
+ } else {
+ // Display object description
+ SceneItem::display2(9001, (int)cursor);
+ }
+}
+
+void UIQuestion::setEnabled(bool flag) {
+ if (_enabled != flag) {
+ UIElement::setEnabled(flag);
+ BF_GLOBALS._uiElements.draw();
+ }
+}
+
+void UIQuestion::showItem(int resNum, int rlbNum, int frameNum) {
+ GfxDialog::setPalette();
+
+ // Get the item to display
+ GfxSurface objImage = surfaceFromRes(resNum, rlbNum, frameNum);
+ Rect imgRect;
+ imgRect.resize(objImage, 0, 0, 100);
+ imgRect.center(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2);
+
+ // Save the area behind where the image will be displayed
+ GfxSurface *savedArea = Surface_getArea(BF_GLOBALS.gfxManager().getSurface(), imgRect);
+
+ // Draw the image
+ BF_GLOBALS.gfxManager().copyFrom(objImage, imgRect);
+
+ // Wait for a press
+ BF_GLOBALS._events.waitForPress();
+
+ // Restore the old area
+ BF_GLOBALS.gfxManager().copyFrom(*savedArea, imgRect);
+ delete savedArea;
+}
+
+/*--------------------------------------------------------------------------*/
+
+void UIScore::postInit(SceneObjectList *OwnerList) {
+ int xp = 266;
+ _digit3.setup(1, 6, 1, xp, 180, 255);
+ _digit3.reposition();
+ xp += 7;
+ _digit2.setup(1, 6, 1, xp, 180, 255);
+ _digit2.reposition();
+ xp += 7;
+ _digit1.setup(1, 6, 1, xp, 180, 255);
+ _digit1.reposition();
+ xp += 7;
+ _digit0.setup(1, 6, 1, xp, 180, 255);
+ _digit0.reposition();
+}
+
+void UIScore::draw() {
+ _digit3.draw();
+ _digit2.draw();
+ _digit1.draw();
+ _digit0.draw();
+}
+
+void UIScore::updateScore() {
+ int score = BF_GLOBALS._uiElements._scoreValue;
+
+ _digit3.setFrame(score / 1000 + 1); score %= 1000;
+ _digit2.setFrame(score / 100 + 1); score %= 100;
+ _digit1.setFrame(score / 10 + 1); score %= 10;
+ _digit0.setFrame(score + 1);
+}
+
+/*--------------------------------------------------------------------------*/
+
+UIInventorySlot::UIInventorySlot(): UIElement() {
+ _objIndex = 0;
+ _object = NULL;
+}
+
+void UIInventorySlot::synchronize(Serializer &s) {
+ UIElement::synchronize(s);
+ s.syncAsSint16LE(_objIndex);
+ SYNC_POINTER(_object);
+}
+
+void UIInventorySlot::process(Event &event) {
+ if (event.eventType == EVENT_BUTTON_DOWN) {
+ event.handled = true;
+
+ if (_objIndex == INV_AMMO_BELT) {
+ // Handle showing ammo belt
+ showAmmoBelt();
+
+ } else if (_objIndex != INV_NONE) {
+ _object->setCursor();
+ }
+ }
+}
+
+void UIInventorySlot::showAmmoBelt() {
+ AmmoBeltDialog *dlg = new AmmoBeltDialog();
+ dlg->execute();
+ delete dlg;
+}
+
+/*--------------------------------------------------------------------------*/
+
+UIInventoryScroll::UIInventoryScroll() {
+ _isLeft = false;
+}
+
+void UIInventoryScroll::synchronize(Serializer &s) {
+ UIElement::synchronize(s);
+ s.syncAsSint16LE(_isLeft);
+}
+
+void UIInventoryScroll::process(Event &event) {
+ switch (event.eventType) {
+ case EVENT_BUTTON_DOWN:
+ // Draw the button as selected
+ toggle(true);
+
+ event.handled = true;
+ break;
+ case EVENT_BUTTON_UP:
+ // Restore unselected version
+ toggle(false);
+
+ // Scroll the inventory as necessary
+ BF_GLOBALS._uiElements.scrollInventory(_isLeft);
+ event.handled = true;
+ break;
+ }
+}
+
+void UIInventoryScroll::toggle(bool pressed) {
+ if (_enabled) {
+ setFrame(pressed ? (_frameNum + 1) : _frameNum);
+ BF_GLOBALS._uiElements.draw();
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+UICollection::UICollection(): EventHandler() {
+ _clearScreen = false;
+ _visible = false;
+ _cursorChanged = false;
+}
+
+void UICollection::setup(const Common::Point &pt) {
+ _position = pt;
+ _bounds.left = _bounds.right = pt.x;
+ _bounds.top = _bounds.bottom = pt.y;
+}
+
+void UICollection::hide() {
+ erase();
+ _visible = false;
+}
+
+void UICollection::show() {
+ _visible = true;
+ draw();
+}
+
+void UICollection::erase() {
+ if (_clearScreen) {
+ Rect tempRect(0, BF_INTERFACE_Y, SCREEN_WIDTH, SCREEN_HEIGHT);
+ GLOBALS._screenSurface.fillRect(tempRect, 0);
+ _clearScreen = false;
+ }
+}
+
+void UICollection::resetClear() {
+ _clearScreen = false;
+}
+
+void UICollection::draw() {
+ if (_visible) {
+ // Draw the elements
+ for (uint idx = 0; idx < _objList.size(); ++idx)
+ _objList[idx]->draw();
+
+ _clearScreen = 1;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+UIElements::UIElements(): UICollection() {
+ _cursorVisage.setVisage(1, 5);
+}
+
+void UIElements::process(Event &event) {
+ if (_clearScreen && BF_GLOBALS._player._enabled && (BF_GLOBALS._sceneManager._sceneNumber != 50)) {
+ if (_bounds.contains(event.mousePos)) {
+ // Cursor inside UI area
+ if (!_cursorChanged) {
+ if (BF_GLOBALS._events.isInventoryIcon()) {
+ // Inventory icon being displayed, so leave alone
+ } else {
+ // Change to the inventory use cursor
+ GfxSurface surface = _cursorVisage.getFrame(6);
+ BF_GLOBALS._events.setCursor(surface);
+ }
+ _cursorChanged = true;
+ }
+
+ // Pass event to any element that the cursor falls on
+ for (int idx = (int)_objList.size() - 1; idx >= 0; --idx) {
+ if (_objList[idx]->_bounds.contains(event.mousePos) && _objList[idx]->_enabled) {
+ _objList[idx]->process(event);
+ if (event.handled)
+ break;
+ }
+ }
+
+ if (event.eventType == EVENT_BUTTON_DOWN)
+ event.handled = true;
+
+ } else if (_cursorChanged) {
+ // Cursor outside UI area, so reset as necessary
+ BF_GLOBALS._events.setCursor(BF_GLOBALS._events.getCursor());
+ _cursorChanged = false;
+
+ SceneExt *scene = (SceneExt *)BF_GLOBALS._sceneManager._scene;
+ if (scene->_eventHandler) {
+ GfxSurface surface = _cursorVisage.getFrame(7);
+ BF_GLOBALS._events.setCursor(surface);
+ }
+ }
+ }
+}
+
+void UIElements::setup(const Common::Point &pt) {
+ _slotStart = 0;
+ _itemList.clear();
+ _scoreValue = 0;
+ _active = true;
+ UICollection::setup(pt);
+ hide();
+
+ _object1.setup(1, 3, 1, 0, 0, 255);
+ add(&_object1);
+
+ // Set up the inventory slots
+ int xp = 0;
+ for (int idx = 0; idx < 4; ++idx) {
+ UIElement *item = NULL;
+ switch (idx) {
+ case 0:
+ item = &_slot1;
+ break;
+ case 1:
+ item = &_slot2;
+ break;
+ case 2:
+ item = &_slot3;
+ break;
+ case 3:
+ item = &_slot4;
+ break;
+ }
+
+ xp = idx * 63 + 2;
+ item->setup(9, 1, idx, xp, 4, 255);
+ add(item);
+ }
+
+ // Setup bottom-right hand buttons
+ xp += 62;
+ _question.setup(1, 4, 7, xp, 16, 255);
+ _question.setEnabled(false);
+ add(&_question);
+
+ xp += 21;
+ _scrollLeft.setup(1, 4, 1, xp, 16, 255);
+ add(&_scrollLeft);
+ _scrollLeft._isLeft = true;
+
+ xp += 22;
+ _scrollRight.setup(1, 4, 4, xp, 16, 255);
+ add(&_scrollRight);
+ _scrollRight._isLeft = false;
+
+ // Set up the score
+ _score.postInit();
+ add(&_score);
+
+ // Set interface area
+ _bounds = Rect(0, BF_INTERFACE_Y - 1, SCREEN_WIDTH, SCREEN_HEIGHT);
+
+ updateInventory();
+}
+
+void UIElements::add(UIElement *obj) {
+ // Add object
+ assert(_objList.size() < 12);
+ _objList.push_back(obj);
+
+ obj->setPosition(Common::Point(_bounds.left + obj->_position.x, _bounds.top + obj->_position.y));
+ obj->reposition();
+
+ GfxSurface s = obj->getFrame();
+ s.draw(obj->_position);
+}
+
+/**
+ * Handles updating the visual inventory in the user interface
+ */
+void UIElements::updateInventory() {
+ _score.updateScore();
+ updateInvList();
+
+ // Enable scroll buttons if the player has more than four items
+ if (_itemList.size() > 4) {
+ _scrollLeft.setEnabled(true);
+ _scrollRight.setEnabled(true);
+ } else {
+ _scrollLeft.setEnabled(false);
+ _scrollRight.setEnabled(false);
+ }
+
+ // Handle cropping the slots start within inventory
+ int lastPage = (_itemList.size() - 1) / 4 + 1;
+ if (_slotStart < 0)
+ _slotStart = lastPage - 1;
+ else if (_slotStart > (lastPage - 1))
+ _slotStart = 0;
+
+ // Handle refreshing slot graphics
+ UIInventorySlot *slotList[4] = { &_slot1, &_slot2, &_slot3, &_slot4 };
+
+ // Loop through the inventory objects
+ SynchronizedList<InvObject *>::iterator i;
+ int objIndex = 0;
+ for (i = BF_INVENTORY._itemList.begin(); i != BF_INVENTORY._itemList.end(); ++i, ++objIndex) {
+ InvObject *obj = *i;
+
+ // Check whether the object is in any of the four inventory slots
+ for (int slotIndex = 0; slotIndex < 4; ++slotIndex) {
+ int idx = _slotStart * 4 + slotIndex;
+ int objectIdx = (idx < (int)_itemList.size()) ? _itemList[idx] : 0;
+
+ if (objectIdx == objIndex) {
+ UIInventorySlot *slot = slotList[slotIndex];
+
+ slot->_objIndex = objIndex;
+ slot->_object = obj;
+ slot->setVisage(obj->_visage);
+ slot->setStrip(obj->_strip);
+ slot->setFrame(obj->_frame);
+ }
+ }
+ }
+
+ // Refresh the display if necessary
+ if (_active)
+ draw();
+}
+
+/**
+ * Update the list of the indexes of items in the player's inventory
+ */
+void UIElements::updateInvList() {
+ // Update the index list of items in the player's inventory
+ _itemList.clear();
+
+ SynchronizedList<InvObject *>::iterator i;
+ int itemIndex = 0;
+ for (i = BF_GLOBALS._inventory->_itemList.begin(); i != BF_GLOBALS._inventory->_itemList.end(); ++i, ++itemIndex) {
+ InvObject *invObject = *i;
+ if (invObject->inInventory())
+ _itemList.push_back(itemIndex);
+ }
+}
+
+/**
+ * Set the game score
+ */
+void UIElements::addScore(int amount) {
+ _scoreValue += amount;
+ BF_GLOBALS._sound2.play(0);
+ updateInventory();
+}
+
+/*
+ * Scroll the inventory slots
+ */
+void UIElements::scrollInventory(bool isLeft) {
+ if (isLeft)
+ --_slotStart;
+ else
+ ++_slotStart;
+
+ updateInventory();
+}
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/blue_force/blueforce_ui.h b/engines/tsage/blue_force/blueforce_ui.h
new file mode 100644
index 0000000000..927e667cff
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_ui.h
@@ -0,0 +1,152 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef TSAGE_BLUEFORCE_UI_H
+#define TSAGE_BLUEFORCE_UI_H
+
+#include "common/scummsys.h"
+#include "tsage/core.h"
+#include "tsage/graphics.h"
+#include "tsage/sound.h"
+
+namespace TsAGE {
+
+namespace BlueForce {
+
+using namespace TsAGE;
+
+class StripProxy: public EventHandler {
+public:
+ virtual void process(Event &event);
+};
+
+class UIElement: public AltSceneObject {
+public:
+ int _field88;
+ bool _enabled;
+ int _frameNum;
+
+ virtual Common::String getClassName() { return "UIElement"; }
+ virtual void synchronize(Serializer &s);
+
+ void setup(int visage, int stripNum, int frameNum, int posX, int posY, int priority);
+ void setEnabled(bool flag);
+};
+
+// This class implements the Question mark button
+class UIQuestion: public UIElement {
+private:
+ void showDescription(CursorType item);
+ void showItem(int resNum, int rlbNum, int frameNum);
+public:
+ virtual void process(Event &event);
+ void setEnabled(bool flag);
+};
+
+// This class implements the score counter
+class UIScore: public UIElement {
+private:
+ void showDescription(int lineNum);
+public:
+ UIElement _digit3, _digit2, _digit1, _digit0;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void draw();
+
+ void updateScore();
+};
+
+class UIInventorySlot: public UIElement {
+private:
+ void showAmmoBelt();
+public:
+ int _objIndex;
+ InvObject *_object;
+
+ UIInventorySlot();
+ virtual Common::String getClassName() { return "UIInventorySlot"; }
+ virtual void synchronize(Serializer &s);
+ virtual void process(Event &event);
+};
+
+class UIInventoryScroll: public UIElement {
+private:
+ void toggle(bool pressed);
+public:
+ bool _isLeft;
+
+ UIInventoryScroll();
+ virtual Common::String getClassName() { return "UIInventoryScroll"; }
+ virtual void synchronize(Serializer &s);
+ virtual void process(Event &event);
+};
+
+class UICollection: public EventHandler {
+protected:
+ void erase();
+public:
+ Common::Point _position;
+ Rect _bounds;
+ bool _visible;
+ bool _clearScreen;
+ bool _cursorChanged;
+ Common::Array<UIElement *> _objList;
+
+ UICollection();
+ void setup(const Common::Point &pt);
+ void hide();
+ void show();
+ void resetClear();
+ void draw();
+};
+
+class UIElements: public UICollection {
+private:
+ void add(UIElement *obj);
+ void updateInvList();
+public:
+ UIElement _object1;
+ UIQuestion _question;
+ UIScore _score;
+ UIInventorySlot _slot1, _slot2, _slot3, _slot4;
+ UIInventoryScroll _scrollLeft, _scrollRight;
+ ASound _sound;
+ int _slotStart, _scoreValue;
+ bool _active;
+ Common::Array<int> _itemList;
+ Visage _cursorVisage;
+
+ UIElements();
+ virtual void postInit(SceneObjectList *OwnerList = NULL) { error("Wrong init() called"); }
+ virtual void process(Event &event);
+
+ void setup(const Common::Point &pt);
+ void updateInventory();
+ void addScore(int amount);
+ void scrollInventory(bool isLeft);
+};
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
+
+#endif
diff --git a/engines/tsage/converse.cpp b/engines/tsage/converse.cpp
index 615b1c36fd..32a4861036 100644
--- a/engines/tsage/converse.cpp
+++ b/engines/tsage/converse.cpp
@@ -40,6 +40,7 @@ SequenceManager::SequenceManager() : Action() {
_field26 = 0;
_objectIndex = 0;
_keepActive = false;
+ _onCallback = NULL;
setup();
}
@@ -287,7 +288,7 @@ void SequenceManager::signal() {
/* Following indexes were introduced for Blue Force */
case 35:
v1 = getNextValue();
- _sceneObject->updateAngle(_objectList[v1]);
+ _sceneObject->updateAngle(_objectList[v1]->_position);
break;
case 36:
_sceneObject->animate(ANIM_MODE_9, NULL);
@@ -295,7 +296,8 @@ void SequenceManager::signal() {
case 37:
v1 = getNextValue();
v2 = getNextValue();
- warning("TODO: dword_53030(%d,%d)", v1, v2);
+ if (_onCallback)
+ _onCallback(v1, v2);
break;
case 38: {
int resNum = getNextValue();
@@ -558,6 +560,8 @@ void Obj44::synchronize(Serializer &s) {
StripManager::StripManager() {
_callbackObject = NULL;
_activeSpeaker = NULL;
+ _onBegin = NULL;
+ _onEnd = NULL;
reset();
}
@@ -565,6 +569,8 @@ StripManager::~StripManager() {
}
void StripManager::start(int stripNum, EventHandler *owner, StripCallback *callback) {
+ if (_onBegin)
+ _onBegin();
reset();
_stripNum = stripNum;
@@ -678,6 +684,9 @@ void StripManager::remove() {
_globals->_sceneManager._scene->loadScene(_sceneNumber);
}
+ if (_onEnd)
+ _onEnd();
+
Action::remove();
}
diff --git a/engines/tsage/converse.h b/engines/tsage/converse.h
index e263a12d12..f82c07a7dd 100644
--- a/engines/tsage/converse.h
+++ b/engines/tsage/converse.h
@@ -34,6 +34,8 @@ public:
virtual void stripCallback(int v) = 0;
};
+typedef void (*SequenceCallback)(int v1, int v2);
+
class SequenceManager : public Action {
private:
void setup();
@@ -54,6 +56,7 @@ public:
SceneObject *_sceneObject;
SceneObject *_objectList[6];
ASound _soundHandler;
+ SequenceCallback _onCallback;
public:
SequenceManager();
@@ -187,6 +190,8 @@ public:
virtual void synchronize(Serializer &s);
};
+typedef void (*StripProc)();
+
class StripManager : public Action {
private:
void reset();
@@ -208,6 +213,8 @@ public:
int _field2E8;
Common::Array<Obj44> _obj44List;
Common::Array<byte> _script;
+ StripProc _onBegin;
+ StripProc _onEnd;
public:
StripManager();
virtual ~StripManager();
diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp
index 42cb1d039f..0de400fe5d 100644
--- a/engines/tsage/core.cpp
+++ b/engines/tsage/core.cpp
@@ -22,6 +22,7 @@
#include "common/system.h"
#include "common/config-manager.h"
+#include "common/util.h"
#include "engines/engine.h"
#include "graphics/palette.h"
#include "tsage/tsage.h"
@@ -55,14 +56,30 @@ InvObject::InvObject(int sceneNumber, int rlbNum, int cursorNum, CursorType curs
DEALLOCATE(imgData);
}
+InvObject::InvObject(int visage, int strip, int frame) {
+ assert(_vm->getGameID() == GType_BlueForce);
+ _visage = visage;
+ _strip = strip;
+ _frame = frame;
+ _sceneNumber = 0;
+ _iconResNum = 10;
+}
+
void InvObject::setCursor() {
- _globals->_events._currentCursor = _cursorId;
+ if (_vm->getGameID() == GType_BlueForce) {
+ // Blue Force cursor handling
+ _cursorId = (CursorType)BF_GLOBALS._inventory->indexOf(this);
+ _globals->_events.setCursor(_cursorId);
+ } else {
+ // Ringworld cursor handling
+ _globals->_events._currentCursor = _cursorId;
- if (_iconResNum != -1) {
- GfxSurface s = surfaceFromRes(_iconResNum, _rlbNum, _cursorNum);
+ if (_iconResNum != -1) {
+ GfxSurface s = surfaceFromRes(_iconResNum, _rlbNum, _cursorNum);
- Graphics::Surface src = s.lockSurface();
- _globals->_events.setCursor(src, s._transColor, s._centroid, _cursorId);
+ Graphics::Surface src = s.lockSurface();
+ _globals->_events.setCursor(src, s._transColor, s._centroid, _cursorId);
+ }
}
}
@@ -77,6 +94,31 @@ void InvObjectList::synchronize(Serializer &s) {
SYNC_POINTER(_selectedItem);
}
+int InvObjectList::indexOf(InvObject *obj) const {
+ int idx = 0;
+ SynchronizedList<InvObject *>::const_iterator i;
+
+ for (i = _itemList.begin(); i != _itemList.end(); ++i, ++idx) {
+ if ((*i) == obj)
+ return idx;
+ }
+
+ return -1;
+}
+
+InvObject *InvObjectList::getItem(int objectNum) {
+ SynchronizedList<InvObject *>::const_iterator i = _itemList.begin();
+ while (objectNum-- > 0)
+ ++i;
+
+ return *i;
+}
+
+int InvObjectList::getObjectScene(int objectNum) {
+ InvObject *obj = getItem(objectNum);
+ return obj->_sceneNumber;
+}
+
/*--------------------------------------------------------------------------*/
void EventHandler::dispatch() {
@@ -279,8 +321,12 @@ void ObjectMover::dispatch() {
void ObjectMover::setup(const Common::Point &destPos) {
_sceneObject->calcAngle(destPos);
- if ((_sceneObject->_objectWrapper) && !(_sceneObject->_flags & OBJFLAG_SUPPRESS_DISPATCH))
- _sceneObject->_objectWrapper->dispatch();
+ if ((_sceneObject->_objectWrapper) && !(_sceneObject->_flags & OBJFLAG_SUPPRESS_DISPATCH)) {
+ if (_vm->getGameID() == GType_Ringworld)
+ _sceneObject->_objectWrapper->dispatch();
+ else
+ _sceneObject->updateAngle(destPos);
+ }
// Get the difference
int diffX = destPos.x - _sceneObject->_position.x;
@@ -1238,6 +1284,15 @@ void ScenePalette::setPalette(int index, int count) {
}
/**
+ * Set a palette entry
+ */
+void ScenePalette::setEntry(int index, uint r, uint g, uint b) {
+ _palette[index * 3] = r;
+ _palette[index * 3 + 1] = g;
+ _palette[index * 3 + 2] = b;
+}
+
+/**
* Returns the palette index with the closest matching color to that specified
* @param r R component
* @param g G component
@@ -1412,6 +1467,19 @@ void SceneItem::remove() {
_globals->_sceneItems.remove(this);
}
+bool SceneItem::startAction(CursorType action, Event &event) {
+ if (_vm->getGameID() == GType_Ringworld) {
+ doAction(action);
+ return true;
+ } else if ((action == CURSOR_LOOK) || (action == CURSOR_USE) || (action == CURSOR_TALK) ||
+ (action < CURSOR_LOOK)) {
+ doAction(action);
+ return true;
+ } else {
+ return false;
+ }
+}
+
void SceneItem::doAction(int action) {
const char *msg = NULL;
@@ -1447,7 +1515,11 @@ bool SceneItem::contains(const Common::Point &pt) {
}
void SceneItem::display(int resNum, int lineNum, ...) {
- Common::String msg = !resNum ? Common::String() : _resourceManager->getMessage(resNum, lineNum);
+ Common::String msg = (!resNum || (resNum == -1)) ? Common::String() :
+ _resourceManager->getMessage(resNum, lineNum);
+
+ if ((_vm->getGameID() == GType_BlueForce) && BF_GLOBALS._uiElements._active)
+ BF_GLOBALS._uiElements.hide();
if (_globals->_sceneObjects->contains(&_globals->_sceneText)) {
_globals->_sceneText.remove();
@@ -1459,12 +1531,15 @@ void SceneItem::display(int resNum, int lineNum, ...) {
Rect textRect;
int maxWidth = 120;
bool keepOnscreen = false;
- bool centerText = true;
+ bool centerText = _vm->getGameID() == GType_Ringworld;
- if (resNum) {
+ if (resNum != 0) {
va_list va;
va_start(va, lineNum);
+ if (resNum == -1)
+ msg = Common::String(va_arg(va, const char *));
+
int mode;
do {
// Get next instruction
@@ -1574,6 +1649,36 @@ void SceneItem::display(int resNum, int lineNum, ...) {
_globals->_sceneText.remove();
}
+
+ if ((_vm->getGameID() == GType_BlueForce) && BF_GLOBALS._uiElements._active) {
+ // Show user interface
+ BF_GLOBALS._uiElements.show();
+
+ // Re-show the cursor
+ BF_GLOBALS._events.setCursor(BF_GLOBALS._events.getCursor());
+ }
+}
+
+void SceneItem::display2(int resNum, int lineNum) {
+ if (_vm->getGameID() == GType_BlueForce)
+ display(resNum, lineNum, SET_WIDTH, 312,
+ SET_X, 4 + GLOBALS._sceneManager._scene->_sceneBounds.left,
+ SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_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
+ display(resNum, lineNum, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
+}
+
+void SceneItem::display(const Common::String &msg) {
+ assert(_vm->getGameID() == GType_BlueForce);
+
+ display(-1, -1, msg.c_str(),
+ SET_WIDTH, 312,
+ SET_X, 4 + GLOBALS._sceneManager._scene->_sceneBounds.left,
+ SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2,
+ SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
+ SET_EXT_FGCOLOR, 13, LIST_END);
}
/*--------------------------------------------------------------------------*/
@@ -1581,24 +1686,41 @@ void SceneItem::display(int resNum, int lineNum, ...) {
void SceneHotspot::doAction(int action) {
switch ((int)action) {
case CURSOR_LOOK:
- display(1, 0, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
+ if (_vm->getGameID() == GType_BlueForce)
+ SceneItem::display(LOOK_SCENE_HOTSPOT);
+ else
+ display(1, 0, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
break;
case CURSOR_USE:
- display(1, 5, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
+ if (_vm->getGameID() == GType_BlueForce)
+ SceneItem::display(USE_SCENE_HOTSPOT);
+ else
+ display(1, 5, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
break;
case CURSOR_TALK:
- display(1, 15, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
+ if (_vm->getGameID() == GType_BlueForce)
+ SceneItem::display(TALK_SCENE_HOTSPOT);
+ else
+ display(1, 15, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
break;
case CURSOR_WALK:
break;
default:
- display(2, action, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
+ if (_vm->getGameID() == GType_BlueForce)
+ SceneItem::display(DEFAULT_SCENE_HOTSPOT);
+ else
+ display(2, action, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
break;
}
}
/*--------------------------------------------------------------------------*/
+NamedHotspot::NamedHotspot() : SceneHotspot() {
+ _resNum = 0;
+ _lookLineNum = _useLineNum = _talkLineNum = -1;
+}
+
void NamedHotspot::doAction(int action) {
switch (action) {
case CURSOR_WALK:
@@ -1607,14 +1729,26 @@ void NamedHotspot::doAction(int action) {
case CURSOR_LOOK:
if (_lookLineNum == -1)
SceneHotspot::doAction(action);
+ else if (_vm->getGameID() == GType_BlueForce)
+ SceneItem::display2(_resNum, _lookLineNum);
else
- SceneItem::display(_resnum, _lookLineNum, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
+ SceneItem::display(_resNum, _lookLineNum, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
break;
case CURSOR_USE:
if (_useLineNum == -1)
SceneHotspot::doAction(action);
+ else if (_vm->getGameID() == GType_BlueForce)
+ SceneItem::display2(_resNum, _useLineNum);
+ else
+ SceneItem::display(_resNum, _useLineNum, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
+ break;
+ case CURSOR_TALK:
+ if (_talkLineNum == -1)
+ SceneHotspot::doAction(action);
+ else if (_vm->getGameID() == GType_BlueForce)
+ SceneItem::display2(_resNum, _talkLineNum);
else
- SceneItem::display(_resnum, _useLineNum, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
+ SceneItem::display2(_resNum, _talkLineNum);
break;
default:
SceneHotspot::doAction(action);
@@ -1622,19 +1756,66 @@ void NamedHotspot::doAction(int action) {
}
}
-void NamedHotspot::setup(int ys, int xs, int ye, int xe, const int resnum, const int lookLineNum, const int useLineNum) {
+void NamedHotspot::setDetails(int ys, int xs, int ye, int xe, const int resnum, const int lookLineNum, const int useLineNum) {
setBounds(ys, xe, ye, xs);
- _resnum = resnum;
+ _resNum = resnum;
_lookLineNum = lookLineNum;
_useLineNum = useLineNum;
+ _talkLineNum = -1;
_globals->_sceneItems.addItems(this, NULL);
}
+void NamedHotspot::setDetails(const Rect &bounds, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item) {
+ setBounds(bounds);
+ _resNum = resNum;
+ _lookLineNum = lookLineNum;
+ _talkLineNum = talkLineNum;
+ _useLineNum = useLineNum;
+
+ switch (mode) {
+ case 2:
+ _globals->_sceneItems.push_front(this);
+ break;
+ case 4:
+ _globals->_sceneItems.addBefore(item, this);
+ break;
+ case 5:
+ _globals->_sceneItems.addAfter(item, this);
+ break;
+ default:
+ _globals->_sceneItems.push_back(this);
+ break;
+ }
+}
+
+void NamedHotspot::setDetails(int sceneRegionId, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode) {
+ _sceneRegionId = sceneRegionId;
+ _resNum = resNum;
+ _lookLineNum = lookLineNum;
+ _talkLineNum = talkLineNum;
+ _useLineNum = useLineNum;
+
+ // Handle adding hotspot to scene items list as necessary
+ switch (mode) {
+ case 2:
+ GLOBALS._sceneItems.push_front(this);
+ break;
+ case 3:
+ break;
+ default:
+ GLOBALS._sceneItems.push_back(this);
+ break;
+ }
+}
+
void NamedHotspot::synchronize(Serializer &s) {
SceneHotspot::synchronize(s);
- s.syncAsSint16LE(_resnum);
+ s.syncAsSint16LE(_resNum);
s.syncAsSint16LE(_lookLineNum);
s.syncAsSint16LE(_useLineNum);
+
+ if (_vm->getGameID() == GType_BlueForce)
+ s.syncAsSint16LE(_talkLineNum);
}
/*--------------------------------------------------------------------------*/
@@ -1661,11 +1842,11 @@ void SceneObjectWrapper::dispatch() {
void SceneObjectWrapper::check() {
_visageImages.setVisage(_sceneObject->_visage);
- int frameCount = _visageImages.getFrameCount();
+ int visageCount = _visageImages.getFrameCount();
int angle = _sceneObject->_angle;
int strip = _sceneObject->_strip;
- if (frameCount == 4) {
+ if (visageCount == 4) {
if ((angle > 314) || (angle < 45))
strip = 4;
if ((angle > 44) && (angle < 135))
@@ -1674,7 +1855,7 @@ void SceneObjectWrapper::check() {
strip = 3;
if ((angle >= 225) && (angle < 315))
strip = 2;
- } else if (frameCount == 8) {
+ } else if (visageCount == 8) {
if ((angle > 330) || (angle < 30))
strip = 4;
if ((angle >= 30) && (angle < 70))
@@ -1693,8 +1874,8 @@ void SceneObjectWrapper::check() {
strip = 8;
}
- if (strip > frameCount)
- strip = frameCount;
+ if (strip > visageCount)
+ strip = visageCount;
_sceneObject->setStrip(strip);
}
@@ -1722,6 +1903,8 @@ SceneObject::SceneObject() : SceneHotspot() {
_frameChange = 0;
_visage = 0;
+ _strip = 0;
+ _frame = 0;
}
SceneObject::SceneObject(const SceneObject &so) : SceneHotspot() {
@@ -2008,6 +2191,7 @@ void SceneObject::animate(AnimateMode animMode, ...) {
break;
case ANIM_MODE_8:
+ case ANIM_MODE_9:
_field68 = va_arg(va, int);
_endAction = va_arg(va, Action *);
_frameChange = 1;
@@ -2024,9 +2208,16 @@ SceneObject *SceneObject::clone() const {
}
void SceneObject::checkAngle(const SceneObject *obj) {
- _angle = GfxManager::getAngle(_position, obj->_position);
+ checkAngle(obj->_position);
+}
- if (_objectWrapper)
+void SceneObject::checkAngle(const Common::Point &pt) {
+ int angleAmount = GfxManager::getAngle(_position, pt);
+ if ((_vm->getGameID() == GType_Ringworld) ||
+ ((angleAmount != -1) && (_animateMode == ANIM_MODE_9)))
+ _angle = angleAmount;
+
+ if (_objectWrapper && (_vm->getGameID() == GType_Ringworld))
_objectWrapper->dispatch();
}
@@ -2194,7 +2385,25 @@ void SceneObject::dispatch() {
} else {
setFrame(changeFrame());
}
+ break;
+
+ case ANIM_MODE_9:
+ if (_frame == _endFrame) {
+ if (_frameChange != -1) {
+ _frameChange = -1;
+ _strip = ((_strip - 1) ^ 1) + 1;
+ _endFrame = 1;
+ } else if ((_field68 == 0) || (--_field68 != 0)) {
+ _frameChange = 1;
+ _endFrame = getFrameCount();
+ setFrame(changeFrame());
+ } else {
+ animEnded();
+ }
+ } else {
+ setFrame(changeFrame());
+ }
break;
default:
@@ -2222,10 +2431,6 @@ void SceneObject::removeObject() {
_globals->_sceneItems.remove(this);
_globals->_sceneObjects->remove(this);
- if (_visage) {
- _visage = 0;
- }
-
if (_objectWrapper) {
_objectWrapper->remove();
_objectWrapper = NULL;
@@ -2283,8 +2488,8 @@ void SceneObject::updateScreen() {
}
}
-void SceneObject::updateAngle(SceneObject *sceneObj) {
- checkAngle(sceneObj);
+void SceneObject::updateAngle(const Common::Point &pt) {
+ checkAngle(pt);
if (_objectWrapper)
_objectWrapper->check();
}
@@ -2306,18 +2511,17 @@ void SceneObject::setup(int visage, int stripFrameNum, int frameNum, int posX, i
/*--------------------------------------------------------------------------*/
-void SceneObjectExt2::postInit(SceneObjectList *OwnerList) {
- _v8A = -1;
- _v8C = -1;
- _v8E = -1;
- SceneObject::postInit();
+void AltSceneObject::postInit(SceneObjectList *OwnerList) {
+ SceneObject::postInit(&_globals->_sceneManager._altSceneObjects);
}
-void SceneObjectExt2::synchronize(Serializer &s) {
- SceneObject::synchronize(s);
- s.syncAsSint16LE(_v8A);
- s.syncAsSint16LE(_v8C);
- s.syncAsSint16LE(_v8E);
+void AltSceneObject::draw() {
+ Rect destRect = _bounds;
+ destRect.translate(-_globals->_sceneManager._scene->_sceneBounds.left,
+ -_globals->_sceneManager._scene->_sceneBounds.top);
+ Region *priorityRegion = _globals->_sceneManager._scene->_priorities.find(_priority);
+ GfxSurface frame = getFrame();
+ _globals->_gfxManagerInstance.copyFrom(frame, destRect, priorityRegion);
}
/*--------------------------------------------------------------------------*/
@@ -2630,12 +2834,21 @@ void SceneText::synchronize(Serializer &s) {
_textSurface.synchronize(s);
}
+void SceneText::updateScreen() {
+ // FIXME: Hack for Blue Force to handle not refreshing the screen if the user interface
+ // has been re-activated after showing some scene text
+ if ((_vm->getGameID() != GType_BlueForce) || (_bounds.top < BF_INTERFACE_Y) ||
+ !BF_GLOBALS._uiElements._visible)
+ SceneObject::updateScreen();
+}
+
/*--------------------------------------------------------------------------*/
Visage::Visage() {
- _resNum = 0;
- _rlbNum = 0;
+ _resNum = -1;
+ _rlbNum = -1;
_data = NULL;
+ _flipHoriz = false;
}
Visage::Visage(const Visage &v) {
@@ -2661,7 +2874,32 @@ void Visage::setVisage(int resNum, int rlbNum) {
_resNum = resNum;
_rlbNum = rlbNum;
DEALLOCATE(_data);
- _data = _resourceManager->getResource(RES_VISAGE, resNum, rlbNum);
+
+ if (_vm->getGameID() == GType_Ringworld) {
+ // In Ringworld, we immediately get the data
+ _data = _resourceManager->getResource(RES_VISAGE, resNum, rlbNum);
+ } else {
+ // Blue Force has an extra indirection via the visage index file
+ byte *indexData = _resourceManager->getResource(RES_VISAGE, resNum, 9999);
+ if (rlbNum == 9999) {
+ _data = indexData;
+ } else {
+ if (rlbNum == 0)
+ rlbNum = 1;
+
+ // Get the flags/rlbNum to use
+ uint32 v = READ_LE_UINT32(indexData + (rlbNum - 1) * 4 + 2);
+ int flags = v >> 30;
+
+ if (flags & 3) {
+ rlbNum = (int)(v & 0xff);
+ }
+ _flipHoriz = flags & 1;
+
+ _data = _resourceManager->getResource(RES_VISAGE, resNum, rlbNum);
+ }
+ }
+
assert(_data);
}
}
@@ -2680,13 +2918,28 @@ GfxSurface Visage::getFrame(int frameNum) {
int offset = READ_LE_UINT32(_data + 2 + frameNum * 4);
byte *frameData = _data + offset;
- return surfaceFromRes(frameData);
+ GfxSurface result = surfaceFromRes(frameData);
+ if (_flipHoriz) flip(result);
+ return result;
}
int Visage::getFrameCount() const {
return READ_LE_UINT16(_data);
}
+void Visage::flip(GfxSurface &gfxSurface) {
+ Graphics::Surface s = gfxSurface.lockSurface();
+
+ for (int y = 0; y < s.h; ++y) {
+ // Flip the line
+ byte *lineP = (byte *)s.getBasePtr(0, y);
+ for (int x = 0; x < (s.w / 2); ++x)
+ SWAP(lineP[x], lineP[s.w - x - 1]);
+ }
+
+ gfxSurface.unlockSurface();
+}
+
/*--------------------------------------------------------------------------*/
Player::Player(): SceneObject() {
@@ -2710,11 +2963,16 @@ void Player::disableControl() {
_canWalk = false;
_uiEnabled = false;
_globals->_events.setCursor(CURSOR_NONE);
+ _enabled = false;
+
+ if ((_vm->getGameID() == GType_BlueForce) && BF_GLOBALS._uiElements._active)
+ BF_GLOBALS._uiElements.hide();
}
void Player::enableControl() {
_canWalk = true;
_uiEnabled = true;
+ _enabled = true;
_globals->_events.setCursor(CURSOR_WALK);
switch (_globals->_events.getCursor()) {
@@ -2728,6 +2986,9 @@ void Player::enableControl() {
_globals->_events.setCursor(CURSOR_WALK);
break;
}
+
+ if ((_vm->getGameID() == GType_BlueForce) && BF_GLOBALS._uiElements._active)
+ BF_GLOBALS._uiElements.show();
}
void Player::process(Event &event) {
@@ -2735,6 +2996,9 @@ void Player::process(Event &event) {
(_globals->_events.getCursor() == CURSOR_WALK) && _globals->_player._canWalk &&
(_position != event.mousePos) && _globals->_sceneObjects->contains(this)) {
+ if ((_vm->getGameID() == GType_BlueForce) && !BF_GLOBALS._player._enabled)
+ return;
+
PlayerMover *newMover = new PlayerMover();
Common::Point destPos(event.mousePos.x + _globals->_sceneManager._scene->_sceneBounds.left,
event.mousePos.y + _globals->_sceneManager._scene->_sceneBounds.top);
@@ -2750,6 +3014,9 @@ void Player::synchronize(Serializer &s) {
s.syncAsByte(_canWalk);
s.syncAsByte(_uiEnabled);
s.syncAsSint16LE(_field8C);
+
+ if (_vm->getGameID() == GType_BlueForce)
+ s.syncAsByte(_enabled);
}
/*--------------------------------------------------------------------------*/
@@ -3394,8 +3661,11 @@ void ScenePriorities::load(int resNum) {
Region *ScenePriorities::find(int priority) {
// If no priority regions are loaded, then return the placeholder region
- if (empty())
- return &_defaultPriorityRegion;
+ if (empty()) {
+ if (_vm->getGameID() == GType_Ringworld)
+ return &_defaultPriorityRegion;
+ return NULL;
+ }
if (priority > 255)
priority = 255;
@@ -3511,9 +3781,7 @@ void SceneHandler::process(Event &event) {
// Check for displaying right-click dialog
if ((event.eventType == EVENT_BUTTON_DOWN) && (event.btnState == BTNSHIFT_RIGHT) &&
_globals->_player._uiEnabled) {
- RightClickDialog *dlg = new RightClickDialog();
- dlg->execute();
- delete dlg;
+ _globals->_game->rightClick();
event.handled = true;
return;
@@ -3541,8 +3809,16 @@ void SceneHandler::process(Event &event) {
}
// Mouse press handling
- if (_globals->_player._uiEnabled && (event.eventType == EVENT_BUTTON_DOWN) &&
- !_globals->_sceneItems.empty()) {
+ bool enabled = (_vm->getGameID() == GType_BlueForce) ? _globals->_player._enabled :
+ _globals->_player._uiEnabled;
+ if (enabled && (event.eventType == EVENT_BUTTON_DOWN) && !_globals->_sceneItems.empty()) {
+ // Check if the mouse is on the player
+ if (_globals->_player.contains(event.mousePos)) {
+ playerAction(event);
+ if (event.handled)
+ return;
+ }
+
// Scan the item list to find one the mouse is within
SynchronizedList<SceneItem *>::iterator i = _globals->_sceneItems.begin();
while ((i != _globals->_sceneItems.end()) && !(*i)->contains(event.mousePos))
@@ -3550,7 +3826,8 @@ void SceneHandler::process(Event &event) {
if (i != _globals->_sceneItems.end()) {
// Pass the action to the item
- (*i)->doAction(_globals->_events.getCursor());
+ (*i)->startAction(_globals->_events.getCursor(), event);
+
event.handled = _globals->_events.getCursor() != CURSOR_WALK;
if (_globals->_player._uiEnabled && _globals->_player._canWalk &&
@@ -3561,8 +3838,14 @@ void SceneHandler::process(Event &event) {
} else if (_globals->_player._uiEnabled && (_globals->_events.getCursor() != CURSOR_LOOK)) {
_globals->_events.setCursor(CURSOR_USE);
}
+
+ if (_vm->getGameID() == GType_BlueForce)
+ event.handled = true;
}
+ // Handle any fallback text display
+ processEnd(event);
+
// Handle player processing
_globals->_player.process(event);
}
diff --git a/engines/tsage/core.h b/engines/tsage/core.h
index 19987ed399..ccb3817b16 100644
--- a/engines/tsage/core.h
+++ b/engines/tsage/core.h
@@ -55,8 +55,13 @@ public:
CursorType _cursorId;
Common::String _description;
int _iconResNum;
+
+ int _visage;
+ int _strip;
+ int _frame;
public:
InvObject(int sceneNumber, int rlbNum, int cursorNum, CursorType cursorId, const Common::String description);
+ InvObject(int visage, int strip, int frame);
bool inInventory() const { return _sceneNumber == 1; }
void setCursor();
@@ -73,6 +78,9 @@ public:
InvObject *_selectedItem;
InvObjectList();
+ int indexOf(InvObject *obj) const;
+ InvObject *getItem(int objectNum);
+ int getObjectScene(int objectNum);
virtual Common::String getClassName() { return "InvObjectList"; }
virtual void synchronize(Serializer &s);
@@ -157,6 +165,18 @@ public:
int _state;
};
+#define ADD_PLAYER_MOVER(X, Y) { Common::Point pt(X, Y); PlayerMover *mover = new PlayerMover(); \
+ _globals->_player.addMover(mover, &pt, this); }
+#define ADD_PLAYER_MOVER_NULL(OBJ, X, Y) { Common::Point pt(X, Y); PlayerMover *mover = new PlayerMover(); \
+ OBJ.addMover(mover, &pt, NULL); }
+#define ADD_PLAYER_MOVER_THIS(OBJ, X, Y) { Common::Point pt(X, Y); PlayerMover *mover = new PlayerMover(); \
+ OBJ.addMover(mover, &pt, this); }
+
+#define ADD_MOVER(OBJ, X, Y) { Common::Point pt(X, Y); NpcMover *mover = new NpcMover(); \
+ OBJ.addMover(mover, &pt, this); }
+#define ADD_MOVER_NULL(OBJ, X, Y) { Common::Point pt(X, Y); NpcMover *mover = new NpcMover(); \
+ OBJ.addMover(mover, &pt, NULL); }
+
class ObjectMover : public EventHandler {
public:
Common::Point _destPosition;
@@ -351,6 +371,7 @@ public:
bool loadPalette(int paletteNum);
void refresh();
void setPalette(int index, int count);
+ void setEntry(int index, uint r, uint g, uint b);
uint8 indexOf(uint r, uint g, uint b, int threshold = 0xffff);
void getPalette(int start = 0, int count = 256);
void signalListeners();
@@ -394,16 +415,15 @@ public:
virtual Common::String getClassName() { return "SceneItem"; }
virtual void remove();
virtual void destroy() {}
- virtual void startMover(CursorType action) { doAction(action); }
+ virtual bool startAction(CursorType action, Event &event);
virtual void doAction(int action);
bool contains(const Common::Point &pt);
void setBounds(const Rect &newBounds) { _bounds = newBounds; }
void setBounds(const int ys, const int xe, const int ye, const int xs) { _bounds = Rect(MIN(xs, xe), MIN(ys, ye), MAX(xs, xe), MAX(ys, ye)); }
static void display(int resNum, int lineNum, ...);
- static void display2(int resNum, int lineNum) {
- display(resNum, lineNum, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
- }
+ static void display2(int resNum, int lineNum);
+ static void display(const Common::String &msg);
};
class SceneItemExt : public SceneItem {
@@ -427,13 +447,15 @@ public:
class NamedHotspot : public SceneHotspot {
public:
- int _resnum, _lookLineNum, _useLineNum;
- NamedHotspot() : SceneHotspot() {}
+ int _resNum, _lookLineNum, _useLineNum, _talkLineNum;
+ NamedHotspot();
- void setup(int ys, int xs, int ye, int xe, const int resnum, const int lookLineNum, const int useLineNum);
virtual void doAction(int action);
virtual Common::String getClassName() { return "NamedHotspot"; }
virtual void synchronize(Serializer &s);
+ virtual void setDetails(int ys, int xs, int ye, int xe, const int resnum, const int lookLineNum, const int useLineNum);
+ virtual void setDetails(const Rect &bounds, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item);
+ virtual void setDetails(int sceneRegionId, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode);
};
enum AnimateMode {ANIM_MODE_NONE = 0, ANIM_MODE_1 = 1, ANIM_MODE_2 = 2, ANIM_MODE_3 = 3,
@@ -447,9 +469,12 @@ class SceneObject;
class Visage {
private:
byte *_data;
+
+ void flip(GfxSurface &s);
public:
int _resNum;
int _rlbNum;
+ bool _flipHoriz;
public:
Visage();
Visage(const Visage &v);
@@ -458,7 +483,7 @@ public:
void setVisage(int resNum, int rlbNum = 9999);
GfxSurface getFrame(int frameNum);
int getFrameCount() const;
- Visage &operator=(const Visage &s);
+ Visage &operator=(const Visage &gfxSurface);
};
class SceneObjectWrapper : public EventHandler {
@@ -542,6 +567,7 @@ public:
void animate(AnimateMode animMode, ...);
SceneObject *clone() const;
void checkAngle(const SceneObject *obj);
+ void checkAngle(const Common::Point &pt);
void hide();
void show();
int getSpliceArea(const SceneObject *obj);
@@ -560,34 +586,20 @@ public:
virtual void draw();
virtual void proc19() {}
virtual void updateScreen();
- // New methods introduced by Blue FOrce
- virtual void updateAngle(SceneObject *sceneObj);
+ // New methods introduced by Blue Force
+ virtual void updateAngle(const Common::Point &pt);
virtual void changeAngle(int angle);
void setup(int visage, int stripFrameNum, int frameNum, int posX, int posY, int priority);
};
-class SceneObjectExt : public SceneObject {
-public:
- int _state;
-
- virtual void synchronize(Serializer &s) {
- SceneObject::synchronize(s);
- s.syncAsSint16LE(_state);
- }
- virtual Common::String getClassName() { return "SceneObjectExt"; }
-};
-
-class SceneObjectExt2: public SceneObject {
+class AltSceneObject: public SceneObject {
public:
- int _v88, _v8A, _v8C, _v8E;
-
- virtual Common::String getClassName() { return "BF100Object"; }
- virtual void synchronize(Serializer &s);
+ virtual Common::String getClassName() { return "AltObjectExt"; }
virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void draw();
};
-
class SceneText : public SceneObject {
public:
int _fontNumber;
@@ -606,6 +618,7 @@ public:
virtual void synchronize(Serializer &s);
virtual Common::String getClassName() { return "SceneText"; }
virtual GfxSurface getFrame() { return _textSurface; }
+ virtual void updateScreen();
};
class Player : public SceneObject {
@@ -613,6 +626,7 @@ public:
bool _canWalk;
bool _uiEnabled;
int _field8C;
+ bool _enabled;
public:
Player();
@@ -721,6 +735,7 @@ public:
_objList.remove(sceneObj);
_listAltered = true;
}
+ void clear() { _objList.clear(); }
};
class ScenePriorities : public Common::List<Region> {
@@ -807,6 +822,7 @@ public:
assert((idx >= 1) && (idx <= (int)_regionList.size()));
return _regionList[idx - 1];
}
+ void proc1(int v) { warning("TODO: WalkRegions::proc1"); }
};
/*--------------------------------------------------------------------------*/
@@ -847,6 +863,9 @@ public:
int _delayTicks;
Common::String _saveName;
uint32 _prevFrameNumber;
+protected:
+ virtual void playerAction(Event &event) {}
+ virtual void processEnd(Event &event) {}
public:
SceneHandler();
void registerHandler();
diff --git a/engines/tsage/debugger.cpp b/engines/tsage/debugger.cpp
index e3c4569dd2..2a6b4eb66b 100644
--- a/engines/tsage/debugger.cpp
+++ b/engines/tsage/debugger.cpp
@@ -32,6 +32,7 @@ Debugger::Debugger() : GUI::Debugger() {
DCmd_Register("scene", WRAP_METHOD(Debugger, Cmd_Scene));
DCmd_Register("walk_regions", WRAP_METHOD(Debugger, Cmd_WalkRegions));
DCmd_Register("priority_regions", WRAP_METHOD(Debugger, Cmd_PriorityRegions));
+ DCmd_Register("scene_regions", WRAP_METHOD(Debugger, Cmd_SceneRegions));
DCmd_Register("setflag", WRAP_METHOD(Debugger, Cmd_SetFlag));
DCmd_Register("getflag", WRAP_METHOD(Debugger, Cmd_GetFlag));
DCmd_Register("clearflag", WRAP_METHOD(Debugger, Cmd_ClearFlag));
@@ -171,6 +172,59 @@ bool Debugger::Cmd_PriorityRegions(int argc, const char **argv) {
}
/*
+ * This command draws the scene regions onto the screen. These are the regions
+ * used by hotspots that have non-rectangular areas.
+ */
+bool Debugger::Cmd_SceneRegions(int argc, const char **argv) {
+ int regionNum = 0;
+
+ // Check for an optional specific region to display
+ if (argc == 2)
+ regionNum = strToInt(argv[1]);
+
+ // Color index to use for the first priority region
+ int color = 16;
+ int count = 0;
+
+ // Lock the background surface for access
+ Graphics::Surface destSurface = _globals->_sceneManager._scene->_backSurface.lockSurface();
+
+ Common::List<Region>::iterator i = _globals->_sceneRegions.begin();
+ Common::String regionsDesc;
+
+ for (; i != _globals->_sceneRegions.end(); ++i, ++color, ++count) {
+ Region &r = *i;
+
+ if ((regionNum == 0) || (regionNum == (count + 1))) {
+ for (int y = 0; y < destSurface.h; ++y) {
+ byte *destP = (byte *)destSurface.getBasePtr(0, y);
+
+ for (int x = 0; x < destSurface.w; ++x) {
+ if (r.contains(Common::Point(_globals->_sceneManager._scene->_sceneBounds.left + x,
+ _globals->_sceneManager._scene->_sceneBounds.top + y)))
+ *destP = color;
+ ++destP;
+ }
+ }
+ }
+
+ regionsDesc += Common::String::format("Region id = %d bounds=%d,%d,%d,%d\n",
+ r._regionId, r._bounds.left, r._bounds.top, r._bounds.right, r._bounds.bottom);
+ }
+
+ // Release the surface
+ _globals->_sceneManager._scene->_backSurface.unlockSurface();
+
+ // Mark the scene as requiring a full redraw
+ _globals->_paneRefreshFlag[0] = 2;
+
+ DebugPrintf("Total regions = %d\n", count);
+ DebugPrintf("%s", regionsDesc.c_str());
+
+ return true;
+}
+
+/*
* This command sets a flag
*/
bool Debugger::Cmd_SetFlag(int argc, const char **argv) {
@@ -414,7 +468,7 @@ bool Debugger::Cmd_Hotspots(int argc, const char **argv) {
if (ri != _globals->_sceneRegions.end()) {
// Fill out the areas defined by the region
Region &r = *ri;
-
+
for (int y = r._bounds.top; y < r._bounds.bottom; ++y) {
LineSliceSet set = r.getLineSlices(y);
diff --git a/engines/tsage/debugger.h b/engines/tsage/debugger.h
index 8bc1b06336..fcdbc2d243 100644
--- a/engines/tsage/debugger.h
+++ b/engines/tsage/debugger.h
@@ -37,6 +37,7 @@ protected:
bool Cmd_Scene(int argc, const char **argv);
bool Cmd_WalkRegions(int argc, const char **argv);
bool Cmd_PriorityRegions(int argc, const char **argv);
+ bool Cmd_SceneRegions(int argc, const char **argv);
bool Cmd_SetFlag(int argc, const char **argv);
bool Cmd_GetFlag(int argc, const char **argv);
bool Cmd_ClearFlag(int argc, const char **argv);
diff --git a/engines/tsage/dialogs.cpp b/engines/tsage/dialogs.cpp
index ae385b8c15..841a7b776d 100644
--- a/engines/tsage/dialogs.cpp
+++ b/engines/tsage/dialogs.cpp
@@ -109,186 +109,6 @@ ConfigDialog::ConfigDialog() : GUI::OptionsDialog("", "GlobalConfig") {
/*--------------------------------------------------------------------------*/
-#define BUTTON_WIDTH 28
-#define BUTTON_HEIGHT 29
-
-RightClickButton::RightClickButton(int buttonIndex, int xp, int yp) : GfxButton() {
- _buttonIndex = buttonIndex;
- this->_bounds.left = xp;
- this->_bounds.top = yp;
- this->_bounds.setWidth(BUTTON_WIDTH);
- this->_bounds.setHeight(BUTTON_HEIGHT);
- _savedButton = NULL;
-}
-
-void RightClickButton::highlight() {
- if (_savedButton) {
- // Button was previously highlighted, so de-highlight by restoring saved area
- _globals->gfxManager().copyFrom(*_savedButton, _bounds.left, _bounds.top);
- delete _savedButton;
- _savedButton = NULL;
- } else {
- // Highlight button by getting the needed highlighted image resource
- _savedButton = Surface_getArea(_globals->gfxManager().getSurface(), _bounds);
-
- uint size;
- byte *imgData = _resourceManager->getSubResource(7, 2, _buttonIndex, &size);
-
- GfxSurface btnSelected = surfaceFromRes(imgData);
- _globals->gfxManager().copyFrom(btnSelected, _bounds.left, _bounds.top);
-
- DEALLOCATE(imgData);
- }
-}
-
-/*--------------------------------------------------------------------------*/
-
-/**
- * This dialog implements the right-click dialog
- */
-RightClickDialog::RightClickDialog() : GfxDialog(),
- _walkButton(1, 48, 12), _lookButton(2, 31, 29), _useButton(3, 65, 29),
- _talkButton(4, 14, 47), _inventoryButton(5, 48, 47), _optionsButton(6, 83, 47) {
- Rect rectArea, dialogRect;
-
- // Set the palette and change the cursor
- _gfxManager.setDialogPalette();
- _globals->_events.setCursor(CURSOR_ARROW);
-
- // Get the dialog image
- _surface = surfaceFromRes(7, 1, 1);
-
- // Set the dialog position
- dialogRect.resize(_surface, 0, 0, 100);
- dialogRect.center(_globals->_events._mousePos.x, _globals->_events._mousePos.y);
-
- // Ensure the dialog will be entirely on-screen
- Rect screenRect = _globals->gfxManager()._bounds;
- screenRect.collapse(4, 4);
- dialogRect.contain(screenRect);
-
- _bounds = dialogRect;
- _gfxManager._bounds = _bounds;
-
- _highlightedButton = NULL;
- _selectedAction = -1;
-}
-
-RightClickDialog::~RightClickDialog() {
-}
-
-RightClickButton *RightClickDialog::findButton(const Common::Point &pt) {
- RightClickButton *btnList[] = { &_walkButton, &_lookButton, &_useButton, &_talkButton, &_inventoryButton, &_optionsButton };
-
- for (int i = 0; i < 6; ++i) {
- btnList[i]->_owner = this;
-
- if (btnList[i]->_bounds.contains(pt))
- return btnList[i];
- }
-
- return NULL;
-}
-
-void RightClickDialog::draw() {
- // Save the covered background area
- _savedArea = Surface_getArea(_globals->_gfxManagerInstance.getSurface(), _bounds);
-
- // Draw the dialog image
- _globals->gfxManager().copyFrom(_surface, _bounds.left, _bounds.top);
-}
-
-bool RightClickDialog::process(Event &event) {
- switch (event.eventType) {
- case EVENT_MOUSE_MOVE: {
- // Check whether a button is highlighted
- RightClickButton *btn = findButton(event.mousePos);
-
- if (btn != _highlightedButton) {
- // De-highlight any previously selected button
- if (_highlightedButton) {
- _highlightedButton->highlight();
- _highlightedButton = NULL;
- }
- if (btn) {
- // Highlight the new button
- btn->highlight();
- _highlightedButton = btn;
- }
- }
- event.handled = true;
- return true;
- }
-
- case EVENT_BUTTON_DOWN:
- // If a button is highlighted, then flag the selected button index
- if (_highlightedButton)
- _selectedAction = _highlightedButton->_buttonIndex;
- else
- _selectedAction = _lookButton._buttonIndex;
- event.handled = true;
- return true;
-
- default:
- break;
- }
-
- return false;
-}
-
-void RightClickDialog::execute() {
- // Draw the dialog
- draw();
-
- // Dialog event handler loop
- _gfxManager.activate();
-
- while (!_vm->shouldQuit() && (_selectedAction == -1)) {
- Event evt;
- while (_globals->_events.getEvent(evt, EVENT_MOUSE_MOVE | EVENT_BUTTON_DOWN)) {
- evt.mousePos.x -= _bounds.left;
- evt.mousePos.y -= _bounds.top;
-
- process(evt);
- }
-
- g_system->delayMillis(10);
- g_system->updateScreen();
- }
-
- // Execute the specified action
- switch (_selectedAction) {
- case 1:
- // Look action
- _globals->_events.setCursor(CURSOR_LOOK);
- break;
- case 2:
- // Walk action
- _globals->_events.setCursor(CURSOR_WALK);
- break;
- case 3:
- // Use cursor
- _globals->_events.setCursor(CURSOR_USE);
- break;
- case 4:
- // Talk cursor
- _globals->_events.setCursor(CURSOR_TALK);
- break;
- case 5:
- // Inventory dialog
- InventoryDialog::show();
- break;
- case 6:
- // Dialog options
- OptionsDialog::show();
- break;
- }
-
- _gfxManager.deactivate();
-}
-
-/*--------------------------------------------------------------------------*/
-
void ModalDialog::draw() {
// Set the palette for use in the dialog
setPalette();
@@ -547,6 +367,7 @@ void OptionsDialog::show() {
_globals->_game->restartGame();
} else if (btn == &dlg->_btnSound) {
// Sound dialog
+ SoundDialog::execute();
} else if (btn == &dlg->_btnSave) {
// Save button
_globals->_game->saveGame();
@@ -594,5 +415,14 @@ OptionsDialog::OptionsDialog() {
setCenter(160, 100);
}
+/*--------------------------------------------------------------------------*/
+
+void SoundDialog::execute() {
+ ConfigDialog *dlg = new ConfigDialog();
+ dlg->runModal();
+ delete dlg;
+ _globals->_soundManager.syncSounds();
+ _globals->_events.setCursorFromFlag();
+}
} // End of namespace TsAGE
diff --git a/engines/tsage/dialogs.h b/engines/tsage/dialogs.h
index 55adb6c813..35ed60ba1a 100644
--- a/engines/tsage/dialogs.h
+++ b/engines/tsage/dialogs.h
@@ -49,35 +49,6 @@ public:
ConfigDialog();
};
-class RightClickButton : public GfxButton {
-private:
- GfxSurface *_savedButton;
-public:
- int _buttonIndex;
-
- RightClickButton(int buttonIndex, int xp, int yp);
- ~RightClickButton() { delete _savedButton; }
-
- virtual void highlight();
-};
-
-class RightClickDialog : public GfxDialog {
-private:
- GfxSurface _surface;
- RightClickButton *_highlightedButton;
- int _selectedAction;
- RightClickButton _walkButton, _lookButton, _useButton, _talkButton, _inventoryButton, _optionsButton;
-
- RightClickButton *findButton(const Common::Point &pt);
-public:
- RightClickDialog();
- ~RightClickDialog();
-
- virtual void draw();
- virtual bool process(Event &event);
- void execute();
-};
-
/*--------------------------------------------------------------------------*/
class ModalDialog : public GfxDialog {
@@ -128,6 +99,13 @@ public:
static void show();
};
+/*--------------------------------------------------------------------------*/
+
+class SoundDialog {
+public:
+ static void execute();
+};
+
} // End of namespace TsAGE
#endif
diff --git a/engines/tsage/events.cpp b/engines/tsage/events.cpp
index 44c79bd2fe..d2ade971fa 100644
--- a/engines/tsage/events.cpp
+++ b/engines/tsage/events.cpp
@@ -149,6 +149,7 @@ void EventsClass::setCursor(CursorType cursorType) {
const byte *cursor;
bool delFlag = true;
uint size;
+ bool questionEnabled = false;
switch (cursorType) {
case CURSOR_NONE:
@@ -164,22 +165,40 @@ void EventsClass::setCursor(CursorType cursorType) {
case CURSOR_LOOK:
// Look cursor
- cursor = _resourceManager->getSubResource(4, 1, 5, &size);
+ if (_vm->getGameID() == GType_BlueForce)
+ cursor = _resourceManager->getSubResource(1, 5, 3, &size);
+ else
+ cursor = _resourceManager->getSubResource(4, 1, 5, &size);
_currentCursor = CURSOR_LOOK;
break;
case CURSOR_USE:
// Use cursor
- cursor = _resourceManager->getSubResource(4, 1, 4, &size);
+ if (_vm->getGameID() == GType_BlueForce) {
+ cursor = _resourceManager->getSubResource(1, 5, 2, &size);
+ } else {
+ cursor = _resourceManager->getSubResource(4, 1, 4, &size);
+ }
_currentCursor = CURSOR_USE;
break;
case CURSOR_TALK:
// Talk cursor
- cursor = _resourceManager->getSubResource(4, 1, 3, &size);
+ if (_vm->getGameID() == GType_BlueForce) {
+ cursor = _resourceManager->getSubResource(1, 5, 4, &size);
+ } else {
+ cursor = _resourceManager->getSubResource(4, 1, 3, &size);
+ }
_currentCursor = CURSOR_TALK;
break;
+ case CURSOR_EXIT:
+ // Exit cursor (Blue Force)
+ assert(_vm->getGameID() == GType_BlueForce);
+ cursor = _resourceManager->getSubResource(1, 5, 7, &size);
+ _currentCursor = CURSOR_EXIT;
+ break;
+
case CURSOR_ARROW:
// Arrow cursor
cursor = CURSOR_ARROW_DATA;
@@ -188,10 +207,22 @@ void EventsClass::setCursor(CursorType cursorType) {
case CURSOR_WALK:
default:
- // Walk cursor
- cursor = CURSOR_WALK_DATA;
- _currentCursor = CURSOR_WALK;
- delFlag = false;
+ if (_vm->getGameID() == GType_BlueForce) {
+ if (cursorType == CURSOR_WALK) {
+ cursor = _resourceManager->getSubResource(1, 5, 1, &size);
+ } else {
+ // Inventory icon
+ cursor = _resourceManager->getSubResource(10, ((int)cursorType - 1) / 20 + 1,
+ ((int)cursorType - 1) % 20 + 1, &size);
+ questionEnabled = true;
+ }
+ _currentCursor = cursorType;
+ } else {
+ // For Ringworld, always treat as the walk cursor
+ cursor = CURSOR_WALK_DATA;
+ _currentCursor = CURSOR_WALK;
+ delFlag = false;
+ }
break;
}
@@ -205,6 +236,10 @@ void EventsClass::setCursor(CursorType cursorType) {
if (delFlag)
DEALLOCATE(cursor);
+
+ // For Blue Force, enable the question button when an inventory icon is selected
+ if (_vm->getGameID() == GType_BlueForce)
+ BF_GLOBALS._uiElements._question.setEnabled(questionEnabled);
}
void EventsClass::pushCursor(CursorType cursorType) {
@@ -270,6 +305,17 @@ void EventsClass::setCursor(Graphics::Surface &cursor, int transColor, const Com
_currentCursor = cursorId;
}
+void EventsClass::setCursor(GfxSurface &cursor) {
+ // TODO: Find proper parameters for this form in Blue Force
+ Graphics::Surface s = cursor.lockSurface();
+
+ const byte *cursorData = (const byte *)s.getBasePtr(0, 0);
+ CursorMan.replaceCursor(cursorData, cursor.getBounds().width(), cursor.getBounds().height(),
+ cursor._centroid.x, cursor._centroid.y, cursor._transColor);
+
+ _lastCursor = CURSOR_NONE;
+}
+
void EventsClass::setCursorFromFlag() {
setCursor(isCursorVisible() ? _currentCursor : CURSOR_NONE);
}
@@ -278,8 +324,10 @@ void EventsClass::showCursor() {
setCursor(_currentCursor);
}
-void EventsClass::hideCursor() {
+CursorType EventsClass::hideCursor() {
+ CursorType oldCursor = _currentCursor;
setCursor(CURSOR_NONE);
+ return oldCursor;
}
bool EventsClass::isCursorVisible() const {
diff --git a/engines/tsage/events.h b/engines/tsage/events.h
index c36db59270..3680250ee9 100644
--- a/engines/tsage/events.h
+++ b/engines/tsage/events.h
@@ -54,6 +54,7 @@ public:
};
enum CursorType {
+ // Ringworld objects
OBJECT_STUNNER = 0, OBJECT_SCANNER = 1, OBJECT_STASIS_BOX = 2,
OBJECT_INFODISK = 3, OBJECT_STASIS_NEGATOR = 4, OBJECT_KEY_DEVICE = 5, OBJECT_MEDKIT = 6,
OBJECT_LADDER = 7, OBJECT_ROPE = 8, OBJECT_KEY = 9, OBJECT_TRANSLATOR = 10, OBJECT_ALE = 11,
@@ -63,10 +64,32 @@ enum CursorType {
OBJECT_NULLIFIER = 25, OBJECT_PEG = 26, OBJECT_VIAL = 27, OBJECT_JACKET = 28,
OBJECT_TUNIC2 = 29, OBJECT_BONE = 30, OBJECT_EMPTY_JAR = 31, OBJECT_JAR = 32,
+ // Blue Force objects
+ INV_NONE = 0, INV_COLT45 = 1, INV_AMMO_CLIP = 2, INV_SPARE_CLIP = 3, INV_HANDCUFFS = 4,
+ INV_GREENS_GUN = 5, INV_TICKET_BOOK = 6, INV_MIRANDA_CARD = 7, INV_FOREST_RAP = 8,
+ INV_GREEN_ID = 9, INV_BASEBALL_CARD = 10, INV_BOOKING_GREEN = 11, INV_FLARE = 12,
+ INV_COBB_RAP = 13, INV_22_BULLET = 14, INV_AUTO_RIFLE = 15, INV_WIG = 16, INV_FRANKIE_ID = 17,
+ INV_TYRONE_ID = 18, INV_22_SNUB = 19, INV_BOOKING_FRANKIE = 21, INV_BOOKING_GANG = 22,
+ INV_FBI_TELETYPE = 23, INV_DA_NOTE = 24, INV_PRINT_OUT = 25, INV_WHAREHOUSE_KEYS = 26,
+ INV_CENTER_PUNCH = 27, INV_TRANQ_GUN = 28, INV_HOOK = 29, INV_RAGS = 30, INV_JAR = 31,
+ INV_SCREWDRIVER = 32, INV_D_FLOPPY = 33, INV_BLANK_DISK = 34, INV_STICK = 35,
+ INV_CRATE1 = 36, INV_CRATE2 = 37, INV_SHOEBOX = 38, INV_BADGE = 39, INV_RENTAL_COUPON = 41,
+ INV_NICKEL = 42, INV_LYLE_CARD = 43, INV_CARTER_NOTE = 44, INV_MUG_SHOT = 45,
+ INV_CLIPPING = 46, INV_MICROFILM = 47, INV_WAVE_KEYS = 48, INV_RENTAL_KEYS = 49,
+ INV_NAPKIN = 50, INV_DMV_PRINTOUT = 51, INV_FISHING_NET = 52, INV_ID = 53,
+ INV_9MM_BULLETS = 54, INV_SCHEDULE = 55, INV_GRENADES = 56, INV_YELLOW_CORD = 57,
+ INV_HALF_YELLOW_CORD = 58, INV_BLACK_CORD = 59, INV_HALF_BLACK_CORD = 61, INV_WARRANT = 62,
+ INV_JACKET = 63, INV_GREENS_KNIFE = 64, INV_DOG_WHISTLE = 65, INV_AMMO_BELT = 66,
+ BF_LAST_INVENT = 67,
+
+ // Cursors
CURSOR_WALK = 0x100, CURSOR_LOOK = 0x200, CURSOR_700 = 700, CURSOR_USE = 0x400, CURSOR_TALK = 0x800,
+ CURSOR_1000 = 0x1000, CURSOR_EXIT = 0x7004,
CURSOR_NONE = -1, CURSOR_CROSSHAIRS = -2, CURSOR_ARROW = -3
};
+class GfxSurface;
+
class EventsClass : public SaveListener {
private:
Common::Event _event;
@@ -84,10 +107,11 @@ public:
void pushCursor(CursorType cursorType);
void popCursor();
void setCursor(Graphics::Surface &cursor, int transColor, const Common::Point &hotspot, CursorType cursorId);
+ void setCursor(GfxSurface &cursor);
void setCursorFromFlag();
CursorType getCursor() const { return _currentCursor; }
void showCursor();
- void hideCursor();
+ CursorType hideCursor();
bool isCursorVisible() const;
bool pollEvent();
@@ -98,6 +122,7 @@ public:
Common::EventType type() { return _event.type; }
uint32 getFrameNumber() const { return _frameNumber; }
void delay(int numFrames);
+ bool isInventoryIcon() const { return _currentCursor < 256; }
virtual void listenerSynchronize(Serializer &s);
static void loadNotifierProc(bool postFlag);
diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp
index 27067c7d1c..1895fbc2d2 100644
--- a/engines/tsage/globals.cpp
+++ b/engines/tsage/globals.cpp
@@ -74,7 +74,7 @@ Globals::Globals() : _dialogCenter(160, 140), _gfxManagerInstance(_screenSurface
_gfxColors.foreground = 83;
_fontColors.background = 88;
_fontColors.foreground = 92;
- _dialogCenter.y = 165;
+ _dialogCenter.y = 140;
} else if ((_vm->getGameID() == GType_Ringworld) && (_vm->getFeatures() & GF_CD)) {
_gfxFontNumber = 50;
_gfxColors.background = 53;
@@ -121,6 +121,7 @@ Globals::Globals() : _dialogCenter(160, 140), _gfxManagerInstance(_screenSurface
case GType_BlueForce:
_game = new BlueForce::BlueForceGame();
+ _inventory = new BlueForce::BlueForceInvObjectList();
_sceneHandler = new BlueForce::SceneHandlerExt();
break;
}
@@ -183,32 +184,79 @@ void Globals::dispatchSounds() {
namespace BlueForce {
BlueForceGlobals::BlueForceGlobals(): Globals() {
+}
+
+void BlueForceGlobals::synchronize(Serializer &s) {
+ Globals::synchronize(s);
+
+ s.syncAsSint16LE(_dayNumber);
+ s.syncAsSint16LE(_v4CEA4);
+ s.syncAsSint16LE(_deathReason);
+ s.syncAsSint16LE(_driveFromScene);
+ s.syncAsSint16LE(_driveToScene);
+ s.syncAsSint16LE(_v4CF9E);
+ s.syncAsSint16LE(_v4E238);
+ s.syncAsSint16LE(_v501FC);
+ s.syncAsSint16LE(_v50696);
+ s.syncAsSint16LE(_v51C42);
+ s.syncAsSint16LE(_v51C44);
+ s.syncAsSint16LE(_interfaceY);
+ s.syncAsSint16LE(_bookmark);
+ s.syncAsSint16LE(_mapLocationId);
+ s.syncAsSint16LE(_clip1Bullets);
+ s.syncAsSint16LE(_clip2Bullets);
+
+}
+
+void BlueForceGlobals::reset() {
+ Globals::reset();
+ _scenePalette.clearListeners();
+
+ _scrollFollower = &_player;
+ _bookmark = bNone;
+
+ // Reset the inventory
+ ((BlueForceInvObjectList *)_inventory)->reset();
+ BF_GLOBALS._uiElements.updateInventory();
+ BF_GLOBALS._uiElements._scoreValue = 0;
+
+ _mapLocationId = 1;
+ _driveFromScene = 300;
+ _driveToScene = 0;
+
_interfaceY = 0;
_v51C44 = 1;
- _v4CEA2 = 0;
- _v4CEA8 = 0;
- _v4CEF2 = 0;
- _v4CEF4 = 0;
+ _dayNumber = 0;
+ _v4CEA4 = 0;
+ _deathReason = 0;
_v4CF9E = 0;
_v4E238 = 0;
+ _v50696 = 0;
_v501FC = 0;
+ _v5098C = 0;
+ _v5098D = 0;
_v51C42 = 0;
- _bikiniHutState = 0;
- _mapLocationId = 1;
- Common::set_to(&_globalFlags[0], &_globalFlags[12], 0);
+ _clip1Bullets = 8;
+ _clip2Bullets = 8;
}
-void BlueForceGlobals::synchronize(Serializer &s) {
- Globals::synchronize(s);
- error("Sync variables");
+bool BlueForceGlobals::getHasBullets() {
+ if (!getFlag(fGunLoaded))
+ return false;
+ return BF_GLOBALS.getFlag(fLoadedSpare) ? (_clip2Bullets > 0) : (_clip1Bullets > 0);
}
-bool BlueForceGlobals::getFlag(int v) {
- return _globalFlags[v / 16] & (1 << (v % 8));
+void BlueForceGlobals::set2Flags(int flagNum) {
+ if (!getFlag(flagNum + 1)) {
+ setFlag(flagNum + 1);
+ setFlag(flagNum);
+ }
}
-void BlueForceGlobals::setFlag(int v) {
- _globalFlags[v / 16] |= 1 << (v % 8);
+bool BlueForceGlobals::removeFlag(int flagNum) {
+ bool result = getFlag(flagNum);
+ clearFlag(flagNum);
+ return result;
}
} // end of namespace BlueForce
diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h
index 2d409b6343..651a0c8893 100644
--- a/engines/tsage/globals.h
+++ b/engines/tsage/globals.h
@@ -30,6 +30,7 @@
#include "tsage/events.h"
#include "tsage/sound.h"
#include "tsage/saveload.h"
+#include "tsage/blue_force/blueforce_ui.h"
namespace TsAGE {
@@ -110,29 +111,88 @@ namespace BlueForce {
using namespace TsAGE;
+enum Bookmark {
+ bNone,
+ bStartOfGame, bCalledToDomesticViolence, bArrestedGreen, bLauraToParamedics,
+ bBookedGreen, bStoppedFrankie, bBookedFrankie, bBookedFrankieEvidence,
+ bEndOfWorkDayOne, bTalkedToGrannyAboutSkipsCard, bLyleStoppedBy, bEndDayOne,
+ bInspectionDone, bCalledToDrunkStop, bArrestedDrunk, bEndDayTwo,
+ bFlashBackOne, bFlashBackTwo, bFlashBackThree, bDroppedOffLyle, bEndDayThree,
+ bDoneWithIsland, bDoneAtLyles, bEndDayFour, bInvestigateBoat, bFinishedWGreen,
+ bAmbushed, bAmbushOver, bEndOfGame
+};
+
+enum Flag {
+ JAKE_FILE_COPIED, gunClean, onBike, onDuty, fShowedIdToKate, fLateToMarina,
+ fCalledBackup, fWithLyle, gunDrawn, fBackupArrived340, fBriefedBackup,
+ fGotAllSkip340, fToldToLeave340, fBackupIn350, fNetInBoat, fForbesWaiting,
+ fWithCarter, fTalkedToTony, fMugOnKate, takenWeasel, gotTrailer450,
+ showEugeneNapkin, showRapEugene, fMgrCallsWeasel, fCarterMetLyle,
+ fGunLoaded, fLoadedSpare, showEugeneID, fRandomShot350, examinedFile810,
+ shownLyleCrate1, shownLyleRapsheet, shownLyleDisk, shownLylePO,
+ fCanDrawGun, fGotAutoWeapon, fGotBulletsFromDash, fShotSuttersDesk,
+ greenTaken, fLateToDrunkStop, didDrunk, fSearchedTruck, seenFolder,
+ showMugAround, frankInJail, fTalkedCarterDay3, fDecryptedBluePrints,
+ fTalkedToDrunkInCar, fToldLyleOfSchedule, fTalkedShooterNoBkup,
+ fTalkedDriverNoBkup, fDriverOutOfTruck, readGreenRights, readFrankRights,
+ talkedToHarrisAboutDrunk, unlockBoat, fShootGoon, fBlowUpGoon,
+ fTalkedToBarry, fTalkedToLarry, fLeftTraceIn920, fLeftTraceIn900,
+ fBackupAt340, fShotNicoIn910, fGotPointsForTktBook, fGotPointsForMCard,
+ fShowedBluePrint, fGotPointsForPunch, fGotPointsForBox, fGotPointsForBank,
+ fGotPointsForCombo, fGotPointsForCoin, fGotPointsForCPU, fGotPointsForBoots,
+ fGotPointsForCrate, fGotPointsForBlackCord, fGotPointsForGeneratorPlug,
+ fGotPointsForFuseBoxPlug, fGotPointsForStartGenerator, fGotPointsForLightsOn,
+ fGotPointsForOpeningDoor, fGotPointsForClosingDoor, fGotPointsForLightsOff,
+ fGotPointsForGeneratorOff, fGotPointsForCordOnForklift, fGotPointsForCuffingNico,
+ fGotPointsForCuffingDA, fGotPointsForSearchingNico, fGotPointsForSearchingDA,
+ fLeftTraceIn910, fBookedGreenEvidence, fGotPointsForCleaningGun,
+ fGotPointsForMemo, fGotPointsForFBI, fTookTrailerAmmo, fAlertedGreen355,
+ fGotGreen355fTalkedToGrannyDay3, shownFax, beenToJRDay2, shownLyleCrate1Day1,
+ fLyleOnIsland, iWasAmbushed, fGangInCar, fArrivedAtGangStop, ticketVW,
+ f1015Marina, fCan1015Marina, f1015Frankie, fCan1015Frankie, f1015Drunk,
+ fCan1015Drunk, f1027Marina, fCan1027Marina, f1027Frankie, fCan1027Frankie,
+ f1027Drunk, fCan1027Drunk, f1035Marina, fCan1035Marina, f1035Frankie,
+ fCan1035Frankie, f1035Drunk, fCan1035Drunk, f1097Marina, fCan1097Marina,
+ f1097Frankie, fCan1097Frankie, f1097Drunk, fCan1097Drunk, f1098Marina,
+ fCan1098Marina, f1098Frankie, fCan1098Frankie, f1098Drunk, fCan1098Drunk,
+ fCuffedFrankie, fGotPointsForTrapDog, fGotPointsForUnlockGate,
+ fGotPointsForUnlockWarehouse, fGotPointsForLockWarehouse, fGotPointsForLockGate,
+ fGotPointsForFreeDog, fGotPointsForWhistleDog, fGivenNapkin, fCan1004Marina,
+ fCan1004Drunk, fHasLeftDrunk, fHasDrivenFromDrunk, fCrateOpen, fSawGuns,
+ hookPoints
+};
+
class BlueForceGlobals: public Globals {
public:
ASoundExt _sound1, _sound2, _sound3;
- int _v4CEA2;
- int _v4CEA8;
- int _v4CEF2;
- int _v4CEF4;
+ UIElements _uiElements;
+ StripProxy _stripProxy;
+ int _dayNumber;
+ int _v4CEA4;
+ int _deathReason;
+ int _driveFromScene;
+ int _driveToScene;
int _v4CF9E;
int _v4E238;
int _v501FC;
+ int _v50696;
+ uint8 _v5098C;
+ uint8 _v5098D;
int _v51C42;
int _v51C44;
int _interfaceY;
- int _bikiniHutState;
+ Bookmark _bookmark;
int _mapLocationId;
- uint8 _globalFlags[12];
+ int _clip1Bullets, _clip2Bullets;
BlueForceGlobals();
+ void reset();
+ bool getHasBullets();
+
virtual Common::String getClassName() { return "BFGlobals"; }
virtual void synchronize(Serializer &s);
-
- void setFlag(int v);
- bool getFlag(int v);
+ void set2Flags(int flagNum);
+ bool removeFlag(int flagNum);
};
} // End of namespace BlueForce
diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp
index 1884bfb4f5..69c9995b93 100644
--- a/engines/tsage/graphics.cpp
+++ b/engines/tsage/graphics.cpp
@@ -1069,12 +1069,23 @@ GfxButton *GfxDialog::execute(GfxButton *defaultButton) {
}
void GfxDialog::setPalette() {
- _globals->_scenePalette.loadPalette(0);
- _globals->_scenePalette.setPalette(0, 1);
- _globals->_scenePalette.setPalette(_globals->_scenePalette._colors.foreground, 1);
- _globals->_scenePalette.setPalette(_globals->_fontColors.background, 1);
- _globals->_scenePalette.setPalette(_globals->_fontColors.foreground, 1);
- _globals->_scenePalette.setPalette(255, 1);
+ if (_vm->getGameID() == GType_BlueForce) {
+ _globals->_scenePalette.loadPalette(2);
+ _globals->_scenePalette.setPalette(0, 1);
+ _globals->_scenePalette.setPalette(_globals->_gfxColors.background, 1);
+ _globals->_scenePalette.setPalette(_globals->_gfxColors.foreground, 1);
+ _globals->_scenePalette.setPalette(_globals->_fontColors.background, 1);
+ _globals->_scenePalette.setPalette(_globals->_fontColors.foreground, 1);
+ _globals->_scenePalette.setEntry(255, 0xff, 0xff, 0xff);
+ _globals->_scenePalette.setPalette(255, 1);
+ } else {
+ _globals->_scenePalette.loadPalette(0);
+ _globals->_scenePalette.setPalette(0, 1);
+ _globals->_scenePalette.setPalette(_globals->_scenePalette._colors.foreground, 1);
+ _globals->_scenePalette.setPalette(_globals->_fontColors.background, 1);
+ _globals->_scenePalette.setPalette(_globals->_fontColors.foreground, 1);
+ _globals->_scenePalette.setPalette(255, 1);
+ }
}
/*--------------------------------------------------------------------------*/
diff --git a/engines/tsage/module.mk b/engines/tsage/module.mk
index 5c7104936e..b0279c0260 100644
--- a/engines/tsage/module.mk
+++ b/engines/tsage/module.mk
@@ -1,9 +1,14 @@
MODULE := engines/tsage
MODULE_OBJS := \
+ blue_force/blueforce_dialogs.o \
blue_force/blueforce_logic.o \
blue_force/blueforce_scenes0.o \
blue_force/blueforce_scenes1.o \
+ blue_force/blueforce_scenes3.o \
+ blue_force/blueforce_scenes6.o \
+ blue_force/blueforce_speakers.o \
+ blue_force/blueforce_ui.o \
converse.o \
core.o \
debugger.o \
@@ -14,6 +19,7 @@ MODULE_OBJS := \
graphics.o \
resources.o \
ringworld/ringworld_demo.o \
+ ringworld/ringworld_dialogs.o \
ringworld/ringworld_logic.o \
ringworld/ringworld_scenes1.o \
ringworld/ringworld_scenes2.o \
@@ -23,6 +29,7 @@ MODULE_OBJS := \
ringworld/ringworld_scenes6.o \
ringworld/ringworld_scenes8.o \
ringworld/ringworld_scenes10.o \
+ ringworld/ringworld_speakers.o \
saveload.o \
scenes.o \
sound.o \
diff --git a/engines/tsage/ringworld/ringworld_dialogs.cpp b/engines/tsage/ringworld/ringworld_dialogs.cpp
new file mode 100644
index 0000000000..ca4ccbc7c5
--- /dev/null
+++ b/engines/tsage/ringworld/ringworld_dialogs.cpp
@@ -0,0 +1,222 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "common/translation.h"
+
+#include "gui/dialog.h"
+#include "gui/widget.h"
+
+#include "tsage/tsage.h"
+#include "tsage/core.h"
+#include "tsage/dialogs.h"
+#include "tsage/staticres.h"
+#include "tsage/globals.h"
+#include "tsage/ringworld/ringworld_dialogs.h"
+#include "tsage/ringworld/ringworld_logic.h"
+
+namespace TsAGE {
+
+namespace Ringworld {
+
+/*--------------------------------------------------------------------------*/
+
+#define BUTTON_WIDTH 28
+#define BUTTON_HEIGHT 29
+
+RightClickButton::RightClickButton(int buttonIndex, int xp, int yp) : GfxButton() {
+ _buttonIndex = buttonIndex;
+ this->_bounds.left = xp;
+ this->_bounds.top = yp;
+ this->_bounds.setWidth(BUTTON_WIDTH);
+ this->_bounds.setHeight(BUTTON_HEIGHT);
+ _savedButton = NULL;
+}
+
+void RightClickButton::highlight() {
+ if (_savedButton) {
+ // Button was previously highlighted, so de-highlight by restoring saved area
+ _globals->gfxManager().copyFrom(*_savedButton, _bounds.left, _bounds.top);
+ delete _savedButton;
+ _savedButton = NULL;
+ } else {
+ // Highlight button by getting the needed highlighted image resource
+ _savedButton = Surface_getArea(_globals->gfxManager().getSurface(), _bounds);
+
+ uint size;
+ byte *imgData = _resourceManager->getSubResource(7, 2, _buttonIndex, &size);
+
+ GfxSurface btnSelected = surfaceFromRes(imgData);
+ _globals->gfxManager().copyFrom(btnSelected, _bounds.left, _bounds.top);
+
+ DEALLOCATE(imgData);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+/**
+ * This dialog implements the right-click dialog
+ */
+RightClickDialog::RightClickDialog() : GfxDialog(),
+ _walkButton(1, 48, 12), _lookButton(2, 31, 29), _useButton(3, 65, 29),
+ _talkButton(4, 14, 47), _inventoryButton(5, 48, 47), _optionsButton(6, 83, 47) {
+ Rect rectArea, dialogRect;
+
+ // Set the palette and change the cursor
+ _gfxManager.setDialogPalette();
+ _globals->_events.setCursor(CURSOR_ARROW);
+
+ // Get the dialog image
+ _surface = surfaceFromRes(7, 1, 1);
+
+ // Set the dialog position
+ dialogRect.resize(_surface, 0, 0, 100);
+ dialogRect.center(_globals->_events._mousePos.x, _globals->_events._mousePos.y);
+
+ // Ensure the dialog will be entirely on-screen
+ Rect screenRect = _globals->gfxManager()._bounds;
+ screenRect.collapse(4, 4);
+ dialogRect.contain(screenRect);
+
+ _bounds = dialogRect;
+ _gfxManager._bounds = _bounds;
+
+ _highlightedButton = NULL;
+ _selectedAction = -1;
+}
+
+RightClickDialog::~RightClickDialog() {
+}
+
+RightClickButton *RightClickDialog::findButton(const Common::Point &pt) {
+ RightClickButton *btnList[] = { &_walkButton, &_lookButton, &_useButton, &_talkButton, &_inventoryButton, &_optionsButton };
+
+ for (int i = 0; i < 6; ++i) {
+ btnList[i]->_owner = this;
+
+ if (btnList[i]->_bounds.contains(pt))
+ return btnList[i];
+ }
+
+ return NULL;
+}
+
+void RightClickDialog::draw() {
+ // Save the covered background area
+ _savedArea = Surface_getArea(_globals->_gfxManagerInstance.getSurface(), _bounds);
+
+ // Draw the dialog image
+ _globals->gfxManager().copyFrom(_surface, _bounds.left, _bounds.top);
+}
+
+bool RightClickDialog::process(Event &event) {
+ switch (event.eventType) {
+ case EVENT_MOUSE_MOVE: {
+ // Check whether a button is highlighted
+ RightClickButton *btn = findButton(event.mousePos);
+
+ if (btn != _highlightedButton) {
+ // De-highlight any previously selected button
+ if (_highlightedButton) {
+ _highlightedButton->highlight();
+ _highlightedButton = NULL;
+ }
+ if (btn) {
+ // Highlight the new button
+ btn->highlight();
+ _highlightedButton = btn;
+ }
+ }
+ event.handled = true;
+ return true;
+ }
+
+ case EVENT_BUTTON_DOWN:
+ // If a button is highlighted, then flag the selected button index
+ if (_highlightedButton)
+ _selectedAction = _highlightedButton->_buttonIndex;
+ else
+ _selectedAction = _lookButton._buttonIndex;
+ event.handled = true;
+ return true;
+
+ default:
+ break;
+ }
+
+ return false;
+}
+
+void RightClickDialog::execute() {
+ // Draw the dialog
+ draw();
+
+ // Dialog event handler loop
+ _gfxManager.activate();
+
+ while (!_vm->shouldQuit() && (_selectedAction == -1)) {
+ Event evt;
+ while (_globals->_events.getEvent(evt, EVENT_MOUSE_MOVE | EVENT_BUTTON_DOWN)) {
+ evt.mousePos.x -= _bounds.left;
+ evt.mousePos.y -= _bounds.top;
+
+ process(evt);
+ }
+
+ g_system->delayMillis(10);
+ g_system->updateScreen();
+ }
+
+ // Execute the specified action
+ switch (_selectedAction) {
+ case 1:
+ // Look action
+ _globals->_events.setCursor(CURSOR_LOOK);
+ break;
+ case 2:
+ // Walk action
+ _globals->_events.setCursor(CURSOR_WALK);
+ break;
+ case 3:
+ // Use cursor
+ _globals->_events.setCursor(CURSOR_USE);
+ break;
+ case 4:
+ // Talk cursor
+ _globals->_events.setCursor(CURSOR_TALK);
+ break;
+ case 5:
+ // Inventory dialog
+ InventoryDialog::show();
+ break;
+ case 6:
+ // Dialog options
+ OptionsDialog::show();
+ break;
+ }
+
+ _gfxManager.deactivate();
+}
+
+} // End of namespace Ringworld
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/ringworld/ringworld_dialogs.h b/engines/tsage/ringworld/ringworld_dialogs.h
new file mode 100644
index 0000000000..11a8f10e70
--- /dev/null
+++ b/engines/tsage/ringworld/ringworld_dialogs.h
@@ -0,0 +1,70 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef TSAGE_RINGWORLD_DIALOGS_H
+#define TSAGE_RINGWORLD_DIALOGS_H
+
+#include "gui/options.h"
+#include "tsage/events.h"
+#include "tsage/graphics.h"
+#include "common/list.h"
+#include "common/rect.h"
+#include "common/system.h"
+
+namespace TsAGE {
+
+namespace Ringworld {
+
+class RightClickButton : public GfxButton {
+private:
+ GfxSurface *_savedButton;
+public:
+ int _buttonIndex;
+
+ RightClickButton(int buttonIndex, int xp, int yp);
+ ~RightClickButton() { delete _savedButton; }
+
+ virtual void highlight();
+};
+
+class RightClickDialog : public GfxDialog {
+private:
+ GfxSurface _surface;
+ RightClickButton *_highlightedButton;
+ int _selectedAction;
+ RightClickButton _walkButton, _lookButton, _useButton, _talkButton, _inventoryButton, _optionsButton;
+
+ RightClickButton *findButton(const Common::Point &pt);
+public:
+ RightClickDialog();
+ ~RightClickDialog();
+
+ virtual void draw();
+ virtual bool process(Event &event);
+ void execute();
+};
+
+} // End of namespace Ringworld
+
+} // End of namespace TsAGE
+
+#endif
diff --git a/engines/tsage/ringworld/ringworld_logic.cpp b/engines/tsage/ringworld/ringworld_logic.cpp
index 2a34e49b39..a131969633 100644
--- a/engines/tsage/ringworld/ringworld_logic.cpp
+++ b/engines/tsage/ringworld/ringworld_logic.cpp
@@ -21,13 +21,12 @@
*/
#include "common/config-manager.h"
-#include "common/translation.h"
-#include "gui/saveload.h"
#include "tsage/ringworld/ringworld_logic.h"
#include "tsage/scenes.h"
#include "tsage/tsage.h"
#include "tsage/staticres.h"
#include "tsage/ringworld/ringworld_demo.h"
+#include "tsage/ringworld/ringworld_dialogs.h"
#include "tsage/ringworld/ringworld_scenes1.h"
#include "tsage/ringworld/ringworld_scenes2.h"
#include "tsage/ringworld/ringworld_scenes3.h"
@@ -330,878 +329,6 @@ void SceneArea::synchronize(Serializer &s) {
/*--------------------------------------------------------------------------*/
-SpeakerGText::SpeakerGText() {
- _speakerName = "GTEXT";
- _textWidth = 160;
- _textPos = Common::Point(130, 10);
- _color1 = 42;
- _hideObjects = false;
-}
-
-void SpeakerGText::setText(const Common::String &msg) {
- // Set the animation properties
- _sceneObject.postInit();
- _sceneObject.setVisage(9405);
- _sceneObject.setStrip2(3);
- _sceneObject.fixPriority(255);
- _sceneObject.changeZoom(100);
- _sceneObject._frame = 1;
- _sceneObject.setPosition(Common::Point(183, 71));
- _sceneObject.animate(ANIM_MODE_7, 0, NULL);
-
- // Set the text
- Rect textRect;
- _globals->gfxManager()._font.getStringBounds(msg.c_str(), textRect, _textWidth);
- textRect.center(_sceneObject._position.x, _sceneObject._position.y);
- _textPos.x = textRect.left;
- Speaker::setText(msg);
-}
-
-void SpeakerGText::removeText() {
- _sceneObject.remove();
- Speaker::removeText();
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerPOR::SpeakerPOR() {
- _speakerName = "POR";
- _newSceneNumber = 7221;
- _textPos = Common::Point(10, 30);
- _color1 = 41;
-}
-
-void SpeakerPOR::SpeakerAction1::signal(){
- switch (_actionIndex++) {
- case 0:
- setDelay(_globals->_randomSource.getRandomNumber(60) + 60);
- break;
- case 1:
- static_cast<SceneObject *>(_owner)->animate(ANIM_MODE_5, this, NULL);
- break;
- case 2:
- setDelay(_globals->_randomSource.getRandomNumber(10));
- _actionIndex = 0;
- break;
- default:
- break;
- }
-}
-
-void SpeakerPOR::setText(const Common::String &msg) {
- _object1.postInit(&_objectList);
- _object1.setVisage(7223);
- _object1.setStrip2(2);
- _object1.setPosition(Common::Point(191, 166));
- _object1.animate(ANIM_MODE_7, 0, NULL);
-
- _object2.postInit(&_objectList);
- _object2.setVisage(7223);
- _object2.setPosition(Common::Point(159, 86));
- _object2.setAction(&_speakerAction, NULL);
-
- _object3.postInit(&_objectList);
- _object3.setVisage(7223);
- _object3.setStrip(3);
- _object3.setPosition(Common::Point(119, 107));
- _object3.fixPriority(199);
- _object3.setAction(&_action2);
-
- Speaker::setText(msg);
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerOR::SpeakerOR() {
- _speakerName = "OR";
- _newSceneNumber = 9430;
- _textPos = Common::Point(8, 36);
- _color1 = 42;
- _textWidth = 136;
-}
-
-void SpeakerOR::setText(const Common::String &msg) {
- _object1.postInit(&_objectList);
- _object1.setVisage(9431);
- _object1.setStrip2(2);
- _object1.fixPriority(255);
- _object1.changeZoom(100);
- _object1._frame = 1;
- _object1.setPosition(Common::Point(202, 147));
- _object1.animate(ANIM_MODE_7, 0, NULL);
-
- _object2.postInit(&_objectList);
- _object2.setVisage(9431);
- _object2.setStrip2(1);
- _object2.fixPriority(255);
- _object2.setZoom(100);
- _object2._frame = 1;
- _object2.setPosition(Common::Point(199, 85));
- _object2.setAction(&_speakerAction, NULL);
-
- Speaker::setText(msg);
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerOText::SpeakerOText() : SpeakerGText() {
- _speakerName = "OTEXT";
- _textWidth = 240;
- _textPos = Common::Point(130, 10);
- _color1 = 42;
- _hideObjects = false;
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerQText::SpeakerQText() : ScreenSpeaker() {
- _speakerName = "QTEXT";
- _textPos = Common::Point(160, 40);
- _color1 = 35;
- _textWidth = 240;
- _textMode = ALIGN_CENTER;
- _hideObjects = false;
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerSText::SpeakerSText() : ScreenSpeaker() {
- _speakerName = "STEXT";
- _color1 = 13;
- _textWidth = 240;
- _textMode = ALIGN_CENTER;
- _hideObjects = false;
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerPOText::SpeakerPOText() : ScreenSpeaker() {
- _speakerName = "POTEXT";
- _textWidth = 240;
- _textMode = ALIGN_CENTER;
- _color1 = 41;
- _hideObjects = false;
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerMText::SpeakerMText() {
- _speakerName = "MTEXT";
- _color1 = 22;
- _textWidth = 230;
- _textMode = ALIGN_CENTER;
- _hideObjects = false;
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerCText::SpeakerCText() {
- _speakerName = "CTEXT";
- _color1 = 4;
- _textWidth = 240;
- _textMode = ALIGN_CENTER;
- _hideObjects = false;
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerEText::SpeakerEText() {
- _speakerName = "ETEXT";
- _textPos = Common::Point(20, 20);
- _color1 = 22;
- _hideObjects = false;
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerGR::SpeakerGR() : AnimatedSpeaker() {
- _speakerName = "GR";
- _newSceneNumber = 9220;
- _textWidth = 136;
- _textPos = Common::Point(168, 36);
- _color1 = 14;
-}
-
-void SpeakerGR::setText(const Common::String &msg) {
- _object1.postInit(&_objectList);
- _object1.setVisage(9221);
- _object1.setStrip2(2);
- _object1.fixPriority(255);
- _object1.changeZoom(100);
- _object1._frame = 1;
- _object1.setPosition(Common::Point(101, 70));
- _object1.animate(ANIM_MODE_7, 0, NULL);
-
- Speaker::setText(msg);
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerHText::SpeakerHText() {
- _speakerName = "HTEXT";
- _textPos = Common::Point(160, 40);
- _color1 = 52;
- _hideObjects = false;
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerSKText::SpeakerSKText() : ScreenSpeaker() {
- _speakerName = "SKTEXT";
- _textWidth = 240;
- _textMode = ALIGN_CENTER;
- _color1 = 9;
- _hideObjects = false;
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerPText::SpeakerPText() {
- _speakerName = "PTEXT";
- _textWidth = 240;
- _textMode = ALIGN_CENTER;
- _color1 = 5;
- _hideObjects = false;
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerCHFText::SpeakerCHFText() {
- _speakerName = "CHFTEXT";
- _textWidth = 240;
- _textMode = ALIGN_CENTER;
- _color1 = 56;
- _hideObjects = false;
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerCDRText::SpeakerCDRText() {
- _speakerName = "CDRTEXT";
- _textWidth = 240;
- _textMode = ALIGN_CENTER;
- _color1 = 52;
- _hideObjects = false;
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerFLText::SpeakerFLText() {
- _speakerName = "FLTEXT";
- _textPos = Common::Point(10, 40);
- _color1 = 17;
- _hideObjects = false;
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerBatText::SpeakerBatText() {
- _speakerName = "BATTEXT";
- _textWidth = 240;
- _textMode = ALIGN_CENTER;
- _color1 = 3;
- _hideObjects = false;
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerSKL::SpeakerSKL() : AnimatedSpeaker() {
- _speakerName = "SKL";
- _newSceneNumber = 7011;
- _textPos = Common::Point(10, 30);
- _color1 = 9;
-}
-
-void SpeakerSKL::setText(const Common::String &msg) {
- _object1.postInit(&_objectList);
- _object1.setVisage(7013);
- _object1.setStrip2(2);
- _object1.fixPriority(255);
- _object1.changeZoom(100);
- _object1._frame = 1;
- _object1.setPosition(Common::Point(203, 120));
- _object1.animate(ANIM_MODE_7, 0, NULL);
-
- _object2.postInit(&_objectList);
- _object2.setVisage(7013);
- _object2.setStrip2(1);
- _object2.fixPriority(255);
- _object2.changeZoom(100);
- _object2._frame = 1;
- _object2.setPosition(Common::Point(197, 80));
- _object2.setAction(&_speakerAction, NULL);
-
- Speaker::setText(msg);
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerQL::SpeakerQL() : AnimatedSpeaker() {
- _speakerName = "QL";
- _newSceneNumber = 2610;
- _textPos = Common::Point(160, 30);
- _color1 = 35;
- _textMode = ALIGN_CENTER;
-}
-
-void SpeakerQL::setText(const Common::String &msg) {
- _object1.postInit(&_objectList);
- _object1.setVisage(2612);
- _object1.setStrip2(2);
- _object1.fixPriority(255);
- _object1.changeZoom(100);
- _object1._frame = 1;
- _object1.setPosition(Common::Point(128, 146));
- _object1.animate(ANIM_MODE_7, 0, NULL);
-
- _object2.postInit(&_objectList);
- _object2.setVisage(2612);
- _object2.setStrip2(1);
- _object2.fixPriority(255);
- _object2.changeZoom(100);
- _object2._frame = 1;
- _object2.setPosition(Common::Point(122, 84));
- _object2.setAction(&_speakerAction, NULL);
-
- Speaker::setText(msg);
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerSR::SpeakerSR() {
- _speakerName = "SR";
- _newSceneNumber = 2811;
- _textPos = Common::Point(10, 30);
- _color1 = 13;
- _textMode = ALIGN_CENTER;
-}
-
-void SpeakerSR::setText(const Common::String &msg) {
- _object1.postInit(&_objectList);
- _object1.setVisage(2813);
- _object1.setStrip2(2);
- _object1.fixPriority(255);
- _object1.changeZoom(100);
- _object1._frame = 1;
- _object1.setPosition(Common::Point(224, 198));
- _object1.animate(ANIM_MODE_7, 0, NULL);
-
- _object2.postInit(&_objectList);
- _object2.setVisage(2813);
- _object2.setStrip2(1);
- _object2.fixPriority(255);
- _object2.changeZoom(100);
- _object2._frame = 1;
- _object2.setPosition(Common::Point(203, 96));
- _object2.setAction(&_speakerAction, NULL);
-
- _object3.postInit(&_objectList);
- _object3.setVisage(2813);
- _object3.setStrip(3);
- _object3.setPosition(Common::Point(204, 91));
- _object3.fixPriority(199);
- _object3._numFrames = 3;
- _object3.animate(ANIM_MODE_7, 0, NULL);
-
- Speaker::setText(msg);
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerSL::SpeakerSL() {
- _speakerName = "SL";
- _newSceneNumber = 2810;
- _textPos = Common::Point(140, 30);
- _textWidth = 160;
- _color1 = 13;
- _textMode = ALIGN_CENTER;
-}
-
-void SpeakerSL::setText(const Common::String &msg) {
- _object1.postInit(&_objectList);
- _object1.setVisage(2812);
- _object1.setStrip2(2);
- _object1.fixPriority(255);
- _object1.changeZoom(100);
- _object1._frame = 1;
- _object1.setPosition(Common::Point(95, 198));
- _object1.animate(ANIM_MODE_7, 0, NULL);
-
- _object2.postInit(&_objectList);
- _object2.setVisage(2812);
- _object2.setStrip2(1);
- _object2.fixPriority(255);
- _object2.changeZoom(100);
- _object2._frame = 1;
- _object2.setPosition(Common::Point(116, 96));
- _object2.setAction(&_speakerAction, NULL);
-
- Speaker::setText(msg);
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerQR::SpeakerQR() {
- _speakerName = "QR";
- _newSceneNumber = 2611;
- _textPos = Common::Point(10, 30);
- _color1 = 35;
- _textMode = ALIGN_CENTER;
-}
-
-void SpeakerQR::setText(const Common::String &msg) {
- _object1.postInit(&_objectList);
- _object1.setVisage(2613);
- _object1.setStrip2(2);
- _object1.fixPriority(255);
- _object1.changeZoom(100);
- _object1._frame = 1;
- _object1.setPosition(Common::Point(191, 146));
- _object1.animate(ANIM_MODE_7, 0, NULL);
-
- _object2.postInit(&_objectList);
- _object2.setVisage(2613);
- _object2.setStrip2(1);
- _object2.fixPriority(255);
- _object2.changeZoom(100);
- _object2._frame = 1;
- _object2.setPosition(Common::Point(197, 84));
- _object2.setAction(&_speakerAction, NULL);
-
- Speaker::setText(msg);
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerQU::SpeakerQU() {
- _speakerName = "QU";
- _newSceneNumber = 7020;
- _textPos = Common::Point(160, 30);
- _color1 = 35;
- _textMode = ALIGN_CENTER;
-}
-
-void SpeakerQU::setText(const Common::String &msg) {
- _object1.postInit(&_objectList);
- _object1.setVisage(7021);
- _object1.setStrip2(2);
- _object1.fixPriority(255);
- _object1.changeZoom(100);
- _object1._frame = 1;
- _object1.setPosition(Common::Point(116, 120));
- _object1.animate(ANIM_MODE_7, 0, NULL);
-
- _object2.postInit(&_objectList);
- _object2.setVisage(7021);
- _object2.setStrip2(1);
- _object2.fixPriority(255);
- _object2.changeZoom(100);
- _object2._frame = 1;
- _object2.setPosition(Common::Point(111, 84));
- _object2.setAction(&_speakerAction, NULL);
-
- Speaker::setText(msg);
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerCR::SpeakerCR() {
- _speakerName = "CR";
- _newSceneNumber = 9010;
- _textPos = Common::Point(20, 40);
- _color1 = 4;
-}
-
-void SpeakerCR::setText(const Common::String &msg) {
- _object1.postInit(&_objectList);
- _object1.setVisage(9011);
- _object1.setStrip2(2);
- _object1.fixPriority(255);
- _object1.setPosition(Common::Point(219, 168));
- _object1.animate(ANIM_MODE_7, 0, NULL);
-
- _object2.postInit(&_objectList);
- _object2.setVisage(9011);
- _object2.setStrip2(1);
- _object2.fixPriority(255);
- _object2.setPosition(Common::Point(232, 81));
- _object2.setAction(&_speakerAction, NULL);
-
- Speaker::setText(msg);
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerMR::SpeakerMR() {
- _speakerName = "MR";
- _newSceneNumber = 2711;
- _textPos = Common::Point(10, 40);
- _color1 = 22;
-}
-
-void SpeakerMR::setText(const Common::String &msg) {
- _object1.postInit(&_objectList);
- _object1.setVisage(2713);
- _object1.setStrip2(2);
- _object1.fixPriority(255);
- _object1.changeZoom(100);
- _object1._frame = 1;
- _object1.setPosition(Common::Point(220, 143));
- _object1.animate(ANIM_MODE_7, 0, NULL);
-
- _object2.postInit(&_objectList);
- _object2.setVisage(2713);
- _object2.setStrip2(1);
- _object2.fixPriority(255);
- _object2.changeZoom(100);
- _object2._frame = 1;
- _object2.setPosition(Common::Point(215, 99));
- _object2.setAction(&_speakerAction, NULL);
-
- Speaker::setText(msg);
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerSAL::SpeakerSAL() {
- _speakerName = "SAL";
- _newSceneNumber = 2851;
- _textPos = Common::Point(10, 30);
- _color1 = 13;
- _textMode = ALIGN_CENTER;
-}
-
-void SpeakerSAL::setText(const Common::String &msg) {
- _object1.postInit(&_objectList);
- _object1.setVisage(2853);
- _object1.setStrip2(2);
- _object1.fixPriority(255);
- _object1.changeZoom(100);
- _object1._frame = 1;
- _object1.setPosition(Common::Point(185, 200));
- _object1.animate(ANIM_MODE_7, 0, NULL);
-
- _object2.postInit(&_objectList);
- _object2.setVisage(2853);
- _object2.setStrip2(1);
- _object2.fixPriority(255);
- _object2.changeZoom(100);
- _object2._frame = 1;
- _object2.setPosition(Common::Point(170, 92));
- _object2.setAction(&_speakerAction, NULL);
-
- Speaker::setText(msg);
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerML::SpeakerML() {
- _speakerName = "ML";
- _newSceneNumber = 2710;
- _textPos = Common::Point(160, 40);
- _color1 = 22;
-}
-
-void SpeakerML::setText(const Common::String &msg) {
- _object1.postInit(&_objectList);
- _object1.setVisage(2712);
- _object1.setStrip2(2);
- _object1.fixPriority(255);
- _object1.changeZoom(100);
- _object1._frame = 1;
- _object1.setPosition(Common::Point(99, 143));
- _object1.animate(ANIM_MODE_7, 0, NULL);
-
- _object2.postInit(&_objectList);
- _object2.setVisage(2712);
- _object2.setStrip2(1);
- _object2.fixPriority(255);
- _object2.changeZoom(100);
- _object2._frame = 1;
- _object2.setPosition(Common::Point(105, 99));
- _object2.setAction(&_speakerAction, NULL);
-
- Speaker::setText(msg);
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerCHFL::SpeakerCHFL() {
- _speakerName = "CHFL";
- _newSceneNumber = 4111;
- _textPos = Common::Point(10, 40);
- _color1 = 56;
-}
-
-void SpeakerCHFL::setText(const Common::String &msg) {
- _object1.postInit(&_objectList);
- _object1.setVisage(4113);
- _object1.setStrip2(2);
- _object1.fixPriority(255);
- _object1.changeZoom(100);
- _object1._frame = 1;
- _object1.setPosition(Common::Point(205, 116));
- _object1.animate(ANIM_MODE_7, 0, NULL);
-
- _object2.postInit(&_objectList);
- _object2.setVisage(4113);
- _object2.setStrip2(1);
- _object2.fixPriority(255);
- _object2.changeZoom(100);
- _object2._frame = 1;
- _object2.setPosition(Common::Point(202, 71));
- _object2.setAction(&_speakerAction, NULL);
-
- Speaker::setText(msg);
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerCHFR::SpeakerCHFR() {
- _speakerName = "CHFR";
- _newSceneNumber = 4110;
- _textPos = Common::Point(160, 40);
- _color1 = 56;
-}
-
-void SpeakerCHFR::setText(const Common::String &msg) {
- _object1.postInit(&_objectList);
- _object1.setVisage(4112);
- _object1.setStrip2(2);
- _object1.fixPriority(255);
- _object1.changeZoom(100);
- _object1._frame = 1;
- _object1.setPosition(Common::Point(103, 116));
- _object1.animate(ANIM_MODE_7, 0, NULL);
-
- _object2.postInit(&_objectList);
- _object2.setVisage(4112);
- _object2.setStrip2(1);
- _object2.fixPriority(255);
- _object2.changeZoom(100);
- _object2._frame = 1;
- _object2.setPosition(Common::Point(106, 71));
- _object2.setAction(&_speakerAction, NULL);
-
- Speaker::setText(msg);
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerPL::SpeakerPL() {
- _speakerName = "PL";
- _newSceneNumber = 4060;
- _textPos = Common::Point(160, 40);
- _color1 = 5;
-}
-
-void SpeakerPL::setText(const Common::String &msg) {
- _object1.postInit(&_objectList);
- _object1.setVisage(4062);
- _object1.setStrip2(2);
- _object1.fixPriority(255);
- _object1.changeZoom(100);
- _object1._frame = 1;
- _object1.setPosition(Common::Point(107, 117));
- _object1.animate(ANIM_MODE_7, 0, NULL);
-
- _object2.postInit(&_objectList);
- _object2.setVisage(4062);
- _object2.setStrip2(1);
- _object2.fixPriority(200);
- _object2.changeZoom(100);
- _object2._frame = 1;
- _object2.setPosition(Common::Point(105, 62));
- _object2.setAction(&_speakerAction, NULL);
-
- _object3.postInit(&_objectList);
- _object3.setVisage(4062);
- _object3.setStrip2(3);
- _object3.fixPriority(255);
- _object3.changeZoom(100);
- _object3._frame = 1;
- _object3.setPosition(Common::Point(105, 59));
- _object3.setAction(&_speakerAction2, NULL);
-
- Speaker::setText(msg);
-}
-
-void SpeakerPL::removeText() {
- _object3.remove();
- AnimatedSpeaker::removeText();
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerPR::SpeakerPR() {
- _speakerName = "PR";
- _newSceneNumber = 4061;
- _textPos = Common::Point(10, 40);
- _color1 = 5;
-}
-
-void SpeakerPR::setText(const Common::String &msg) {
- _object1.postInit(&_objectList);
- _object1.setVisage(4063);
- _object1.setStrip2(1);
- _object1.fixPriority(255);
- _object1.changeZoom(100);
- _object1._frame = 1;
- _object1.setPosition(Common::Point(212, 117));
- _object1.animate(ANIM_MODE_7, 0, NULL);
-
- _object2.postInit(&_objectList);
- _object2.setVisage(4063);
- _object2.setStrip2(2);
- _object2.fixPriority(200);
- _object2.changeZoom(100);
- _object2._frame = 1;
- _object2.setPosition(Common::Point(214, 62));
- _object2.setAction(&_speakerAction, NULL);
-
- _object3.postInit(&_objectList);
- _object3.setVisage(4063);
- _object3.setStrip2(3);
- _object3.fixPriority(255);
- _object3.changeZoom(100);
- _object3._frame = 1;
- _object3.setPosition(Common::Point(214, 59));
- _object3.setAction(&_speakerAction2, NULL);
-
- Speaker::setText(msg);
-}
-
-void SpeakerPR::removeText() {
- _object3.remove();
- AnimatedSpeaker::removeText();
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerCDR::SpeakerCDR() {
- _speakerName = "CDR";
- _newSceneNumber = 4161;
- _textPos = Common::Point(10, 40);
- _color1 = 52;
-}
-
-void SpeakerCDR::setText(const Common::String &msg) {
- _object1.postInit(&_objectList);
- _object1.setVisage(4163);
- _object1.setStrip2(1);
- _object1.fixPriority(255);
- _object1.changeZoom(100);
- _object1._frame = 1;
- _object1.setPosition(Common::Point(208, 97));
- _object1.animate(ANIM_MODE_7, 0, NULL);
-
- _object2.postInit(&_objectList);
- _object2.setVisage(4163);
- _object2.setStrip2(2);
- _object2.fixPriority(255);
- _object2.changeZoom(100);
- _object2._frame = 1;
- _object2.setPosition(Common::Point(200, 57));
- _object2.setAction(&_speakerAction, NULL);
-
- Speaker::setText(msg);
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerCDL::SpeakerCDL() {
- _speakerName = "CDL";
- _newSceneNumber = 4160;
- _textPos = Common::Point(160, 40);
- _color1 = 52;
-}
-
-void SpeakerCDL::setText(const Common::String &msg) {
- _object1.postInit(&_objectList);
- _object1.setVisage(4162);
- _object1.setStrip2(1);
- _object1.fixPriority(255);
- _object1.changeZoom(100);
- _object1._frame = 1;
- _object1.setPosition(Common::Point(112, 97));
- _object1.animate(ANIM_MODE_7, 0, NULL);
-
- _object2.postInit(&_objectList);
- _object2.setVisage(4162);
- _object2.setStrip2(2);
- _object2.fixPriority(255);
- _object2.changeZoom(100);
- _object2._frame = 1;
- _object2.setPosition(Common::Point(115, 57));
- _object2.setAction(&_speakerAction, NULL);
-
- Speaker::setText(msg);
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerFLL::SpeakerFLL() {
- _speakerName = "FLL";
- _newSceneNumber = 5221;
- _textPos = Common::Point(10, 40);
- _color1 = 17;
-}
-
-void SpeakerFLL::setText(const Common::String &msg) {
- _object1.postInit(&_objectList);
- _object1.setVisage(5223);
- _object1.setStrip2(2);
- _object1.fixPriority(255);
- _object1.changeZoom(100);
- _object1._frame = 1;
- _object1.setPosition(Common::Point(216, 129));
- _object1.animate(ANIM_MODE_7, 0, NULL);
-
- _object2.postInit(&_objectList);
- _object2.setVisage(5223);
- _object2.setStrip2(1);
- _object2.fixPriority(255);
- _object2.changeZoom(100);
- _object2._frame = 1;
- _object2.setPosition(Common::Point(210, 67));
- _object2.setAction(&_speakerAction, NULL);
-
- Speaker::setText(msg);
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerBatR::SpeakerBatR() {
- _speakerName = "BATR";
- _newSceneNumber = 5360;
- _textPos = Common::Point(140, 40);
- _color1 = 3;
-}
-
-void SpeakerBatR::setText(const Common::String &msg) {
- _object1.postInit(&_objectList);
- _object1.setVisage(5361);
- _object1.setStrip2(2);
- _object1.fixPriority(255);
- _object1.changeZoom(100);
- _object1._frame = 1;
- _object1.setPosition(Common::Point(137, 122));
- _object1.animate(ANIM_MODE_7, 0, NULL);
-
- _object2.postInit(&_objectList);
- _object2.setVisage(5361);
- _object2.setStrip2(1);
- _object2.fixPriority(255);
- _object2.changeZoom(100);
- _object2._frame = 1;
- _object2.setPosition(Common::Point(137, 104));
- _object2.setAction(&_speakerAction, NULL);
-
- Speaker::setText(msg);
-}
-
-/*--------------------------------------------------------------------------*/
-
RingworldInvObjectList::RingworldInvObjectList() :
_stunner(2280, 1, 2, OBJECT_STUNNER, "This is your stunner."),
_scanner(1, 1, 3, OBJECT_SCANNER, "A combination scanner comm unit."),
@@ -1277,51 +404,6 @@ RingworldInvObjectList::RingworldInvObjectList() :
/*--------------------------------------------------------------------------*/
-void RingworldGame::restartGame() {
- if (MessageDialog::show(RESTART_MSG, CANCEL_BTN_STRING, RESTART_BTN_STRING) == 1)
- _globals->_game->restart();
-}
-
-void RingworldGame::saveGame() {
- if (!_vm->canSaveGameStateCurrently())
- MessageDialog::show(SAVING_NOT_ALLOWED_MSG, OK_BTN_STRING);
- else {
- // Show the save dialog
- handleSaveLoad(true, _globals->_sceneHandler->_saveGameSlot, _globals->_sceneHandler->_saveName);
- }
-}
-
-void RingworldGame::restoreGame() {
- if (!_vm->canLoadGameStateCurrently())
- MessageDialog::show(RESTORING_NOT_ALLOWED_MSG, OK_BTN_STRING);
- else {
- // Show the load dialog
- handleSaveLoad(false, _globals->_sceneHandler->_loadGameSlot, _globals->_sceneHandler->_saveName);
- }
-}
-
-void RingworldGame::quitGame() {
- if (MessageDialog::show(QUIT_CONFIRM_MSG, CANCEL_BTN_STRING, QUIT_BTN_STRING) == 1)
- _vm->quitGame();
-}
-
-void RingworldGame::handleSaveLoad(bool saveFlag, int &saveSlot, Common::String &saveName) {
- const EnginePlugin *plugin = 0;
- EngineMan.findGame(_vm->getGameId(), &plugin);
- GUI::SaveLoadChooser *dialog;
- if (saveFlag)
- dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save"));
- else
- dialog = new GUI::SaveLoadChooser(_("Load game:"), _("Load"));
-
- dialog->setSaveMode(saveFlag);
-
- saveSlot = dialog->runModalWithPluginAndTarget(plugin, ConfMan.getActiveDomainName());
- saveName = dialog->getResultString();
-
- delete dialog;
-}
-
void RingworldGame::start() {
// Set some default flags
_globals->setFlag(12);
@@ -1448,15 +530,10 @@ void RingworldGame::processEvent(Event &event) {
MessageDialog::show(HELP_MSG, OK_BTN_STRING);
break;
- case Common::KEYCODE_F2: {
+ case Common::KEYCODE_F2:
// F2 - Sound Options
- ConfigDialog *dlg = new ConfigDialog();
- dlg->runModal();
- delete dlg;
- _globals->_soundManager.syncSounds();
- _globals->_events.setCursorFromFlag();
+ SoundDialog::execute();
break;
- }
case Common::KEYCODE_F3:
// F3 - Quit
@@ -1489,6 +566,12 @@ void RingworldGame::processEvent(Event &event) {
}
}
+void RingworldGame::rightClick() {
+ RightClickDialog *dlg = new RightClickDialog();
+ dlg->execute();
+ delete dlg;
+}
+
} // End of namespace Ringworld
} // End of namespace TsAGE
diff --git a/engines/tsage/ringworld/ringworld_logic.h b/engines/tsage/ringworld/ringworld_logic.h
index 73ecc9722b..40b202bd7f 100644
--- a/engines/tsage/ringworld/ringworld_logic.h
+++ b/engines/tsage/ringworld/ringworld_logic.h
@@ -35,19 +35,6 @@ namespace Ringworld {
using namespace TsAGE;
-#define ADD_PLAYER_MOVER(X, Y) { Common::Point pt(X, Y); PlayerMover *mover = new PlayerMover(); \
- _globals->_player.addMover(mover, &pt, this); }
-#define ADD_PLAYER_MOVER_NULL(OBJ, X, Y) { Common::Point pt(X, Y); PlayerMover *mover = new PlayerMover(); \
- OBJ.addMover(mover, &pt, NULL); }
-#define ADD_PLAYER_MOVER_THIS(OBJ, X, Y) { Common::Point pt(X, Y); PlayerMover *mover = new PlayerMover(); \
- OBJ.addMover(mover, &pt, this); }
-
-#define ADD_MOVER(OBJ, X, Y) { Common::Point pt(X, Y); NpcMover *mover = new NpcMover(); \
- OBJ.addMover(mover, &pt, this); }
-#define ADD_MOVER_NULL(OBJ, X, Y) { Common::Point pt(X, Y); NpcMover *mover = new NpcMover(); \
- OBJ.addMover(mover, &pt, NULL); }
-
-
class SceneFactory {
public:
static Scene *createScene(int sceneNumber);
@@ -79,6 +66,17 @@ public:
}
};
+class SceneObjectExt : public SceneObject {
+public:
+ int _state;
+
+ virtual void synchronize(Serializer &s) {
+ SceneObject::synchronize(s);
+ s.syncAsSint16LE(_state);
+ }
+ virtual Common::String getClassName() { return "SceneObjectExt"; }
+};
+
class SceneArea : public SavedObject {
public:
GfxSurface _surface;
@@ -104,302 +102,6 @@ public:
};
/*--------------------------------------------------------------------------*/
-// Ringworld specific game speakers
-
-class SpeakerGText : public Speaker {
-public:
- SceneObject _sceneObject;
-public:
- SpeakerGText();
-
- virtual Common::String getClassName() { return "SpeakerGText"; }
- virtual void setText(const Common::String &msg);
- virtual void removeText();
-};
-
-class SpeakerPOR : public AnimatedSpeaker {
- class SpeakerAction1 : public SpeakerAction {
- public:
- virtual void signal();
- };
-
-public:
- SceneObject _object3;
- SpeakerAction1 _action2;
-public:
- SpeakerPOR();
- virtual Common::String getClassName() { return "SpeakerPOR"; }
- virtual void setText(const Common::String &msg);
-};
-
-class SpeakerOR : public AnimatedSpeaker {
-public:
- SpeakerOR();
- virtual Common::String getClassName() { return "SpeakerOR"; }
- virtual void setText(const Common::String &msg);
-};
-
-class SpeakerOText : public SpeakerGText {
-public:
- SpeakerOText();
-
- virtual Common::String getClassName() { return "SpeakerOText"; }
-};
-
-class SpeakerPOText : public ScreenSpeaker {
-public:
- SpeakerPOText();
-
- virtual Common::String getClassName() { return "SpeakerPOText"; }
-};
-
-class SpeakerSText : public ScreenSpeaker {
-public:
- SpeakerSText();
-
- virtual Common::String getClassName() { return "SpeakerSText"; }
-};
-
-class SpeakerQText : public ScreenSpeaker {
-public:
- SpeakerQText();
-
- virtual Common::String getClassName() { return "SpeakerQText"; }
-};
-
-class SpeakerMText : public ScreenSpeaker {
-public:
- SpeakerMText();
-
- virtual Common::String getClassName() { return "SpeakerMText"; }
-};
-
-class SpeakerCText : public ScreenSpeaker {
-public:
- SpeakerCText();
-
- virtual Common::String getClassName() { return "SpeakerCText"; }
-};
-
-class SpeakerEText : public ScreenSpeaker {
-public:
- SpeakerEText();
-
- virtual Common::String getClassName() { return "SpeakerEText"; }
-};
-
-class SpeakerGR : public AnimatedSpeaker {
-public:
- SpeakerGR();
-
- virtual Common::String getClassName() { return "SpeakerGR"; }
- virtual void setText(const Common::String &msg);
-};
-
-class SpeakerHText : public ScreenSpeaker {
-public:
- SpeakerHText();
-
- virtual Common::String getClassName() { return "SpeakerHText"; }
-};
-
-class SpeakerPText : public ScreenSpeaker {
-public:
- SpeakerPText();
-
- virtual Common::String getClassName() { return "SpeakerPText"; }
-};
-
-class SpeakerCHFText : public ScreenSpeaker {
-public:
- SpeakerCHFText();
-
- virtual Common::String getClassName() { return "SpeakerCHFText"; }
-};
-
-class SpeakerSKText : public ScreenSpeaker {
-public:
- SpeakerSKText();
-
- virtual Common::String getClassName() { return "SpeakerSKText"; }
-};
-
-class SpeakerCDRText : public ScreenSpeaker {
-public:
- SpeakerCDRText();
-
- virtual Common::String getClassName() { return "SpeakerCDRText"; }
-};
-
-class SpeakerFLText : public ScreenSpeaker {
-public:
- SpeakerFLText();
-
- virtual Common::String getClassName() { return "SpeakerFLText"; }
-};
-
-class SpeakerBatText : public ScreenSpeaker {
-public:
- SpeakerBatText();
-
- virtual Common::String getClassName() { return "SpeakerFLText"; }
-};
-
-class SpeakerQR : public AnimatedSpeaker {
-public:
- SpeakerQR();
-
- virtual Common::String getClassName() { return "SpeakerQR"; }
- virtual void setText(const Common::String &msg);
-};
-
-class SpeakerQU : public AnimatedSpeaker {
-public:
- SpeakerQU();
-
- virtual Common::String getClassName() { return "SpeakerQU"; }
- virtual void setText(const Common::String &msg);
-};
-
-class SpeakerSKL : public AnimatedSpeaker {
-public:
- SpeakerSKL();
-
- virtual Common::String getClassName() { return "SpeakerQL"; }
- virtual void setText(const Common::String &msg);
-};
-
-class SpeakerQL : public AnimatedSpeaker {
-public:
- SpeakerQL();
-
- virtual Common::String getClassName() { return "SpeakerQL"; }
- virtual void setText(const Common::String &msg);
-};
-
-class SpeakerSR : public AnimatedSpeaker {
-public:
- SceneObject _object3;
-public:
- SpeakerSR();
-
- virtual Common::String getClassName() { return "SpeakerSR"; }
- void setText(const Common::String &msg);
-};
-
-class SpeakerSL : public AnimatedSpeaker {
-public:
- SpeakerSL();
-
- virtual Common::String getClassName() { return "SpeakerSL"; }
- virtual void setText(const Common::String &msg);
-};
-
-class SpeakerCR : public AnimatedSpeaker {
-public:
- SpeakerCR();
-
- virtual Common::String getClassName() { return "SpeakerCR"; }
- virtual void setText(const Common::String &msg);
-};
-
-class SpeakerMR : public AnimatedSpeaker {
-public:
- SpeakerMR();
-
- virtual Common::String getClassName() { return "SpeakerMR"; }
- virtual void setText(const Common::String &msg);
-};
-
-class SpeakerSAL : public AnimatedSpeaker {
-public:
- SpeakerSAL();
-
- virtual Common::String getClassName() { return "SpeakerSAL"; }
- virtual void setText(const Common::String &msg);
-};
-
-class SpeakerML : public AnimatedSpeaker {
-public:
- SpeakerML();
-
- virtual Common::String getClassName() { return "SpeakerML"; }
- virtual void setText(const Common::String &msg);
-};
-
-class SpeakerCHFL : public AnimatedSpeaker {
-public:
- SpeakerCHFL();
-
- virtual Common::String getClassName() { return "SpeakerCHFL"; }
- virtual void setText(const Common::String &msg);
-};
-
-class SpeakerCHFR : public AnimatedSpeaker {
-public:
- SpeakerCHFR();
-
- virtual Common::String getClassName() { return "SpeakerCHFR"; }
- virtual void setText(const Common::String &msg);
-};
-
-class SpeakerPL : public AnimatedSpeaker {
-public:
- SceneObject _object3;
- SpeakerAction _speakerAction2;
-
- SpeakerPL();
-
- virtual Common::String getClassName() { return "SpeakerPL"; }
- virtual void setText(const Common::String &msg);
- virtual void removeText();
-};
-
-class SpeakerPR : public AnimatedSpeaker {
-public:
- SceneObject _object3;
- SpeakerAction _speakerAction2;
-
- SpeakerPR();
-
- virtual Common::String getClassName() { return "SpeakerPR"; }
- virtual void setText(const Common::String &msg);
- virtual void removeText();
-};
-
-class SpeakerCDR : public AnimatedSpeaker {
-public:
- SpeakerCDR();
-
- virtual Common::String getClassName() { return "SpeakerCDR"; }
- virtual void setText(const Common::String &msg);
-};
-
-class SpeakerCDL : public AnimatedSpeaker {
-public:
- SpeakerCDL();
-
- virtual Common::String getClassName() { return "SpeakerCDL"; }
- virtual void setText(const Common::String &msg);
-};
-
-class SpeakerFLL : public AnimatedSpeaker {
-public:
- SpeakerFLL();
-
- virtual Common::String getClassName() { return "SpeakerFLL"; }
- virtual void setText(const Common::String &msg);
-};
-
-class SpeakerBatR : public AnimatedSpeaker {
-public:
- SpeakerBatR();
-
- virtual Common::String getClassName() { return "SpeakerBatR"; }
- virtual void setText(const Common::String &msg);
-};
-
-/*--------------------------------------------------------------------------*/
class RingworldInvObjectList : public InvObjectList {
public:
@@ -445,19 +147,14 @@ public:
#define RING_INVENTORY (*((::TsAGE::Ringworld::RingworldInvObjectList *)_globals->_inventory))
class RingworldGame: public Game {
-protected:
- virtual void handleSaveLoad(bool saveFlag, int &saveSlot, Common::String &saveName);
public:
virtual void start();
virtual void restart();
- virtual void restartGame();
- virtual void saveGame();
- virtual void restoreGame();
- virtual void quitGame();
virtual void endGame(int resNum, int lineNum);
virtual Scene *createScene(int sceneNumber);
virtual void processEvent(Event &event);
+ virtual void rightClick();
};
} // End of namespace Ringworld
diff --git a/engines/tsage/ringworld/ringworld_scenes1.h b/engines/tsage/ringworld/ringworld_scenes1.h
index 49ea65eb3a..bb98c89a8c 100644
--- a/engines/tsage/ringworld/ringworld_scenes1.h
+++ b/engines/tsage/ringworld/ringworld_scenes1.h
@@ -25,6 +25,7 @@
#include "common/scummsys.h"
#include "tsage/ringworld/ringworld_logic.h"
+#include "tsage/ringworld/ringworld_speakers.h"
#include "tsage/converse.h"
#include "tsage/events.h"
#include "tsage/core.h"
diff --git a/engines/tsage/ringworld/ringworld_scenes10.cpp b/engines/tsage/ringworld/ringworld_scenes10.cpp
index df25c324ab..1d310c6f8f 100644
--- a/engines/tsage/ringworld/ringworld_scenes10.cpp
+++ b/engines/tsage/ringworld/ringworld_scenes10.cpp
@@ -145,13 +145,13 @@ void Scene9100::postInit(SceneObjectList *OwnerList) {
_object6.setStrip(6);
_object6.setFrame(1);
_object6.setPosition(Common::Point(138, 166));
- _sceneHotspot3.setup(145, 125, 166, 156, 9100, 40, 43);
+ _sceneHotspot3.setDetails(145, 125, 166, 156, 9100, 40, 43);
}
- _sceneHotspot1.setup(140, 176, 185, 215, 9100, 36, 37);
- _sceneHotspot2.setup(161, 138, 182, 175, 9100, 38, 39);
- _sceneHotspot4.setup(37, 196, 47, 320, 9100, 44, -1);
- _sceneHotspot5.setup(69, 36, 121, 272, 9100, 45, 46);
- _sceneHotspot6.setup(127, 0, 200, 52, 9100, 47, 48);
+ _sceneHotspot1.setDetails(140, 176, 185, 215, 9100, 36, 37);
+ _sceneHotspot2.setDetails(161, 138, 182, 175, 9100, 38, 39);
+ _sceneHotspot4.setDetails(37, 196, 47, 320, 9100, 44, -1);
+ _sceneHotspot5.setDetails(69, 36, 121, 272, 9100, 45, 46);
+ _sceneHotspot6.setDetails(127, 0, 200, 52, 9100, 47, 48);
_globals->_soundHandler.play(251);
if (_globals->_sceneManager._previousScene == 9150) {
@@ -261,16 +261,16 @@ void Scene9150::postInit(SceneObjectList *OwnerList) {
_object3.setPosition(Common::Point(312, 95));
_object3.signal();
- _sceneHotspot1.setup(0, 0, 200, 94, 9150, 46, -1);
- _sceneHotspot2.setup(51, 90, 118, 230, 9150, 47, -1);
- _sceneHotspot3.setup(182, 104, 200, 320, 9150, 48, 49);
- _sceneHotspot4.setup(103, 292, 152, 314, 9150, 50, 51);
- _sceneHotspot5.setup(115, 350, 160, 374, 9150, 52, 53);
- _sceneHotspot6.setup(0, 471, 200, 531, 9150, 54, 55);
- _sceneHotspot7.setup(170, 320, 185, 640, 9150, 56, -1);
- _sceneHotspot9.setup(157, 107, 186, 320, 9150, 56, -1);
- _sceneHotspot8.setup(133, 584, 142, 640, 9150, 57, -1);
- _sceneHotspot10.setup(83, 304, 103, 323, 9150, 58, 59);
+ _sceneHotspot1.setDetails(0, 0, 200, 94, 9150, 46, -1);
+ _sceneHotspot2.setDetails(51, 90, 118, 230, 9150, 47, -1);
+ _sceneHotspot3.setDetails(182, 104, 200, 320, 9150, 48, 49);
+ _sceneHotspot4.setDetails(103, 292, 152, 314, 9150, 50, 51);
+ _sceneHotspot5.setDetails(115, 350, 160, 374, 9150, 52, 53);
+ _sceneHotspot6.setDetails(0, 471, 200, 531, 9150, 54, 55);
+ _sceneHotspot7.setDetails(170, 320, 185, 640, 9150, 56, -1);
+ _sceneHotspot9.setDetails(157, 107, 186, 320, 9150, 56, -1);
+ _sceneHotspot8.setDetails(133, 584, 142, 640, 9150, 57, -1);
+ _sceneHotspot10.setDetails(83, 304, 103, 323, 9150, 58, 59);
_globals->_soundHandler.play(285);
_globals->_player.disableControl();
@@ -412,15 +412,15 @@ void Scene9200::postInit(SceneObjectList *OwnerList) {
if (!_globals->getFlag(86)) {
_object2.postInit();
- _hotspot1.setup(96, 194, 160, 234, 9200, 29, 31);
+ _hotspot1.setDetails(96, 194, 160, 234, 9200, 29, 31);
}
- _hotspot2.setup(164, 0, 200, 282, 9200, 0, 1);
- _hotspot3.setup(140, 39, 165, 153, 9200, 2, 3);
- _hotspot4.setup(92, 122, 139, 152, 9200, 4, 5);
- _hotspot5.setup(33, 20, 142, 115, 9200, 6, 7);
- _hotspot6.setup(104, 235, 153, 265, 9200, 8, 9);
- _hotspot7.setup(107, 262, 153, 286, 9200, 10, 11);
- _hotspot8.setup(69, 276, 164, 320, 9200, 12, 13);
+ _hotspot2.setDetails(164, 0, 200, 282, 9200, 0, 1);
+ _hotspot3.setDetails(140, 39, 165, 153, 9200, 2, 3);
+ _hotspot4.setDetails(92, 122, 139, 152, 9200, 4, 5);
+ _hotspot5.setDetails(33, 20, 142, 115, 9200, 6, 7);
+ _hotspot6.setDetails(104, 235, 153, 265, 9200, 8, 9);
+ _hotspot7.setDetails(107, 262, 153, 286, 9200, 10, 11);
+ _hotspot8.setDetails(69, 276, 164, 320, 9200, 12, 13);
_globals->_events.setCursor(CURSOR_WALK);
_globals->_player.disableControl();
@@ -514,19 +514,19 @@ void Scene9300::postInit(SceneObjectList *OwnerList) {
_object2.postInit();
_globals->_soundHandler.play(289);
- _hotspot1.setup(35, 142, 76, 212, 9300, 0, 1);
- _hotspot2.setup(28, 90, 81, 143, 9300, 2, 3);
- _hotspot3.setup(78, 142, 146, 216, 9300, 4, 5);
- _hotspot4.setup(3, 43, 91, 74, 9300, 6, 7);
- _hotspot5.setup(82, 19, 157, 65, 9300, 8, 9);
- _hotspot6.setup(5, 218, 84, 274, 9300, 10, 11);
- _hotspot7.setup(86, 233, 168, 293, 9300, 12, 13);
- _hotspot8.setup(157, 0, 200, 230, 9300, 14, 15);
- _hotspot9.setup(169, 227, 200, 320, 9300, 16, 17);
- _hotspot10.setup(145, 97, 166, 225, 9300, 18, 19);
- _hotspot11.setup(81, 75, 145, 145, 9300, 20, 21);
- _hotspot12.setup(0, 0, 94, 35, 9300, 22, 23);
- _hotspot13.setup(12, 268, 149, 320, 9300, 24, 25);
+ _hotspot1.setDetails(35, 142, 76, 212, 9300, 0, 1);
+ _hotspot2.setDetails(28, 90, 81, 143, 9300, 2, 3);
+ _hotspot3.setDetails(78, 142, 146, 216, 9300, 4, 5);
+ _hotspot4.setDetails(3, 43, 91, 74, 9300, 6, 7);
+ _hotspot5.setDetails(82, 19, 157, 65, 9300, 8, 9);
+ _hotspot6.setDetails(5, 218, 84, 274, 9300, 10, 11);
+ _hotspot7.setDetails(86, 233, 168, 293, 9300, 12, 13);
+ _hotspot8.setDetails(157, 0, 200, 230, 9300, 14, 15);
+ _hotspot9.setDetails(169, 227, 200, 320, 9300, 16, 17);
+ _hotspot10.setDetails(145, 97, 166, 225, 9300, 18, 19);
+ _hotspot11.setDetails(81, 75, 145, 145, 9300, 20, 21);
+ _hotspot12.setDetails(0, 0, 94, 35, 9300, 22, 23);
+ _hotspot13.setDetails(12, 268, 149, 320, 9300, 24, 25);
if (_globals->_sceneManager._previousScene == 9350) {
_globals->_player.disableControl();
@@ -593,11 +593,11 @@ void Scene9350::postInit(SceneObjectList *OwnerList) {
_globals->_player.postInit();
_object1.setup(9351, 1, 3, 139, 97, 0);
- _sceneHotspot1.setup(42, 0, 97, 60, 9350, 0, -1);
- _sceneHotspot2.setup(37, 205, 82, 256, 9350, 0, -1);
- _sceneHotspot3.setup(29, 93, 92, 174, 9350, 1, -1);
- _sceneHotspot4.setup(0, 308, 109, 320, 9350, 2, -1);
- _sceneHotspot5.setup(0, 0, 200, 320, 9350, 3, -1);
+ _sceneHotspot1.setDetails(42, 0, 97, 60, 9350, 0, -1);
+ _sceneHotspot2.setDetails(37, 205, 82, 256, 9350, 0, -1);
+ _sceneHotspot3.setDetails(29, 93, 92, 174, 9350, 1, -1);
+ _sceneHotspot4.setDetails(0, 308, 109, 320, 9350, 2, -1);
+ _sceneHotspot5.setDetails(0, 0, 200, 320, 9350, 3, -1);
_globals->_events.setCursor(CURSOR_WALK);
_globals->_player.disableControl();
@@ -677,14 +677,14 @@ void Scene9360::postInit(SceneObjectList *OwnerList) {
setZoomPercents(95, 80, 200, 100);
_globals->_player.postInit();
- _hotspot1.setup(37, 92, 93, 173, 9360, 0, 1);
- _hotspot2.setup(42, 0, 100, 63, 9360, 2, -1);
- _hotspot3.setup(36, 205, 82, 260, 9360, 3, -1);
- _hotspot4.setup(103, 2, 200, 320, 9360, 4, -1);
- _hotspot5.setup(0, 0, 37, 320, 9360, 4, -1);
- _hotspot6.setup(35, 61, 103, 92, 9360, 4, -1);
- _hotspot7.setup(33, 174, 93, 207, 9360, 4, -1);
- _hotspot8.setup(28, 257, 149, 320, 9360, 4, -1);
+ _hotspot1.setDetails(37, 92, 93, 173, 9360, 0, 1);
+ _hotspot2.setDetails(42, 0, 100, 63, 9360, 2, -1);
+ _hotspot3.setDetails(36, 205, 82, 260, 9360, 3, -1);
+ _hotspot4.setDetails(103, 2, 200, 320, 9360, 4, -1);
+ _hotspot5.setDetails(0, 0, 37, 320, 9360, 4, -1);
+ _hotspot6.setDetails(35, 61, 103, 92, 9360, 4, -1);
+ _hotspot7.setDetails(33, 174, 93, 207, 9360, 4, -1);
+ _hotspot8.setDetails(28, 257, 149, 320, 9360, 4, -1);
_globals->_events.setCursor(CURSOR_WALK);
_globals->_player.disableControl();
if (_globals->_sceneManager._previousScene == 9350) {
@@ -796,14 +796,14 @@ void Scene9400::postInit(SceneObjectList *OwnerList) {
_object3.postInit();
_speakerQText._textPos.x = 20;
- _hotspot7.setup(157, 66, 180, 110, 9400, 21, 23);
- _hotspot5.setup(130, 133, 152, 198, 9400, 22, -1);
- _hotspot1.setup(33, 280, 69, 297, 9400, 1, 2);
- _hotspot2.setup(73, 96, 87, 159, 9400, 3, 4);
- _hotspot3.setup(89, 253, 111, 305, 9400, 5, 6);
- _hotspot4.setup(46, 0, 116, 35, 9400, 7, 8);
- _hotspot8.setup(58, 169, 122, 200, 9400, 9, 10);
- _hotspot6.setup(0, 0, 199, 319, 9400, 16, 0);
+ _hotspot7.setDetails(157, 66, 180, 110, 9400, 21, 23);
+ _hotspot5.setDetails(130, 133, 152, 198, 9400, 22, -1);
+ _hotspot1.setDetails(33, 280, 69, 297, 9400, 1, 2);
+ _hotspot2.setDetails(73, 96, 87, 159, 9400, 3, 4);
+ _hotspot3.setDetails(89, 253, 111, 305, 9400, 5, 6);
+ _hotspot4.setDetails(46, 0, 116, 35, 9400, 7, 8);
+ _hotspot8.setDetails(58, 169, 122, 200, 9400, 9, 10);
+ _hotspot6.setDetails(0, 0, 199, 319, 9400, 16, 0);
_stripManager.addSpeaker(&_speakerQText);
_stripManager.addSpeaker(&_speakerOR);
@@ -992,23 +992,23 @@ void Scene9450::postInit(SceneObjectList *OwnerList) {
}
if (RING_INVENTORY._tunic._sceneNumber != 1)
- _hotspot1.setup(123, 139, 138, 170, 9450, 37, -1);
-
- _hotspot2.setup(153, 102, 176, 141, 9450, 39, 40);
- _hotspot3.setup(97, 198, 130, 229, 9450, 41, 42);
- _hotspot15.setup(131, 190, 145, 212, 9450, 43, 44);
- _hotspot4.setup(33, 144, 105, 192, 9450, 0, 1);
- _hotspot5.setup(20, 236, 106, 287, 9450, 2, 3);
- _hotspot6.setup(137, 119, 195, 320, 9450, 4, 5);
- _hotspot7.setup(20, 59, 99, 111, 9450, 6, -1);
- _hotspot8.setup(110, 0, 199, 117, 9450, 7, 8);
- _hotspot9.setup(101, 104, 130, 174, 9450, 9, 10);
- _hotspot10.setup(110, 246, 149, 319, 9450, 11, 12);
- _hotspot11.setup(16, 34, 74, 62, 6450, 13, 14);
- _hotspot12.setup(19, 108, 72, 134, 9450, 15, 16);
- _hotspot13.setup(18, 215, 71, 237, 9450, 17, 18);
- _hotspot14.setup(15, 288, 76, 314, 9450, 19, 20);
- _hotspot16.setup(0, 0, 200, 320, 9450, 46, -1);
+ _hotspot1.setDetails(123, 139, 138, 170, 9450, 37, -1);
+
+ _hotspot2.setDetails(153, 102, 176, 141, 9450, 39, 40);
+ _hotspot3.setDetails(97, 198, 130, 229, 9450, 41, 42);
+ _hotspot15.setDetails(131, 190, 145, 212, 9450, 43, 44);
+ _hotspot4.setDetails(33, 144, 105, 192, 9450, 0, 1);
+ _hotspot5.setDetails(20, 236, 106, 287, 9450, 2, 3);
+ _hotspot6.setDetails(137, 119, 195, 320, 9450, 4, 5);
+ _hotspot7.setDetails(20, 59, 99, 111, 9450, 6, -1);
+ _hotspot8.setDetails(110, 0, 199, 117, 9450, 7, 8);
+ _hotspot9.setDetails(101, 104, 130, 174, 9450, 9, 10);
+ _hotspot10.setDetails(110, 246, 149, 319, 9450, 11, 12);
+ _hotspot11.setDetails(16, 34, 74, 62, 6450, 13, 14);
+ _hotspot12.setDetails(19, 108, 72, 134, 9450, 15, 16);
+ _hotspot13.setDetails(18, 215, 71, 237, 9450, 17, 18);
+ _hotspot14.setDetails(15, 288, 76, 314, 9450, 19, 20);
+ _hotspot16.setDetails(0, 0, 200, 320, 9450, 46, -1);
}
/*--------------------------------------------------------------------------
@@ -1024,7 +1024,7 @@ void Scene9500::Hotspot1::doAction(int action) {
RING_INVENTORY._sword._sceneNumber = 9500;
_globals->_player.disableControl();
_globals->_sceneItems.remove(this);
- scene->_hotspot2.setup(87, 294, 104, 314, 9400, 17, -1);
+ scene->_hotspot2.setDetails(87, 294, 104, 314, 9400, 17, -1);
scene->setAction(&scene->_sequenceManager, scene, 9510, &_globals->_player, &scene->_object2, NULL);
} else {
NamedHotspot::doAction(action);
@@ -1182,37 +1182,37 @@ void Scene9500::postInit(SceneObjectList *OwnerList) {
_object2.setPosition(Common::Point(303, 130));
_object2.fixPriority(132);
if (RING_INVENTORY._helmet._sceneNumber == 1) {
- _hotspot2.setup(87, 294, 104, 314, 9400, 17, -1);
+ _hotspot2.setDetails(87, 294, 104, 314, 9400, 17, -1);
} else {
_object2.setStrip(2);
_object2.setFrame(1);
}
} else {
- _hotspot1.setup(105, 295, 134, 313, 9500, 9, 10);
+ _hotspot1.setDetails(105, 295, 134, 313, 9500, 9, 10);
}
- _hotspot17.setup(101, 293, 135, 315, 9500, 9, 10);
- _hotspot3.setup(84, 12, 107, 47, 9500, 15, 15);
- _hotspot6.setup(93, 11, 167, 46, 9500, 0, 1);
- _hotspot7.setup(100, 70, 125, 139, 9500, 2, 3);
+ _hotspot17.setDetails(101, 293, 135, 315, 9500, 9, 10);
+ _hotspot3.setDetails(84, 12, 107, 47, 9500, 15, 15);
+ _hotspot6.setDetails(93, 11, 167, 46, 9500, 0, 1);
+ _hotspot7.setDetails(100, 70, 125, 139, 9500, 2, 3);
if (!_globals->getFlag(85)) {
- _hotspot5.setup(111, 68, 155, 244, 9500, 17, -1);
- _hotspot4.setup(57, 71, 120, 126, 9500, 16, -1);
- }
-
- _hotspot8.setup(60, 24, 90, 53, 9500, 4, 5);
- _hotspot9.setup(72, 143, 93, 163, 9500, 4, 5);
- _hotspot10.setup(70, 205, 92, 228, 9500, 4, 5);
- _hotspot11.setup(66, 291, 90, 317, 9500, 4, 5);
- _hotspot12.setup(22, 58, 101, 145, 9500, 6, 7);
- _hotspot13.setup(121, 57, 163, 249, 9500, 6, 7);
- _hotspot14.setup(115, 133, 135, 252, 9500, 6, 7);
- _hotspot15.setup(55, 240, 125, 254, 9500, 6, 7);
- _hotspot16.setup(53, 251, 132, 288, 9500, 8, -1);
- _hotspot19.setup(101, 207, 120, 225, 9500, 9, 10);
- _hotspot18.setup(98, 144, 117, 162, 9500, 9, 10);
- _hotspot20.setup(102, 27, 132, 50, 9500, 9, 10);
+ _hotspot5.setDetails(111, 68, 155, 244, 9500, 17, -1);
+ _hotspot4.setDetails(57, 71, 120, 126, 9500, 16, -1);
+ }
+
+ _hotspot8.setDetails(60, 24, 90, 53, 9500, 4, 5);
+ _hotspot9.setDetails(72, 143, 93, 163, 9500, 4, 5);
+ _hotspot10.setDetails(70, 205, 92, 228, 9500, 4, 5);
+ _hotspot11.setDetails(66, 291, 90, 317, 9500, 4, 5);
+ _hotspot12.setDetails(22, 58, 101, 145, 9500, 6, 7);
+ _hotspot13.setDetails(121, 57, 163, 249, 9500, 6, 7);
+ _hotspot14.setDetails(115, 133, 135, 252, 9500, 6, 7);
+ _hotspot15.setDetails(55, 240, 125, 254, 9500, 6, 7);
+ _hotspot16.setDetails(53, 251, 132, 288, 9500, 8, -1);
+ _hotspot19.setDetails(101, 207, 120, 225, 9500, 9, 10);
+ _hotspot18.setDetails(98, 144, 117, 162, 9500, 9, 10);
+ _hotspot20.setDetails(102, 27, 132, 50, 9500, 9, 10);
_globals->_events.setCursor(CURSOR_WALK);
_globals->_player.disableControl();
@@ -1223,7 +1223,7 @@ void Scene9500::postInit(SceneObjectList *OwnerList) {
setAction(&_sequenceManager, this, 9501, &_globals->_player, &_candle, NULL);
} else {
RING_INVENTORY._helmet._sceneNumber = 9500;
- _hotspot2.setup(87, 294, 104, 314, 9400, 17, -1);
+ _hotspot2.setDetails(87, 294, 104, 314, 9400, 17, -1);
setAction(&_sequenceManager, this, 9513, &_globals->_player, &_object2, NULL);
}
} else {
@@ -1282,12 +1282,12 @@ void Scene9700::postInit(SceneObjectList *OwnerList) {
Scene::postInit();
setZoomPercents(0, 100, 200, 100);
- _sceneHotspot1.setup(84, 218, 151, 278, 9700, 14, -1);
- _sceneHotspot2.setup(89, 11, 151, 121, 9700, 14, -1);
- _sceneHotspot3.setup(69, 119, 138, 216, 9700, 15, 16);
- _sceneHotspot4.setup(34, 13, 88, 116, 9700, 17, -1);
- _sceneHotspot5.setup(52, 119, 68, 204, 9700, 17, -1);
- _sceneHotspot6.setup(0, 22, 56, 275, 9700, 18, -1);
+ _sceneHotspot1.setDetails(84, 218, 151, 278, 9700, 14, -1);
+ _sceneHotspot2.setDetails(89, 11, 151, 121, 9700, 14, -1);
+ _sceneHotspot3.setDetails(69, 119, 138, 216, 9700, 15, 16);
+ _sceneHotspot4.setDetails(34, 13, 88, 116, 9700, 17, -1);
+ _sceneHotspot5.setDetails(52, 119, 68, 204, 9700, 17, -1);
+ _sceneHotspot6.setDetails(0, 22, 56, 275, 9700, 18, -1);
_object1.postInit();
_object1.hide();
@@ -1617,26 +1617,26 @@ void Scene9850::postInit(SceneObjectList *OwnerList) {
_objSword.hide();
}
- _spotLever.setup(30, 251, 45, 270, 9850, 26, -1);
- _hotspot1.setup(123, 0, 200, 320, 9850, 0, 1);
- _hotspot2.setup(107, 87, 133, 308, 9850, 0, 1);
- _hotspot3.setup(2, 28, 53, 80, 9850, 2, 3);
- _hotspot4.setup(13, 0, 55, 27, 9850, 2, 3);
- _hotspot5.setup(8, 74, 27, 91, 9850, 4, 5);
- _hotspot17.setup(61, 0, 125, 28, 9850, 6, 7);
- _hotspot18.setup(51, 95, 105, 145, 9850, 6, 7);
- _hotspot19.setup(56, 28, 115, 97, 9850, 6, 8);
- _hotspot6.setup(0, 223, 115, 257, 9850, 9, 10);
- _hotspot7.setup(15, 254, 33, 268, 9850, 9, -1);
- _hotspot8.setup(17, 218, 37, 233, 9850, 9, 10);
- _hotspot9.setup(8, 113, 26, 221, 9850, 11, 12);
- _hotspot10.setup(14, 94, 53, 112, 9850, 13, 14);
- _hotspot11.setup(5, 269, 29, 303, 9850, 15, 16);
- _hotspot12.setup(43, 278, 91, 317, 9850, 17, 18);
- _hotspot13.setup(47, 263, 112, 282, 9850, 19, 20);
- _hotspot14.setup(43, 188, 86, 224, 9850, 21, 22);
- _hotspot15.setup(43, 162, 92, 191, 9850, 23, 24);
- _hotspot16.setup(40, 146, 90, 169, 9850, 25, -1);
+ _spotLever.setDetails(30, 251, 45, 270, 9850, 26, -1);
+ _hotspot1.setDetails(123, 0, 200, 320, 9850, 0, 1);
+ _hotspot2.setDetails(107, 87, 133, 308, 9850, 0, 1);
+ _hotspot3.setDetails(2, 28, 53, 80, 9850, 2, 3);
+ _hotspot4.setDetails(13, 0, 55, 27, 9850, 2, 3);
+ _hotspot5.setDetails(8, 74, 27, 91, 9850, 4, 5);
+ _hotspot17.setDetails(61, 0, 125, 28, 9850, 6, 7);
+ _hotspot18.setDetails(51, 95, 105, 145, 9850, 6, 7);
+ _hotspot19.setDetails(56, 28, 115, 97, 9850, 6, 8);
+ _hotspot6.setDetails(0, 223, 115, 257, 9850, 9, 10);
+ _hotspot7.setDetails(15, 254, 33, 268, 9850, 9, -1);
+ _hotspot8.setDetails(17, 218, 37, 233, 9850, 9, 10);
+ _hotspot9.setDetails(8, 113, 26, 221, 9850, 11, 12);
+ _hotspot10.setDetails(14, 94, 53, 112, 9850, 13, 14);
+ _hotspot11.setDetails(5, 269, 29, 303, 9850, 15, 16);
+ _hotspot12.setDetails(43, 278, 91, 317, 9850, 17, 18);
+ _hotspot13.setDetails(47, 263, 112, 282, 9850, 19, 20);
+ _hotspot14.setDetails(43, 188, 86, 224, 9850, 21, 22);
+ _hotspot15.setDetails(43, 162, 92, 191, 9850, 23, 24);
+ _hotspot16.setDetails(40, 146, 90, 169, 9850, 25, -1);
_globals->_player.postInit();
_globals->_player.disableControl();
diff --git a/engines/tsage/ringworld/ringworld_scenes10.h b/engines/tsage/ringworld/ringworld_scenes10.h
index 02c42f3d01..6bca48776b 100644
--- a/engines/tsage/ringworld/ringworld_scenes10.h
+++ b/engines/tsage/ringworld/ringworld_scenes10.h
@@ -25,6 +25,7 @@
#include "common/scummsys.h"
#include "tsage/ringworld/ringworld_logic.h"
+#include "tsage/ringworld/ringworld_speakers.h"
#include "tsage/events.h"
#include "tsage/core.h"
#include "tsage/scenes.h"
diff --git a/engines/tsage/ringworld/ringworld_scenes2.h b/engines/tsage/ringworld/ringworld_scenes2.h
index 3502aea15b..382d9d4157 100644
--- a/engines/tsage/ringworld/ringworld_scenes2.h
+++ b/engines/tsage/ringworld/ringworld_scenes2.h
@@ -25,6 +25,7 @@
#include "common/scummsys.h"
#include "tsage/ringworld/ringworld_logic.h"
+#include "tsage/ringworld/ringworld_speakers.h"
#include "tsage/events.h"
#include "tsage/core.h"
#include "tsage/scenes.h"
diff --git a/engines/tsage/ringworld/ringworld_scenes3.h b/engines/tsage/ringworld/ringworld_scenes3.h
index 2dbdc27211..682ef44fc6 100644
--- a/engines/tsage/ringworld/ringworld_scenes3.h
+++ b/engines/tsage/ringworld/ringworld_scenes3.h
@@ -27,6 +27,7 @@
#include "tsage/core.h"
#include "tsage/converse.h"
#include "tsage/ringworld/ringworld_logic.h"
+#include "tsage/ringworld/ringworld_speakers.h"
namespace TsAGE {
diff --git a/engines/tsage/ringworld/ringworld_scenes4.h b/engines/tsage/ringworld/ringworld_scenes4.h
index af31de84b9..64706805bc 100644
--- a/engines/tsage/ringworld/ringworld_scenes4.h
+++ b/engines/tsage/ringworld/ringworld_scenes4.h
@@ -27,6 +27,7 @@
#include "tsage/core.h"
#include "tsage/converse.h"
#include "tsage/ringworld/ringworld_logic.h"
+#include "tsage/ringworld/ringworld_speakers.h"
namespace TsAGE {
diff --git a/engines/tsage/ringworld/ringworld_scenes5.cpp b/engines/tsage/ringworld/ringworld_scenes5.cpp
index 58f47d7f82..30093b7855 100644
--- a/engines/tsage/ringworld/ringworld_scenes5.cpp
+++ b/engines/tsage/ringworld/ringworld_scenes5.cpp
@@ -4033,7 +4033,7 @@ void Scene4300::postInit(SceneObjectList *OwnerList) {
_stripManager.addSpeaker(&_speakerMText);
_stripManager.addSpeaker(&_speakerFLText);
- _hotspot11.setup(76, 97, 102, 127, 4300, 5, 6);
+ _hotspot11.setDetails(76, 97, 102, 127, 4300, 5, 6);
_hotspot7.postInit();
_hotspot7.setPosition(Common::Point(90, 128));
@@ -4041,7 +4041,7 @@ void Scene4300::postInit(SceneObjectList *OwnerList) {
_hotspot7.fixPriority(250);
_globals->_sceneItems.push_back(&_hotspot7);
- _hotspot9.setup(120, 49, 174, 91, 4300, -1, -1);
+ _hotspot9.setDetails(120, 49, 174, 91, 4300, -1, -1);
_hotspot15.postInit();
_hotspot15.setVisage(4300);
@@ -4414,7 +4414,7 @@ void Scene4301::postInit(SceneObjectList *OwnerList) {
_field68E = false;
RING_INVENTORY._stasisBox2._sceneNumber = 1;
- _hotspot4.setup(97, 76, 127, 102, 4300, 5, 6);
+ _hotspot4.setDetails(97, 76, 127, 102, 4300, 5, 6);
_hotspot1.postInit();
_hotspot1.setPosition(Common::Point(90, 128));
diff --git a/engines/tsage/ringworld/ringworld_scenes5.h b/engines/tsage/ringworld/ringworld_scenes5.h
index 6c6b6b6f32..80e67755bd 100644
--- a/engines/tsage/ringworld/ringworld_scenes5.h
+++ b/engines/tsage/ringworld/ringworld_scenes5.h
@@ -27,6 +27,7 @@
#include "tsage/core.h"
#include "tsage/converse.h"
#include "tsage/ringworld/ringworld_logic.h"
+#include "tsage/ringworld/ringworld_speakers.h"
namespace TsAGE {
diff --git a/engines/tsage/ringworld/ringworld_scenes6.h b/engines/tsage/ringworld/ringworld_scenes6.h
index 79e604a177..bf353de415 100644
--- a/engines/tsage/ringworld/ringworld_scenes6.h
+++ b/engines/tsage/ringworld/ringworld_scenes6.h
@@ -25,6 +25,7 @@
#include "common/scummsys.h"
#include "tsage/ringworld/ringworld_logic.h"
+#include "tsage/ringworld/ringworld_speakers.h"
#include "tsage/events.h"
#include "tsage/core.h"
#include "tsage/scenes.h"
diff --git a/engines/tsage/ringworld/ringworld_scenes8.h b/engines/tsage/ringworld/ringworld_scenes8.h
index 4878db5cc8..84178c36f9 100644
--- a/engines/tsage/ringworld/ringworld_scenes8.h
+++ b/engines/tsage/ringworld/ringworld_scenes8.h
@@ -25,6 +25,7 @@
#include "common/scummsys.h"
#include "tsage/ringworld/ringworld_logic.h"
+#include "tsage/ringworld/ringworld_speakers.h"
#include "tsage/events.h"
#include "tsage/core.h"
#include "tsage/scenes.h"
diff --git a/engines/tsage/ringworld/ringworld_speakers.cpp b/engines/tsage/ringworld/ringworld_speakers.cpp
new file mode 100644
index 0000000000..c56639a5b2
--- /dev/null
+++ b/engines/tsage/ringworld/ringworld_speakers.cpp
@@ -0,0 +1,905 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "tsage/ringworld/ringworld_speakers.h"
+#include "tsage/scenes.h"
+#include "tsage/tsage.h"
+#include "tsage/graphics.h"
+#include "tsage/staticres.h"
+
+namespace TsAGE {
+
+namespace Ringworld {
+
+SpeakerGText::SpeakerGText() {
+ _speakerName = "GTEXT";
+ _textWidth = 160;
+ _textPos = Common::Point(130, 10);
+ _color1 = 42;
+ _hideObjects = false;
+}
+
+void SpeakerGText::setText(const Common::String &msg) {
+ // Set the animation properties
+ _sceneObject.postInit();
+ _sceneObject.setVisage(9405);
+ _sceneObject.setStrip2(3);
+ _sceneObject.fixPriority(255);
+ _sceneObject.changeZoom(100);
+ _sceneObject._frame = 1;
+ _sceneObject.setPosition(Common::Point(183, 71));
+ _sceneObject.animate(ANIM_MODE_7, 0, NULL);
+
+ // Set the text
+ Rect textRect;
+ _globals->gfxManager()._font.getStringBounds(msg.c_str(), textRect, _textWidth);
+ textRect.center(_sceneObject._position.x, _sceneObject._position.y);
+ _textPos.x = textRect.left;
+ Speaker::setText(msg);
+}
+
+void SpeakerGText::removeText() {
+ _sceneObject.remove();
+ Speaker::removeText();
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerPOR::SpeakerPOR() {
+ _speakerName = "POR";
+ _newSceneNumber = 7221;
+ _textPos = Common::Point(10, 30);
+ _color1 = 41;
+}
+
+void SpeakerPOR::SpeakerAction1::signal(){
+ switch (_actionIndex++) {
+ case 0:
+ setDelay(_globals->_randomSource.getRandomNumber(60) + 60);
+ break;
+ case 1:
+ static_cast<SceneObject *>(_owner)->animate(ANIM_MODE_5, this, NULL);
+ break;
+ case 2:
+ setDelay(_globals->_randomSource.getRandomNumber(10));
+ _actionIndex = 0;
+ break;
+ default:
+ break;
+ }
+}
+
+void SpeakerPOR::setText(const Common::String &msg) {
+ _object1.postInit(&_objectList);
+ _object1.setVisage(7223);
+ _object1.setStrip2(2);
+ _object1.setPosition(Common::Point(191, 166));
+ _object1.animate(ANIM_MODE_7, 0, NULL);
+
+ _object2.postInit(&_objectList);
+ _object2.setVisage(7223);
+ _object2.setPosition(Common::Point(159, 86));
+ _object2.setAction(&_speakerAction, NULL);
+
+ _object3.postInit(&_objectList);
+ _object3.setVisage(7223);
+ _object3.setStrip(3);
+ _object3.setPosition(Common::Point(119, 107));
+ _object3.fixPriority(199);
+ _object3.setAction(&_action2);
+
+ Speaker::setText(msg);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerOR::SpeakerOR() {
+ _speakerName = "OR";
+ _newSceneNumber = 9430;
+ _textPos = Common::Point(8, 36);
+ _color1 = 42;
+ _textWidth = 136;
+}
+
+void SpeakerOR::setText(const Common::String &msg) {
+ _object1.postInit(&_objectList);
+ _object1.setVisage(9431);
+ _object1.setStrip2(2);
+ _object1.fixPriority(255);
+ _object1.changeZoom(100);
+ _object1._frame = 1;
+ _object1.setPosition(Common::Point(202, 147));
+ _object1.animate(ANIM_MODE_7, 0, NULL);
+
+ _object2.postInit(&_objectList);
+ _object2.setVisage(9431);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.setZoom(100);
+ _object2._frame = 1;
+ _object2.setPosition(Common::Point(199, 85));
+ _object2.setAction(&_speakerAction, NULL);
+
+ Speaker::setText(msg);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerOText::SpeakerOText() : SpeakerGText() {
+ _speakerName = "OTEXT";
+ _textWidth = 240;
+ _textPos = Common::Point(130, 10);
+ _color1 = 42;
+ _hideObjects = false;
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerQText::SpeakerQText() : ScreenSpeaker() {
+ _speakerName = "QTEXT";
+ _textPos = Common::Point(160, 40);
+ _color1 = 35;
+ _textWidth = 240;
+ _textMode = ALIGN_CENTER;
+ _hideObjects = false;
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerSText::SpeakerSText() : ScreenSpeaker() {
+ _speakerName = "STEXT";
+ _color1 = 13;
+ _textWidth = 240;
+ _textMode = ALIGN_CENTER;
+ _hideObjects = false;
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerPOText::SpeakerPOText() : ScreenSpeaker() {
+ _speakerName = "POTEXT";
+ _textWidth = 240;
+ _textMode = ALIGN_CENTER;
+ _color1 = 41;
+ _hideObjects = false;
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerMText::SpeakerMText() {
+ _speakerName = "MTEXT";
+ _color1 = 22;
+ _textWidth = 230;
+ _textMode = ALIGN_CENTER;
+ _hideObjects = false;
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerCText::SpeakerCText() {
+ _speakerName = "CTEXT";
+ _color1 = 4;
+ _textWidth = 240;
+ _textMode = ALIGN_CENTER;
+ _hideObjects = false;
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerEText::SpeakerEText() {
+ _speakerName = "ETEXT";
+ _textPos = Common::Point(20, 20);
+ _color1 = 22;
+ _hideObjects = false;
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerGR::SpeakerGR() : AnimatedSpeaker() {
+ _speakerName = "GR";
+ _newSceneNumber = 9220;
+ _textWidth = 136;
+ _textPos = Common::Point(168, 36);
+ _color1 = 14;
+}
+
+void SpeakerGR::setText(const Common::String &msg) {
+ _object1.postInit(&_objectList);
+ _object1.setVisage(9221);
+ _object1.setStrip2(2);
+ _object1.fixPriority(255);
+ _object1.changeZoom(100);
+ _object1._frame = 1;
+ _object1.setPosition(Common::Point(101, 70));
+ _object1.animate(ANIM_MODE_7, 0, NULL);
+
+ Speaker::setText(msg);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerHText::SpeakerHText() {
+ _speakerName = "HTEXT";
+ _textPos = Common::Point(160, 40);
+ _color1 = 52;
+ _hideObjects = false;
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerSKText::SpeakerSKText() : ScreenSpeaker() {
+ _speakerName = "SKTEXT";
+ _textWidth = 240;
+ _textMode = ALIGN_CENTER;
+ _color1 = 9;
+ _hideObjects = false;
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerPText::SpeakerPText() {
+ _speakerName = "PTEXT";
+ _textWidth = 240;
+ _textMode = ALIGN_CENTER;
+ _color1 = 5;
+ _hideObjects = false;
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerCHFText::SpeakerCHFText() {
+ _speakerName = "CHFTEXT";
+ _textWidth = 240;
+ _textMode = ALIGN_CENTER;
+ _color1 = 56;
+ _hideObjects = false;
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerCDRText::SpeakerCDRText() {
+ _speakerName = "CDRTEXT";
+ _textWidth = 240;
+ _textMode = ALIGN_CENTER;
+ _color1 = 52;
+ _hideObjects = false;
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerFLText::SpeakerFLText() {
+ _speakerName = "FLTEXT";
+ _textPos = Common::Point(10, 40);
+ _color1 = 17;
+ _hideObjects = false;
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerBatText::SpeakerBatText() {
+ _speakerName = "BATTEXT";
+ _textWidth = 240;
+ _textMode = ALIGN_CENTER;
+ _color1 = 3;
+ _hideObjects = false;
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerSKL::SpeakerSKL() : AnimatedSpeaker() {
+ _speakerName = "SKL";
+ _newSceneNumber = 7011;
+ _textPos = Common::Point(10, 30);
+ _color1 = 9;
+}
+
+void SpeakerSKL::setText(const Common::String &msg) {
+ _object1.postInit(&_objectList);
+ _object1.setVisage(7013);
+ _object1.setStrip2(2);
+ _object1.fixPriority(255);
+ _object1.changeZoom(100);
+ _object1._frame = 1;
+ _object1.setPosition(Common::Point(203, 120));
+ _object1.animate(ANIM_MODE_7, 0, NULL);
+
+ _object2.postInit(&_objectList);
+ _object2.setVisage(7013);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.changeZoom(100);
+ _object2._frame = 1;
+ _object2.setPosition(Common::Point(197, 80));
+ _object2.setAction(&_speakerAction, NULL);
+
+ Speaker::setText(msg);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerQL::SpeakerQL() : AnimatedSpeaker() {
+ _speakerName = "QL";
+ _newSceneNumber = 2610;
+ _textPos = Common::Point(160, 30);
+ _color1 = 35;
+ _textMode = ALIGN_CENTER;
+}
+
+void SpeakerQL::setText(const Common::String &msg) {
+ _object1.postInit(&_objectList);
+ _object1.setVisage(2612);
+ _object1.setStrip2(2);
+ _object1.fixPriority(255);
+ _object1.changeZoom(100);
+ _object1._frame = 1;
+ _object1.setPosition(Common::Point(128, 146));
+ _object1.animate(ANIM_MODE_7, 0, NULL);
+
+ _object2.postInit(&_objectList);
+ _object2.setVisage(2612);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.changeZoom(100);
+ _object2._frame = 1;
+ _object2.setPosition(Common::Point(122, 84));
+ _object2.setAction(&_speakerAction, NULL);
+
+ Speaker::setText(msg);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerSR::SpeakerSR() {
+ _speakerName = "SR";
+ _newSceneNumber = 2811;
+ _textPos = Common::Point(10, 30);
+ _color1 = 13;
+ _textMode = ALIGN_CENTER;
+}
+
+void SpeakerSR::setText(const Common::String &msg) {
+ _object1.postInit(&_objectList);
+ _object1.setVisage(2813);
+ _object1.setStrip2(2);
+ _object1.fixPriority(255);
+ _object1.changeZoom(100);
+ _object1._frame = 1;
+ _object1.setPosition(Common::Point(224, 198));
+ _object1.animate(ANIM_MODE_7, 0, NULL);
+
+ _object2.postInit(&_objectList);
+ _object2.setVisage(2813);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.changeZoom(100);
+ _object2._frame = 1;
+ _object2.setPosition(Common::Point(203, 96));
+ _object2.setAction(&_speakerAction, NULL);
+
+ _object3.postInit(&_objectList);
+ _object3.setVisage(2813);
+ _object3.setStrip(3);
+ _object3.setPosition(Common::Point(204, 91));
+ _object3.fixPriority(199);
+ _object3._numFrames = 3;
+ _object3.animate(ANIM_MODE_7, 0, NULL);
+
+ Speaker::setText(msg);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerSL::SpeakerSL() {
+ _speakerName = "SL";
+ _newSceneNumber = 2810;
+ _textPos = Common::Point(140, 30);
+ _textWidth = 160;
+ _color1 = 13;
+ _textMode = ALIGN_CENTER;
+}
+
+void SpeakerSL::setText(const Common::String &msg) {
+ _object1.postInit(&_objectList);
+ _object1.setVisage(2812);
+ _object1.setStrip2(2);
+ _object1.fixPriority(255);
+ _object1.changeZoom(100);
+ _object1._frame = 1;
+ _object1.setPosition(Common::Point(95, 198));
+ _object1.animate(ANIM_MODE_7, 0, NULL);
+
+ _object2.postInit(&_objectList);
+ _object2.setVisage(2812);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.changeZoom(100);
+ _object2._frame = 1;
+ _object2.setPosition(Common::Point(116, 96));
+ _object2.setAction(&_speakerAction, NULL);
+
+ Speaker::setText(msg);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerQR::SpeakerQR() {
+ _speakerName = "QR";
+ _newSceneNumber = 2611;
+ _textPos = Common::Point(10, 30);
+ _color1 = 35;
+ _textMode = ALIGN_CENTER;
+}
+
+void SpeakerQR::setText(const Common::String &msg) {
+ _object1.postInit(&_objectList);
+ _object1.setVisage(2613);
+ _object1.setStrip2(2);
+ _object1.fixPriority(255);
+ _object1.changeZoom(100);
+ _object1._frame = 1;
+ _object1.setPosition(Common::Point(191, 146));
+ _object1.animate(ANIM_MODE_7, 0, NULL);
+
+ _object2.postInit(&_objectList);
+ _object2.setVisage(2613);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.changeZoom(100);
+ _object2._frame = 1;
+ _object2.setPosition(Common::Point(197, 84));
+ _object2.setAction(&_speakerAction, NULL);
+
+ Speaker::setText(msg);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerQU::SpeakerQU() {
+ _speakerName = "QU";
+ _newSceneNumber = 7020;
+ _textPos = Common::Point(160, 30);
+ _color1 = 35;
+ _textMode = ALIGN_CENTER;
+}
+
+void SpeakerQU::setText(const Common::String &msg) {
+ _object1.postInit(&_objectList);
+ _object1.setVisage(7021);
+ _object1.setStrip2(2);
+ _object1.fixPriority(255);
+ _object1.changeZoom(100);
+ _object1._frame = 1;
+ _object1.setPosition(Common::Point(116, 120));
+ _object1.animate(ANIM_MODE_7, 0, NULL);
+
+ _object2.postInit(&_objectList);
+ _object2.setVisage(7021);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.changeZoom(100);
+ _object2._frame = 1;
+ _object2.setPosition(Common::Point(111, 84));
+ _object2.setAction(&_speakerAction, NULL);
+
+ Speaker::setText(msg);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerCR::SpeakerCR() {
+ _speakerName = "CR";
+ _newSceneNumber = 9010;
+ _textPos = Common::Point(20, 40);
+ _color1 = 4;
+}
+
+void SpeakerCR::setText(const Common::String &msg) {
+ _object1.postInit(&_objectList);
+ _object1.setVisage(9011);
+ _object1.setStrip2(2);
+ _object1.fixPriority(255);
+ _object1.setPosition(Common::Point(219, 168));
+ _object1.animate(ANIM_MODE_7, 0, NULL);
+
+ _object2.postInit(&_objectList);
+ _object2.setVisage(9011);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(232, 81));
+ _object2.setAction(&_speakerAction, NULL);
+
+ Speaker::setText(msg);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerMR::SpeakerMR() {
+ _speakerName = "MR";
+ _newSceneNumber = 2711;
+ _textPos = Common::Point(10, 40);
+ _color1 = 22;
+}
+
+void SpeakerMR::setText(const Common::String &msg) {
+ _object1.postInit(&_objectList);
+ _object1.setVisage(2713);
+ _object1.setStrip2(2);
+ _object1.fixPriority(255);
+ _object1.changeZoom(100);
+ _object1._frame = 1;
+ _object1.setPosition(Common::Point(220, 143));
+ _object1.animate(ANIM_MODE_7, 0, NULL);
+
+ _object2.postInit(&_objectList);
+ _object2.setVisage(2713);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.changeZoom(100);
+ _object2._frame = 1;
+ _object2.setPosition(Common::Point(215, 99));
+ _object2.setAction(&_speakerAction, NULL);
+
+ Speaker::setText(msg);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerSAL::SpeakerSAL() {
+ _speakerName = "SAL";
+ _newSceneNumber = 2851;
+ _textPos = Common::Point(10, 30);
+ _color1 = 13;
+ _textMode = ALIGN_CENTER;
+}
+
+void SpeakerSAL::setText(const Common::String &msg) {
+ _object1.postInit(&_objectList);
+ _object1.setVisage(2853);
+ _object1.setStrip2(2);
+ _object1.fixPriority(255);
+ _object1.changeZoom(100);
+ _object1._frame = 1;
+ _object1.setPosition(Common::Point(185, 200));
+ _object1.animate(ANIM_MODE_7, 0, NULL);
+
+ _object2.postInit(&_objectList);
+ _object2.setVisage(2853);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.changeZoom(100);
+ _object2._frame = 1;
+ _object2.setPosition(Common::Point(170, 92));
+ _object2.setAction(&_speakerAction, NULL);
+
+ Speaker::setText(msg);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerML::SpeakerML() {
+ _speakerName = "ML";
+ _newSceneNumber = 2710;
+ _textPos = Common::Point(160, 40);
+ _color1 = 22;
+}
+
+void SpeakerML::setText(const Common::String &msg) {
+ _object1.postInit(&_objectList);
+ _object1.setVisage(2712);
+ _object1.setStrip2(2);
+ _object1.fixPriority(255);
+ _object1.changeZoom(100);
+ _object1._frame = 1;
+ _object1.setPosition(Common::Point(99, 143));
+ _object1.animate(ANIM_MODE_7, 0, NULL);
+
+ _object2.postInit(&_objectList);
+ _object2.setVisage(2712);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.changeZoom(100);
+ _object2._frame = 1;
+ _object2.setPosition(Common::Point(105, 99));
+ _object2.setAction(&_speakerAction, NULL);
+
+ Speaker::setText(msg);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerCHFL::SpeakerCHFL() {
+ _speakerName = "CHFL";
+ _newSceneNumber = 4111;
+ _textPos = Common::Point(10, 40);
+ _color1 = 56;
+}
+
+void SpeakerCHFL::setText(const Common::String &msg) {
+ _object1.postInit(&_objectList);
+ _object1.setVisage(4113);
+ _object1.setStrip2(2);
+ _object1.fixPriority(255);
+ _object1.changeZoom(100);
+ _object1._frame = 1;
+ _object1.setPosition(Common::Point(205, 116));
+ _object1.animate(ANIM_MODE_7, 0, NULL);
+
+ _object2.postInit(&_objectList);
+ _object2.setVisage(4113);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.changeZoom(100);
+ _object2._frame = 1;
+ _object2.setPosition(Common::Point(202, 71));
+ _object2.setAction(&_speakerAction, NULL);
+
+ Speaker::setText(msg);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerCHFR::SpeakerCHFR() {
+ _speakerName = "CHFR";
+ _newSceneNumber = 4110;
+ _textPos = Common::Point(160, 40);
+ _color1 = 56;
+}
+
+void SpeakerCHFR::setText(const Common::String &msg) {
+ _object1.postInit(&_objectList);
+ _object1.setVisage(4112);
+ _object1.setStrip2(2);
+ _object1.fixPriority(255);
+ _object1.changeZoom(100);
+ _object1._frame = 1;
+ _object1.setPosition(Common::Point(103, 116));
+ _object1.animate(ANIM_MODE_7, 0, NULL);
+
+ _object2.postInit(&_objectList);
+ _object2.setVisage(4112);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.changeZoom(100);
+ _object2._frame = 1;
+ _object2.setPosition(Common::Point(106, 71));
+ _object2.setAction(&_speakerAction, NULL);
+
+ Speaker::setText(msg);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerPL::SpeakerPL() {
+ _speakerName = "PL";
+ _newSceneNumber = 4060;
+ _textPos = Common::Point(160, 40);
+ _color1 = 5;
+}
+
+void SpeakerPL::setText(const Common::String &msg) {
+ _object1.postInit(&_objectList);
+ _object1.setVisage(4062);
+ _object1.setStrip2(2);
+ _object1.fixPriority(255);
+ _object1.changeZoom(100);
+ _object1._frame = 1;
+ _object1.setPosition(Common::Point(107, 117));
+ _object1.animate(ANIM_MODE_7, 0, NULL);
+
+ _object2.postInit(&_objectList);
+ _object2.setVisage(4062);
+ _object2.setStrip2(1);
+ _object2.fixPriority(200);
+ _object2.changeZoom(100);
+ _object2._frame = 1;
+ _object2.setPosition(Common::Point(105, 62));
+ _object2.setAction(&_speakerAction, NULL);
+
+ _object3.postInit(&_objectList);
+ _object3.setVisage(4062);
+ _object3.setStrip2(3);
+ _object3.fixPriority(255);
+ _object3.changeZoom(100);
+ _object3._frame = 1;
+ _object3.setPosition(Common::Point(105, 59));
+ _object3.setAction(&_speakerAction2, NULL);
+
+ Speaker::setText(msg);
+}
+
+void SpeakerPL::removeText() {
+ _object3.remove();
+ AnimatedSpeaker::removeText();
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerPR::SpeakerPR() {
+ _speakerName = "PR";
+ _newSceneNumber = 4061;
+ _textPos = Common::Point(10, 40);
+ _color1 = 5;
+}
+
+void SpeakerPR::setText(const Common::String &msg) {
+ _object1.postInit(&_objectList);
+ _object1.setVisage(4063);
+ _object1.setStrip2(1);
+ _object1.fixPriority(255);
+ _object1.changeZoom(100);
+ _object1._frame = 1;
+ _object1.setPosition(Common::Point(212, 117));
+ _object1.animate(ANIM_MODE_7, 0, NULL);
+
+ _object2.postInit(&_objectList);
+ _object2.setVisage(4063);
+ _object2.setStrip2(2);
+ _object2.fixPriority(200);
+ _object2.changeZoom(100);
+ _object2._frame = 1;
+ _object2.setPosition(Common::Point(214, 62));
+ _object2.setAction(&_speakerAction, NULL);
+
+ _object3.postInit(&_objectList);
+ _object3.setVisage(4063);
+ _object3.setStrip2(3);
+ _object3.fixPriority(255);
+ _object3.changeZoom(100);
+ _object3._frame = 1;
+ _object3.setPosition(Common::Point(214, 59));
+ _object3.setAction(&_speakerAction2, NULL);
+
+ Speaker::setText(msg);
+}
+
+void SpeakerPR::removeText() {
+ _object3.remove();
+ AnimatedSpeaker::removeText();
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerCDR::SpeakerCDR() {
+ _speakerName = "CDR";
+ _newSceneNumber = 4161;
+ _textPos = Common::Point(10, 40);
+ _color1 = 52;
+}
+
+void SpeakerCDR::setText(const Common::String &msg) {
+ _object1.postInit(&_objectList);
+ _object1.setVisage(4163);
+ _object1.setStrip2(1);
+ _object1.fixPriority(255);
+ _object1.changeZoom(100);
+ _object1._frame = 1;
+ _object1.setPosition(Common::Point(208, 97));
+ _object1.animate(ANIM_MODE_7, 0, NULL);
+
+ _object2.postInit(&_objectList);
+ _object2.setVisage(4163);
+ _object2.setStrip2(2);
+ _object2.fixPriority(255);
+ _object2.changeZoom(100);
+ _object2._frame = 1;
+ _object2.setPosition(Common::Point(200, 57));
+ _object2.setAction(&_speakerAction, NULL);
+
+ Speaker::setText(msg);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerCDL::SpeakerCDL() {
+ _speakerName = "CDL";
+ _newSceneNumber = 4160;
+ _textPos = Common::Point(160, 40);
+ _color1 = 52;
+}
+
+void SpeakerCDL::setText(const Common::String &msg) {
+ _object1.postInit(&_objectList);
+ _object1.setVisage(4162);
+ _object1.setStrip2(1);
+ _object1.fixPriority(255);
+ _object1.changeZoom(100);
+ _object1._frame = 1;
+ _object1.setPosition(Common::Point(112, 97));
+ _object1.animate(ANIM_MODE_7, 0, NULL);
+
+ _object2.postInit(&_objectList);
+ _object2.setVisage(4162);
+ _object2.setStrip2(2);
+ _object2.fixPriority(255);
+ _object2.changeZoom(100);
+ _object2._frame = 1;
+ _object2.setPosition(Common::Point(115, 57));
+ _object2.setAction(&_speakerAction, NULL);
+
+ Speaker::setText(msg);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerFLL::SpeakerFLL() {
+ _speakerName = "FLL";
+ _newSceneNumber = 5221;
+ _textPos = Common::Point(10, 40);
+ _color1 = 17;
+}
+
+void SpeakerFLL::setText(const Common::String &msg) {
+ _object1.postInit(&_objectList);
+ _object1.setVisage(5223);
+ _object1.setStrip2(2);
+ _object1.fixPriority(255);
+ _object1.changeZoom(100);
+ _object1._frame = 1;
+ _object1.setPosition(Common::Point(216, 129));
+ _object1.animate(ANIM_MODE_7, 0, NULL);
+
+ _object2.postInit(&_objectList);
+ _object2.setVisage(5223);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.changeZoom(100);
+ _object2._frame = 1;
+ _object2.setPosition(Common::Point(210, 67));
+ _object2.setAction(&_speakerAction, NULL);
+
+ Speaker::setText(msg);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerBatR::SpeakerBatR() {
+ _speakerName = "BATR";
+ _newSceneNumber = 5360;
+ _textPos = Common::Point(140, 40);
+ _color1 = 3;
+}
+
+void SpeakerBatR::setText(const Common::String &msg) {
+ _object1.postInit(&_objectList);
+ _object1.setVisage(5361);
+ _object1.setStrip2(2);
+ _object1.fixPriority(255);
+ _object1.changeZoom(100);
+ _object1._frame = 1;
+ _object1.setPosition(Common::Point(137, 122));
+ _object1.animate(ANIM_MODE_7, 0, NULL);
+
+ _object2.postInit(&_objectList);
+ _object2.setVisage(5361);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.changeZoom(100);
+ _object2._frame = 1;
+ _object2.setPosition(Common::Point(137, 104));
+ _object2.setAction(&_speakerAction, NULL);
+
+ Speaker::setText(msg);
+}
+
+} // End of namespace Ringworld
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/ringworld/ringworld_speakers.h b/engines/tsage/ringworld/ringworld_speakers.h
new file mode 100644
index 0000000000..305984a184
--- /dev/null
+++ b/engines/tsage/ringworld/ringworld_speakers.h
@@ -0,0 +1,337 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef TSAGE_RINGWORLD_SPEAKERS_H
+#define TSAGE_RINGWORLD_SPEAKERS_H
+
+#include "common/scummsys.h"
+#include "tsage/converse.h"
+#include "tsage/events.h"
+#include "tsage/core.h"
+#include "tsage/scenes.h"
+#include "tsage/globals.h"
+#include "tsage/ringworld/ringworld_logic.h"
+
+namespace TsAGE {
+
+namespace Ringworld {
+
+using namespace TsAGE;
+
+class SpeakerGText : public Speaker {
+public:
+ SceneObject _sceneObject;
+public:
+ SpeakerGText();
+
+ virtual Common::String getClassName() { return "SpeakerGText"; }
+ virtual void setText(const Common::String &msg);
+ virtual void removeText();
+};
+
+class SpeakerPOR : public AnimatedSpeaker {
+ class SpeakerAction1 : public SpeakerAction {
+ public:
+ virtual void signal();
+ };
+
+public:
+ SceneObject _object3;
+ SpeakerAction1 _action2;
+public:
+ SpeakerPOR();
+ virtual Common::String getClassName() { return "SpeakerPOR"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerOR : public AnimatedSpeaker {
+public:
+ SpeakerOR();
+ virtual Common::String getClassName() { return "SpeakerOR"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerOText : public SpeakerGText {
+public:
+ SpeakerOText();
+
+ virtual Common::String getClassName() { return "SpeakerOText"; }
+};
+
+class SpeakerPOText : public ScreenSpeaker {
+public:
+ SpeakerPOText();
+
+ virtual Common::String getClassName() { return "SpeakerPOText"; }
+};
+
+class SpeakerSText : public ScreenSpeaker {
+public:
+ SpeakerSText();
+
+ virtual Common::String getClassName() { return "SpeakerSText"; }
+};
+
+class SpeakerQText : public ScreenSpeaker {
+public:
+ SpeakerQText();
+
+ virtual Common::String getClassName() { return "SpeakerQText"; }
+};
+
+class SpeakerMText : public ScreenSpeaker {
+public:
+ SpeakerMText();
+
+ virtual Common::String getClassName() { return "SpeakerMText"; }
+};
+
+class SpeakerCText : public ScreenSpeaker {
+public:
+ SpeakerCText();
+
+ virtual Common::String getClassName() { return "SpeakerCText"; }
+};
+
+class SpeakerEText : public ScreenSpeaker {
+public:
+ SpeakerEText();
+
+ virtual Common::String getClassName() { return "SpeakerEText"; }
+};
+
+class SpeakerGR : public AnimatedSpeaker {
+public:
+ SpeakerGR();
+
+ virtual Common::String getClassName() { return "SpeakerGR"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerHText : public ScreenSpeaker {
+public:
+ SpeakerHText();
+
+ virtual Common::String getClassName() { return "SpeakerHText"; }
+};
+
+class SpeakerPText : public ScreenSpeaker {
+public:
+ SpeakerPText();
+
+ virtual Common::String getClassName() { return "SpeakerPText"; }
+};
+
+class SpeakerCHFText : public ScreenSpeaker {
+public:
+ SpeakerCHFText();
+
+ virtual Common::String getClassName() { return "SpeakerCHFText"; }
+};
+
+class SpeakerSKText : public ScreenSpeaker {
+public:
+ SpeakerSKText();
+
+ virtual Common::String getClassName() { return "SpeakerSKText"; }
+};
+
+class SpeakerCDRText : public ScreenSpeaker {
+public:
+ SpeakerCDRText();
+
+ virtual Common::String getClassName() { return "SpeakerCDRText"; }
+};
+
+class SpeakerFLText : public ScreenSpeaker {
+public:
+ SpeakerFLText();
+
+ virtual Common::String getClassName() { return "SpeakerFLText"; }
+};
+
+class SpeakerBatText : public ScreenSpeaker {
+public:
+ SpeakerBatText();
+
+ virtual Common::String getClassName() { return "SpeakerFLText"; }
+};
+
+class SpeakerQR : public AnimatedSpeaker {
+public:
+ SpeakerQR();
+
+ virtual Common::String getClassName() { return "SpeakerQR"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerQU : public AnimatedSpeaker {
+public:
+ SpeakerQU();
+
+ virtual Common::String getClassName() { return "SpeakerQU"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerSKL : public AnimatedSpeaker {
+public:
+ SpeakerSKL();
+
+ virtual Common::String getClassName() { return "SpeakerQL"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerQL : public AnimatedSpeaker {
+public:
+ SpeakerQL();
+
+ virtual Common::String getClassName() { return "SpeakerQL"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerSR : public AnimatedSpeaker {
+public:
+ SceneObject _object3;
+public:
+ SpeakerSR();
+
+ virtual Common::String getClassName() { return "SpeakerSR"; }
+ void setText(const Common::String &msg);
+};
+
+class SpeakerSL : public AnimatedSpeaker {
+public:
+ SpeakerSL();
+
+ virtual Common::String getClassName() { return "SpeakerSL"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerCR : public AnimatedSpeaker {
+public:
+ SpeakerCR();
+
+ virtual Common::String getClassName() { return "SpeakerCR"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerMR : public AnimatedSpeaker {
+public:
+ SpeakerMR();
+
+ virtual Common::String getClassName() { return "SpeakerMR"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerSAL : public AnimatedSpeaker {
+public:
+ SpeakerSAL();
+
+ virtual Common::String getClassName() { return "SpeakerSAL"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerML : public AnimatedSpeaker {
+public:
+ SpeakerML();
+
+ virtual Common::String getClassName() { return "SpeakerML"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerCHFL : public AnimatedSpeaker {
+public:
+ SpeakerCHFL();
+
+ virtual Common::String getClassName() { return "SpeakerCHFL"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerCHFR : public AnimatedSpeaker {
+public:
+ SpeakerCHFR();
+
+ virtual Common::String getClassName() { return "SpeakerCHFR"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerPL : public AnimatedSpeaker {
+public:
+ SceneObject _object3;
+ SpeakerAction _speakerAction2;
+
+ SpeakerPL();
+
+ virtual Common::String getClassName() { return "SpeakerPL"; }
+ virtual void setText(const Common::String &msg);
+ virtual void removeText();
+};
+
+class SpeakerPR : public AnimatedSpeaker {
+public:
+ SceneObject _object3;
+ SpeakerAction _speakerAction2;
+
+ SpeakerPR();
+
+ virtual Common::String getClassName() { return "SpeakerPR"; }
+ virtual void setText(const Common::String &msg);
+ virtual void removeText();
+};
+
+class SpeakerCDR : public AnimatedSpeaker {
+public:
+ SpeakerCDR();
+
+ virtual Common::String getClassName() { return "SpeakerCDR"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerCDL : public AnimatedSpeaker {
+public:
+ SpeakerCDL();
+
+ virtual Common::String getClassName() { return "SpeakerCDL"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerFLL : public AnimatedSpeaker {
+public:
+ SpeakerFLL();
+
+ virtual Common::String getClassName() { return "SpeakerFLL"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerBatR : public AnimatedSpeaker {
+public:
+ SpeakerBatR();
+
+ virtual Common::String getClassName() { return "SpeakerBatR"; }
+ virtual void setText(const Common::String &msg);
+};
+
+} // End of namespace Ringworld
+
+} // End of namespace TsAGE
+
+#endif
diff --git a/engines/tsage/saveload.h b/engines/tsage/saveload.h
index 03beafed7c..f81454d5e9 100644
--- a/engines/tsage/saveload.h
+++ b/engines/tsage/saveload.h
@@ -138,6 +138,18 @@ public:
}
}
}
+
+ void addBefore(T existingItem, T newItem) {
+ typename SynchronizedList<T>::iterator i = this->begin();
+ while ((i != this->end()) && (*i != existingItem)) ++i;
+ this->insert(i, newItem);
+ }
+ void addAfter(T existingItem, T newItem) {
+ typename SynchronizedList<T>::iterator i = this->begin();
+ while ((i != this->end()) && (*i != existingItem)) ++i;
+ if (i != this->end()) ++i;
+ this->insert(i, newItem);
+ }
};
/**
diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp
index 5aeacda6fe..d68f5c2ee5 100644
--- a/engines/tsage/scenes.cpp
+++ b/engines/tsage/scenes.cpp
@@ -20,11 +20,15 @@
*
*/
+#include "common/config-manager.h"
+#include "common/translation.h"
+#include "gui/saveload.h"
#include "tsage/scenes.h"
#include "tsage/globals.h"
#include "tsage/ringworld/ringworld_logic.h"
#include "tsage/tsage.h"
#include "tsage/saveload.h"
+#include "tsage/staticres.h"
namespace TsAGE {
@@ -77,12 +81,7 @@ void SceneManager::sceneChange() {
}
// Clear the secondary scene object list
- io = _globals->_sceneManager._altSceneObjects.begin();
- while (io != _globals->_sceneManager._altSceneObjects.end()) {
- SceneObject *sceneObj = *io;
- ++io;
- sceneObj->removeObject();
- }
+ _altSceneObjects.clear();
// Clear the hotspot list
SynchronizedList<SceneItem *>::iterator ii = _globals->_sceneItems.begin();
@@ -510,6 +509,51 @@ void Scene::setZoomPercents(int yStart, int minPercent, int yEnd, int maxPercent
/*--------------------------------------------------------------------------*/
+void Game::restartGame() {
+ if (MessageDialog::show(RESTART_MSG, CANCEL_BTN_STRING, RESTART_BTN_STRING) == 1)
+ _globals->_game->restart();
+}
+
+void Game::saveGame() {
+ if (!_vm->canSaveGameStateCurrently())
+ MessageDialog::show(SAVING_NOT_ALLOWED_MSG, OK_BTN_STRING);
+ else {
+ // Show the save dialog
+ handleSaveLoad(true, _globals->_sceneHandler->_saveGameSlot, _globals->_sceneHandler->_saveName);
+ }
+}
+
+void Game::restoreGame() {
+ if (!_vm->canLoadGameStateCurrently())
+ MessageDialog::show(RESTORING_NOT_ALLOWED_MSG, OK_BTN_STRING);
+ else {
+ // Show the load dialog
+ handleSaveLoad(false, _globals->_sceneHandler->_loadGameSlot, _globals->_sceneHandler->_saveName);
+ }
+}
+
+void Game::quitGame() {
+ if (MessageDialog::show(QUIT_CONFIRM_MSG, CANCEL_BTN_STRING, QUIT_BTN_STRING) == 1)
+ _vm->quitGame();
+}
+
+void Game::handleSaveLoad(bool saveFlag, int &saveSlot, Common::String &saveName) {
+ const EnginePlugin *plugin = 0;
+ EngineMan.findGame(_vm->getGameId(), &plugin);
+ GUI::SaveLoadChooser *dialog;
+ if (saveFlag)
+ dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save"));
+ else
+ dialog = new GUI::SaveLoadChooser(_("Load game:"), _("Load"));
+
+ dialog->setSaveMode(saveFlag);
+
+ saveSlot = dialog->runModalWithPluginAndTarget(plugin, ConfMan.getActiveDomainName());
+ saveName = dialog->getResultString();
+
+ delete dialog;
+}
+
void Game::execute() {
// Main game loop
bool activeFlag = false;
diff --git a/engines/tsage/scenes.h b/engines/tsage/scenes.h
index 7e8c26f912..b03b8fa906 100644
--- a/engines/tsage/scenes.h
+++ b/engines/tsage/scenes.h
@@ -115,7 +115,7 @@ protected:
SynchronizedList<GameHandler *> _handlers;
static bool notLockedFn(GameHandler *g);
- virtual void handleSaveLoad(bool saveFlag, int &saveSlot, Common::String &saveName) {}
+ virtual void handleSaveLoad(bool saveFlag, int &saveSlot, Common::String &saveName);
public:
virtual ~Game() {}
@@ -125,13 +125,14 @@ public:
void execute();
virtual void start() = 0;
virtual void restart() {}
- virtual void restartGame() {}
- virtual void saveGame() {}
- virtual void restoreGame() {}
- virtual void quitGame() {}
+ virtual void restartGame();
+ virtual void saveGame();
+ virtual void restoreGame();
+ virtual void quitGame();
virtual void endGame(int resNum, int lineNum) {}
virtual Scene *createScene(int sceneNumber) = 0;
virtual void processEvent(Event &event) {}
+ virtual void rightClick() {}
};
} // End of namespace TsAGE
diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp
index 0b77628801..2139056770 100644
--- a/engines/tsage/sound.cpp
+++ b/engines/tsage/sound.cpp
@@ -2456,7 +2456,7 @@ void ASound::unPrime() {
_action = NULL;
}
-void ASound::fade(int fadeDest, int fadeSteps, int fadeTicks, bool stopAfterFadeFlag, Action *action) {
+void ASound::fade(int fadeDest, int fadeSteps, int fadeTicks, bool stopAfterFadeFlag, EventHandler *action) {
if (action)
_action = action;
@@ -2485,10 +2485,19 @@ void ASoundExt::signal() {
}
}
-void ASoundExt::fadeOut2(Action *action) {
+void ASoundExt::fadeOut2(EventHandler *action) {
fade(0, 10, 10, true, action);
}
+void ASoundExt::changeSound(int soundNum) {
+ if (isPlaying()) {
+ _soundNum = soundNum;
+ fadeOut2(this);
+ } else {
+ fadeSound(soundNum);
+ }
+}
+
/*--------------------------------------------------------------------------*/
SoundDriver::SoundDriver() {
diff --git a/engines/tsage/sound.h b/engines/tsage/sound.h
index afcc8f6377..a8ff348bc6 100644
--- a/engines/tsage/sound.h
+++ b/engines/tsage/sound.h
@@ -365,7 +365,7 @@ public:
class ASound: public EventHandler {
public:
Sound _sound;
- Action *_action;
+ EventHandler *_action;
int _cueValue;
ASound();
@@ -385,7 +385,7 @@ public:
bool isMuted() const { return _sound.isMuted(); }
void pause(bool flag) { _sound.pause(flag); }
void mute(bool flag) { _sound.mute(flag); }
- void fade(int fadeDest, int fadeSteps, int fadeTicks, bool stopAfterFadeFlag, Action *action);
+ void fade(int fadeDest, int fadeSteps, int fadeTicks, bool stopAfterFadeFlag, EventHandler *action);
void fadeIn() { fade(127, 5, 10, false, NULL); }
void fadeOut(Action *action) { fade(0, 5, 10, true, action); }
void setTimeIndex(uint32 timeIndex) { _sound.setTimeIndex(timeIndex); }
@@ -406,7 +406,8 @@ public:
int _soundNum;
ASoundExt();
- void fadeOut2(Action *action);
+ void fadeOut2(EventHandler *action);
+ void changeSound(int soundNum);
virtual Common::String getClassName() { return "ASoundExt"; }
virtual void synchronize(Serializer &s);
diff --git a/engines/tsage/staticres.cpp b/engines/tsage/staticres.cpp
index 819cf56f31..6c0499cfb2 100644
--- a/engines/tsage/staticres.cpp
+++ b/engines/tsage/staticres.cpp
@@ -72,12 +72,8 @@ const char *DEFAULT_SCENE_HOTSPOT = "That accomplishes nothing.";
const char *SAVE_ERROR_MSG = "Error occurred saving game. Please do not try to restore this game!";
const char *SAVING_NOT_ALLOWED_MSG = "Saving is not allowed at this time.";
const char *RESTORING_NOT_ALLOWED_MSG = "Restoring is not allowed at this time.";
-const char *RESTART_CONFIRM_MSG = "Do you want to restart your game?";
const char *INV_EMPTY_MSG = "You have nothing in your possesion.";
-const char *HELP_MSG = "Ringworld\rRevenge of the Patriarch\x14\rScummVM Version\r\r\
-\x01 Keyboard shortcuts...\rF2 - Sound options\rF3 - Quit\r\
-F4 - Restart\rF5 - Save game\rF7 - Restore Game\rF10 - Pause game";
const char *QUIT_CONFIRM_MSG = "Do you want to quit playing this game?";
const char *RESTART_MSG = "Do you want to restart this game?";
const char *GAME_PAUSED_MSG = "Game is paused.";
@@ -97,6 +93,9 @@ const char *PICK_BTN_STRING = "Pick";
namespace Ringworld {
// Dialog resources
+const char *HELP_MSG = "Ringworld\rRevenge of the Patriarch\x14\rScummVM Version\r\r\
+\x01 Keyboard shortcuts...\rF2 - Sound options\rF3 - Quit\r\
+F4 - Restart\rF5 - Save game\rF7 - Restore Game\rF10 - Pause game";
const char *WATCH_INTRO_MSG = "Do you wish to watch the introduction?";
const char *START_PLAY_BTN_STRING = " Start Play ";
const char *INTRODUCTION_BTN_STRING = "Introduction";
@@ -129,6 +128,9 @@ const char *DEMO_RESUME_BTN_STRING = "Resume";
namespace BlueForce {
// Dialog resources
+const char *HELP_MSG = "Blue Force\x14\rScummVM Version\r\r\
+Keyboard shortcuts...\rF2 - Sound options\rF3 - Quit\r\
+F4 - Restart\rF5 - Save game\rF7 - Restore Game\rF10 - Pause game";
const char *WATCH_INTRO_MSG = "Do you wish to watch the introduction?";
const char *START_PLAY_BTN_STRING = " Play ";
const char *INTRODUCTION_BTN_STRING = " Watch ";
@@ -155,6 +157,9 @@ const char *CITY_HALL_JAIL = "City Hall & Jail";
const char *JAMISON_RYAN = "Jamison & Ryan";
const char *BIKINI_HUT = "Bikini Hut";
+// Scene 60 radio messages
+const char *RADIO_BTN_LIST[8] = { "10-2 ", "10-4 ", "10-13", "10-15", "10-27", "10-35", "10-97", "10-98" };
+
} // End of namespace BlueForce
} // End of namespace TsAGE
diff --git a/engines/tsage/staticres.h b/engines/tsage/staticres.h
index b08e92def2..172adc218e 100644
--- a/engines/tsage/staticres.h
+++ b/engines/tsage/staticres.h
@@ -39,10 +39,8 @@ extern const char *DEFAULT_SCENE_HOTSPOT;
extern const char *SAVE_ERROR_MSG;
extern const char *SAVING_NOT_ALLOWED_MSG;
extern const char *RESTORING_NOT_ALLOWED_MSG;
-extern const char *RESTART_CONFIRM_MSG;
// Dialogs
-extern const char *HELP_MSG;
extern const char *QUIT_CONFIRM_MSG;
extern const char *RESTART_MSG;
extern const char *GAME_PAUSED_MSG;
@@ -62,6 +60,7 @@ extern const char *INV_EMPTY_MSG;
namespace Ringworld {
// Dialog resources
+extern const char *HELP_MSG;
extern const char *WATCH_INTRO_MSG;
extern const char *START_PLAY_BTN_STRING;
extern const char *INTRODUCTION_BTN_STRING;
@@ -95,6 +94,7 @@ extern const char *DEMO_RESUME_BTN_STRING;
namespace BlueForce {
// Dialog resources
+extern const char *HELP_MSG;
extern const char *WATCH_INTRO_MSG;
extern const char *START_PLAY_BTN_STRING;
extern const char *INTRODUCTION_BTN_STRING;
@@ -121,6 +121,9 @@ extern const char *CITY_HALL_JAIL;
extern const char *JAMISON_RYAN;
extern const char *BIKINI_HUT;
+// Scene 60 radio dispatch buttons
+extern const char *RADIO_BTN_LIST[8];
+
} // End of namespace BlueForce
} // End of namespace TsAGE
diff --git a/engines/tsage/tsage.cpp b/engines/tsage/tsage.cpp
index 2fcabff16c..ca63c4c3e0 100644
--- a/engines/tsage/tsage.cpp
+++ b/engines/tsage/tsage.cpp
@@ -82,6 +82,12 @@ void TSageEngine::initialize() {
_resourceManager->addLib("TSAGE.RLB");
}
_globals = new BlueForce::BlueForceGlobals();
+
+ // Setup the user interface
+ BF_GLOBALS._uiElements.setup(Common::Point(0, BF_INTERFACE_Y - 2));
+
+ // Reset all global variables
+ BF_GLOBALS.reset();
}
_globals->gfxManager().setDefaults();
diff --git a/engines/tsage/tsage.h b/engines/tsage/tsage.h
index 88175f92ce..7bb3c7a989 100644
--- a/engines/tsage/tsage.h
+++ b/engines/tsage/tsage.h
@@ -62,6 +62,7 @@ struct tSageGameDescription;
#define SCREEN_HEIGHT 200
#define SCREEN_CENTER_X 160
#define SCREEN_CENTER_Y 100
+#define BF_INTERFACE_Y 168
class TSageEngine : public Engine {
private:
diff --git a/engines/tucker/staticres.cpp b/engines/tucker/staticres.cpp
index ef778b6f54..388f5ba05c 100644
--- a/engines/tucker/staticres.cpp
+++ b/engines/tucker/staticres.cpp
@@ -340,7 +340,7 @@ const SoundSequenceDataList AnimationSequencePlayer::_soundSeqDataList[] = {
{ 0, 0, 4, 0, 7, _soundDataSeq19_20 }
};
-const char *AnimationSequencePlayer::_audioFileNamesTable[] = {
+const char *const AnimationSequencePlayer::_audioFileNamesTable[] = {
"demomenu.raw",
"demorolc.raw",
"fx101.wav",
diff --git a/engines/tucker/tucker.h b/engines/tucker/tucker.h
index e676369427..3daf75d44a 100644
--- a/engines/tucker/tucker.h
+++ b/engines/tucker/tucker.h
@@ -989,7 +989,7 @@ private:
Audio::SoundHandle _musicHandle;
static const SoundSequenceDataList _soundSeqDataList[];
- static const char *_audioFileNamesTable[];
+ static const char *const _audioFileNamesTable[];
};
} // namespace Tucker
diff --git a/graphics/dither.cpp b/graphics/dither.cpp
deleted file mode 100644
index 3876db152b..0000000000
--- a/graphics/dither.cpp
+++ /dev/null
@@ -1,313 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include "graphics/dither.h"
-
-#include "common/endian.h"
-#include "common/stream.h"
-
-namespace Graphics {
-
-PaletteLUT::PaletteLUT(byte depth, PaletteFormat format) {
- assert((depth > 1) && (depth < 9));
-
- // For adjusting depth
- _depth1 = depth;
- _depth2 = 2 * _depth1;
- _shift = 8 - _depth1;
-
- // The table's dimensions
- _dim1 = (1 << _depth1);
- _dim2 = _dim1 * _dim1;
- _dim3 = _dim1 * _dim1 * _dim1;
-
- _format = format;
-
- // What's already built
- _got = _dim1;
- _gots = new byte[_dim1];
-
- // The lookup table
- _lut = new byte[_dim3];
-
- memset(_lutPal, 0, 768);
- memset(_realPal, 0, 768);
- memset(_gots, 1, _dim1);
-}
-
-void PaletteLUT::setPalette(const byte *palette, PaletteFormat format,
- byte depth, int transp) {
-
- assert((depth > 1) && (depth < 9));
-
- _transp = transp;
-
- int shift = 8 - depth;
-
- // Checking for the table's and the palette's pixel format
- if ((_format == kPaletteRGB) && (format == kPaletteYUV)) {
- byte *newPal = _realPal;
- const byte *oldPal = palette;
- for (int i = 0; i < 256; i++, newPal += 3, oldPal += 3)
- YUV2RGB(oldPal[0] << shift, oldPal[1] << shift, oldPal[2] << shift,
- newPal[0], newPal[1], newPal[2]);
- } else if ((_format == kPaletteYUV) && (format == kPaletteRGB)) {
- byte *newPal = _realPal;
- const byte *oldPal = palette;
- for (int i = 0; i < 256; i++, newPal += 3, oldPal += 3)
- RGB2YUV(oldPal[0] << shift, oldPal[1] << shift, oldPal[2] << shift,
- newPal[0], newPal[1], newPal[2]);
- } else
- memcpy(_realPal, palette, 768);
-
- // Using the specified depth for the lookup
- byte *newPal = _lutPal, *oldPal = _realPal;
- for (int i = 0; i < 768; i++)
- *newPal++ = (*oldPal++) >> _shift;
-
- // Everything has to be rebuilt
- _got = 0;
- memset(_gots, 0, _dim1);
-}
-
-PaletteLUT::~PaletteLUT() {
- delete[] _lut;
- delete[] _gots;
-}
-
-void PaletteLUT::buildNext() {
- if (_got >= _dim1)
- return;
-
- build(_got++);
-}
-
-#define SQR(x) ((x) * (x))
-// Building one "slice"
-void PaletteLUT::build(int d1) {
- // First dimension
- byte *lut = _lut + d1 * _dim2;
-
- // Second dimension
- for (uint32 j = 0; j < _dim1; j++) {
- // Third dimension
- for (uint32 k = 0; k < _dim1; k++) {
- const byte *p = _lutPal;
- uint32 d = 0xFFFFFFFF;
- byte n = 0;
-
- // Going over every palette entry, searching for the closest
- for (int c = 0; c < 256; c++, p += 3) {
- // Ignore the transparent color
- if (c == _transp)
- continue;
-
- uint32 di = SQR(d1 - p[0]) + SQR(j - p[1]) + SQR(k - p[2]);
- if (di < d) {
- d = di;
- n = c;
- if (d == 0)
- break;
- }
- }
-
- *lut++ = n;
- }
- }
-
- // Got this slice now
- _gots[d1] = 1;
-}
-
-inline int PaletteLUT::getIndex(byte c1, byte c2, byte c3) const {
- return ((c1 >> _shift) << _depth2) | ((c2 >> _shift) << _depth1) | (c3 >> _shift);
-}
-
-void PaletteLUT::getEntry(byte index, byte &c1, byte &c2, byte &c3) const {
- c1 = _realPal[index * 3 + 0];
- c2 = _realPal[index * 3 + 1];
- c3 = _realPal[index * 3 + 2];
-}
-
-byte PaletteLUT::findNearest(byte c1, byte c2, byte c3) {
- return _lut[getIndex(c1, c2, c3)];
-}
-
-byte PaletteLUT::findNearest(byte c1, byte c2, byte c3, byte &nC1, byte &nC2, byte &nC3) {
- // If we don't have the required "slice" yet, build it
- if (!_gots[c1 >> _shift])
- build(c1 >> _shift);
-
- int palIndex = _lut[getIndex(c1, c2, c3)];
- int i = palIndex * 3;
-
- nC1 = _realPal[i + 0];
- nC2 = _realPal[i + 1];
- nC3 = _realPal[i + 2];
-
- return palIndex;
-}
-
-bool PaletteLUT::save(Common::WriteStream &stream) {
- // The table has to be completely built before we can save
- while (_got < _dim1)
- buildNext();
-
- stream.writeUint32BE(MKTAG('P','L','U','T')); // Magic
- stream.writeUint32BE(kVersion);
- stream.writeByte(_depth1);
- if (stream.write(_realPal, 768) != 768)
- return false;
- if (stream.write(_lutPal, 768) != 768)
- return false;
- if (stream.write(_lut, _dim3) != _dim3)
- return false;
- if (!stream.flush())
- return false;
-
- if (stream.err())
- return false;
-
- return true;
-}
-
-bool PaletteLUT::load(Common::SeekableReadStream &stream) {
- // _realPal + _lutPal + _lut + _depth1 + magic + version
- int32 needSize = 768 + 768 + _dim3 + 1 + 4 + 4;
-
- if ((stream.size() - stream.pos()) < needSize)
- return false;
-
- // Magic
- if (stream.readUint32BE() != MKTAG('P','L','U','T'))
- return false;
-
- if (stream.readUint32BE() != kVersion)
- return false;
-
- byte depth1 = stream.readByte();
-
- if (depth1 != _depth1)
- return false;
-
- if (stream.read(_realPal, 768) != 768)
- return false;
- if (stream.read(_lutPal, 768) != 768)
- return false;
- if (stream.read(_lut, _dim3) != _dim3)
- return false;
-
- _got = _dim1;
- memset(_gots, 1, _dim1);
-
- return true;
-}
-
-SierraLight::SierraLight(int16 width, PaletteLUT *palLUT) {
- assert(width > 0);
-
- _width = width;
- _palLUT = palLUT;
-
- // Big buffer for the errors of the current and next line
- _errorBuf = new int32[3 * (2 * (_width + 2*1))];
- memset(_errorBuf, 0, (3 * (2 * (_width + 2*1))) * sizeof(int32));
-
- _curLine = 0;
- _errors[0] = _errorBuf + 3;
- _errors[1] = _errors[0] + 3 * (_width + 2*1);
-}
-
-SierraLight::~SierraLight() {
- delete[] _errorBuf;
-}
-
-void SierraLight::newFrame() {
- _curLine = 0;
- memset(_errors[0], 0, 3 * _width * sizeof(int32));
- memset(_errors[1], 0, 3 * _width * sizeof(int32));
-}
-
-void SierraLight::nextLine() {
- // Clear the finished line, it will become the last line in the buffer
- memset(_errors[_curLine], 0, 3 * _width * sizeof(int32));
-
- _curLine = (_curLine + 1) % 2;
-}
-
-byte SierraLight::dither(byte c1, byte c2, byte c3, uint32 x) {
- assert(_palLUT);
- assert(x < (uint32)_width);
-
- int32 eC1, eC2, eC3;
-
- getErrors(x, eC1, eC2, eC3);
-
- // Apply error on values
- c1 = CLIP<int>(c1 + eC1, 0, 255);
- c2 = CLIP<int>(c2 + eC2, 0, 255);
- c3 = CLIP<int>(c3 + eC3, 0, 255);
-
- // Find color
- byte newC1, newC2, newC3;
- byte newPixel = _palLUT->findNearest(c1, c2, c3, newC1, newC2, newC3);
-
- // Calculate new error
- eC1 = c1 - newC1;
- eC2 = c2 - newC2;
- eC3 = c3 - newC3;
-
- // Add them
- addErrors(x, eC1, eC2, eC3);
-
- return newPixel;
-}
-
-inline void SierraLight::getErrors(uint32 x, int32 &eC1, int32 &eC2, int32 &eC3) {
- int32 *errCur = _errors[_curLine];
-
- x *= 3;
- eC1 = errCur[x + 0] >> 2;
- eC2 = errCur[x + 1] >> 2;
- eC3 = errCur[x + 2] >> 2;
-}
-
-inline void SierraLight::addErrors(uint32 x, int32 eC1, int32 eC2, int32 eC3) {
- int32 *errCur = _errors[_curLine];
- int32 *errNext = _errors[(_curLine + 1) % 2];
-
- // Indices for current error
- int x0 = 3 * (x + 1);
- int x1 = 3 * (x + 0);
- int x2 = 3 * (x - 1);
-
- errCur [x0 + 0] += eC1 << 1;
- errCur [x0 + 1] += eC2 << 1;
- errCur [x0 + 2] += eC3 << 1;
- errNext[x1 + 0] += eC1;
- errNext[x1 + 1] += eC2;
- errNext[x1 + 2] += eC3;
- errNext[x2 + 0] += eC1;
- errNext[x2 + 1] += eC2;
- errNext[x2 + 2] += eC3;
-}
-
-} // End of namespace Graphics
diff --git a/graphics/dither.h b/graphics/dither.h
deleted file mode 100644
index dbde03df82..0000000000
--- a/graphics/dither.h
+++ /dev/null
@@ -1,195 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#ifndef GRAPHICS_DITHER_H
-#define GRAPHICS_DITHER_H
-
-#include "common/util.h"
-
-namespace Common {
-class SeekableReadStream;
-class WriteStream;
-}
-
-namespace Graphics {
-
-/** A palette lookup table to find the nearest matching entry of a fixed palette to a true color.
- *
- * The table can be build up in slices, one slice consisting of all entries for
- * one value of the first color component.
- */
-class PaletteLUT {
-public:
- /** Palette format. */
- enum PaletteFormat {
- kPaletteRGB, ///< Palette in RGB colorspace
- kPaletteYUV ///< Palette in YUV colorspace
- };
-
- /** Converting a color from YUV to RGB colorspace. */
- inline static void YUV2RGB(byte y, byte u, byte v, byte &r, byte &g, byte &b) {
- r = CLIP<int>(y + ((1357 * (v - 128)) >> 10), 0, 255);
- g = CLIP<int>(y - (( 691 * (v - 128)) >> 10) - ((333 * (u - 128)) >> 10), 0, 255);
- b = CLIP<int>(y + ((1715 * (u - 128)) >> 10), 0, 255);
- }
- /** Converting a color from RGB to YUV colorspace. */
- inline static void RGB2YUV(byte r, byte g, byte b, byte &y, byte &u, byte &v) {
- y = CLIP<int>( ((r * 306) >> 10) + ((g * 601) >> 10) + ((b * 117) >> 10) , 0, 255);
- u = CLIP<int>(-((r * 172) >> 10) - ((g * 340) >> 10) + ((b * 512) >> 10) + 128, 0, 255);
- v = CLIP<int>( ((r * 512) >> 10) - ((g * 429) >> 10) - ((b * 83) >> 10) + 128, 0, 255);
- }
-
- /** Create a lookup table of a given depth and palette format.
- *
- * @param depth How many bits of each color component to consider.
- * @param format The format the palette should be in.
- */
- PaletteLUT(byte depth, PaletteFormat format);
- ~PaletteLUT();
-
- /** Setting a palette.
- *
- * Any already built slices will be purged.
- *
- * @param palette The palette, plain 256 * 3 color components.
- * @param format The format the palette is in.
- * @param depth The number of significant bits in each color component.
- * @param transp An index that's seen as transparent and therefore ignored.
- */
- void setPalette(const byte *palette, PaletteFormat format, byte depth, int transp = -1);
-
- /** Build the next slice.
- *
- * This will build the next slice, if any.
- */
- void buildNext();
-
- /** Querying the color components to a given palette entry index. */
- void getEntry(byte index, byte &c1, byte &c2, byte &c3) const;
- /** Finding the nearest matching entry.
- *
- * @param c1 The first component of the wanted color.
- * @param c2 The second component of the wanted color.
- * @param c3 The third component of the wanted color.
- * @return The palette entry matching the wanted color best.
- */
- byte findNearest(byte c1, byte c2, byte c3);
- /** Finding the nearest matching entry, together with its color components.
- *
- * @param c1 The first component of the wanted color.
- * @param c2 The second component of the wanted color.
- * @param c3 The third component of the wanted color.
- * @paran nC1 The first component of the found color.
- * @paran nC2 The second component of the found color.
- * @paran nC3 The third component of the found color.
- * @return The palette entry matching the wanted color best.
- */
- byte findNearest(byte c1, byte c2, byte c3, byte &nC1, byte &nC2, byte &nC3);
-
- /** Save the table to a stream.
- *
- * This will build the whole table first.
- */
- bool save(Common::WriteStream &stream);
- /** Load the table from a stream. */
- bool load(Common::SeekableReadStream &stream);
-
-private:
- static const uint32 kVersion = 1;
-
- byte _depth1; ///< The table's depth for one dimension.
- byte _depth2; ///< The table's depth for two dimensions.
- byte _shift; ///< Amount to shift to adjust for the table's depth.
-
- uint32 _dim1; ///< The table's entry offset for one dimension.
- uint32 _dim2; ///< The table's entry offset for two dimensions.
- uint32 _dim3; ///< The table's entry offset for three dimensions.
-
- int _transp; ///< The transparent palette index.
-
- PaletteFormat _format; ///< The table's palette format.
- byte _lutPal[768]; ///< The palette used for looking up a color.
- byte _realPal[768]; ///< The original palette.
-
- uint32 _got; ///< Number of slices generated.
- byte *_gots; ///< Map of generated slices.
- byte *_lut; ///< The lookup table.
-
- /** Building a specified slice. */
- void build(int d1);
- /** Calculates the index into the lookup table for a given color. */
- inline int getIndex(byte c1, byte c2, byte c3) const;
-};
-
-/** The Sierra-2-4A ("Filter Light") error distribution dithering algorithm.
- *
- * The image will be dithered line by line and pixel by pixel, without earlier
- * values having to be changed.
-*/
-class SierraLight {
-public:
- /** Constructor.
- *
- * @param width The width of the image to dither.
- * @param palLUT The palette to which to dither.
- */
- SierraLight(int16 width, PaletteLUT *palLUT);
- ~SierraLight();
-
- /** Signals that a new frame or image is about to be dithered.
- *
- * This clears all collected errors, so that a new image (of the same
- * height and with the same palette) can be dithered.
- */
- void newFrame();
- /** Signals that a new line is about the begin.
- *
- * The current line's errors will be forgotten and values collected for the
- * next line will now count as the current line's.
- */
- void nextLine();
- /** Dither a pixel.
- *
- * @param c1 The first color component of the pixel.
- * @param c2 The second color component of the pixel.
- * @param c3 The third color component of the pixel.
- * @param x The pixel's x coordinate within the image.
- */
- byte dither(byte c1, byte c2, byte c3, uint32 x);
-
-protected:
- int16 _width; ///< The image's width.
-
- PaletteLUT *_palLUT; ///< The palette against which to dither.
-
- int32 *_errorBuf; ///< Big buffer for all collected errors.
- int32 *_errors[2]; ///< Pointers into the error buffer for two lines.
- int _curLine; ///< Which one is the current line?
-
- /** Querying a pixel's errors. */
- inline void getErrors(uint32 x, int32 &eC1, int32 &eC2, int32 &eC3);
- /** Adding a pixel's errors. */
- inline void addErrors(uint32 x, int32 eC1, int32 eC2, int32 eC3);
-};
-
-} // End of namespace Graphics
-
-#endif
diff --git a/graphics/module.mk b/graphics/module.mk
index 469ee42047..02c88d98ba 100644
--- a/graphics/module.mk
+++ b/graphics/module.mk
@@ -3,7 +3,6 @@ MODULE := graphics
MODULE_OBJS := \
conversion.o \
cursorman.o \
- dither.o \
font.o \
fontman.o \
fonts/bdf.o \
diff --git a/graphics/sjis.cpp b/graphics/sjis.cpp
index 4dd24d9dcc..33f0e562cb 100644
--- a/graphics/sjis.cpp
+++ b/graphics/sjis.cpp
@@ -53,7 +53,7 @@ FontSJIS *FontSJIS::createFont(const Common::Platform platform) {
}
delete ret;
} // TODO: PC98 font rom support
- /* else if (platform == Common::kPlatformPC98) {
+ /* else if (platform == Common::kPlatformPC98) {
ret = new FontPC98();
if (ret) {
if (ret->loadData())
@@ -90,7 +90,7 @@ void FontSJISBase::toggleFlippedMode(bool enable) {
if (hasFeature(kFeatFlipped))
_flippedMode = enable;
else
- warning("Flipped mode unsupported by this font");
+ warning("Flipped mode unsupported by this font");
}
uint FontSJISBase::getFontHeight() const {
@@ -265,10 +265,10 @@ void FontSJISBase::drawChar(void *dst, uint16 ch, int pitch, int bpp, uint32 c1,
blitCharacter<uint8>(glyphSource, width - outlineXOffset, height - outlineYOffset, (uint8 *)dst + pitch + 1, pitch, c1);
} else {
if (_drawMode != kDefaultMode) {
- blitCharacter<uint8>(glyphSource, width - outlineXOffset, height, ((uint8*)dst) + 1, pitch, c2);
- blitCharacter<uint8>(glyphSource, width, height - outlineYOffset, ((uint8*)dst) + pitch, pitch, c2);
+ blitCharacter<uint8>(glyphSource, width - outlineXOffset, height, ((uint8 *)dst) + 1, pitch, c2);
+ blitCharacter<uint8>(glyphSource, width, height - outlineYOffset, ((uint8 *)dst) + pitch, pitch, c2);
if (_drawMode == kShadowMode)
- blitCharacter<uint8>(glyphSource, width - outlineXOffset, height - outlineYOffset, ((uint8*)dst) + pitch + 1, pitch, c2);
+ blitCharacter<uint8>(glyphSource, width - outlineXOffset, height - outlineYOffset, ((uint8 *)dst) + pitch + 1, pitch, c2);
}
blitCharacter<uint8>(glyphSource, width, height, (uint8 *)dst, pitch, c1);
@@ -279,10 +279,10 @@ void FontSJISBase::drawChar(void *dst, uint16 ch, int pitch, int bpp, uint32 c1,
blitCharacter<uint16>(glyphSource, width - outlineXOffset, height - outlineYOffset, (uint8 *)dst + pitch + 2, pitch, c1);
} else {
if (_drawMode != kDefaultMode) {
- blitCharacter<uint16>(glyphSource, width - outlineXOffset, height, ((uint8*)dst) + 2, pitch, c2);
- blitCharacter<uint16>(glyphSource, width, height - outlineYOffset, ((uint8*)dst) + pitch, pitch, c2);
+ blitCharacter<uint16>(glyphSource, width - outlineXOffset, height, ((uint8 *)dst) + 2, pitch, c2);
+ blitCharacter<uint16>(glyphSource, width, height - outlineYOffset, ((uint8 *)dst) + pitch, pitch, c2);
if (_drawMode == kShadowMode)
- blitCharacter<uint16>(glyphSource, width - outlineXOffset, height - outlineYOffset, ((uint8*)dst) + pitch + 2, pitch, c2);
+ blitCharacter<uint16>(glyphSource, width - outlineXOffset, height - outlineYOffset, ((uint8 *)dst) + pitch + 2, pitch, c2);
}
blitCharacter<uint16>(glyphSource, width, height, (uint8 *)dst, pitch, c1);
@@ -424,10 +424,10 @@ bool FontPCEngine::loadData() {
Common::SeekableReadStream *data = SearchMan.createReadStreamForMember("pce.cdbios");
if (!data)
return false;
-
+
data->seek((data->size() & 0x200) ? 0x30200 : 0x30000);
data->read(_fontData12x12, kFont12x12Chars * 18);
-
+
_fontWidth = _fontHeight = 12;
_bitPosNewLineMask = _fontWidth & 7;
@@ -444,41 +444,41 @@ const uint8 *FontPCEngine::getCharData(uint16 ch) const {
const int rangeCnt = 45;
static const uint16 rangeTbl[rangeCnt][2] = {
// Symbols
- {0x8140,0x817E},{0x8180,0x81AC},
+ { 0x8140, 0x817E }, { 0x8180, 0x81AC },
// 0-9
- {0x824F,0x8258},
+ { 0x824F, 0x8258 },
// Latin upper
- {0x8260,0x8279},
+ { 0x8260, 0x8279 },
// Latin lower
- {0x8281,0x829A},
+ { 0x8281, 0x829A },
// Kana
- {0x829F,0x82F1},{0x8340,0x837E},{0x8380,0x8396},
+ { 0x829F, 0x82F1 }, { 0x8340, 0x837E }, { 0x8380, 0x8396},
// Greek upper
- {0x839F,0x83B6},
+ { 0x839F, 0x83B6 },
// Greek lower
- {0x83BF,0x83D6},
+ { 0x83BF, 0x83D6 },
// Cyrillic upper
- {0x8440,0x8460},
+ { 0x8440, 0x8460 },
// Cyrillic lower
- {0x8470,0x847E},{0x8480,0x8491},
+ { 0x8470, 0x847E }, { 0x8480, 0x8491},
// Kanji
- {0x889F,0x88FC},
- {0x8940,0x897E},{0x8980,0x89FC},
- {0x8A40,0x8A7E},{0x8A80,0x8AFC},
- {0x8B40,0x8B7E},{0x8B80,0x8BFC},
- {0x8C40,0x8C7E},{0x8C80,0x8CFC},
- {0x8D40,0x8D7E},{0x8D80,0x8DFC},
- {0x8E40,0x8E7E},{0x8E80,0x8EFC},
- {0x8F40,0x8F7E},{0x8F80,0x8FFC},
- {0x9040,0x907E},{0x9080,0x90FC},
- {0x9140,0x917E},{0x9180,0x91FC},
- {0x9240,0x927E},{0x9280,0x92FC},
- {0x9340,0x937E},{0x9380,0x93FC},
- {0x9440,0x947E},{0x9480,0x94FC},
- {0x9540,0x957E},{0x9580,0x95FC},
- {0x9640,0x967E},{0x9680,0x96FC},
- {0x9740,0x977E},{0x9780,0x97FC},
- {0x9840,0x9872}
+ { 0x889F, 0x88FC },
+ { 0x8940, 0x897E }, { 0x8980, 0x89FC },
+ { 0x8A40, 0x8A7E }, { 0x8A80, 0x8AFC },
+ { 0x8B40, 0x8B7E }, { 0x8B80, 0x8BFC },
+ { 0x8C40, 0x8C7E }, { 0x8C80, 0x8CFC },
+ { 0x8D40, 0x8D7E }, { 0x8D80, 0x8DFC },
+ { 0x8E40, 0x8E7E }, { 0x8E80, 0x8EFC },
+ { 0x8F40, 0x8F7E }, { 0x8F80, 0x8FFC },
+ { 0x9040, 0x907E }, { 0x9080, 0x90FC },
+ { 0x9140, 0x917E }, { 0x9180, 0x91FC },
+ { 0x9240, 0x927E }, { 0x9280, 0x92FC },
+ { 0x9340, 0x937E }, { 0x9380, 0x93FC },
+ { 0x9440, 0x947E }, { 0x9480, 0x94FC },
+ { 0x9540, 0x957E }, { 0x9580, 0x95FC },
+ { 0x9640, 0x967E }, { 0x9680, 0x96FC },
+ { 0x9740, 0x977E }, { 0x9780, 0x97FC },
+ { 0x9840, 0x9872 }
};
ch = (ch << 8) | (ch >> 8);
@@ -490,7 +490,7 @@ const uint8 *FontPCEngine::getCharData(uint16 ch) const {
}
offset += rangeTbl[i][1] - rangeTbl[i][0] + 1;
}
-
+
debug(4, "Invalid Char: 0x%x", ch);
return 0;
}
@@ -531,13 +531,14 @@ bool FontSjisSVM::loadData() {
uint32 magic1 = data->readUint32BE();
uint32 magic2 = data->readUint32BE();
- if (magic1 != MKTAG('S','C','V','M') || magic2 != MKTAG('S','J','I','S')) {
+ if (magic1 != MKTAG('S', 'C', 'V', 'M') || magic2 != MKTAG('S', 'J', 'I', 'S')) {
delete data;
return false;
}
uint32 version = data->readUint32BE();
- if (version != 3) {
+ if (version != kSjisFontVersion) {
+ warning("SJIS font version mismatch, expected: %d found: %u", kSjisFontVersion, version);
delete data;
return false;
}
diff --git a/graphics/sjis.h b/graphics/sjis.h
index 185b6cc593..f96eef6ad1 100644
--- a/graphics/sjis.h
+++ b/graphics/sjis.h
@@ -263,6 +263,10 @@ private:
const uint8 *getCharDataDefault(uint16 c) const;
void mapKANJIChar(const uint8 fB, const uint8 sB, int &base, int &index) const;
+
+ enum {
+ kSjisFontVersion = 3
+ };
};
// TODO: Consider adding support for PC98 ROM
diff --git a/gui/themes/translations.dat b/gui/themes/translations.dat
index a9f51c6ddd..c5ae3d49bc 100644
--- a/gui/themes/translations.dat
+++ b/gui/themes/translations.dat
Binary files differ
diff --git a/po/cs_CZ.po b/po/cs_CZ.po
index 07bcad74a0..5c4dbb8cd0 100644
--- a/po/cs_CZ.po
+++ b/po/cs_CZ.po
@@ -1,2797 +1,2787 @@
-# Czech translation for ScummVM.
-# Copyright (C) 2001-2011 ScummVM Team
-# This file is distributed under the same license as the ScummVM package.
-# Zbyněk Schwarz <zbynek.schwarz@gmail.com>, 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: ScummVM 1.3.0svn\n"
-"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2011-08-20 15:12+0100\n"
-"PO-Revision-Date: 2011-06-24 06:44+0100\n"
-"Last-Translator: Zbyněk Schwarz <zbynek.schwarz@gmail.com>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=iso-8859-2\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: Cesky\n"
-"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n"
-"X-Poedit-Language: Czech\n"
-"X-Poedit-Country: CZECH REPUBLIC\n"
-"X-Poedit-SourceCharset: iso-8859-1\n"
-
-#: gui/about.cpp:91
-#, c-format
-msgid "(built on %s)"
-msgstr "(sestaveno na %s)"
-
-#: gui/about.cpp:98
-msgid "Features compiled in:"
-msgstr "Zakompilované Funkce:"
-
-#: gui/about.cpp:107
-msgid "Available engines:"
-msgstr "Dostupná jádra:"
-
-#: gui/browser.cpp:66
-msgid "Go up"
-msgstr "Jít nahoru"
-
-#: gui/browser.cpp:66 gui/browser.cpp:68
-msgid "Go to previous directory level"
-msgstr "Jít na předchozí úroveň adresáře"
-
-#: gui/browser.cpp:68
-msgctxt "lowres"
-msgid "Go up"
-msgstr "Jít nahoru"
-
-#: gui/browser.cpp:69 gui/chooser.cpp:45 gui/KeysDialog.cpp:43
-#: gui/launcher.cpp:312 gui/massadd.cpp:94 gui/options.cpp:1178
-#: gui/saveload.cpp:63 gui/saveload.cpp:155 gui/themebrowser.cpp:54
-#: engines/engine.cpp:436 engines/scumm/dialogs.cpp:190
-#: engines/sword1/control.cpp:865 engines/parallaction/saveload.cpp:281
-#: backends/platform/wii/options.cpp:48
-#: backends/events/default/default-events.cpp:222
-#: backends/events/default/default-events.cpp:244
-msgid "Cancel"
-msgstr "Zrušit"
-
-#: gui/browser.cpp:70 gui/chooser.cpp:46 gui/themebrowser.cpp:55
-msgid "Choose"
-msgstr "Zvolit"
-
-#: gui/gui-manager.cpp:116 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 "Zavřít"
-
-#: gui/gui-manager.cpp:119
-msgid "Mouse click"
-msgstr "Kliknutí myší"
-
-#: gui/gui-manager.cpp:122 base/main.cpp:286
-msgid "Display keyboard"
-msgstr "Zobrazit klávesnici"
-
-#: gui/gui-manager.cpp:125 base/main.cpp:289
-msgid "Remap keys"
-msgstr "Přemapovat klávesy"
-
-#: gui/KeysDialog.h:36 gui/KeysDialog.cpp:145
-msgid "Choose an action to map"
-msgstr "Zvolte činnost k mapování"
-
-#: gui/KeysDialog.cpp:41
-msgid "Map"
-msgstr "Mapovat"
-
-#: gui/KeysDialog.cpp:42 gui/launcher.cpp:313 gui/launcher.cpp:936
-#: gui/launcher.cpp:940 gui/massadd.cpp:91 gui/options.cpp:1179
-#: engines/engine.cpp:359 engines/engine.cpp:370 engines/scumm/dialogs.cpp:192
-#: engines/scumm/scumm.cpp:1770 engines/agos/animation.cpp:545
-#: engines/groovie/script.cpp:420 engines/sky/compact.cpp:131
-#: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:344
-#: engines/sword1/animation.cpp:354 engines/sword1/animation.cpp:360
-#: engines/sword1/control.cpp:865 engines/sword1/logic.cpp:1633
-#: engines/sword2/animation.cpp:379 engines/sword2/animation.cpp:389
-#: engines/sword2/animation.cpp:398 engines/parallaction/saveload.cpp:281
-#: backends/platform/wii/options.cpp:47
-#: backends/platform/wince/CELauncherDialog.cpp:54
-msgid "OK"
-msgstr "OK"
-
-#: gui/KeysDialog.cpp:49
-msgid "Select an action and click 'Map'"
-msgstr "Zvolte činnost a klikněte 'Mapovat'"
-
-#: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141
-#, c-format
-msgid "Associated key : %s"
-msgstr "Přiřazená klávesa: %s"
-
-#: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143
-#, c-format
-msgid "Associated key : none"
-msgstr "Přiřazená klávesa: žádná"
-
-#: gui/KeysDialog.cpp:90
-msgid "Please select an action"
-msgstr "Prosím vyberte činnost"
-
-#: gui/KeysDialog.cpp:106
-msgid "Press the key to associate"
-msgstr "Zmáčkněte klávesu pro přiřazení"
-
-#: gui/launcher.cpp:165
-msgid "Game"
-msgstr "Hra"
-
-#: gui/launcher.cpp:169
-msgid "ID:"
-msgstr "ID:"
-
-#: gui/launcher.cpp:169 gui/launcher.cpp:171 gui/launcher.cpp:172
-msgid ""
-"Short game identifier used for referring to savegames and running the game "
-"from the command line"
-msgstr ""
-"Krátký identifikátor her, používaný jako odkaz k uloženým hrám a spuštění "
-"hry z příkazového řádku"
-
-#: gui/launcher.cpp:171
-msgctxt "lowres"
-msgid "ID:"
-msgstr "ID:"
-
-#: gui/launcher.cpp:176
-msgid "Name:"
-msgstr "Jméno"
-
-#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179
-msgid "Full title of the game"
-msgstr "Úplný název hry"
-
-#: gui/launcher.cpp:178
-msgctxt "lowres"
-msgid "Name:"
-msgstr "Jméno:"
-
-#: gui/launcher.cpp:182
-msgid "Language:"
-msgstr "Jazyk:"
-
-#: gui/launcher.cpp:182 gui/launcher.cpp:183
-msgid ""
-"Language of the game. This will not turn your Spanish game version into "
-"English"
-msgstr "Jazyk hry. Toto z Vaší Španělské verze neudělá Anglickou"
-
-#: gui/launcher.cpp:184 gui/launcher.cpp:198 gui/options.cpp:74
-#: gui/options.cpp:708 gui/options.cpp:718 gui/options.cpp:1149
-#: audio/null.cpp:40
-msgid "<default>"
-msgstr "<výchozí>"
-
-#: gui/launcher.cpp:194
-msgid "Platform:"
-msgstr "Platforma:"
-
-#: gui/launcher.cpp:194 gui/launcher.cpp:196 gui/launcher.cpp:197
-msgid "Platform the game was originally designed for"
-msgstr "Platforma, pro kterou byla hra původně vytvořena"
-
-#: gui/launcher.cpp:196
-msgctxt "lowres"
-msgid "Platform:"
-msgstr "Platforma:"
-
-#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035
-msgid "Graphics"
-msgstr "Obraz"
-
-#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035
-msgid "GFX"
-msgstr "GFX"
-
-#: gui/launcher.cpp:211
-msgid "Override global graphic settings"
-msgstr "Potlačit globální nastavení obrazu"
-
-#: gui/launcher.cpp:213
-msgctxt "lowres"
-msgid "Override global graphic settings"
-msgstr "Potlačit globální nastavení obrazu"
-
-#: gui/launcher.cpp:220 gui/options.cpp:1041
-msgid "Audio"
-msgstr "Zvuk"
-
-#: gui/launcher.cpp:223
-msgid "Override global audio settings"
-msgstr "Potlačit globální nastavení zvuku"
-
-#: gui/launcher.cpp:225
-msgctxt "lowres"
-msgid "Override global audio settings"
-msgstr "Potlačit globální nastavení zvuku"
-
-#: gui/launcher.cpp:234 gui/options.cpp:1046
-msgid "Volume"
-msgstr "Hlasitost"
-
-#: gui/launcher.cpp:236 gui/options.cpp:1048
-msgctxt "lowres"
-msgid "Volume"
-msgstr "Hlasitost"
-
-#: gui/launcher.cpp:239
-msgid "Override global volume settings"
-msgstr "Potlačit globální nastavení hlasitosti"
-
-#: gui/launcher.cpp:241
-msgctxt "lowres"
-msgid "Override global volume settings"
-msgstr "Potlačit globální nastavení hlasitosti"
-
-#: gui/launcher.cpp:248 gui/options.cpp:1056
-msgid "MIDI"
-msgstr "MIDI"
-
-#: gui/launcher.cpp:251
-msgid "Override global MIDI settings"
-msgstr "Potlačit globální nastavení MIDI"
-
-#: gui/launcher.cpp:253
-msgctxt "lowres"
-msgid "Override global MIDI settings"
-msgstr "Potlačit globální nastavení MIDI"
-
-#: gui/launcher.cpp:263 gui/options.cpp:1062
-msgid "MT-32"
-msgstr "MT-32"
-
-#: gui/launcher.cpp:266
-msgid "Override global MT-32 settings"
-msgstr "Potlačit globální nastavení MT-32"
-
-#: gui/launcher.cpp:268
-msgctxt "lowres"
-msgid "Override global MT-32 settings"
-msgstr "Potlačit globální nastavení MT-32"
-
-#: gui/launcher.cpp:279 gui/options.cpp:1069
-msgid "Paths"
-msgstr "Cesty"
-
-#: gui/launcher.cpp:281 gui/options.cpp:1071
-msgctxt "lowres"
-msgid "Paths"
-msgstr "Cesty"
-
-#: gui/launcher.cpp:288
-msgid "Game Path:"
-msgstr "Cesta Hry:"
-
-#: gui/launcher.cpp:290
-msgctxt "lowres"
-msgid "Game Path:"
-msgstr "Cesta Hry:"
-
-#: gui/launcher.cpp:295 gui/options.cpp:1091
-msgid "Extra Path:"
-msgstr "Dodatečná Cesta:"
-
-#: gui/launcher.cpp:295 gui/launcher.cpp:297 gui/launcher.cpp:298
-msgid "Specifies path to additional data used the game"
-msgstr "Stanoví cestu pro dodatečná data použitá ve hře"
-
-#: gui/launcher.cpp:297 gui/options.cpp:1093
-msgctxt "lowres"
-msgid "Extra Path:"
-msgstr "Dodatečná Cesta:"
-
-#: gui/launcher.cpp:302 gui/options.cpp:1079
-msgid "Save Path:"
-msgstr "Cesta pro uložení:"
-
-#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305
-#: gui/options.cpp:1079 gui/options.cpp:1081 gui/options.cpp:1082
-msgid "Specifies where your savegames are put"
-msgstr "Stanovuje, kam jsou umístěny Vaše uložené hry"
-
-#: gui/launcher.cpp:304 gui/options.cpp:1081
-msgctxt "lowres"
-msgid "Save Path:"
-msgstr "Cesta pro uložení:"
-
-#: gui/launcher.cpp:321 gui/launcher.cpp:404 gui/launcher.cpp:453
-#: gui/options.cpp:1088 gui/options.cpp:1094 gui/options.cpp:1101
-#: gui/options.cpp:1202 gui/options.cpp:1208 gui/options.cpp:1214
-#: gui/options.cpp:1222 gui/options.cpp:1246 gui/options.cpp:1250
-#: gui/options.cpp:1256 gui/options.cpp:1263 gui/options.cpp:1362
-msgctxt "path"
-msgid "None"
-msgstr "Žádné"
-
-#: gui/launcher.cpp:326 gui/launcher.cpp:408
-#: backends/platform/wii/options.cpp:56
-msgid "Default"
-msgstr "Výchozí"
-
-#: gui/launcher.cpp:446 gui/options.cpp:1356
-msgid "Select SoundFont"
-msgstr "Vybrat SoundFont"
-
-#: gui/launcher.cpp:465 gui/launcher.cpp:612
-msgid "Select directory with game data"
-msgstr "Vyberte adresář s daty hry"
-
-#: gui/launcher.cpp:483
-msgid "Select additional game directory"
-msgstr "Vyberte dodatečný adresář hry"
-
-#: gui/launcher.cpp:495
-msgid "Select directory for saved games"
-msgstr "Vyberte adresář pro uložené hry"
-
-#: gui/launcher.cpp:514
-msgid "This game ID is already taken. Please choose another one."
-msgstr "Toto ID hry je už zabrané. Vyberte si, prosím, jiné."
-
-#: gui/launcher.cpp:555 engines/dialogs.cpp:110
-msgid "~Q~uit"
-msgstr "~U~končit"
-
-#: gui/launcher.cpp:555 backends/platform/sdl/macosx/appmenu_osx.mm:80
-msgid "Quit ScummVM"
-msgstr "Ukončit ScummVM"
-
-#: gui/launcher.cpp:556
-msgid "A~b~out..."
-msgstr "~O~ Programu..."
-
-#: gui/launcher.cpp:556 backends/platform/sdl/macosx/appmenu_osx.mm:61
-msgid "About ScummVM"
-msgstr "O ScummVM"
-
-#: gui/launcher.cpp:557
-msgid "~O~ptions..."
-msgstr "~V~olby..."
-
-#: gui/launcher.cpp:557
-msgid "Change global ScummVM options"
-msgstr "Změnit globální volby ScummVM"
-
-#: gui/launcher.cpp:559
-msgid "~S~tart"
-msgstr "~S~pustit"
-
-#: gui/launcher.cpp:559
-msgid "Start selected game"
-msgstr "Spustit zvolenou hru"
-
-#: gui/launcher.cpp:562
-msgid "~L~oad..."
-msgstr "~N~ahrát..."
-
-#: gui/launcher.cpp:562
-msgid "Load savegame for selected game"
-msgstr "Nahrát uloženou pozici pro zvolenou hru"
-
-#: gui/launcher.cpp:567 gui/launcher.cpp:1055
-msgid "~A~dd Game..."
-msgstr "~P~řidat hru..."
-
-#: gui/launcher.cpp:567 gui/launcher.cpp:574
-msgid "Hold Shift for Mass Add"
-msgstr "Podržte Shift pro Hromadné Přidání"
-
-#: gui/launcher.cpp:569
-msgid "~E~dit Game..."
-msgstr "~U~pravit Hru..."
-
-#: gui/launcher.cpp:569 gui/launcher.cpp:576
-msgid "Change game options"
-msgstr "Změnit volby hry"
-
-#: gui/launcher.cpp:571
-msgid "~R~emove Game"
-msgstr "~O~dstranit Hru"
-
-#: gui/launcher.cpp:571 gui/launcher.cpp:578
-msgid "Remove game from the list. The game data files stay intact"
-msgstr "Odstranit hru ze seznamu. Herní data zůstanou zachována"
-
-#: gui/launcher.cpp:574 gui/launcher.cpp:1055
-msgctxt "lowres"
-msgid "~A~dd Game..."
-msgstr "~P~řidat hru..."
-
-#: gui/launcher.cpp:576
-msgctxt "lowres"
-msgid "~E~dit Game..."
-msgstr "~U~pravit hru..."
-
-#: gui/launcher.cpp:578
-msgctxt "lowres"
-msgid "~R~emove Game"
-msgstr "~O~dstranit hru"
-
-#: gui/launcher.cpp:586
-msgid "Search in game list"
-msgstr "Hledat v seznamu her"
-
-#: gui/launcher.cpp:590 gui/launcher.cpp:1102
-msgid "Search:"
-msgstr "Hledat:"
-
-#: gui/launcher.cpp:593 gui/options.cpp:826
-msgid "Clear value"
-msgstr "Vyčistit hodnotu"
-
-#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255
-#: engines/mohawk/riven.cpp:716 engines/cruise/menu.cpp:216
-msgid "Load game:"
-msgstr "Nahrát hru:"
-
-#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/scumm/dialogs.cpp:188
-#: engines/mohawk/myst.cpp:255 engines/mohawk/riven.cpp:716
-#: engines/cruise/menu.cpp:216 backends/platform/wince/CEActionsPocket.cpp:267
-#: backends/platform/wince/CEActionsSmartphone.cpp:231
-msgid "Load"
-msgstr "Nahrát"
-
-#: gui/launcher.cpp:723
-msgid ""
-"Do you really want to run the mass game detector? This could potentially add "
-"a huge number of games."
-msgstr ""
-"Opravdu chcete spustit hromadnou detekci her? Toto by mohlo potenciálně "
-"přidat velkou spoustu her. "
-
-#: gui/launcher.cpp:724 gui/launcher.cpp:872
-#: backends/events/symbiansdl/symbiansdl-events.cpp:184
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-msgid "Yes"
-msgstr "Ano"
-
-#: gui/launcher.cpp:724 gui/launcher.cpp:872
-#: backends/events/symbiansdl/symbiansdl-events.cpp:184
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-msgid "No"
-msgstr "Ne"
-
-#: gui/launcher.cpp:772
-msgid "ScummVM couldn't open the specified directory!"
-msgstr "ScummVM nemohl tento adresář otevřít!"
-
-#: gui/launcher.cpp:784
-msgid "ScummVM could not find any game in the specified directory!"
-msgstr "ScummVM nemohl v zadaném adresáři najít žádnou hru!"
-
-#: gui/launcher.cpp:798
-msgid "Pick the game:"
-msgstr "Vybrat hru:"
-
-#: gui/launcher.cpp:872
-msgid "Do you really want to remove this game configuration?"
-msgstr "Opravdu chcete odstranit nastavení této hry?"
-
-#: gui/launcher.cpp:936
-msgid "This game does not support loading games from the launcher."
-msgstr "Tato hra nepodporuje spouštění her ze spouštěče"
-
-#: gui/launcher.cpp:940
-msgid "ScummVM could not find any engine capable of running the selected game!"
-msgstr "ScummVM nemohl najít žádné jádro schopné vybranou hru spustit!"
-
-#: gui/launcher.cpp:1054
-msgctxt "lowres"
-msgid "Mass Add..."
-msgstr "Hromadné Přidání..."
-
-#: gui/launcher.cpp:1054
-msgid "Mass Add..."
-msgstr "Hromadné Přidání..."
-
-#: gui/massadd.cpp:78 gui/massadd.cpp:81
-msgid "... progress ..."
-msgstr "... průběh ..."
-
-#: gui/massadd.cpp:258
-msgid "Scan complete!"
-msgstr "Hledání dokončeno!"
-
-#: gui/massadd.cpp:261
-#, c-format
-msgid "Discovered %d new games, ignored %d previously added games."
-msgstr "Objeveno %d nových her, ignorováno %d dříve přidaných her."
-
-#: gui/massadd.cpp:265
-#, c-format
-msgid "Scanned %d directories ..."
-msgstr "Prohledáno %d adresářů..."
-
-#: gui/massadd.cpp:268
-#, c-format
-msgid "Discovered %d new games, ignored %d previously added games ..."
-msgstr "Objeveno %d nových her, ignorováno %d dříve přidaných her ..."
-
-#: gui/options.cpp:72
-msgid "Never"
-msgstr "Nikdy"
-
-#: gui/options.cpp:72
-msgid "every 5 mins"
-msgstr "Každých 5 min"
-
-#: gui/options.cpp:72
-msgid "every 10 mins"
-msgstr "Každých 10 min"
-
-#: gui/options.cpp:72
-msgid "every 15 mins"
-msgstr "Každých 15 min"
-
-#: gui/options.cpp:72
-msgid "every 30 mins"
-msgstr "Každých 30 min"
-
-#: gui/options.cpp:74
-msgid "8 kHz"
-msgstr "8 kHz"
-
-#: gui/options.cpp:74
-msgid "11kHz"
-msgstr "11kHz"
-
-#: gui/options.cpp:74
-msgid "22 kHz"
-msgstr "22 kHz"
-
-#: gui/options.cpp:74
-msgid "44 kHz"
-msgstr "44 kHz"
-
-#: gui/options.cpp:74
-msgid "48 kHz"
-msgstr "48 kHz"
-
-#: gui/options.cpp:236 gui/options.cpp:464 gui/options.cpp:559
-#: gui/options.cpp:625 gui/options.cpp:825
-msgctxt "soundfont"
-msgid "None"
-msgstr "Žádné"
-
-#: gui/options.cpp:372
-msgid "Failed to apply some of the graphic options changes:"
-msgstr "Nelze použít některé změny možností grafiky:"
-
-#: gui/options.cpp:384
-msgid "the video mode could not be changed."
-msgstr "režim obrazu nemohl být změněn."
-
-#: gui/options.cpp:390
-msgid "the fullscreen setting could not be changed"
-msgstr "nastavení celé obrazovky nemohlo být změněno"
-
-#: gui/options.cpp:396
-msgid "the aspect ratio setting could not be changed"
-msgstr "nastavení poměru stran nemohlo být změněno"
-
-#: gui/options.cpp:705
-msgid "Graphics mode:"
-msgstr "Režim obrazu:"
-
-#: gui/options.cpp:716
-msgid "Render mode:"
-msgstr "Režim vykreslení:"
-
-#: gui/options.cpp:716 gui/options.cpp:717
-msgid "Special dithering modes supported by some games"
-msgstr "Speciální režimy chvění podporované některými hrami"
-
-#: gui/options.cpp:726
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2247
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:472
-msgid "Fullscreen mode"
-msgstr "Režim celé obrazovky"
-
-#: gui/options.cpp:729
-msgid "Aspect ratio correction"
-msgstr "Korekce poměru stran"
-
-#: gui/options.cpp:729
-msgid "Correct aspect ratio for 320x200 games"
-msgstr "Korigovat poměr stran pro hry 320x200"
-
-#: gui/options.cpp:730
-msgid "EGA undithering"
-msgstr "Nerozkládání EGA"
-
-#: gui/options.cpp:730
-msgid "Enable undithering in EGA games that support it"
-msgstr "Povolit nerozkládání v EGA hrách, které to podporují"
-
-#: gui/options.cpp:738
-msgid "Preferred Device:"
-msgstr "Prioritní Zařízení:"
-
-#: gui/options.cpp:738
-msgid "Music Device:"
-msgstr "Hudební zařízení"
-
-#: gui/options.cpp:738 gui/options.cpp:740
-msgid "Specifies preferred sound device or sound card emulator"
-msgstr "Stanoví prioritní zvukové zařízení nebo emulátor zvukové karty"
-
-#: gui/options.cpp:738 gui/options.cpp:740 gui/options.cpp:741
-msgid "Specifies output sound device or sound card emulator"
-msgstr "Stanoví výstupní zvukové zařízení nebo emulátor zvukové karty"
-
-#: gui/options.cpp:740
-msgctxt "lowres"
-msgid "Preferred Dev.:"
-msgstr "Prioritní Zař.:"
-
-#: gui/options.cpp:740
-msgctxt "lowres"
-msgid "Music Device:"
-msgstr "Hudební zařízení"
-
-#: gui/options.cpp:766
-msgid "AdLib emulator:"
-msgstr "AdLib emulátor"
-
-#: gui/options.cpp:766 gui/options.cpp:767
-msgid "AdLib is used for music in many games"
-msgstr "AdLib se používá pro hudbu v mnoha hrách"
-
-#: gui/options.cpp:777
-msgid "Output rate:"
-msgstr "Výstup. frekvence:"
-
-#: gui/options.cpp:777 gui/options.cpp:778
-msgid ""
-"Higher value specifies better sound quality but may be not supported by your "
-"soundcard"
-msgstr ""
-"Vyšší hodnota způsobí lepší kvalitu zvuku, ale nemusí být podporována Vaši "
-"zvukovou kartou"
-
-#: gui/options.cpp:788
-msgid "GM Device:"
-msgstr "GM Zařízení:"
-
-#: gui/options.cpp:788
-msgid "Specifies default sound device for General MIDI output"
-msgstr "Stanoví výchozí zvukové zařízení pro výstup General MIDI"
-
-#: gui/options.cpp:799
-msgid "Don't use General MIDI music"
-msgstr "Nepoužívat hudbu General MIDI"
-
-#: gui/options.cpp:810 gui/options.cpp:871
-msgid "Use first available device"
-msgstr "Použít první dostupné zařízení"
-
-#: gui/options.cpp:822
-msgid "SoundFont:"
-msgstr "SoundFont:"
-
-#: gui/options.cpp:822 gui/options.cpp:824 gui/options.cpp:825
-msgid "SoundFont is supported by some audio cards, Fluidsynth and Timidity"
-msgstr ""
-"SoundFont je podporován některými zvukovými kartami, Fluidsynth a Timidity"
-
-#: gui/options.cpp:824
-msgctxt "lowres"
-msgid "SoundFont:"
-msgstr "SoundFont:"
-
-#: gui/options.cpp:829
-msgid "Mixed AdLib/MIDI mode"
-msgstr "Smíšený režim AdLib/MIDI"
-
-#: gui/options.cpp:829
-msgid "Use both MIDI and AdLib sound generation"
-msgstr "Použít obě zvukové generace MIDI a AdLib"
-
-#: gui/options.cpp:832
-msgid "MIDI gain:"
-msgstr "Zesílení MIDI:"
-
-#: gui/options.cpp:842
-msgid "MT-32 Device:"
-msgstr "Zařízení MT-32:"
-
-#: gui/options.cpp:842
-msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
-msgstr ""
-"Stanoví výchozí zvukové výstupní zařízení pro Roland MT-32/LAPC1/CM32l/CM64"
-
-#: gui/options.cpp:847
-msgid "True Roland MT-32 (disable GM emulation)"
-msgstr "Opravdový Roland MT-32 (vypne GM emulaci)"
-
-#: gui/options.cpp:847 gui/options.cpp:849
-msgid ""
-"Check if you want to use your real hardware Roland-compatible sound device "
-"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"
-
-#: gui/options.cpp:849
-msgctxt "lowres"
-msgid "True Roland MT-32 (no GM emulation)"
-msgstr "Opravdový Roland MT-32 (žádná GM emulace)"
-
-#: gui/options.cpp:852
-msgid "Enable Roland GS Mode"
-msgstr "Zapnout režim Roland GS"
-
-#: gui/options.cpp:852
-msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack"
-msgstr "Vypne mapování General MIDI pro hry s Roland MT-32 zvukovým doprovodem"
-
-#: gui/options.cpp:861
-msgid "Don't use Roland MT-32 music"
-msgstr "Nepoužívat hudbu Roland MT-32"
-
-#: gui/options.cpp:888
-msgid "Text and Speech:"
-msgstr "Text a Řeč"
-
-#: gui/options.cpp:892 gui/options.cpp:902
-msgid "Speech"
-msgstr "Řeč"
-
-#: gui/options.cpp:893 gui/options.cpp:903
-msgid "Subtitles"
-msgstr "Titulky"
-
-#: gui/options.cpp:894
-msgid "Both"
-msgstr "Oba"
-
-#: gui/options.cpp:896
-msgid "Subtitle speed:"
-msgstr "Rychlost titulků:"
-
-#: gui/options.cpp:898
-msgctxt "lowres"
-msgid "Text and Speech:"
-msgstr "Text a Řeč:"
-
-#: gui/options.cpp:902
-msgid "Spch"
-msgstr "Řeč"
-
-#: gui/options.cpp:903
-msgid "Subs"
-msgstr "Titl"
-
-#: gui/options.cpp:904
-msgctxt "lowres"
-msgid "Both"
-msgstr "Oba"
-
-#: gui/options.cpp:904
-msgid "Show subtitles and play speech"
-msgstr "Zobrazit titulky a přehrávat řeč"
-
-#: gui/options.cpp:906
-msgctxt "lowres"
-msgid "Subtitle speed:"
-msgstr "Rychlost titulků"
-
-#: gui/options.cpp:922
-msgid "Music volume:"
-msgstr "Hlasitost hudby"
-
-#: gui/options.cpp:924
-msgctxt "lowres"
-msgid "Music volume:"
-msgstr "Hlasitost hudby"
-
-#: gui/options.cpp:931
-msgid "Mute All"
-msgstr "Ztlumit Vše"
-
-#: gui/options.cpp:934
-msgid "SFX volume:"
-msgstr "Hlasitost zvuků"
-
-#: gui/options.cpp:934 gui/options.cpp:936 gui/options.cpp:937
-msgid "Special sound effects volume"
-msgstr "Hlasitost speciálních zvukových efektů"
-
-#: gui/options.cpp:936
-msgctxt "lowres"
-msgid "SFX volume:"
-msgstr "Hlasitost zvuků"
-
-#: gui/options.cpp:944
-msgid "Speech volume:"
-msgstr "Hlasitost řeči"
-
-#: gui/options.cpp:946
-msgctxt "lowres"
-msgid "Speech volume:"
-msgstr "Hlasitost řeči"
-
-#: gui/options.cpp:1085
-msgid "Theme Path:"
-msgstr "Cesta ke Vzhledu:"
-
-#: gui/options.cpp:1087
-msgctxt "lowres"
-msgid "Theme Path:"
-msgstr "Cesta ke Vzhledu:"
-
-#: gui/options.cpp:1091 gui/options.cpp:1093 gui/options.cpp:1094
-msgid "Specifies path to additional data used by all games or ScummVM"
-msgstr "Stanoví cestu k dodatečným datům používaná všemi hrami nebo ScummVM"
-
-#: gui/options.cpp:1098
-msgid "Plugins Path:"
-msgstr "Cesta k Pluginům:"
-
-#: gui/options.cpp:1100
-msgctxt "lowres"
-msgid "Plugins Path:"
-msgstr "Cesta k Pluginům:"
-
-#: gui/options.cpp:1109
-msgid "Misc"
-msgstr "Různé"
-
-#: gui/options.cpp:1111
-msgctxt "lowres"
-msgid "Misc"
-msgstr "Různé"
-
-#: gui/options.cpp:1113
-msgid "Theme:"
-msgstr "Vzhled:"
-
-#: gui/options.cpp:1117
-msgid "GUI Renderer:"
-msgstr "GUI Vykreslovač:"
-
-#: gui/options.cpp:1129
-msgid "Autosave:"
-msgstr "Autoukládání:"
-
-#: gui/options.cpp:1131
-msgctxt "lowres"
-msgid "Autosave:"
-msgstr "Autoukládání:"
-
-#: gui/options.cpp:1139
-msgid "Keys"
-msgstr "Klávesy"
-
-#: gui/options.cpp:1146
-msgid "GUI Language:"
-msgstr "Jazyk GUI"
-
-#: gui/options.cpp:1146
-msgid "Language of ScummVM GUI"
-msgstr "Jazyk GUI ScummVM"
-
-#: gui/options.cpp:1295
-msgid "You have to restart ScummVM before your changes will take effect."
-msgstr "Pro použití těchto nastavení musíte restartovat ScummVM."
-
-#: gui/options.cpp:1308
-msgid "Select directory for savegames"
-msgstr "Vybrat adresář pro uložené hry"
-
-#: gui/options.cpp:1315
-msgid "The chosen directory cannot be written to. Please select another one."
-msgstr "Do zvoleného adresáře nelze zapisovat. Vyberte, prosím, jiný."
-
-#: gui/options.cpp:1324
-msgid "Select directory for GUI themes"
-msgstr "Vyberte adresář pro vhledy GUI"
-
-#: gui/options.cpp:1334
-msgid "Select directory for extra files"
-msgstr "Vyberte adresář pro dodatečné soubory"
-
-#: gui/options.cpp:1345
-msgid "Select directory for plugins"
-msgstr "Vyberte adresář pro zásuvné moduly"
-
-#: gui/options.cpp:1389
-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 ""
-"Vzhled, který jste zvolili, nepodporuje Váš současný jazyk. Pokud chcete "
-"tento vzhled použít, musíte nejdříve přepnout na jiný jazyk."
-
-#: gui/saveload.cpp:58 gui/saveload.cpp:239
-msgid "No date saved"
-msgstr "Neuložena žádná data"
-
-#: gui/saveload.cpp:59 gui/saveload.cpp:240
-msgid "No time saved"
-msgstr "Žádný uložený čas"
-
-#: gui/saveload.cpp:60 gui/saveload.cpp:241
-msgid "No playtime saved"
-msgstr "Žádná uložená doba hraní"
-
-#: gui/saveload.cpp:67 gui/saveload.cpp:155
-msgid "Delete"
-msgstr "Smazat"
-
-#: gui/saveload.cpp:154
-msgid "Do you really want to delete this savegame?"
-msgstr "Opravdu chcete tuto uloženou hru vymazat"
-
-#: gui/saveload.cpp:264
-msgid "Date: "
-msgstr "Datum:"
-
-#: gui/saveload.cpp:268
-msgid "Time: "
-msgstr "Čas:"
-
-#: gui/saveload.cpp:274
-msgid "Playtime: "
-msgstr "Doba hraní:"
-
-#: gui/saveload.cpp:287 gui/saveload.cpp:354
-msgid "Untitled savestate"
-msgstr "Bezejmenný uložený stav"
-
-#: gui/themebrowser.cpp:44
-msgid "Select a Theme"
-msgstr "Vyberte Vzhled"
-
-#: gui/ThemeEngine.cpp:328
-msgid "Disabled GFX"
-msgstr "GFX zakázáno"
-
-#: gui/ThemeEngine.cpp:328
-msgctxt "lowres"
-msgid "Disabled GFX"
-msgstr "GFX zakázáno"
-
-#: gui/ThemeEngine.cpp:329
-msgid "Standard Renderer (16bpp)"
-msgstr "Standardní Vykreslovač (16bpp)"
-
-#: gui/ThemeEngine.cpp:329
-msgid "Standard (16bpp)"
-msgstr "Standardní (16bpp)"
-
-#: gui/ThemeEngine.cpp:331
-msgid "Antialiased Renderer (16bpp)"
-msgstr "Vykreslovač s vyhlazenými hranami (16bpp)"
-
-#: gui/ThemeEngine.cpp:331
-msgid "Antialiased (16bpp)"
-msgstr "S vyhlazenými hranami (16bpp)"
-
-#: base/main.cpp:206
-#, c-format
-msgid "Engine does not support debug level '%s'"
-msgstr "Jádro nepodporuje úroveň ladění '%s'"
-
-#: base/main.cpp:274
-msgid "Menu"
-msgstr "Menu"
-
-#: base/main.cpp:277 backends/platform/symbian/src/SymbianActions.cpp:45
-#: backends/platform/wince/CEActionsPocket.cpp:45
-#: backends/platform/wince/CEActionsSmartphone.cpp:46
-msgid "Skip"
-msgstr "Přeskočit"
-
-#: base/main.cpp:280 backends/platform/symbian/src/SymbianActions.cpp:50
-#: backends/platform/wince/CEActionsPocket.cpp:42
-msgid "Pause"
-msgstr "Pauza"
-
-#: base/main.cpp:283
-msgid "Skip line"
-msgstr "Přeskočit řádek"
-
-#: base/main.cpp:442
-msgid "Error running game:"
-msgstr "Chyba při spuštění hry:"
-
-#: base/main.cpp:466
-msgid "Could not find any engine capable of running the selected game"
-msgstr "Nelze nalézt žádné jádro schopné vybranou hru spustit"
-
-#: common/error.cpp:38
-msgid "No error"
-msgstr "Žádná chyba"
-
-#: common/error.cpp:40
-msgid "Game data not found"
-msgstr "Data hry nenalezena"
-
-#: common/error.cpp:42
-msgid "Game id not supported"
-msgstr "Id hry není podporováno"
-
-#: common/error.cpp:44
-msgid "Unsupported color mode"
-msgstr "Nepodporovaný barevný režim"
-
-#: common/error.cpp:47
-msgid "Read permission denied"
-msgstr "Oprávnění ke čtení zamítnuto"
-
-#: common/error.cpp:49
-msgid "Write permission denied"
-msgstr "Oprávnění k zápisu zamítnuto"
-
-#: common/error.cpp:52
-msgid "Path does not exist"
-msgstr "Cesta neexistuje"
-
-#: common/error.cpp:54
-msgid "Path not a directory"
-msgstr "Cesta není adresář"
-
-#: common/error.cpp:56
-msgid "Path not a file"
-msgstr "Cesta není soubor"
-
-#: common/error.cpp:59
-msgid "Cannot create file"
-msgstr "Nelze vytvořit soubor"
-
-#: common/error.cpp:61
-msgid "Reading data failed"
-msgstr "Čtení dat selhalo"
-
-#: common/error.cpp:63
-msgid "Writing data failed"
-msgstr "Zápis dat selhal"
-
-#: common/error.cpp:66
-msgid "Could not find suitable engine plugin"
-msgstr "Nelze nalézt vhodný zás. modul jádra"
-
-#: common/error.cpp:68
-msgid "Engine plugin does not support save states"
-msgstr "Zás. modul jádra nepodporuje uložené stavy"
-
-#: common/error.cpp:71
-msgid "User canceled"
-msgstr "Zrušeno uživatelem"
-
-#: common/error.cpp:75
-msgid "Unknown error"
-msgstr "Neznámá chyba"
-
-#. I18N: Hercules is graphics card name
-#: common/util.cpp:275
-msgid "Hercules Green"
-msgstr "Hercules Zelená"
-
-#: common/util.cpp:276
-msgid "Hercules Amber"
-msgstr "Hercules Jantarová"
-
-#: common/util.cpp:283
-msgctxt "lowres"
-msgid "Hercules Green"
-msgstr "Hercules Zelená"
-
-#: common/util.cpp:284
-msgctxt "lowres"
-msgid "Hercules Amber"
-msgstr "Hercules Jantarová"
-
-#: engines/advancedDetector.cpp:296
-#, c-format
-msgid "The game in '%s' seems to be unknown."
-msgstr "Hra v '%s' se zdá být neznámá."
-
-#: engines/advancedDetector.cpp:297
-msgid "Please, report the following data to the ScummVM team along with name"
-msgstr "Prosím nahlaste následující data týmu ScummVM spolu se jménem"
-
-#: engines/advancedDetector.cpp:299
-msgid "of the game you tried to add and its version/language/etc.:"
-msgstr "hry, kterou jste se pokusili přidat a její verzi/jazyk/atd.:"
-
-#: engines/dialogs.cpp:84
-msgid "~R~esume"
-msgstr "~P~okračovat"
-
-#: engines/dialogs.cpp:86
-msgid "~L~oad"
-msgstr "~N~ahrát"
-
-#: engines/dialogs.cpp:90
-msgid "~S~ave"
-msgstr "~U~ložit"
-
-#: engines/dialogs.cpp:94
-msgid "~O~ptions"
-msgstr "~V~olby"
-
-#: engines/dialogs.cpp:99
-msgid "~H~elp"
-msgstr "~N~ápověda"
-
-#: engines/dialogs.cpp:101
-msgid "~A~bout"
-msgstr "~O~ programu"
-
-#: engines/dialogs.cpp:104 engines/dialogs.cpp:182
-msgid "~R~eturn to Launcher"
-msgstr "~N~ávrat do Spouštěče"
-
-#: engines/dialogs.cpp:106 engines/dialogs.cpp:184
-msgctxt "lowres"
-msgid "~R~eturn to Launcher"
-msgstr "~N~ávrat do Spouštěče"
-
-#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214
-#: engines/sci/engine/kfile.cpp:575
-msgid "Save game:"
-msgstr "Uložit hru:"
-
-#: engines/dialogs.cpp:116 engines/scumm/dialogs.cpp:187
-#: engines/cruise/menu.cpp:214 engines/sci/engine/kfile.cpp:575
-#: backends/platform/symbian/src/SymbianActions.cpp:44
-#: backends/platform/wince/CEActionsPocket.cpp:43
-#: backends/platform/wince/CEActionsPocket.cpp:267
-#: backends/platform/wince/CEActionsSmartphone.cpp:45
-#: backends/platform/wince/CEActionsSmartphone.cpp:231
-msgid "Save"
-msgstr "Uložit"
-
-#: engines/dialogs.cpp:146
-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 ""
-"Je nám líto, ale toto jádro v současnosti nepodporuje herní nápovědu. Prosím "
-"prohlédněte si README pro základní informace a pro instrukce jak získat "
-"další pomoc."
-
-#: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:109
-#: engines/mohawk/dialogs.cpp:174
-msgid "~O~K"
-msgstr "~O~K"
-
-#: engines/dialogs.cpp:309 engines/mohawk/dialogs.cpp:110
-#: engines/mohawk/dialogs.cpp:175
-msgid "~C~ancel"
-msgstr "~Z~rušit"
-
-#: engines/dialogs.cpp:312
-msgid "~K~eys"
-msgstr "~K~lávesy"
-
-#: engines/engine.cpp:233
-msgid "Could not initialize color format."
-msgstr "Nelze zavést barevný formát."
-
-#: engines/engine.cpp:241
-msgid "Could not switch to video mode: '"
-msgstr "Nelze přepnout na režim obrazu: '"
-
-#: engines/engine.cpp:250
-msgid "Could not apply aspect ratio setting."
-msgstr "Nelze použít nastavení poměru stran."
-
-#: engines/engine.cpp:255
-msgid "Could not apply fullscreen setting."
-msgstr "Nelze použít nastavení celé obrazovky."
-
-#: engines/engine.cpp:355
-msgid ""
-"You appear to be playing this game directly\n"
-"from the CD. This is known to cause problems,\n"
-"and it is therefore recommended that you copy\n"
-"the data files to your hard disk instead.\n"
-"See the README file for details."
-msgstr ""
-"Vypadá to, že tuto hru hrajete přímo z\n"
-" CD. Je známo, že toto způsobuje problémy\n"
-" a je tedy doporučeno, ať místo toho zkopírujete\n"
-"datové soubory na Váš pevný disk.\n"
-"Pro podrobnosti si přečtěte README."
-
-#: engines/engine.cpp:366
-msgid ""
-"This game has audio tracks in its disk. These\n"
-"tracks need to be ripped from the disk using\n"
-"an appropriate CD audio extracting tool in\n"
-"order to listen to the game's music.\n"
-"See the README file for details."
-msgstr ""
-"Tato hra má na svém disku zvukové stopy. Tyto\n"
-"stopy musí být z disku zkopírovány použitím\n"
-"vhodného nástroje pro extrakci zvuku z CD,\n"
-"abyste mohli poslouchat hudbu ve hře.\n"
-"Pro podrobnosti si přečtěte README."
-
-#: engines/engine.cpp:433
-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 ""
-"VAROVÁNÍ: Hra, kterou se chystáte spustit, není ještě plně podporována "
-"ScummVM. Proto je možné, že bude nestabilní a jakékoli uložené hry nemusí "
-"fungovat v budoucích verzích ScummVM."
-
-#: engines/engine.cpp:436
-msgid "Start anyway"
-msgstr "Přesto spustit"
-
-#: engines/scumm/dialogs.cpp:175
-#, c-format
-msgid "Insert Disk %c and Press Button to Continue."
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:176
-#, c-format
-msgid "Unable to Find %s, (%c%d) Press Button."
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:177
-#, c-format
-msgid "Error reading disk %c, (%c%d) Press Button."
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:178
-msgid "Game Paused. Press SPACE to Continue."
-msgstr ""
-
-#. 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 " Jste si jisti, že chcete odejít ? "
-
-#. I18N: you may specify 'Yes' symbol at the endo fo the line. See previous comment
-#: engines/scumm/dialogs.cpp:184
-#, fuzzy
-msgid "Are you sure you want to quit? (Y/N)"
-msgstr " Jste si jisti, že chcete odejít ? "
-
-#: engines/scumm/dialogs.cpp:189
-msgid "Play"
-msgstr ""
-
-#: 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
-#: backends/platform/wince/CEActionsSmartphone.cpp:52
-#: backends/events/default/default-events.cpp:244
-msgid "Quit"
-msgstr "Ukončit"
-
-#: engines/scumm/dialogs.cpp:193
-msgid "Insert save/load game disk"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:194
-msgid "You must enter a name"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:195
-msgid "The game was NOT saved (disk full?)"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:196
-msgid "The game was NOT loaded"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:197
-#, c-format
-msgid "Saving '%s'"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:198
-#, c-format
-msgid "Loading '%s'"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:199
-msgid "Name your SAVE game"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:200
-#, fuzzy
-msgid "Select a game to LOAD"
-msgstr "Vyberte Vzhled"
-
-#: engines/scumm/dialogs.cpp:201
-msgid "Game title)"
-msgstr ""
-
-#. I18N: Previous page button
-#: engines/scumm/dialogs.cpp:287
-msgid "~P~revious"
-msgstr "~P~ředchozí"
-
-#. I18N: Next page button
-#: engines/scumm/dialogs.cpp:289
-msgid "~N~ext"
-msgstr "~D~alší"
-
-#: engines/scumm/dialogs.cpp:290
-#: backends/platform/ds/arm9/source/dsoptions.cpp:56
-msgid "~C~lose"
-msgstr "~Z~avřít"
-
-#: engines/scumm/dialogs.cpp:597
-#, fuzzy
-msgid "Speech Only"
-msgstr "Řeč"
-
-#: engines/scumm/dialogs.cpp:598
-#, fuzzy
-msgid "Speech and Subtitles"
-msgstr "Titulky"
-
-#: engines/scumm/dialogs.cpp:599
-#, fuzzy
-msgid "Subtitles Only"
-msgstr "Titulky"
-
-#: engines/scumm/dialogs.cpp:607
-#, fuzzy
-msgctxt "lowres"
-msgid "Speech & Subs"
-msgstr "Řeč"
-
-#: engines/scumm/help.cpp:73
-msgid "Common keyboard commands:"
-msgstr "Běžné klávesové příkazy"
-
-#: engines/scumm/help.cpp:74
-msgid "Save / Load dialog"
-msgstr "Dialog Nahrát / Uložit"
-
-#: engines/scumm/help.cpp:76
-msgid "Skip line of text"
-msgstr "Přeskočit řádek textu"
-
-#: engines/scumm/help.cpp:77
-msgid "Esc"
-msgstr "Mezerník"
-
-#: engines/scumm/help.cpp:77
-msgid "Skip cutscene"
-msgstr "Přeskočit video"
-
-#: engines/scumm/help.cpp:78
-msgid "Space"
-msgstr "Mezerník"
-
-#: engines/scumm/help.cpp:78
-msgid "Pause game"
-msgstr "Pozastavit hru"
-
-#: 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 "Nahrát stav hry 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
-msgid "Alt"
-msgstr "Alt"
-
-#: engines/scumm/help.cpp:80
-msgid "Save game state 1-10"
-msgstr "Uložit stav hry 1-10"
-
-#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:89
-msgid "Enter"
-msgstr "Enter"
-
-#: engines/scumm/help.cpp:86
-msgid "Toggle fullscreen"
-msgstr "Zapnout celou obrazovku"
-
-#: engines/scumm/help.cpp:87
-msgid "Music volume up / down"
-msgstr "Hlasitost hudby nahoru / dolů"
-
-#: engines/scumm/help.cpp:88
-msgid "Text speed slower / faster"
-msgstr "Zvýšit / Snížit rychlost textu"
-
-#: engines/scumm/help.cpp:89
-msgid "Simulate left mouse button"
-msgstr "Napodobit levé tlačítko myši"
-
-#: engines/scumm/help.cpp:90
-msgid "Tab"
-msgstr "Tab"
-
-#: engines/scumm/help.cpp:90
-msgid "Simulate right mouse button"
-msgstr "Napodobit pravé tlačítko myši"
-
-#: engines/scumm/help.cpp:93
-msgid "Special keyboard commands:"
-msgstr "Speciální klávesové příkazy"
-
-#: engines/scumm/help.cpp:94
-msgid "Show / Hide console"
-msgstr "Ukázat / Skrýt konzoli"
-
-#: engines/scumm/help.cpp:95
-msgid "Start the debugger"
-msgstr "Spustit ladící program"
-
-#: engines/scumm/help.cpp:96
-msgid "Show memory consumption"
-msgstr "Zobrazit spotřebu paměti"
-
-#: engines/scumm/help.cpp:97
-msgid "Run in fast mode (*)"
-msgstr "Spustit v rychlém režimu (*)"
-
-#: engines/scumm/help.cpp:98
-msgid "Run in really fast mode (*)"
-msgstr "Spustit ve velmi rychlém režimu (*)"
-
-#: engines/scumm/help.cpp:99
-msgid "Toggle mouse capture"
-msgstr "Povolit zachycování myši"
-
-#: engines/scumm/help.cpp:100
-msgid "Switch between graphics filters"
-msgstr "Přepínat mezi grafickými filtry"
-
-#: engines/scumm/help.cpp:101
-msgid "Increase / Decrease scale factor"
-msgstr "Zvětšit / Zmenšit faktor změny velikosti"
-
-#: engines/scumm/help.cpp:102
-msgid "Toggle aspect-ratio correction"
-msgstr "Povolit korekci poměru stran"
-
-#: engines/scumm/help.cpp:107
-msgid "* Note that using ctrl-f and"
-msgstr "Upozorňujeme, že používání ctrl-f a"
-
-#: engines/scumm/help.cpp:108
-msgid " ctrl-g are not recommended"
-msgstr " ctrl-g není doporučeno"
-
-#: engines/scumm/help.cpp:109
-msgid " since they may cause crashes"
-msgstr "jelikož můžou způsobit pád"
-
-#: engines/scumm/help.cpp:110
-msgid " or incorrect game behavior."
-msgstr " nebo nesprávné chování hry."
-
-#: engines/scumm/help.cpp:114
-msgid "Spinning drafts on the keyboard:"
-msgstr "Pletení náčrtků na klávesnici:"
-
-#: engines/scumm/help.cpp:116
-msgid "Main game controls:"
-msgstr "Hlavní ovládací prvky:"
-
-#: engines/scumm/help.cpp:121 engines/scumm/help.cpp:136
-#: engines/scumm/help.cpp:161
-msgid "Push"
-msgstr "Tlačit"
-
-#: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137
-#: engines/scumm/help.cpp:162
-msgid "Pull"
-msgstr "Táhnout"
-
-#: 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 "Dát"
-
-#: 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 "Otevřít"
-
-#: engines/scumm/help.cpp:126
-msgid "Go to"
-msgstr "Jít do"
-
-#: engines/scumm/help.cpp:127
-msgid "Get"
-msgstr "Vzít"
-
-#: 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 "Použít"
-
-#: engines/scumm/help.cpp:129 engines/scumm/help.cpp:141
-msgid "Read"
-msgstr "Přečíst"
-
-#: engines/scumm/help.cpp:130 engines/scumm/help.cpp:147
-msgid "New kid"
-msgstr "Nové dítě"
-
-#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:153
-#: engines/scumm/help.cpp:171
-msgid "Turn on"
-msgstr "Zapnout"
-
-#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:154
-#: engines/scumm/help.cpp:172
-msgid "Turn off"
-msgstr "Vypnout"
-
-#: engines/scumm/help.cpp:142 engines/scumm/help.cpp:167
-#: engines/scumm/help.cpp:194
-msgid "Walk to"
-msgstr "Přejít na"
-
-#: 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 "Sebrat"
-
-#: engines/scumm/help.cpp:144 engines/scumm/help.cpp:169
-msgid "What is"
-msgstr "Co je"
-
-#: engines/scumm/help.cpp:146
-msgid "Unlock"
-msgstr "Odemknout"
-
-#: engines/scumm/help.cpp:149
-msgid "Put on"
-msgstr "Obléct"
-
-#: engines/scumm/help.cpp:150
-msgid "Take off"
-msgstr "Svléct"
-
-#: engines/scumm/help.cpp:156
-msgid "Fix"
-msgstr "Spravit"
-
-#: engines/scumm/help.cpp:158
-msgid "Switch"
-msgstr "Přepnout"
-
-#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:228
-msgid "Look"
-msgstr "Dívat se"
-
-#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:223
-msgid "Talk"
-msgstr "Mluvit"
-
-#: engines/scumm/help.cpp:174
-msgid "Travel"
-msgstr "Cestovat"
-
-#: engines/scumm/help.cpp:175
-msgid "To Henry / To Indy"
-msgstr "Henrymu / Indymu"
-
-#. I18N: These are different musical notes
-#: engines/scumm/help.cpp:179
-msgid "play C minor on distaff"
-msgstr "zahrát c moll na přeslici"
-
-#: engines/scumm/help.cpp:180
-msgid "play D on distaff"
-msgstr "zahrát D na přeslici"
-
-#: engines/scumm/help.cpp:181
-msgid "play E on distaff"
-msgstr "zahrát E na přeslici"
-
-#: engines/scumm/help.cpp:182
-msgid "play F on distaff"
-msgstr "zahrát F na přeslici"
-
-#: engines/scumm/help.cpp:183
-msgid "play G on distaff"
-msgstr "zahrát G na přeslici"
-
-#: engines/scumm/help.cpp:184
-msgid "play A on distaff"
-msgstr "zahrát A na přeslici"
-
-#: engines/scumm/help.cpp:185
-msgid "play B on distaff"
-msgstr "zahrát B na přeslici"
-
-#: engines/scumm/help.cpp:186
-msgid "play C major on distaff"
-msgstr "zahrát C dur na přeslici"
-
-#: engines/scumm/help.cpp:192 engines/scumm/help.cpp:214
-msgid "puSh"
-msgstr "tlačIt"
-
-#: engines/scumm/help.cpp:193 engines/scumm/help.cpp:215
-msgid "pull (Yank)"
-msgstr "táhnout (Škubnout)"
-
-#: engines/scumm/help.cpp:196 engines/scumm/help.cpp:212
-#: engines/scumm/help.cpp:248
-msgid "Talk to"
-msgstr "Mluvit s"
-
-#: engines/scumm/help.cpp:199 engines/scumm/help.cpp:211
-msgid "Look at"
-msgstr "Dívat se na"
-
-#: engines/scumm/help.cpp:200
-msgid "turn oN"
-msgstr "zapnouT"
-
-#: engines/scumm/help.cpp:201
-msgid "turn oFf"
-msgstr "vypnoUt"
-
-#: engines/scumm/help.cpp:217
-msgid "KeyUp"
-msgstr "KlávesaNahoru"
-
-#: engines/scumm/help.cpp:217
-msgid "Highlight prev dialogue"
-msgstr "Zvýraznit předchozí dialog"
-
-#: engines/scumm/help.cpp:218
-msgid "KeyDown"
-msgstr "KlávesaDolů"
-
-#: engines/scumm/help.cpp:218
-msgid "Highlight next dialogue"
-msgstr "Zvýraznit následující dialog"
-
-#: engines/scumm/help.cpp:222
-msgid "Walk"
-msgstr "Jít"
-
-#: engines/scumm/help.cpp:225 engines/scumm/help.cpp:234
-#: engines/scumm/help.cpp:241 engines/scumm/help.cpp:249
-msgid "Inventory"
-msgstr "Inventář"
-
-#: engines/scumm/help.cpp:226
-msgid "Object"
-msgstr "Objekt"
-
-#: engines/scumm/help.cpp:229
-msgid "Black and White / Color"
-msgstr "Černobílé / Barva"
-
-#: engines/scumm/help.cpp:232
-msgid "Eyes"
-msgstr "Oči"
-
-#: engines/scumm/help.cpp:233
-msgid "Tongue"
-msgstr "Jazyk"
-
-#: engines/scumm/help.cpp:235
-msgid "Punch"
-msgstr "Udeřit"
-
-#: engines/scumm/help.cpp:236
-msgid "Kick"
-msgstr "Kopnout"
-
-#: engines/scumm/help.cpp:239 engines/scumm/help.cpp:247
-msgid "Examine"
-msgstr "Prohlédnout"
-
-#: engines/scumm/help.cpp:240
-msgid "Regular cursor"
-msgstr "Obyčejný kurzor"
-
-#. I18N: Comm is a communication device
-#: engines/scumm/help.cpp:243
-msgid "Comm"
-msgstr "Komunikace"
-
-#: engines/scumm/help.cpp:246
-msgid "Save / Load / Options"
-msgstr "Uložit / Nahrát / Volby"
-
-#: engines/scumm/help.cpp:255
-msgid "Other game controls:"
-msgstr "Další ovládací prvky hry"
-
-#: engines/scumm/help.cpp:257 engines/scumm/help.cpp:267
-msgid "Inventory:"
-msgstr "Inventář:"
-
-#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:274
-msgid "Scroll list up"
-msgstr "Posunout seznam nahoru"
-
-#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:275
-msgid "Scroll list down"
-msgstr "Posunout seznam dolu"
-
-#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:268
-msgid "Upper left item"
-msgstr "Položka vlevo nahoře"
-
-#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:270
-msgid "Lower left item"
-msgstr "Položka vlevo dole"
-
-#: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271
-msgid "Upper right item"
-msgstr "Položka vpravo nahoře"
-
-#: engines/scumm/help.cpp:263 engines/scumm/help.cpp:273
-msgid "Lower right item"
-msgstr "Položka vpravo dole"
-
-#: engines/scumm/help.cpp:269
-msgid "Middle left item"
-msgstr "Položka vlevo uprostřed"
-
-#: engines/scumm/help.cpp:272
-msgid "Middle right item"
-msgstr "Položka vpravo uprostřed"
-
-#: engines/scumm/help.cpp:279 engines/scumm/help.cpp:284
-msgid "Switching characters:"
-msgstr "Měnění postav:"
-
-#: engines/scumm/help.cpp:281
-msgid "Second kid"
-msgstr "Druhé dítě"
-
-#: engines/scumm/help.cpp:282
-msgid "Third kid"
-msgstr "Třetí dítě"
-
-#: engines/scumm/help.cpp:294
-msgid "Fighting controls (numpad):"
-msgstr "Ovládání boje (num. kláv.)"
-
-#: engines/scumm/help.cpp:295 engines/scumm/help.cpp:296
-#: engines/scumm/help.cpp:297
-msgid "Step back"
-msgstr "Ustoupit"
-
-#: engines/scumm/help.cpp:298
-msgid "Block high"
-msgstr "Bránit nahoře"
-
-#: engines/scumm/help.cpp:299
-msgid "Block middle"
-msgstr "Bránit uprostřed"
-
-#: engines/scumm/help.cpp:300
-msgid "Block low"
-msgstr "Bránit dole"
-
-#: engines/scumm/help.cpp:301
-msgid "Punch high"
-msgstr "Udeřit nahoru"
-
-#: engines/scumm/help.cpp:302
-msgid "Punch middle"
-msgstr "Udeřit doprostřed"
-
-#: engines/scumm/help.cpp:303
-msgid "Punch low"
-msgstr "Udeřit dolů"
-
-#: engines/scumm/help.cpp:306
-msgid "These are for Indy on left."
-msgstr "Tyto jsou pro Indyho nalevo."
-
-#: engines/scumm/help.cpp:307
-msgid "When Indy is on the right,"
-msgstr "Když je Indy napravo,"
-
-#: engines/scumm/help.cpp:308
-msgid "7, 4, and 1 are switched with"
-msgstr "71 4 a 1 jsou zaměněny s"
-
-#: engines/scumm/help.cpp:309
-msgid "9, 6, and 3, respectively."
-msgstr "9, 6 a 3, v tomto pořadí."
-
-#: engines/scumm/help.cpp:316
-msgid "Biplane controls (numpad):"
-msgstr "Kontrola dvojplošníku (numerická klávesnice)"
-
-#: engines/scumm/help.cpp:317
-msgid "Fly to upper left"
-msgstr "Letět doprava nahoru"
-
-#: engines/scumm/help.cpp:318
-msgid "Fly to left"
-msgstr "Letět doleva"
-
-#: engines/scumm/help.cpp:319
-msgid "Fly to lower left"
-msgstr "Letět doleva dolů"
-
-#: engines/scumm/help.cpp:320
-msgid "Fly upwards"
-msgstr "Letět nahoru"
-
-#: engines/scumm/help.cpp:321
-msgid "Fly straight"
-msgstr "Letět rovně"
-
-#: engines/scumm/help.cpp:322
-msgid "Fly down"
-msgstr "Letět dolů"
-
-#: engines/scumm/help.cpp:323
-msgid "Fly to upper right"
-msgstr "Letět doprava nahoru"
-
-#: engines/scumm/help.cpp:324
-msgid "Fly to right"
-msgstr "Letět doprava"
-
-#: engines/scumm/help.cpp:325
-msgid "Fly to lower right"
-msgstr "Letět doprava dolů"
-
-#: engines/scumm/scumm.cpp:1768
-#, c-format
-msgid ""
-"Native MIDI support requires the Roland Upgrade from LucasArts,\n"
-"but %s is missing. Using AdLib instead."
-msgstr ""
-"Přirozená podpora MIDI vyžaduje Aktualizaci Roland od LucasArts,\n"
-"ale %s chybí. Místo toho je použit AdLib."
-
-#: engines/scumm/scumm.cpp:2258 engines/agos/saveload.cpp:189
-#, c-format
-msgid ""
-"Failed to save game state to file:\n"
-"\n"
-"%s"
-msgstr ""
-"Uložení stavu hry selhalo do souboru:\n"
-"\n"
-"%s"
-
-#: engines/scumm/scumm.cpp:2265 engines/agos/saveload.cpp:154
-#, c-format
-msgid ""
-"Failed to load game state from file:\n"
-"\n"
-"%s"
-msgstr ""
-"Nahrání stavu hry selhalo ze souboru:\n"
-"\n"
-"%s"
-
-#: engines/scumm/scumm.cpp:2277 engines/agos/saveload.cpp:197
-#, c-format
-msgid ""
-"Successfully saved game state in file:\n"
-"\n"
-"%s"
-msgstr ""
-"Stav hry úspěšně uložen do:\n"
-"\n"
-"%s"
-
-#: engines/scumm/scumm.cpp:2492
-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 ""
-"Normálně by teď Maniac Mansion byl spuštěn. Ale ScummVM toto zatím nedělá. "
-"Abyste toto mohli hrát, přejděte do 'Přidat Hru' v počátečním menu ScummVM a "
-"vyberte adresář 'Maniac' uvnitř herního adresáře Tentacle."
-
-#. I18N: Option for fast scene switching
-#: engines/mohawk/dialogs.cpp:92 engines/mohawk/dialogs.cpp:171
-msgid "~Z~ip Mode Activated"
-msgstr "~R~ežim Svištění Aktivován"
-
-#: engines/mohawk/dialogs.cpp:93
-msgid "~T~ransitions Enabled"
-msgstr "~P~řechody zapnuty"
-
-#. I18N: Drop book page
-#: engines/mohawk/dialogs.cpp:95
-msgid "~D~rop Page"
-msgstr "~Z~ahodit Stránku"
-
-#: engines/mohawk/dialogs.cpp:99
-msgid "~S~how Map"
-msgstr "~Z~obrazit Mapu"
-
-#: engines/mohawk/dialogs.cpp:105
-#, fuzzy
-msgid "~M~ain Menu"
-msgstr "Hlavní Menu ScummVM"
-
-#: engines/mohawk/dialogs.cpp:172
-msgid "~W~ater Effect Enabled"
-msgstr "~E~fekt Vody Zapnut"
-
-#: engines/sci/engine/kfile.cpp:678
-msgid "Restore game:"
-msgstr "Obnovit hru"
-
-#: engines/sci/engine/kfile.cpp:678
-msgid "Restore"
-msgstr "Obnovit"
-
-#: engines/agos/animation.cpp:544
-#, c-format
-msgid "Cutscene file '%s' not found!"
-msgstr "Soubor videa '%s' nenalezen'"
-
-#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1283
-#: engines/tinsel/saveload.cpp:475
-msgid "Failed to load game state from file."
-msgstr "Nelze načíst stav hry ze souboru."
-
-#: engines/gob/inter_v2.cpp:1353 engines/tinsel/saveload.cpp:553
-msgid "Failed to save game state to file."
-msgstr "Nelze uložit stav hry do souboru."
-
-#: engines/gob/inter_v5.cpp:107
-msgid "Failed to delete file."
-msgstr "Nelze smazat soubor."
-
-#: engines/groovie/script.cpp:420
-msgid "Failed to save game"
-msgstr "Nelze uložit hru."
-
-#: 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."
-msgstr ""
-"Zdá se, že používáte zařízení General 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."
-
-#: engines/m4/m4_menus.cpp:138
-msgid "Save game failed!"
-msgstr "Ukládání hry selhalo!"
-
-#: engines/sky/compact.cpp:130
-msgid ""
-"Unable to find \"sky.cpt\" file!\n"
-"Please download it from www.scummvm.org"
-msgstr ""
-"Nelze nalézt soubor \"sky.cpt\"!\n"
-"Stáhněte si ho, prosím z 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 ""
-"Soubor \"sky.cpt\" má nesprávnou velikost.\n"
-"Stáhněte si ho, prosím, (znovu) z www.scummvm.org"
-
-#: engines/sword1/animation.cpp:344 engines/sword2/animation.cpp:379
-msgid "DXA cutscenes found but ScummVM has been built without zlib support"
-msgstr "Videa DXA nalezena, ale ScummVM byl sestaven bez podpory zlib"
-
-#: engines/sword1/animation.cpp:354 engines/sword2/animation.cpp:389
-msgid "MPEG2 cutscenes are no longer supported"
-msgstr "Videa MPGE2 již nejsou podporována"
-
-#: engines/sword1/animation.cpp:359 engines/sword2/animation.cpp:397
-#, c-format
-msgid "Cutscene '%s' not found"
-msgstr "Video '%s' nenalezeno"
-
-#: 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"
-"\n"
-"Press OK to convert them now, otherwise you will be asked again the next "
-"time you start the game.\n"
-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"
-"\n"
-"Stiskněte OK, abyste je převedli teď, jinak budete požádáni znovu, při "
-"spuštění této hry.\n"
-
-#: engines/sword1/control.cpp:1232
-#, c-format
-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 ""
-"Nová cílová uložená hra již existuje!\n"
-"Chtěli byste ponechat starou uloženou hru (%s), nebo novou (%s)?\n"
-
-#: engines/sword1/control.cpp:1235
-msgid "Keep the old one"
-msgstr "Ponechat starou"
-
-#: engines/sword1/control.cpp:1235
-msgid "Keep the new one"
-msgstr "Ponechat novou"
-
-#: engines/sword1/logic.cpp:1633
-msgid "This is the end of the Broken Sword 1 Demo"
-msgstr "Toto je konec Dema Broken Sword 1"
-
-#: engines/parallaction/saveload.cpp:133
-#, c-format
-msgid ""
-"Can't save game in slot %i\n"
-"\n"
-msgstr ""
-"Nelze uložit hru do pozice %i\n"
-"\n"
-
-#: engines/parallaction/saveload.cpp:211
-msgid "Loading game..."
-msgstr "Nahrávání hry..."
-
-#: engines/parallaction/saveload.cpp:226
-msgid "Saving game..."
-msgstr "Ukládání hry..."
-
-#: engines/parallaction/saveload.cpp:279
-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"
-"\n"
-"Press OK to convert them now, otherwise you will be asked next time.\n"
-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"
-"\n"
-"Stiskněte OK, abyste je převedli teď, jinak budete požádáni příště.\n"
-
-#: engines/parallaction/saveload.cpp:326
-msgid "ScummVM successfully converted all your savefiles."
-msgstr "ScummVM úspěšně převedl všechny Vaše uložené pozice. "
-
-#: engines/parallaction/saveload.cpp:328
-msgid ""
-"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 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"
-
-#: audio/fmopl.cpp:49
-msgid "MAME OPL emulator"
-msgstr "MAME OPL Emulátor"
-
-#: audio/fmopl.cpp:51
-msgid "DOSBox OPL emulator"
-msgstr "DOSBox OPL Emulátor"
-
-#: audio/mididrv.cpp:205
-#, fuzzy, c-format
-msgid ""
-"The selected audio device '%s' was not found (e.g. might be turned off or "
-"disconnected)."
-msgstr ""
-"Zvolené zařízení '%s' nebylo nalezeno (např. může být vypnuto nebo "
-"odpojeno). Pokus o navrácení na nejbližší dostupné zařízení..."
-
-#: audio/mididrv.cpp:205 audio/mididrv.cpp:217 audio/mididrv.cpp:253
-#: audio/mididrv.cpp:268
-msgid "Attempting to fall back to the next available device..."
-msgstr ""
-
-#: audio/mididrv.cpp:217
-#, fuzzy, c-format
-msgid ""
-"The selected audio device '%s' cannot be used. See log file for more "
-"information."
-msgstr ""
-"Zvolené zařízení '%s' nelze použít.. Podívejte se na záznam pro více "
-"informací. Pokus o navrácení na nejbližší dostupné zařízení..."
-
-#: audio/mididrv.cpp:253
-#, fuzzy, c-format
-msgid ""
-"The preferred audio device '%s' was not found (e.g. might be turned off or "
-"disconnected)."
-msgstr ""
-"Upřednostňované zařízení '%s' nebylo nalezeno (např. může být vypnuto nebo "
-"odpojeno). Pokus o navrácení na nejbližší dostupné zařízení..."
-
-#: audio/mididrv.cpp:268
-#, fuzzy, c-format
-msgid ""
-"The preferred audio device '%s' cannot be used. See log file for more "
-"information."
-msgstr ""
-"Upřednostňované zařízení '%s' nelze použít. Podívejte se na záznam pro více "
-"informací. Pokus o navrácení na nejbližší dostupné zařízení..."
-
-#: audio/null.h:43
-msgid "No music"
-msgstr "Bez hudby"
-
-#: audio/mods/paula.cpp:189
-msgid "Amiga Audio Emulator"
-msgstr "Emulátor zvuku Amiga"
-
-#: audio/softsynth/adlib.cpp:1594
-msgid "AdLib Emulator"
-msgstr "AdLib Emulátor"
-
-#: audio/softsynth/appleiigs.cpp:33
-msgid "Apple II GS Emulator (NOT IMPLEMENTED)"
-msgstr "Apple II GS Emulátor (NENÍ ZAVEDEN)"
-
-#: audio/softsynth/sid.cpp:1430
-msgid "C64 Audio Emulator"
-msgstr "Emulátor zvuku C64"
-
-#: audio/softsynth/mt32.cpp:329
-msgid "Initializing MT-32 Emulator"
-msgstr "Zavádím MT-32 Emulátor"
-
-#: audio/softsynth/mt32.cpp:543
-msgid "MT-32 Emulator"
-msgstr "MT-32 Emulátor"
-
-#: audio/softsynth/pcspk.cpp:139
-msgid "PC Speaker Emulator"
-msgstr "PC Speaker Emulátor"
-
-#: audio/softsynth/pcspk.cpp:158
-msgid "IBM PCjr Emulator"
-msgstr "IBM PCjr Emulátor"
-
-#: backends/keymapper/remap-dialog.cpp:47
-msgid "Keymap:"
-msgstr "Mapa Kláves:"
-
-#: backends/keymapper/remap-dialog.cpp:64
-msgid " (Active)"
-msgstr "(Aktivní)"
-
-#: backends/keymapper/remap-dialog.cpp:98
-msgid " (Global)"
-msgstr "(Globální)"
-
-#: backends/keymapper/remap-dialog.cpp:108
-msgid " (Game)"
-msgstr "(Hra)"
-
-#: backends/midi/windows.cpp:164
-msgid "Windows MIDI"
-msgstr "Windows MIDI"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:57
-msgid "ScummVM Main Menu"
-msgstr "Hlavní Menu ScummVM"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:63
-msgid "~L~eft handed mode"
-msgstr "~R~ežim pro leváky"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:64
-msgid "~I~ndy fight controls"
-msgstr "~O~vládání Indyho boje"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:65
-msgid "Show mouse cursor"
-msgstr "Zobrazit kurzor myši"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:66
-msgid "Snap to edges"
-msgstr "Přichytit k okrajům"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:68
-msgid "Touch X Offset"
-msgstr "Dotykové vyrovnáni na ose X"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:75
-msgid "Touch Y Offset"
-msgstr "Dotykové vyrovnáni na ose Y"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:87
-msgid "Use laptop trackpad-style cursor control"
-msgstr "Použít styl kontroly kurzoru jako u ovládací podušky laptopu"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:88
-msgid "Tap for left click, double tap right click"
-msgstr "Ťukněte pro levé kliknutí, dvakrát pro pravé kliknutí"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:90
-msgid "Sensitivity"
-msgstr "Citlivost"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:99
-msgid "Initial top screen scale:"
-msgstr "Počáteční změna velikosti horní obrazovky:"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:105
-msgid "Main screen scaling:"
-msgstr "Změna velikosti hlavní obrazovky:"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:107
-msgid "Hardware scale (fast, but low quality)"
-msgstr "Hardwarová změna velikosti (rychlé, ale nízká kvalita)"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:108
-msgid "Software scale (good quality, but slower)"
-msgstr "Softwarová změna velikosti (dobrá kvalita, ale pomalejší)"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:109
-msgid "Unscaled (you must scroll left and right)"
-msgstr "Beze změny velikosti (musíte posunovat doleva a doprava)"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:111
-msgid "Brightness:"
-msgstr "Jas:"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:121
-msgid "High quality audio (slower) (reboot)"
-msgstr "Vysoká kvalita zvuku (pomalejší) (restart) "
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:122
-msgid "Disable power off"
-msgstr "Zakázat vypnutí"
-
-#: backends/platform/iphone/osys_events.cpp:338
-msgid "Mouse-click-and-drag mode enabled."
-msgstr "Režim přetáhnutí myši zapnut."
-
-#: backends/platform/iphone/osys_events.cpp:340
-msgid "Mouse-click-and-drag mode disabled."
-msgstr "Režim přetáhnutí myši vypnut."
-
-#: backends/platform/iphone/osys_events.cpp:351
-msgid "Touchpad mode enabled."
-msgstr "Touchpad režim zapnut"
-
-#: backends/platform/iphone/osys_events.cpp:353
-msgid "Touchpad mode disabled."
-msgstr "Touchpad režim vypnut"
-
-#: backends/platform/sdl/macosx/appmenu_osx.mm:67
-#, fuzzy
-msgid "Hide ScummVM"
-msgstr "Ukončit ScummVM"
-
-#: backends/platform/sdl/macosx/appmenu_osx.mm:70
-msgid "Hide Others"
-msgstr ""
-
-#: backends/platform/sdl/macosx/appmenu_osx.mm:74
-msgid "Show All"
-msgstr ""
-
-#: backends/platform/sdl/macosx/appmenu_osx.mm:92
-#: backends/platform/sdl/macosx/appmenu_osx.mm:99
-#, fuzzy
-msgid "Window"
-msgstr "Windows MIDI"
-
-#: backends/platform/sdl/macosx/appmenu_osx.mm:95
-msgid "Minimize"
-msgstr ""
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:45
-msgid "Normal (no scaling)"
-msgstr "Normální (bez změny velikosti)"
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:64
-msgctxt "lowres"
-msgid "Normal (no scaling)"
-msgstr "Normální (bez změny velikosti)"
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2146
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:533
-msgid "Enabled aspect ratio correction"
-msgstr "Povolena korekce poměru stran"
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2152
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:538
-msgid "Disabled aspect ratio correction"
-msgstr "Zakázána korekce poměru stran"
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2207
-msgid "Active graphics filter:"
-msgstr "Aktivní grafický filtr:"
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2249
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:477
-msgid "Windowed mode"
-msgstr "Režim do okna"
-
-#: backends/graphics/opengl/opengl-graphics.cpp:130
-msgid "OpenGL Normal"
-msgstr "OpenGL Normální"
-
-#: backends/graphics/opengl/opengl-graphics.cpp:131
-msgid "OpenGL Conserve"
-msgstr "OpenGL Zachovávající"
-
-#: backends/graphics/opengl/opengl-graphics.cpp:132
-msgid "OpenGL Original"
-msgstr "OpenGL Původní"
-
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:415
-msgid "Current display mode"
-msgstr "Současný režim obrazu"
-
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:428
-msgid "Current scale"
-msgstr "Současná velikost"
-
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:558
-msgid "Active filter mode: Linear"
-msgstr "Aktivní režim filtru: Lineární"
-
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:560
-msgid "Active filter mode: Nearest"
-msgstr "Aktivní režim filtru: Nejbližší"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:38
-#: backends/platform/wince/CEActionsSmartphone.cpp:39
-msgid "Up"
-msgstr "Nahoru"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:39
-#: backends/platform/wince/CEActionsSmartphone.cpp:40
-msgid "Down"
-msgstr "Dolů"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:40
-#: backends/platform/wince/CEActionsSmartphone.cpp:41
-msgid "Left"
-msgstr "Doleva"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:41
-#: backends/platform/wince/CEActionsSmartphone.cpp:42
-msgid "Right"
-msgstr "Doprava"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:42
-#: backends/platform/wince/CEActionsPocket.cpp:60
-#: backends/platform/wince/CEActionsSmartphone.cpp:43
-msgid "Left Click"
-msgstr "Levé Kliknutí"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:43
-#: backends/platform/wince/CEActionsSmartphone.cpp:44
-msgid "Right Click"
-msgstr "Pravé kliknutí"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:46
-#: backends/platform/wince/CEActionsSmartphone.cpp:47
-msgid "Zone"
-msgstr "Oblast"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:47
-#: backends/platform/wince/CEActionsPocket.cpp:54
-#: backends/platform/wince/CEActionsSmartphone.cpp:48
-msgid "Multi Function"
-msgstr "Multi Funkce"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:48
-msgid "Swap character"
-msgstr "Zaměnit znaky"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:49
-msgid "Skip text"
-msgstr "Přeskočit text"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:51
-msgid "Fast mode"
-msgstr "Rychlý režim"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:53
-msgid "Debugger"
-msgstr "Ladící program"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:54
-msgid "Global menu"
-msgstr "Globální menu"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:55
-msgid "Virtual keyboard"
-msgstr "Virtuální klávesnice"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:56
-msgid "Key mapper"
-msgstr "Mapovač kláves"
-
-#: backends/events/symbiansdl/symbiansdl-events.cpp:184
-msgid "Do you want to quit ?"
-msgstr "Chcete ukončit ?"
-
-#: backends/platform/wii/options.cpp:51
-msgid "Video"
-msgstr "Video"
-
-#: backends/platform/wii/options.cpp:54
-msgid "Current video mode:"
-msgstr "Současný režim obrazu:"
-
-#: backends/platform/wii/options.cpp:56
-msgid "Double-strike"
-msgstr "Dvojité přeškrtnutí"
-
-#: backends/platform/wii/options.cpp:60
-msgid "Horizontal underscan:"
-msgstr "Horizontální zmenšení"
-
-#: backends/platform/wii/options.cpp:66
-msgid "Vertical underscan:"
-msgstr "Vertikální zmenšení"
-
-#: backends/platform/wii/options.cpp:71
-msgid "Input"
-msgstr "Vstup"
-
-#: backends/platform/wii/options.cpp:74
-msgid "GC Pad sensitivity:"
-msgstr "Citlivost GC Padu"
-
-#: backends/platform/wii/options.cpp:80
-msgid "GC Pad acceleration:"
-msgstr "Zrychlení GC Padu"
-
-#: backends/platform/wii/options.cpp:86
-msgid "DVD"
-msgstr "DVD"
-
-#: backends/platform/wii/options.cpp:89 backends/platform/wii/options.cpp:101
-msgid "Status:"
-msgstr "Stav:"
-
-#: backends/platform/wii/options.cpp:90 backends/platform/wii/options.cpp:102
-msgid "Unknown"
-msgstr "Neznámé"
-
-#: backends/platform/wii/options.cpp:93
-msgid "Mount DVD"
-msgstr "Připojit DVD"
-
-#: backends/platform/wii/options.cpp:94
-msgid "Unmount DVD"
-msgstr "Odpojit DVD"
-
-#: backends/platform/wii/options.cpp:98
-msgid "SMB"
-msgstr "SMB"
-
-#: backends/platform/wii/options.cpp:106
-msgid "Server:"
-msgstr "Server:"
-
-#: backends/platform/wii/options.cpp:110
-msgid "Share:"
-msgstr "Sdílení:"
-
-#: backends/platform/wii/options.cpp:114
-msgid "Username:"
-msgstr "Uživatelské jméno"
-
-#: backends/platform/wii/options.cpp:118
-msgid "Password:"
-msgstr "Heslo"
-
-#: backends/platform/wii/options.cpp:121
-msgid "Init network"
-msgstr "Spustit síť"
-
-#: backends/platform/wii/options.cpp:123
-msgid "Mount SMB"
-msgstr "Připojit SMB"
-
-#: backends/platform/wii/options.cpp:124
-msgid "Unmount SMB"
-msgstr "Odpojit SMB"
-
-#: backends/platform/wii/options.cpp:143
-msgid "DVD Mounted successfully"
-msgstr "DVD úspěšně připojeno"
-
-#: backends/platform/wii/options.cpp:146
-msgid "Error while mounting the DVD"
-msgstr "Chyba při připojování DVD"
-
-#: backends/platform/wii/options.cpp:148
-msgid "DVD not mounted"
-msgstr "DVD nepřipojeno"
-
-#: backends/platform/wii/options.cpp:161
-msgid "Network up, share mounted"
-msgstr "Síť je zapnuta, sdílení připojeno"
-
-#: backends/platform/wii/options.cpp:163
-msgid "Network up"
-msgstr "Síť je zapnuta"
-
-#: backends/platform/wii/options.cpp:166
-msgid ", error while mounting the share"
-msgstr ", chyba při připojování sdílení"
-
-#: backends/platform/wii/options.cpp:168
-msgid ", share not mounted"
-msgstr ", sdílení není připojeno"
-
-#: backends/platform/wii/options.cpp:174
-msgid "Network down"
-msgstr "Síť je nedostupná"
-
-#: backends/platform/wii/options.cpp:178
-msgid "Initializing network"
-msgstr "Zavádím síť"
-
-#: backends/platform/wii/options.cpp:182
-msgid "Timeout while initializing network"
-msgstr "Při zavádění sítě vypršel limit"
-
-#: backends/platform/wii/options.cpp:186
-#, c-format
-msgid "Network not initialized (%d)"
-msgstr "Síť není zavedena (%d)"
-
-#: backends/platform/wince/CEActionsPocket.cpp:46
-msgid "Hide Toolbar"
-msgstr "Skrýt Panel nástrojů"
-
-#: backends/platform/wince/CEActionsPocket.cpp:47
-msgid "Show Keyboard"
-msgstr "Zobrazit klávesnici"
-
-#: backends/platform/wince/CEActionsPocket.cpp:48
-msgid "Sound on/off"
-msgstr "Zvuk zapnout/vypnout"
-
-#: backends/platform/wince/CEActionsPocket.cpp:49
-msgid "Right click"
-msgstr "Pravé kliknutí"
-
-#: backends/platform/wince/CEActionsPocket.cpp:50
-msgid "Show/Hide Cursor"
-msgstr "Ukázat/Skrýt Kurzor"
-
-#: backends/platform/wince/CEActionsPocket.cpp:51
-msgid "Free look"
-msgstr "Rozhlížení pomocí myši"
-
-#: backends/platform/wince/CEActionsPocket.cpp:52
-msgid "Zoom up"
-msgstr "Přiblížení nahoru"
-
-#: backends/platform/wince/CEActionsPocket.cpp:53
-msgid "Zoom down"
-msgstr "Přiblížení dolů"
-
-#: backends/platform/wince/CEActionsPocket.cpp:55
-#: backends/platform/wince/CEActionsSmartphone.cpp:49
-msgid "Bind Keys"
-msgstr "Přiřadit klávesy"
-
-#: backends/platform/wince/CEActionsPocket.cpp:56
-msgid "Cursor Up"
-msgstr "Šipka Nahoru"
-
-#: backends/platform/wince/CEActionsPocket.cpp:57
-msgid "Cursor Down"
-msgstr "Šipka Dolů"
-
-#: backends/platform/wince/CEActionsPocket.cpp:58
-msgid "Cursor Left"
-msgstr "Šipka Doleva"
-
-#: backends/platform/wince/CEActionsPocket.cpp:59
-msgid "Cursor Right"
-msgstr "Šipka Doprava"
-
-#: backends/platform/wince/CEActionsPocket.cpp:267
-#: backends/platform/wince/CEActionsSmartphone.cpp:231
-msgid "Do you want to load or save the game?"
-msgstr "Chcete hru nahrát nebo uložit?"
-
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-msgid " Are you sure you want to quit ? "
-msgstr " Jste si jisti, že chcete odejít ? "
-
-#: backends/platform/wince/CEActionsSmartphone.cpp:50
-msgid "Keyboard"
-msgstr "Klávesnice"
-
-#: backends/platform/wince/CEActionsSmartphone.cpp:51
-msgid "Rotate"
-msgstr "Otáčet"
-
-#: backends/platform/wince/CELauncherDialog.cpp:56
-msgid "Using SDL driver "
-msgstr "Používá ovladač SDL"
-
-#: backends/platform/wince/CELauncherDialog.cpp:60
-msgid "Display "
-msgstr "Displej"
-
-#: backends/platform/wince/CELauncherDialog.cpp:83
-msgid "Do you want to perform an automatic scan ?"
-msgstr "Chcete provést automatické hledání ?"
-
-#: backends/platform/wince/wince-sdl.cpp:471
-msgid "Map right click action"
-msgstr "Mapovat činnost pravé kliknutí"
-
-#: backends/platform/wince/wince-sdl.cpp:475
-msgid "You must map a key to the 'Right Click' action to play this game"
-msgstr ""
-"Musíte namapovat klávesu pro činnost 'Pravé Kliknutí', abyste tuto hru mohli "
-"hrát"
-
-#: backends/platform/wince/wince-sdl.cpp:484
-msgid "Map hide toolbar action"
-msgstr "Mapovat činnost skrýt panel nástrojů"
-
-#: backends/platform/wince/wince-sdl.cpp:488
-msgid "You must map a key to the 'Hide toolbar' action to play this game"
-msgstr ""
-"Musíte namapovat klávesu pro činnost 'Skrýt Panel nástrojů', abyste tuto hru "
-"mohli hrát"
-
-#: backends/platform/wince/wince-sdl.cpp:497
-msgid "Map Zoom Up action (optional)"
-msgstr "Namapovat činnost Přiblížit Nahoru (nepovinné)"
-
-#: backends/platform/wince/wince-sdl.cpp:500
-msgid "Map Zoom Down action (optional)"
-msgstr "Namapovat činnost Přiblížit Dolů (nepovinné)"
-
-#: backends/platform/wince/wince-sdl.cpp:508
-msgid ""
-"Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory"
-msgstr ""
-"Nezapomeňte namapovat klávesu k činnosti 'Skrýt Panel Nástrojů, abyste "
-"viděli celý inventář"
-
-#: backends/events/default/default-events.cpp:222
-msgid "Do you really want to return to the Launcher?"
-msgstr "Opravdu se chcete vrátit tuto do Spouštěče?"
-
-#: backends/events/default/default-events.cpp:222
-msgid "Launcher"
-msgstr "Spouštěč"
-
-#: backends/events/default/default-events.cpp:244
-msgid "Do you really want to quit?"
-msgstr "Opravdu chcete skončit?"
-
-#: backends/events/gph/gph-events.cpp:366
-#: backends/events/gph/gph-events.cpp:409
-#: backends/events/openpandora/op-events.cpp:141
-msgid "Touchscreen 'Tap Mode' - Left Click"
-msgstr "'Režim Ťuknutí' Dotykové Obrazovky - Levé Kliknutí"
-
-#: backends/events/gph/gph-events.cpp:368
-#: backends/events/gph/gph-events.cpp:411
-#: backends/events/openpandora/op-events.cpp:143
-msgid "Touchscreen 'Tap Mode' - Right Click"
-msgstr "'Režim Ťuknutí' Dotykové Obrazovky - Pravé Kliknutí"
-
-#: backends/events/gph/gph-events.cpp:370
-#: backends/events/gph/gph-events.cpp:413
-#: backends/events/openpandora/op-events.cpp:145
-msgid "Touchscreen 'Tap Mode' - Hover (No Click)"
-msgstr "'Režim Ťuknutí' Dotykové Obrazovky - Najetí (Bez Kliknutí)"
-
-#: backends/events/gph/gph-events.cpp:390
-msgid "Maximum Volume"
-msgstr "Maximální Hlasitost"
-
-#: backends/events/gph/gph-events.cpp:392
-msgid "Increasing Volume"
-msgstr "Zvyšuji Hlasitost"
-
-#: backends/events/gph/gph-events.cpp:398
-msgid "Minimal Volume"
-msgstr "Minimální Hlasitost"
-
-#: backends/events/gph/gph-events.cpp:400
-msgid "Decreasing Volume"
-msgstr "Snižuji Hlasitost"
-
-#: backends/updates/macosx/macosx-updates.mm:65
-msgid "Check for Updates..."
-msgstr ""
-
-#~ msgctxt "lowres"
-#~ msgid "Add Game..."
-#~ msgstr "Přidat Hru..."
-
-#~ msgid "Add Game..."
-#~ msgstr "Přidat Hru..."
-
-#~ msgid ""
-#~ "Your game version has been detected using filename matching as a variant "
-#~ "of %s."
-#~ msgstr ""
-#~ "Bylo zjištěno, že Vaše verze hry používá jméno souboru shodující se s "
-#~ "variantou %s."
-
-#~ msgid "If this is an original and unmodified version, please report any"
-#~ msgstr "Pokud je toto původní a nezměněná verze, ohlaste prosím jakékoli"
-
-#~ msgid "information previously printed by ScummVM to the team."
-#~ msgstr "předešle vypsané informace od ScummVM zpátky týmu."
-
-#~ msgid "Discovered %d new games."
-#~ msgstr "Objeveno %d nových her."
-
-#~ msgid "Command line argument not processed"
-#~ msgstr "Argument příkazové řádky nebyl zpracován"
-
-#~ msgid "FM Towns Emulator"
-#~ msgstr "FM Towns Emulátor"
-
-#~ msgid "Invalid Path"
-#~ msgstr "Neplatná Cesta"
+# Czech translation for ScummVM.
+# Copyright (C) 2001-2011 ScummVM Team
+# This file is distributed under the same license as the ScummVM package.
+# Zbyněk Schwarz <zbynek.schwarz@gmail.com>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ScummVM 1.4.0git\n"
+"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
+"POT-Creation-Date: 2011-08-20 15:12+0100\n"
+"PO-Revision-Date: 2011-08-23 12:36+0100\n"
+"Last-Translator: Zbyněk Schwarz <zbynek.schwarz@gmail.com>\n"
+"Language-Team: \n"
+"Language: Cesky\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n"
+"X-Poedit-Language: Czech\n"
+"X-Poedit-Country: CZECH REPUBLIC\n"
+"X-Poedit-SourceCharset: iso-8859-1\n"
+
+#: gui/about.cpp:91
+#, c-format
+msgid "(built on %s)"
+msgstr "(sestaveno %s)"
+
+#: gui/about.cpp:98
+msgid "Features compiled in:"
+msgstr "Zakompilované Funkce:"
+
+#: gui/about.cpp:107
+msgid "Available engines:"
+msgstr "Dostupná jádra:"
+
+#: gui/browser.cpp:66
+msgid "Go up"
+msgstr "Jít nahoru"
+
+#: gui/browser.cpp:66 gui/browser.cpp:68
+msgid "Go to previous directory level"
+msgstr "Jít na předchozí úroveň adresáře"
+
+#: gui/browser.cpp:68
+msgctxt "lowres"
+msgid "Go up"
+msgstr "Jít nahoru"
+
+#: gui/browser.cpp:69 gui/chooser.cpp:45 gui/KeysDialog.cpp:43
+#: gui/launcher.cpp:312 gui/massadd.cpp:94 gui/options.cpp:1178
+#: gui/saveload.cpp:63 gui/saveload.cpp:155 gui/themebrowser.cpp:54
+#: engines/engine.cpp:436 engines/scumm/dialogs.cpp:190
+#: engines/sword1/control.cpp:865 engines/parallaction/saveload.cpp:281
+#: backends/platform/wii/options.cpp:48
+#: backends/events/default/default-events.cpp:222
+#: backends/events/default/default-events.cpp:244
+msgid "Cancel"
+msgstr "Zrušit"
+
+#: gui/browser.cpp:70 gui/chooser.cpp:46 gui/themebrowser.cpp:55
+msgid "Choose"
+msgstr "Zvolit"
+
+#: gui/gui-manager.cpp:116 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 "Zavřít"
+
+#: gui/gui-manager.cpp:119
+msgid "Mouse click"
+msgstr "Kliknutí myší"
+
+#: gui/gui-manager.cpp:122 base/main.cpp:286
+msgid "Display keyboard"
+msgstr "Zobrazit klávesnici"
+
+#: gui/gui-manager.cpp:125 base/main.cpp:289
+msgid "Remap keys"
+msgstr "Přemapovat klávesy"
+
+#: gui/KeysDialog.h:36 gui/KeysDialog.cpp:145
+msgid "Choose an action to map"
+msgstr "Zvolte činnost k mapování"
+
+#: gui/KeysDialog.cpp:41
+msgid "Map"
+msgstr "Mapovat"
+
+#: gui/KeysDialog.cpp:42 gui/launcher.cpp:313 gui/launcher.cpp:936
+#: gui/launcher.cpp:940 gui/massadd.cpp:91 gui/options.cpp:1179
+#: engines/engine.cpp:359 engines/engine.cpp:370 engines/scumm/dialogs.cpp:192
+#: engines/scumm/scumm.cpp:1770 engines/agos/animation.cpp:545
+#: engines/groovie/script.cpp:420 engines/sky/compact.cpp:131
+#: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:344
+#: engines/sword1/animation.cpp:354 engines/sword1/animation.cpp:360
+#: engines/sword1/control.cpp:865 engines/sword1/logic.cpp:1633
+#: engines/sword2/animation.cpp:379 engines/sword2/animation.cpp:389
+#: engines/sword2/animation.cpp:398 engines/parallaction/saveload.cpp:281
+#: backends/platform/wii/options.cpp:47
+#: backends/platform/wince/CELauncherDialog.cpp:54
+msgid "OK"
+msgstr "OK"
+
+#: gui/KeysDialog.cpp:49
+msgid "Select an action and click 'Map'"
+msgstr "Zvolte činnost a klikněte 'Mapovat'"
+
+#: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141
+#, c-format
+msgid "Associated key : %s"
+msgstr "Přiřazená klávesa: %s"
+
+#: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143
+#, c-format
+msgid "Associated key : none"
+msgstr "Přiřazená klávesa: žádná"
+
+#: gui/KeysDialog.cpp:90
+msgid "Please select an action"
+msgstr "Prosím vyberte činnost"
+
+#: gui/KeysDialog.cpp:106
+msgid "Press the key to associate"
+msgstr "Zmáčkněte klávesu pro přiřazení"
+
+#: gui/launcher.cpp:165
+msgid "Game"
+msgstr "Hra"
+
+#: gui/launcher.cpp:169
+msgid "ID:"
+msgstr "ID:"
+
+#: gui/launcher.cpp:169 gui/launcher.cpp:171 gui/launcher.cpp:172
+msgid ""
+"Short game identifier used for referring to savegames and running the game "
+"from the command line"
+msgstr ""
+"Krátký identifikátor her, používaný jako odkaz k uloženým hrám a spuštění "
+"hry z příkazového řádku"
+
+#: gui/launcher.cpp:171
+msgctxt "lowres"
+msgid "ID:"
+msgstr "ID:"
+
+#: gui/launcher.cpp:176
+msgid "Name:"
+msgstr "Jméno"
+
+#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179
+msgid "Full title of the game"
+msgstr "Úplný název hry"
+
+#: gui/launcher.cpp:178
+msgctxt "lowres"
+msgid "Name:"
+msgstr "Jméno:"
+
+#: gui/launcher.cpp:182
+msgid "Language:"
+msgstr "Jazyk:"
+
+#: gui/launcher.cpp:182 gui/launcher.cpp:183
+msgid ""
+"Language of the game. This will not turn your Spanish game version into "
+"English"
+msgstr "Jazyk hry. Toto z Vaší Španělské verze neudělá Anglickou"
+
+#: gui/launcher.cpp:184 gui/launcher.cpp:198 gui/options.cpp:74
+#: gui/options.cpp:708 gui/options.cpp:718 gui/options.cpp:1149
+#: audio/null.cpp:40
+msgid "<default>"
+msgstr "<výchozí>"
+
+#: gui/launcher.cpp:194
+msgid "Platform:"
+msgstr "Platforma:"
+
+#: gui/launcher.cpp:194 gui/launcher.cpp:196 gui/launcher.cpp:197
+msgid "Platform the game was originally designed for"
+msgstr "Platforma, pro kterou byla hra původně vytvořena"
+
+#: gui/launcher.cpp:196
+msgctxt "lowres"
+msgid "Platform:"
+msgstr "Platforma:"
+
+#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035
+msgid "Graphics"
+msgstr "Obraz"
+
+#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035
+msgid "GFX"
+msgstr "GFX"
+
+#: gui/launcher.cpp:211
+msgid "Override global graphic settings"
+msgstr "Potlačit globální nastavení obrazu"
+
+#: gui/launcher.cpp:213
+msgctxt "lowres"
+msgid "Override global graphic settings"
+msgstr "Potlačit globální nastavení obrazu"
+
+#: gui/launcher.cpp:220 gui/options.cpp:1041
+msgid "Audio"
+msgstr "Zvuk"
+
+#: gui/launcher.cpp:223
+msgid "Override global audio settings"
+msgstr "Potlačit globální nastavení zvuku"
+
+#: gui/launcher.cpp:225
+msgctxt "lowres"
+msgid "Override global audio settings"
+msgstr "Potlačit globální nastavení zvuku"
+
+#: gui/launcher.cpp:234 gui/options.cpp:1046
+msgid "Volume"
+msgstr "Hlasitost"
+
+#: gui/launcher.cpp:236 gui/options.cpp:1048
+msgctxt "lowres"
+msgid "Volume"
+msgstr "Hlasitost"
+
+#: gui/launcher.cpp:239
+msgid "Override global volume settings"
+msgstr "Potlačit globální nastavení hlasitosti"
+
+#: gui/launcher.cpp:241
+msgctxt "lowres"
+msgid "Override global volume settings"
+msgstr "Potlačit globální nastavení hlasitosti"
+
+#: gui/launcher.cpp:248 gui/options.cpp:1056
+msgid "MIDI"
+msgstr "MIDI"
+
+#: gui/launcher.cpp:251
+msgid "Override global MIDI settings"
+msgstr "Potlačit globální nastavení MIDI"
+
+#: gui/launcher.cpp:253
+msgctxt "lowres"
+msgid "Override global MIDI settings"
+msgstr "Potlačit globální nastavení MIDI"
+
+#: gui/launcher.cpp:263 gui/options.cpp:1062
+msgid "MT-32"
+msgstr "MT-32"
+
+#: gui/launcher.cpp:266
+msgid "Override global MT-32 settings"
+msgstr "Potlačit globální nastavení MT-32"
+
+#: gui/launcher.cpp:268
+msgctxt "lowres"
+msgid "Override global MT-32 settings"
+msgstr "Potlačit globální nastavení MT-32"
+
+#: gui/launcher.cpp:279 gui/options.cpp:1069
+msgid "Paths"
+msgstr "Cesty"
+
+#: gui/launcher.cpp:281 gui/options.cpp:1071
+msgctxt "lowres"
+msgid "Paths"
+msgstr "Cesty"
+
+#: gui/launcher.cpp:288
+msgid "Game Path:"
+msgstr "Cesta Hry:"
+
+#: gui/launcher.cpp:290
+msgctxt "lowres"
+msgid "Game Path:"
+msgstr "Cesta Hry:"
+
+#: gui/launcher.cpp:295 gui/options.cpp:1091
+msgid "Extra Path:"
+msgstr "Dodatečná Cesta:"
+
+#: gui/launcher.cpp:295 gui/launcher.cpp:297 gui/launcher.cpp:298
+msgid "Specifies path to additional data used the game"
+msgstr "Stanoví cestu pro dodatečná data použitá ve hře"
+
+#: gui/launcher.cpp:297 gui/options.cpp:1093
+msgctxt "lowres"
+msgid "Extra Path:"
+msgstr "Dodatečná Cesta:"
+
+#: gui/launcher.cpp:302 gui/options.cpp:1079
+msgid "Save Path:"
+msgstr "Cesta pro uložení:"
+
+#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305
+#: gui/options.cpp:1079 gui/options.cpp:1081 gui/options.cpp:1082
+msgid "Specifies where your savegames are put"
+msgstr "Stanovuje, kam jsou umístěny Vaše uložené hry"
+
+#: gui/launcher.cpp:304 gui/options.cpp:1081
+msgctxt "lowres"
+msgid "Save Path:"
+msgstr "Cesta pro uložení:"
+
+#: gui/launcher.cpp:321 gui/launcher.cpp:404 gui/launcher.cpp:453
+#: gui/options.cpp:1088 gui/options.cpp:1094 gui/options.cpp:1101
+#: gui/options.cpp:1202 gui/options.cpp:1208 gui/options.cpp:1214
+#: gui/options.cpp:1222 gui/options.cpp:1246 gui/options.cpp:1250
+#: gui/options.cpp:1256 gui/options.cpp:1263 gui/options.cpp:1362
+msgctxt "path"
+msgid "None"
+msgstr "Žádné"
+
+#: gui/launcher.cpp:326 gui/launcher.cpp:408
+#: backends/platform/wii/options.cpp:56
+msgid "Default"
+msgstr "Výchozí"
+
+#: gui/launcher.cpp:446 gui/options.cpp:1356
+msgid "Select SoundFont"
+msgstr "Vybrat SoundFont"
+
+#: gui/launcher.cpp:465 gui/launcher.cpp:612
+msgid "Select directory with game data"
+msgstr "Vyberte adresář s daty hry"
+
+#: gui/launcher.cpp:483
+msgid "Select additional game directory"
+msgstr "Vyberte dodatečný adresář hry"
+
+#: gui/launcher.cpp:495
+msgid "Select directory for saved games"
+msgstr "Vyberte adresář pro uložené hry"
+
+#: gui/launcher.cpp:514
+msgid "This game ID is already taken. Please choose another one."
+msgstr "Toto ID hry je už zabrané. Vyberte si, prosím, jiné."
+
+#: gui/launcher.cpp:555 engines/dialogs.cpp:110
+msgid "~Q~uit"
+msgstr "~U~končit"
+
+#: gui/launcher.cpp:555 backends/platform/sdl/macosx/appmenu_osx.mm:80
+msgid "Quit ScummVM"
+msgstr "Ukončit ScummVM"
+
+#: gui/launcher.cpp:556
+msgid "A~b~out..."
+msgstr "~O~ Programu..."
+
+#: gui/launcher.cpp:556 backends/platform/sdl/macosx/appmenu_osx.mm:61
+msgid "About ScummVM"
+msgstr "O ScummVM"
+
+#: gui/launcher.cpp:557
+msgid "~O~ptions..."
+msgstr "~V~olby..."
+
+#: gui/launcher.cpp:557
+msgid "Change global ScummVM options"
+msgstr "Změnit globální volby ScummVM"
+
+#: gui/launcher.cpp:559
+msgid "~S~tart"
+msgstr "~S~pustit"
+
+#: gui/launcher.cpp:559
+msgid "Start selected game"
+msgstr "Spustit zvolenou hru"
+
+#: gui/launcher.cpp:562
+msgid "~L~oad..."
+msgstr "~N~ahrát..."
+
+#: gui/launcher.cpp:562
+msgid "Load savegame for selected game"
+msgstr "Nahrát uloženou pozici pro zvolenou hru"
+
+#: gui/launcher.cpp:567 gui/launcher.cpp:1055
+msgid "~A~dd Game..."
+msgstr "~P~řidat hru..."
+
+#: gui/launcher.cpp:567 gui/launcher.cpp:574
+msgid "Hold Shift for Mass Add"
+msgstr "Podržte Shift pro Hromadné Přidání"
+
+#: gui/launcher.cpp:569
+msgid "~E~dit Game..."
+msgstr "~U~pravit Hru..."
+
+#: gui/launcher.cpp:569 gui/launcher.cpp:576
+msgid "Change game options"
+msgstr "Změnit volby hry"
+
+#: gui/launcher.cpp:571
+msgid "~R~emove Game"
+msgstr "~O~dstranit Hru"
+
+#: gui/launcher.cpp:571 gui/launcher.cpp:578
+msgid "Remove game from the list. The game data files stay intact"
+msgstr "Odstranit hru ze seznamu. Herní data zůstanou zachována"
+
+#: gui/launcher.cpp:574 gui/launcher.cpp:1055
+msgctxt "lowres"
+msgid "~A~dd Game..."
+msgstr "~P~řidat hru..."
+
+#: gui/launcher.cpp:576
+msgctxt "lowres"
+msgid "~E~dit Game..."
+msgstr "~U~pravit hru..."
+
+#: gui/launcher.cpp:578
+msgctxt "lowres"
+msgid "~R~emove Game"
+msgstr "~O~dstranit hru"
+
+#: gui/launcher.cpp:586
+msgid "Search in game list"
+msgstr "Hledat v seznamu her"
+
+#: gui/launcher.cpp:590 gui/launcher.cpp:1102
+msgid "Search:"
+msgstr "Hledat:"
+
+#: gui/launcher.cpp:593 gui/options.cpp:826
+msgid "Clear value"
+msgstr "Vyčistit hodnotu"
+
+#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255
+#: engines/mohawk/riven.cpp:716 engines/cruise/menu.cpp:216
+msgid "Load game:"
+msgstr "Nahrát hru:"
+
+#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/scumm/dialogs.cpp:188
+#: engines/mohawk/myst.cpp:255 engines/mohawk/riven.cpp:716
+#: engines/cruise/menu.cpp:216 backends/platform/wince/CEActionsPocket.cpp:267
+#: backends/platform/wince/CEActionsSmartphone.cpp:231
+msgid "Load"
+msgstr "Nahrát"
+
+#: gui/launcher.cpp:723
+msgid ""
+"Do you really want to run the mass game detector? This could potentially add "
+"a huge number of games."
+msgstr ""
+"Opravdu chcete spustit hromadnou detekci her? Toto by mohlo potenciálně "
+"přidat velkou spoustu her. "
+
+#: gui/launcher.cpp:724 gui/launcher.cpp:872
+#: backends/events/symbiansdl/symbiansdl-events.cpp:184
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+msgid "Yes"
+msgstr "Ano"
+
+#: gui/launcher.cpp:724 gui/launcher.cpp:872
+#: backends/events/symbiansdl/symbiansdl-events.cpp:184
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+msgid "No"
+msgstr "Ne"
+
+#: gui/launcher.cpp:772
+msgid "ScummVM couldn't open the specified directory!"
+msgstr "ScummVM nemohl tento adresář otevřít!"
+
+#: gui/launcher.cpp:784
+msgid "ScummVM could not find any game in the specified directory!"
+msgstr "ScummVM nemohl v zadaném adresáři najít žádnou hru!"
+
+#: gui/launcher.cpp:798
+msgid "Pick the game:"
+msgstr "Vybrat hru:"
+
+#: gui/launcher.cpp:872
+msgid "Do you really want to remove this game configuration?"
+msgstr "Opravdu chcete odstranit nastavení této hry?"
+
+#: gui/launcher.cpp:936
+msgid "This game does not support loading games from the launcher."
+msgstr "Tato hra nepodporuje spouštění her ze spouštěče"
+
+#: gui/launcher.cpp:940
+msgid "ScummVM could not find any engine capable of running the selected game!"
+msgstr "ScummVM nemohl najít žádné jádro schopné vybranou hru spustit!"
+
+#: gui/launcher.cpp:1054
+msgctxt "lowres"
+msgid "Mass Add..."
+msgstr "Hromadné Přidání..."
+
+#: gui/launcher.cpp:1054
+msgid "Mass Add..."
+msgstr "Hromadné Přidání..."
+
+#: gui/massadd.cpp:78 gui/massadd.cpp:81
+msgid "... progress ..."
+msgstr "... průběh ..."
+
+#: gui/massadd.cpp:258
+msgid "Scan complete!"
+msgstr "Hledání dokončeno!"
+
+#: gui/massadd.cpp:261
+#, c-format
+msgid "Discovered %d new games, ignored %d previously added games."
+msgstr "Objeveno %d nových her, ignorováno %d dříve přidaných her."
+
+#: gui/massadd.cpp:265
+#, c-format
+msgid "Scanned %d directories ..."
+msgstr "Prohledáno %d adresářů..."
+
+#: gui/massadd.cpp:268
+#, c-format
+msgid "Discovered %d new games, ignored %d previously added games ..."
+msgstr "Objeveno %d nových her, ignorováno %d dříve přidaných her ..."
+
+#: gui/options.cpp:72
+msgid "Never"
+msgstr "Nikdy"
+
+#: gui/options.cpp:72
+msgid "every 5 mins"
+msgstr "Každých 5 min"
+
+#: gui/options.cpp:72
+msgid "every 10 mins"
+msgstr "Každých 10 min"
+
+#: gui/options.cpp:72
+msgid "every 15 mins"
+msgstr "Každých 15 min"
+
+#: gui/options.cpp:72
+msgid "every 30 mins"
+msgstr "Každých 30 min"
+
+#: gui/options.cpp:74
+msgid "8 kHz"
+msgstr "8 kHz"
+
+#: gui/options.cpp:74
+msgid "11kHz"
+msgstr "11kHz"
+
+#: gui/options.cpp:74
+msgid "22 kHz"
+msgstr "22 kHz"
+
+#: gui/options.cpp:74
+msgid "44 kHz"
+msgstr "44 kHz"
+
+#: gui/options.cpp:74
+msgid "48 kHz"
+msgstr "48 kHz"
+
+#: gui/options.cpp:236 gui/options.cpp:464 gui/options.cpp:559
+#: gui/options.cpp:625 gui/options.cpp:825
+msgctxt "soundfont"
+msgid "None"
+msgstr "Žádné"
+
+#: gui/options.cpp:372
+msgid "Failed to apply some of the graphic options changes:"
+msgstr "Nelze použít některé změny možností grafiky:"
+
+#: gui/options.cpp:384
+msgid "the video mode could not be changed."
+msgstr "režim obrazu nemohl být změněn."
+
+#: gui/options.cpp:390
+msgid "the fullscreen setting could not be changed"
+msgstr "nastavení celé obrazovky nemohlo být změněno"
+
+#: gui/options.cpp:396
+msgid "the aspect ratio setting could not be changed"
+msgstr "nastavení poměru stran nemohlo být změněno"
+
+#: gui/options.cpp:705
+msgid "Graphics mode:"
+msgstr "Režim obrazu:"
+
+#: gui/options.cpp:716
+msgid "Render mode:"
+msgstr "Režim vykreslení:"
+
+#: gui/options.cpp:716 gui/options.cpp:717
+msgid "Special dithering modes supported by some games"
+msgstr "Speciální režimy chvění podporované některými hrami"
+
+#: gui/options.cpp:726
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2247
+#: backends/graphics/openglsdl/openglsdl-graphics.cpp:472
+msgid "Fullscreen mode"
+msgstr "Režim celé obrazovky"
+
+#: gui/options.cpp:729
+msgid "Aspect ratio correction"
+msgstr "Korekce poměru stran"
+
+#: gui/options.cpp:729
+msgid "Correct aspect ratio for 320x200 games"
+msgstr "Korigovat poměr stran pro hry 320x200"
+
+#: gui/options.cpp:730
+msgid "EGA undithering"
+msgstr "Nerozkládání EGA"
+
+#: gui/options.cpp:730
+msgid "Enable undithering in EGA games that support it"
+msgstr "Povolit nerozkládání v EGA hrách, které to podporují"
+
+#: gui/options.cpp:738
+msgid "Preferred Device:"
+msgstr "Prioritní Zařízení:"
+
+#: gui/options.cpp:738
+msgid "Music Device:"
+msgstr "Hudební zařízení"
+
+#: gui/options.cpp:738 gui/options.cpp:740
+msgid "Specifies preferred sound device or sound card emulator"
+msgstr "Stanoví prioritní zvukové zařízení nebo emulátor zvukové karty"
+
+#: gui/options.cpp:738 gui/options.cpp:740 gui/options.cpp:741
+msgid "Specifies output sound device or sound card emulator"
+msgstr "Stanoví výstupní zvukové zařízení nebo emulátor zvukové karty"
+
+#: gui/options.cpp:740
+msgctxt "lowres"
+msgid "Preferred Dev.:"
+msgstr "Prioritní Zař.:"
+
+#: gui/options.cpp:740
+msgctxt "lowres"
+msgid "Music Device:"
+msgstr "Hudební zařízení"
+
+#: gui/options.cpp:766
+msgid "AdLib emulator:"
+msgstr "AdLib emulátor"
+
+#: gui/options.cpp:766 gui/options.cpp:767
+msgid "AdLib is used for music in many games"
+msgstr "AdLib se používá pro hudbu v mnoha hrách"
+
+#: gui/options.cpp:777
+msgid "Output rate:"
+msgstr "Výstup. frekvence:"
+
+#: gui/options.cpp:777 gui/options.cpp:778
+msgid ""
+"Higher value specifies better sound quality but may be not supported by your "
+"soundcard"
+msgstr ""
+"Vyšší hodnota způsobí lepší kvalitu zvuku, ale nemusí být podporována Vaši "
+"zvukovou kartou"
+
+#: gui/options.cpp:788
+msgid "GM Device:"
+msgstr "GM Zařízení:"
+
+#: gui/options.cpp:788
+msgid "Specifies default sound device for General MIDI output"
+msgstr "Stanoví výchozí zvukové zařízení pro výstup General MIDI"
+
+#: gui/options.cpp:799
+msgid "Don't use General MIDI music"
+msgstr "Nepoužívat hudbu General MIDI"
+
+#: gui/options.cpp:810 gui/options.cpp:871
+msgid "Use first available device"
+msgstr "Použít první dostupné zařízení"
+
+#: gui/options.cpp:822
+msgid "SoundFont:"
+msgstr "SoundFont:"
+
+#: gui/options.cpp:822 gui/options.cpp:824 gui/options.cpp:825
+msgid "SoundFont is supported by some audio cards, Fluidsynth and Timidity"
+msgstr ""
+"SoundFont je podporován některými zvukovými kartami, Fluidsynth a Timidity"
+
+#: gui/options.cpp:824
+msgctxt "lowres"
+msgid "SoundFont:"
+msgstr "SoundFont:"
+
+#: gui/options.cpp:829
+msgid "Mixed AdLib/MIDI mode"
+msgstr "Smíšený režim AdLib/MIDI"
+
+#: gui/options.cpp:829
+msgid "Use both MIDI and AdLib sound generation"
+msgstr "Použít obě zvukové generace MIDI a AdLib"
+
+#: gui/options.cpp:832
+msgid "MIDI gain:"
+msgstr "Zesílení MIDI:"
+
+#: gui/options.cpp:842
+msgid "MT-32 Device:"
+msgstr "Zařízení MT-32:"
+
+#: gui/options.cpp:842
+msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
+msgstr ""
+"Stanoví výchozí zvukové výstupní zařízení pro Roland MT-32/LAPC1/CM32l/CM64"
+
+#: gui/options.cpp:847
+msgid "True Roland MT-32 (disable GM emulation)"
+msgstr "Opravdový Roland MT-32 (vypne GM emulaci)"
+
+#: gui/options.cpp:847 gui/options.cpp:849
+msgid ""
+"Check if you want to use your real hardware Roland-compatible sound device "
+"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"
+
+#: gui/options.cpp:849
+msgctxt "lowres"
+msgid "True Roland MT-32 (no GM emulation)"
+msgstr "Opravdový Roland MT-32 (žádná GM emulace)"
+
+#: gui/options.cpp:852
+msgid "Enable Roland GS Mode"
+msgstr "Zapnout režim Roland GS"
+
+#: gui/options.cpp:852
+msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack"
+msgstr "Vypne mapování General MIDI pro hry s Roland MT-32 zvukovým doprovodem"
+
+#: gui/options.cpp:861
+msgid "Don't use Roland MT-32 music"
+msgstr "Nepoužívat hudbu Roland MT-32"
+
+#: gui/options.cpp:888
+msgid "Text and Speech:"
+msgstr "Text a Řeč"
+
+#: gui/options.cpp:892 gui/options.cpp:902
+msgid "Speech"
+msgstr "Řeč"
+
+#: gui/options.cpp:893 gui/options.cpp:903
+msgid "Subtitles"
+msgstr "Titulky"
+
+#: gui/options.cpp:894
+msgid "Both"
+msgstr "Oba"
+
+#: gui/options.cpp:896
+msgid "Subtitle speed:"
+msgstr "Rychlost titulků:"
+
+#: gui/options.cpp:898
+msgctxt "lowres"
+msgid "Text and Speech:"
+msgstr "Text a Řeč:"
+
+#: gui/options.cpp:902
+msgid "Spch"
+msgstr "Řeč"
+
+#: gui/options.cpp:903
+msgid "Subs"
+msgstr "Titl"
+
+#: gui/options.cpp:904
+msgctxt "lowres"
+msgid "Both"
+msgstr "Oba"
+
+#: gui/options.cpp:904
+msgid "Show subtitles and play speech"
+msgstr "Zobrazit titulky a přehrávat řeč"
+
+#: gui/options.cpp:906
+msgctxt "lowres"
+msgid "Subtitle speed:"
+msgstr "Rychlost titulků"
+
+#: gui/options.cpp:922
+msgid "Music volume:"
+msgstr "Hlasitost hudby"
+
+#: gui/options.cpp:924
+msgctxt "lowres"
+msgid "Music volume:"
+msgstr "Hlasitost hudby"
+
+#: gui/options.cpp:931
+msgid "Mute All"
+msgstr "Ztlumit Vše"
+
+#: gui/options.cpp:934
+msgid "SFX volume:"
+msgstr "Hlasitost zvuků"
+
+#: gui/options.cpp:934 gui/options.cpp:936 gui/options.cpp:937
+msgid "Special sound effects volume"
+msgstr "Hlasitost speciálních zvukových efektů"
+
+#: gui/options.cpp:936
+msgctxt "lowres"
+msgid "SFX volume:"
+msgstr "Hlasitost zvuků"
+
+#: gui/options.cpp:944
+msgid "Speech volume:"
+msgstr "Hlasitost řeči"
+
+#: gui/options.cpp:946
+msgctxt "lowres"
+msgid "Speech volume:"
+msgstr "Hlasitost řeči"
+
+#: gui/options.cpp:1085
+msgid "Theme Path:"
+msgstr "Cesta ke Vzhledu:"
+
+#: gui/options.cpp:1087
+msgctxt "lowres"
+msgid "Theme Path:"
+msgstr "Cesta ke Vzhledu:"
+
+#: gui/options.cpp:1091 gui/options.cpp:1093 gui/options.cpp:1094
+msgid "Specifies path to additional data used by all games or ScummVM"
+msgstr "Stanoví cestu k dodatečným datům používaná všemi hrami nebo ScummVM"
+
+#: gui/options.cpp:1098
+msgid "Plugins Path:"
+msgstr "Cesta k Pluginům:"
+
+#: gui/options.cpp:1100
+msgctxt "lowres"
+msgid "Plugins Path:"
+msgstr "Cesta k Pluginům:"
+
+#: gui/options.cpp:1109
+msgid "Misc"
+msgstr "Různé"
+
+#: gui/options.cpp:1111
+msgctxt "lowres"
+msgid "Misc"
+msgstr "Různé"
+
+#: gui/options.cpp:1113
+msgid "Theme:"
+msgstr "Vzhled:"
+
+#: gui/options.cpp:1117
+msgid "GUI Renderer:"
+msgstr "GUI Vykreslovač:"
+
+#: gui/options.cpp:1129
+msgid "Autosave:"
+msgstr "Autoukládání:"
+
+#: gui/options.cpp:1131
+msgctxt "lowres"
+msgid "Autosave:"
+msgstr "Autoukládání:"
+
+#: gui/options.cpp:1139
+msgid "Keys"
+msgstr "Klávesy"
+
+#: gui/options.cpp:1146
+msgid "GUI Language:"
+msgstr "Jazyk GUI"
+
+#: gui/options.cpp:1146
+msgid "Language of ScummVM GUI"
+msgstr "Jazyk GUI ScummVM"
+
+#: gui/options.cpp:1295
+msgid "You have to restart ScummVM before your changes will take effect."
+msgstr "Pro použití těchto nastavení musíte restartovat ScummVM."
+
+#: gui/options.cpp:1308
+msgid "Select directory for savegames"
+msgstr "Vybrat adresář pro uložené hry"
+
+#: gui/options.cpp:1315
+msgid "The chosen directory cannot be written to. Please select another one."
+msgstr "Do zvoleného adresáře nelze zapisovat. Vyberte, prosím, jiný."
+
+#: gui/options.cpp:1324
+msgid "Select directory for GUI themes"
+msgstr "Vyberte adresář pro vhledy GUI"
+
+#: gui/options.cpp:1334
+msgid "Select directory for extra files"
+msgstr "Vyberte adresář pro dodatečné soubory"
+
+#: gui/options.cpp:1345
+msgid "Select directory for plugins"
+msgstr "Vyberte adresář pro zásuvné moduly"
+
+#: gui/options.cpp:1389
+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 ""
+"Vzhled, který jste zvolili, nepodporuje Váš současný jazyk. Pokud chcete "
+"tento vzhled použít, musíte nejdříve přepnout na jiný jazyk."
+
+#: gui/saveload.cpp:58 gui/saveload.cpp:239
+msgid "No date saved"
+msgstr "Neuložena žádná data"
+
+#: gui/saveload.cpp:59 gui/saveload.cpp:240
+msgid "No time saved"
+msgstr "Žádný uložený čas"
+
+#: gui/saveload.cpp:60 gui/saveload.cpp:241
+msgid "No playtime saved"
+msgstr "Žádná uložená doba hraní"
+
+#: gui/saveload.cpp:67 gui/saveload.cpp:155
+msgid "Delete"
+msgstr "Smazat"
+
+#: gui/saveload.cpp:154
+msgid "Do you really want to delete this savegame?"
+msgstr "Opravdu chcete tuto uloženou hru vymazat"
+
+#: gui/saveload.cpp:264
+msgid "Date: "
+msgstr "Datum:"
+
+#: gui/saveload.cpp:268
+msgid "Time: "
+msgstr "Čas:"
+
+#: gui/saveload.cpp:274
+msgid "Playtime: "
+msgstr "Doba hraní:"
+
+#: gui/saveload.cpp:287 gui/saveload.cpp:354
+msgid "Untitled savestate"
+msgstr "Bezejmenný uložený stav"
+
+#: gui/themebrowser.cpp:44
+msgid "Select a Theme"
+msgstr "Vyberte Vzhled"
+
+#: gui/ThemeEngine.cpp:328
+msgid "Disabled GFX"
+msgstr "GFX zakázáno"
+
+#: gui/ThemeEngine.cpp:328
+msgctxt "lowres"
+msgid "Disabled GFX"
+msgstr "GFX zakázáno"
+
+#: gui/ThemeEngine.cpp:329
+msgid "Standard Renderer (16bpp)"
+msgstr "Standardní Vykreslovač (16bpp)"
+
+#: gui/ThemeEngine.cpp:329
+msgid "Standard (16bpp)"
+msgstr "Standardní (16bpp)"
+
+#: gui/ThemeEngine.cpp:331
+msgid "Antialiased Renderer (16bpp)"
+msgstr "Vykreslovač s vyhlazenými hranami (16bpp)"
+
+#: gui/ThemeEngine.cpp:331
+msgid "Antialiased (16bpp)"
+msgstr "S vyhlazenými hranami (16bpp)"
+
+#: base/main.cpp:206
+#, c-format
+msgid "Engine does not support debug level '%s'"
+msgstr "Jádro nepodporuje úroveň ladění '%s'"
+
+#: base/main.cpp:274
+msgid "Menu"
+msgstr "Menu"
+
+#: base/main.cpp:277 backends/platform/symbian/src/SymbianActions.cpp:45
+#: backends/platform/wince/CEActionsPocket.cpp:45
+#: backends/platform/wince/CEActionsSmartphone.cpp:46
+msgid "Skip"
+msgstr "Přeskočit"
+
+#: base/main.cpp:280 backends/platform/symbian/src/SymbianActions.cpp:50
+#: backends/platform/wince/CEActionsPocket.cpp:42
+msgid "Pause"
+msgstr "Pauza"
+
+#: base/main.cpp:283
+msgid "Skip line"
+msgstr "Přeskočit řádek"
+
+#: base/main.cpp:442
+msgid "Error running game:"
+msgstr "Chyba při spuštění hry:"
+
+#: base/main.cpp:466
+msgid "Could not find any engine capable of running the selected game"
+msgstr "Nelze nalézt žádné jádro schopné vybranou hru spustit"
+
+#: common/error.cpp:38
+msgid "No error"
+msgstr "Žádná chyba"
+
+#: common/error.cpp:40
+msgid "Game data not found"
+msgstr "Data hry nenalezena"
+
+#: common/error.cpp:42
+msgid "Game id not supported"
+msgstr "Id hry není podporováno"
+
+#: common/error.cpp:44
+msgid "Unsupported color mode"
+msgstr "Nepodporovaný barevný režim"
+
+#: common/error.cpp:47
+msgid "Read permission denied"
+msgstr "Oprávnění ke čtení zamítnuto"
+
+#: common/error.cpp:49
+msgid "Write permission denied"
+msgstr "Oprávnění k zápisu zamítnuto"
+
+#: common/error.cpp:52
+msgid "Path does not exist"
+msgstr "Cesta neexistuje"
+
+#: common/error.cpp:54
+msgid "Path not a directory"
+msgstr "Cesta není adresář"
+
+#: common/error.cpp:56
+msgid "Path not a file"
+msgstr "Cesta není soubor"
+
+#: common/error.cpp:59
+msgid "Cannot create file"
+msgstr "Nelze vytvořit soubor"
+
+#: common/error.cpp:61
+msgid "Reading data failed"
+msgstr "Čtení dat selhalo"
+
+#: common/error.cpp:63
+msgid "Writing data failed"
+msgstr "Zápis dat selhal"
+
+#: common/error.cpp:66
+msgid "Could not find suitable engine plugin"
+msgstr "Nelze nalézt vhodný zás. modul jádra"
+
+#: common/error.cpp:68
+msgid "Engine plugin does not support save states"
+msgstr "Zás. modul jádra nepodporuje uložené stavy"
+
+#: common/error.cpp:71
+msgid "User canceled"
+msgstr "Zrušeno uživatelem"
+
+#: common/error.cpp:75
+msgid "Unknown error"
+msgstr "Neznámá chyba"
+
+#. I18N: Hercules is graphics card name
+#: common/util.cpp:275
+msgid "Hercules Green"
+msgstr "Hercules Zelená"
+
+#: common/util.cpp:276
+msgid "Hercules Amber"
+msgstr "Hercules Jantarová"
+
+#: common/util.cpp:283
+msgctxt "lowres"
+msgid "Hercules Green"
+msgstr "Hercules Zelená"
+
+#: common/util.cpp:284
+msgctxt "lowres"
+msgid "Hercules Amber"
+msgstr "Hercules Jantarová"
+
+#: engines/advancedDetector.cpp:296
+#, c-format
+msgid "The game in '%s' seems to be unknown."
+msgstr "Hra v '%s' se zdá být neznámá."
+
+#: engines/advancedDetector.cpp:297
+msgid "Please, report the following data to the ScummVM team along with name"
+msgstr "Prosím nahlaste následující data týmu ScummVM spolu se jménem"
+
+#: engines/advancedDetector.cpp:299
+msgid "of the game you tried to add and its version/language/etc.:"
+msgstr "hry, kterou jste se pokusili přidat a její verzi/jazyk/atd.:"
+
+#: engines/dialogs.cpp:84
+msgid "~R~esume"
+msgstr "~P~okračovat"
+
+#: engines/dialogs.cpp:86
+msgid "~L~oad"
+msgstr "~N~ahrát"
+
+#: engines/dialogs.cpp:90
+msgid "~S~ave"
+msgstr "~U~ložit"
+
+#: engines/dialogs.cpp:94
+msgid "~O~ptions"
+msgstr "~V~olby"
+
+#: engines/dialogs.cpp:99
+msgid "~H~elp"
+msgstr "~N~ápověda"
+
+#: engines/dialogs.cpp:101
+msgid "~A~bout"
+msgstr "~O~ programu"
+
+#: engines/dialogs.cpp:104 engines/dialogs.cpp:182
+msgid "~R~eturn to Launcher"
+msgstr "~N~ávrat do Spouštěče"
+
+#: engines/dialogs.cpp:106 engines/dialogs.cpp:184
+msgctxt "lowres"
+msgid "~R~eturn to Launcher"
+msgstr "~N~ávrat do Spouštěče"
+
+#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214
+#: engines/sci/engine/kfile.cpp:575
+msgid "Save game:"
+msgstr "Uložit hru:"
+
+#: engines/dialogs.cpp:116 engines/scumm/dialogs.cpp:187
+#: engines/cruise/menu.cpp:214 engines/sci/engine/kfile.cpp:575
+#: backends/platform/symbian/src/SymbianActions.cpp:44
+#: backends/platform/wince/CEActionsPocket.cpp:43
+#: backends/platform/wince/CEActionsPocket.cpp:267
+#: backends/platform/wince/CEActionsSmartphone.cpp:45
+#: backends/platform/wince/CEActionsSmartphone.cpp:231
+msgid "Save"
+msgstr "Uložit"
+
+#: engines/dialogs.cpp:146
+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 ""
+"Je nám líto, ale toto jádro v současnosti nepodporuje herní nápovědu. Prosím "
+"prohlédněte si README pro základní informace a pro instrukce jak získat "
+"další pomoc."
+
+#: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:109
+#: engines/mohawk/dialogs.cpp:174
+msgid "~O~K"
+msgstr "~O~K"
+
+#: engines/dialogs.cpp:309 engines/mohawk/dialogs.cpp:110
+#: engines/mohawk/dialogs.cpp:175
+msgid "~C~ancel"
+msgstr "~Z~rušit"
+
+#: engines/dialogs.cpp:312
+msgid "~K~eys"
+msgstr "~K~lávesy"
+
+#: engines/engine.cpp:233
+msgid "Could not initialize color format."
+msgstr "Nelze zavést barevný formát."
+
+#: engines/engine.cpp:241
+msgid "Could not switch to video mode: '"
+msgstr "Nelze přepnout na režim obrazu: '"
+
+#: engines/engine.cpp:250
+msgid "Could not apply aspect ratio setting."
+msgstr "Nelze použít nastavení poměru stran."
+
+#: engines/engine.cpp:255
+msgid "Could not apply fullscreen setting."
+msgstr "Nelze použít nastavení celé obrazovky."
+
+#: engines/engine.cpp:355
+msgid ""
+"You appear to be playing this game directly\n"
+"from the CD. This is known to cause problems,\n"
+"and it is therefore recommended that you copy\n"
+"the data files to your hard disk instead.\n"
+"See the README file for details."
+msgstr ""
+"Vypadá to, že tuto hru hrajete přímo z\n"
+" CD. Je známo, že toto způsobuje problémy\n"
+" a je tedy doporučeno, ať místo toho zkopírujete\n"
+"datové soubory na Váš pevný disk.\n"
+"Pro podrobnosti si přečtěte README."
+
+#: engines/engine.cpp:366
+msgid ""
+"This game has audio tracks in its disk. These\n"
+"tracks need to be ripped from the disk using\n"
+"an appropriate CD audio extracting tool in\n"
+"order to listen to the game's music.\n"
+"See the README file for details."
+msgstr ""
+"Tato hra má na svém disku zvukové stopy. Tyto\n"
+"stopy musí být z disku zkopírovány použitím\n"
+"vhodného nástroje pro extrakci zvuku z CD,\n"
+"abyste mohli poslouchat hudbu ve hře.\n"
+"Pro podrobnosti si přečtěte README."
+
+#: engines/engine.cpp:433
+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 ""
+"VAROVÁNÍ: Hra, kterou se chystáte spustit, není ještě plně podporována "
+"ScummVM. Proto je možné, že bude nestabilní a jakékoli uložené hry nemusí "
+"fungovat v budoucích verzích ScummVM."
+
+#: engines/engine.cpp:436
+msgid "Start anyway"
+msgstr "Přesto spustit"
+
+#: engines/scumm/dialogs.cpp:175
+#, c-format
+msgid "Insert Disk %c and Press Button to Continue."
+msgstr "Vložte Disk %c a Stiskněte Tlačítko Pro Poračování."
+
+#: engines/scumm/dialogs.cpp:176
+#, c-format
+msgid "Unable to Find %s, (%c%d) Press Button."
+msgstr "Nelze Najít %s, (%c%d) Stsikěte Tlačítko."
+
+#: engines/scumm/dialogs.cpp:177
+#, c-format
+msgid "Error reading disk %c, (%c%d) Press Button."
+msgstr "Chyba při čtení disku %c, (%c%d) Stiskněte Tlačítko."
+
+#: engines/scumm/dialogs.cpp:178
+msgid "Game Paused. Press SPACE to Continue."
+msgstr "Hra Pozastavena. Stiskněte MEZERNÍK pro pokračování."
+
+#. 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
+msgid "Are you sure you want to restart? (Y/N)"
+msgstr "Jste si jisti, že chcete restartovat? (A/N)A"
+
+#. I18N: you may specify 'Yes' symbol at the endo fo the line. See previous comment
+#: engines/scumm/dialogs.cpp:184
+msgid "Are you sure you want to quit? (Y/N)"
+msgstr "Jste si jisti, že chcete odejít? (A/N)A"
+
+#: engines/scumm/dialogs.cpp:189
+msgid "Play"
+msgstr "Hrát"
+
+#: 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
+#: backends/platform/wince/CEActionsSmartphone.cpp:52
+#: backends/events/default/default-events.cpp:244
+msgid "Quit"
+msgstr "Ukončit"
+
+#: engines/scumm/dialogs.cpp:193
+msgid "Insert save/load game disk"
+msgstr "Vložte herní disk pro uložení/načtení"
+
+#: engines/scumm/dialogs.cpp:194
+msgid "You must enter a name"
+msgstr "Musíte zadat jméno"
+
+#: engines/scumm/dialogs.cpp:195
+msgid "The game was NOT saved (disk full?)"
+msgstr "Hra NEBYLA uložena (plný disk?)"
+
+#: engines/scumm/dialogs.cpp:196
+msgid "The game was NOT loaded"
+msgstr "Hra NEBYLA načtena"
+
+#: engines/scumm/dialogs.cpp:197
+#, c-format
+msgid "Saving '%s'"
+msgstr "Ukládám '%s'"
+
+#: engines/scumm/dialogs.cpp:198
+#, c-format
+msgid "Loading '%s'"
+msgstr "Načítám '%s'"
+
+#: engines/scumm/dialogs.cpp:199
+msgid "Name your SAVE game"
+msgstr "Pojmenujte svoji ULOŽENOU hru"
+
+#: engines/scumm/dialogs.cpp:200
+msgid "Select a game to LOAD"
+msgstr "Vyberte hru k NAČTENÍ"
+
+#: engines/scumm/dialogs.cpp:201
+msgid "Game title)"
+msgstr "Název hry"
+
+#. I18N: Previous page button
+#: engines/scumm/dialogs.cpp:287
+msgid "~P~revious"
+msgstr "~P~ředchozí"
+
+#. I18N: Next page button
+#: engines/scumm/dialogs.cpp:289
+msgid "~N~ext"
+msgstr "~D~alší"
+
+#: engines/scumm/dialogs.cpp:290
+#: backends/platform/ds/arm9/source/dsoptions.cpp:56
+msgid "~C~lose"
+msgstr "~Z~avřít"
+
+#: engines/scumm/dialogs.cpp:597
+msgid "Speech Only"
+msgstr "Pouze Řeč"
+
+#: engines/scumm/dialogs.cpp:598
+msgid "Speech and Subtitles"
+msgstr "Řeč a Titulky"
+
+#: engines/scumm/dialogs.cpp:599
+msgid "Subtitles Only"
+msgstr "Pouze Titulky"
+
+#: engines/scumm/dialogs.cpp:607
+msgctxt "lowres"
+msgid "Speech & Subs"
+msgstr "Řeč a Titulky"
+
+#: engines/scumm/help.cpp:73
+msgid "Common keyboard commands:"
+msgstr "Běžné klávesové příkazy"
+
+#: engines/scumm/help.cpp:74
+msgid "Save / Load dialog"
+msgstr "Dialog Nahrát / Uložit"
+
+#: engines/scumm/help.cpp:76
+msgid "Skip line of text"
+msgstr "Přeskočit řádek textu"
+
+#: engines/scumm/help.cpp:77
+msgid "Esc"
+msgstr "Mezerník"
+
+#: engines/scumm/help.cpp:77
+msgid "Skip cutscene"
+msgstr "Přeskočit video"
+
+#: engines/scumm/help.cpp:78
+msgid "Space"
+msgstr "Mezerník"
+
+#: engines/scumm/help.cpp:78
+msgid "Pause game"
+msgstr "Pozastavit hru"
+
+#: 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 "Nahrát stav hry 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
+msgid "Alt"
+msgstr "Alt"
+
+#: engines/scumm/help.cpp:80
+msgid "Save game state 1-10"
+msgstr "Uložit stav hry 1-10"
+
+#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:89
+msgid "Enter"
+msgstr "Enter"
+
+#: engines/scumm/help.cpp:86
+msgid "Toggle fullscreen"
+msgstr "Zapnout celou obrazovku"
+
+#: engines/scumm/help.cpp:87
+msgid "Music volume up / down"
+msgstr "Hlasitost hudby nahoru / dolů"
+
+#: engines/scumm/help.cpp:88
+msgid "Text speed slower / faster"
+msgstr "Zvýšit / Snížit rychlost textu"
+
+#: engines/scumm/help.cpp:89
+msgid "Simulate left mouse button"
+msgstr "Napodobit levé tlačítko myši"
+
+#: engines/scumm/help.cpp:90
+msgid "Tab"
+msgstr "Tab"
+
+#: engines/scumm/help.cpp:90
+msgid "Simulate right mouse button"
+msgstr "Napodobit pravé tlačítko myši"
+
+#: engines/scumm/help.cpp:93
+msgid "Special keyboard commands:"
+msgstr "Speciální klávesové příkazy"
+
+#: engines/scumm/help.cpp:94
+msgid "Show / Hide console"
+msgstr "Ukázat / Skrýt konzoli"
+
+#: engines/scumm/help.cpp:95
+msgid "Start the debugger"
+msgstr "Spustit ladící program"
+
+#: engines/scumm/help.cpp:96
+msgid "Show memory consumption"
+msgstr "Zobrazit spotřebu paměti"
+
+#: engines/scumm/help.cpp:97
+msgid "Run in fast mode (*)"
+msgstr "Spustit v rychlém režimu (*)"
+
+#: engines/scumm/help.cpp:98
+msgid "Run in really fast mode (*)"
+msgstr "Spustit ve velmi rychlém režimu (*)"
+
+#: engines/scumm/help.cpp:99
+msgid "Toggle mouse capture"
+msgstr "Povolit zachycování myši"
+
+#: engines/scumm/help.cpp:100
+msgid "Switch between graphics filters"
+msgstr "Přepínat mezi grafickými filtry"
+
+#: engines/scumm/help.cpp:101
+msgid "Increase / Decrease scale factor"
+msgstr "Zvětšit / Zmenšit faktor změny velikosti"
+
+#: engines/scumm/help.cpp:102
+msgid "Toggle aspect-ratio correction"
+msgstr "Povolit korekci poměru stran"
+
+#: engines/scumm/help.cpp:107
+msgid "* Note that using ctrl-f and"
+msgstr "Upozorňujeme, že používání ctrl-f a"
+
+#: engines/scumm/help.cpp:108
+msgid " ctrl-g are not recommended"
+msgstr " ctrl-g není doporučeno"
+
+#: engines/scumm/help.cpp:109
+msgid " since they may cause crashes"
+msgstr "jelikož můžou způsobit pád"
+
+#: engines/scumm/help.cpp:110
+msgid " or incorrect game behavior."
+msgstr " nebo nesprávné chování hry."
+
+#: engines/scumm/help.cpp:114
+msgid "Spinning drafts on the keyboard:"
+msgstr "Pletení náčrtků na klávesnici:"
+
+#: engines/scumm/help.cpp:116
+msgid "Main game controls:"
+msgstr "Hlavní ovládací prvky:"
+
+#: engines/scumm/help.cpp:121 engines/scumm/help.cpp:136
+#: engines/scumm/help.cpp:161
+msgid "Push"
+msgstr "Tlačit"
+
+#: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137
+#: engines/scumm/help.cpp:162
+msgid "Pull"
+msgstr "Táhnout"
+
+#: 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 "Dát"
+
+#: 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 "Otevřít"
+
+#: engines/scumm/help.cpp:126
+msgid "Go to"
+msgstr "Jít do"
+
+#: engines/scumm/help.cpp:127
+msgid "Get"
+msgstr "Vzít"
+
+#: 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 "Použít"
+
+#: engines/scumm/help.cpp:129 engines/scumm/help.cpp:141
+msgid "Read"
+msgstr "Přečíst"
+
+#: engines/scumm/help.cpp:130 engines/scumm/help.cpp:147
+msgid "New kid"
+msgstr "Nové dítě"
+
+#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:153
+#: engines/scumm/help.cpp:171
+msgid "Turn on"
+msgstr "Zapnout"
+
+#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:154
+#: engines/scumm/help.cpp:172
+msgid "Turn off"
+msgstr "Vypnout"
+
+#: engines/scumm/help.cpp:142 engines/scumm/help.cpp:167
+#: engines/scumm/help.cpp:194
+msgid "Walk to"
+msgstr "Přejít na"
+
+#: 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 "Sebrat"
+
+#: engines/scumm/help.cpp:144 engines/scumm/help.cpp:169
+msgid "What is"
+msgstr "Co je"
+
+#: engines/scumm/help.cpp:146
+msgid "Unlock"
+msgstr "Odemknout"
+
+#: engines/scumm/help.cpp:149
+msgid "Put on"
+msgstr "Obléct"
+
+#: engines/scumm/help.cpp:150
+msgid "Take off"
+msgstr "Svléct"
+
+#: engines/scumm/help.cpp:156
+msgid "Fix"
+msgstr "Spravit"
+
+#: engines/scumm/help.cpp:158
+msgid "Switch"
+msgstr "Přepnout"
+
+#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:228
+msgid "Look"
+msgstr "Dívat se"
+
+#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:223
+msgid "Talk"
+msgstr "Mluvit"
+
+#: engines/scumm/help.cpp:174
+msgid "Travel"
+msgstr "Cestovat"
+
+#: engines/scumm/help.cpp:175
+msgid "To Henry / To Indy"
+msgstr "Henrymu / Indymu"
+
+#. I18N: These are different musical notes
+#: engines/scumm/help.cpp:179
+msgid "play C minor on distaff"
+msgstr "zahrát c moll na přeslici"
+
+#: engines/scumm/help.cpp:180
+msgid "play D on distaff"
+msgstr "zahrát D na přeslici"
+
+#: engines/scumm/help.cpp:181
+msgid "play E on distaff"
+msgstr "zahrát E na přeslici"
+
+#: engines/scumm/help.cpp:182
+msgid "play F on distaff"
+msgstr "zahrát F na přeslici"
+
+#: engines/scumm/help.cpp:183
+msgid "play G on distaff"
+msgstr "zahrát G na přeslici"
+
+#: engines/scumm/help.cpp:184
+msgid "play A on distaff"
+msgstr "zahrát A na přeslici"
+
+#: engines/scumm/help.cpp:185
+msgid "play B on distaff"
+msgstr "zahrát B na přeslici"
+
+#: engines/scumm/help.cpp:186
+msgid "play C major on distaff"
+msgstr "zahrát C dur na přeslici"
+
+#: engines/scumm/help.cpp:192 engines/scumm/help.cpp:214
+msgid "puSh"
+msgstr "tlačIt"
+
+#: engines/scumm/help.cpp:193 engines/scumm/help.cpp:215
+msgid "pull (Yank)"
+msgstr "táhnout (Škubnout)"
+
+#: engines/scumm/help.cpp:196 engines/scumm/help.cpp:212
+#: engines/scumm/help.cpp:248
+msgid "Talk to"
+msgstr "Mluvit s"
+
+#: engines/scumm/help.cpp:199 engines/scumm/help.cpp:211
+msgid "Look at"
+msgstr "Dívat se na"
+
+#: engines/scumm/help.cpp:200
+msgid "turn oN"
+msgstr "zapnouT"
+
+#: engines/scumm/help.cpp:201
+msgid "turn oFf"
+msgstr "vypnoUt"
+
+#: engines/scumm/help.cpp:217
+msgid "KeyUp"
+msgstr "KlávesaNahoru"
+
+#: engines/scumm/help.cpp:217
+msgid "Highlight prev dialogue"
+msgstr "Zvýraznit předchozí dialog"
+
+#: engines/scumm/help.cpp:218
+msgid "KeyDown"
+msgstr "KlávesaDolů"
+
+#: engines/scumm/help.cpp:218
+msgid "Highlight next dialogue"
+msgstr "Zvýraznit následující dialog"
+
+#: engines/scumm/help.cpp:222
+msgid "Walk"
+msgstr "Jít"
+
+#: engines/scumm/help.cpp:225 engines/scumm/help.cpp:234
+#: engines/scumm/help.cpp:241 engines/scumm/help.cpp:249
+msgid "Inventory"
+msgstr "Inventář"
+
+#: engines/scumm/help.cpp:226
+msgid "Object"
+msgstr "Objekt"
+
+#: engines/scumm/help.cpp:229
+msgid "Black and White / Color"
+msgstr "Černobílé / Barva"
+
+#: engines/scumm/help.cpp:232
+msgid "Eyes"
+msgstr "Oči"
+
+#: engines/scumm/help.cpp:233
+msgid "Tongue"
+msgstr "Jazyk"
+
+#: engines/scumm/help.cpp:235
+msgid "Punch"
+msgstr "Udeřit"
+
+#: engines/scumm/help.cpp:236
+msgid "Kick"
+msgstr "Kopnout"
+
+#: engines/scumm/help.cpp:239 engines/scumm/help.cpp:247
+msgid "Examine"
+msgstr "Prohlédnout"
+
+#: engines/scumm/help.cpp:240
+msgid "Regular cursor"
+msgstr "Obyčejný kurzor"
+
+#. I18N: Comm is a communication device
+#: engines/scumm/help.cpp:243
+msgid "Comm"
+msgstr "Komunikace"
+
+#: engines/scumm/help.cpp:246
+msgid "Save / Load / Options"
+msgstr "Uložit / Nahrát / Volby"
+
+#: engines/scumm/help.cpp:255
+msgid "Other game controls:"
+msgstr "Další ovládací prvky hry"
+
+#: engines/scumm/help.cpp:257 engines/scumm/help.cpp:267
+msgid "Inventory:"
+msgstr "Inventář:"
+
+#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:274
+msgid "Scroll list up"
+msgstr "Posunout seznam nahoru"
+
+#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:275
+msgid "Scroll list down"
+msgstr "Posunout seznam dolu"
+
+#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:268
+msgid "Upper left item"
+msgstr "Položka vlevo nahoře"
+
+#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:270
+msgid "Lower left item"
+msgstr "Položka vlevo dole"
+
+#: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271
+msgid "Upper right item"
+msgstr "Položka vpravo nahoře"
+
+#: engines/scumm/help.cpp:263 engines/scumm/help.cpp:273
+msgid "Lower right item"
+msgstr "Položka vpravo dole"
+
+#: engines/scumm/help.cpp:269
+msgid "Middle left item"
+msgstr "Položka vlevo uprostřed"
+
+#: engines/scumm/help.cpp:272
+msgid "Middle right item"
+msgstr "Položka vpravo uprostřed"
+
+#: engines/scumm/help.cpp:279 engines/scumm/help.cpp:284
+msgid "Switching characters:"
+msgstr "Měnění postav:"
+
+#: engines/scumm/help.cpp:281
+msgid "Second kid"
+msgstr "Druhé dítě"
+
+#: engines/scumm/help.cpp:282
+msgid "Third kid"
+msgstr "Třetí dítě"
+
+#: engines/scumm/help.cpp:294
+msgid "Fighting controls (numpad):"
+msgstr "Ovládání boje (num. kláv.)"
+
+#: engines/scumm/help.cpp:295 engines/scumm/help.cpp:296
+#: engines/scumm/help.cpp:297
+msgid "Step back"
+msgstr "Ustoupit"
+
+#: engines/scumm/help.cpp:298
+msgid "Block high"
+msgstr "Bránit nahoře"
+
+#: engines/scumm/help.cpp:299
+msgid "Block middle"
+msgstr "Bránit uprostřed"
+
+#: engines/scumm/help.cpp:300
+msgid "Block low"
+msgstr "Bránit dole"
+
+#: engines/scumm/help.cpp:301
+msgid "Punch high"
+msgstr "Udeřit nahoru"
+
+#: engines/scumm/help.cpp:302
+msgid "Punch middle"
+msgstr "Udeřit doprostřed"
+
+#: engines/scumm/help.cpp:303
+msgid "Punch low"
+msgstr "Udeřit dolů"
+
+#: engines/scumm/help.cpp:306
+msgid "These are for Indy on left."
+msgstr "Tyto jsou pro Indyho nalevo."
+
+#: engines/scumm/help.cpp:307
+msgid "When Indy is on the right,"
+msgstr "Když je Indy napravo,"
+
+#: engines/scumm/help.cpp:308
+msgid "7, 4, and 1 are switched with"
+msgstr "71 4 a 1 jsou zaměněny s"
+
+#: engines/scumm/help.cpp:309
+msgid "9, 6, and 3, respectively."
+msgstr "9, 6 a 3, v tomto pořadí."
+
+#: engines/scumm/help.cpp:316
+msgid "Biplane controls (numpad):"
+msgstr "Kontrola dvojplošníku (numerická klávesnice)"
+
+#: engines/scumm/help.cpp:317
+msgid "Fly to upper left"
+msgstr "Letět doprava nahoru"
+
+#: engines/scumm/help.cpp:318
+msgid "Fly to left"
+msgstr "Letět doleva"
+
+#: engines/scumm/help.cpp:319
+msgid "Fly to lower left"
+msgstr "Letět doleva dolů"
+
+#: engines/scumm/help.cpp:320
+msgid "Fly upwards"
+msgstr "Letět nahoru"
+
+#: engines/scumm/help.cpp:321
+msgid "Fly straight"
+msgstr "Letět rovně"
+
+#: engines/scumm/help.cpp:322
+msgid "Fly down"
+msgstr "Letět dolů"
+
+#: engines/scumm/help.cpp:323
+msgid "Fly to upper right"
+msgstr "Letět doprava nahoru"
+
+#: engines/scumm/help.cpp:324
+msgid "Fly to right"
+msgstr "Letět doprava"
+
+#: engines/scumm/help.cpp:325
+msgid "Fly to lower right"
+msgstr "Letět doprava dolů"
+
+#: engines/scumm/scumm.cpp:1768
+#, c-format
+msgid ""
+"Native MIDI support requires the Roland Upgrade from LucasArts,\n"
+"but %s is missing. Using AdLib instead."
+msgstr ""
+"Přirozená podpora MIDI vyžaduje Aktualizaci Roland od LucasArts,\n"
+"ale %s chybí. Místo toho je použit AdLib."
+
+#: engines/scumm/scumm.cpp:2258 engines/agos/saveload.cpp:189
+#, c-format
+msgid ""
+"Failed to save game state to file:\n"
+"\n"
+"%s"
+msgstr ""
+"Uložení stavu hry selhalo do souboru:\n"
+"\n"
+"%s"
+
+#: engines/scumm/scumm.cpp:2265 engines/agos/saveload.cpp:154
+#, c-format
+msgid ""
+"Failed to load game state from file:\n"
+"\n"
+"%s"
+msgstr ""
+"Nahrání stavu hry selhalo ze souboru:\n"
+"\n"
+"%s"
+
+#: engines/scumm/scumm.cpp:2277 engines/agos/saveload.cpp:197
+#, c-format
+msgid ""
+"Successfully saved game state in file:\n"
+"\n"
+"%s"
+msgstr ""
+"Stav hry úspěšně uložen do:\n"
+"\n"
+"%s"
+
+#: engines/scumm/scumm.cpp:2492
+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 ""
+"Normálně by teď Maniac Mansion byl spuštěn. Ale ScummVM toto zatím nedělá. "
+"Abyste toto mohli hrát, přejděte do 'Přidat Hru' v počátečním menu ScummVM a "
+"vyberte adresář 'Maniac' uvnitř herního adresáře Tentacle."
+
+#. I18N: Option for fast scene switching
+#: engines/mohawk/dialogs.cpp:92 engines/mohawk/dialogs.cpp:171
+msgid "~Z~ip Mode Activated"
+msgstr "~R~ežim Svištění Aktivován"
+
+#: engines/mohawk/dialogs.cpp:93
+msgid "~T~ransitions Enabled"
+msgstr "~P~řechody zapnuty"
+
+#. I18N: Drop book page
+#: engines/mohawk/dialogs.cpp:95
+msgid "~D~rop Page"
+msgstr "~Z~ahodit Stránku"
+
+#: engines/mohawk/dialogs.cpp:99
+msgid "~S~how Map"
+msgstr "~Z~obrazit Mapu"
+
+#: engines/mohawk/dialogs.cpp:105
+msgid "~M~ain Menu"
+msgstr "~H~lavní Menu"
+
+#: engines/mohawk/dialogs.cpp:172
+msgid "~W~ater Effect Enabled"
+msgstr "~E~fekt Vody Zapnut"
+
+#: engines/sci/engine/kfile.cpp:678
+msgid "Restore game:"
+msgstr "Obnovit hru"
+
+#: engines/sci/engine/kfile.cpp:678
+msgid "Restore"
+msgstr "Obnovit"
+
+#: engines/agos/animation.cpp:544
+#, c-format
+msgid "Cutscene file '%s' not found!"
+msgstr "Soubor videa '%s' nenalezen'"
+
+#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1283
+#: engines/tinsel/saveload.cpp:475
+msgid "Failed to load game state from file."
+msgstr "Nelze načíst stav hry ze souboru."
+
+#: engines/gob/inter_v2.cpp:1353 engines/tinsel/saveload.cpp:553
+msgid "Failed to save game state to file."
+msgstr "Nelze uložit stav hry do souboru."
+
+#: engines/gob/inter_v5.cpp:107
+msgid "Failed to delete file."
+msgstr "Nelze smazat soubor."
+
+#: engines/groovie/script.cpp:420
+msgid "Failed to save game"
+msgstr "Nelze uložit hru."
+
+#: 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."
+msgstr ""
+"Zdá se, že používáte zařízení General 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."
+
+#: engines/m4/m4_menus.cpp:138
+msgid "Save game failed!"
+msgstr "Ukládání hry selhalo!"
+
+#: engines/sky/compact.cpp:130
+msgid ""
+"Unable to find \"sky.cpt\" file!\n"
+"Please download it from www.scummvm.org"
+msgstr ""
+"Nelze nalézt soubor \"sky.cpt\"!\n"
+"Stáhněte si ho, prosím z 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 ""
+"Soubor \"sky.cpt\" má nesprávnou velikost.\n"
+"Stáhněte si ho, prosím, (znovu) z www.scummvm.org"
+
+#: engines/sword1/animation.cpp:344 engines/sword2/animation.cpp:379
+msgid "DXA cutscenes found but ScummVM has been built without zlib support"
+msgstr "Videa DXA nalezena, ale ScummVM byl sestaven bez podpory zlib"
+
+#: engines/sword1/animation.cpp:354 engines/sword2/animation.cpp:389
+msgid "MPEG2 cutscenes are no longer supported"
+msgstr "Videa MPGE2 již nejsou podporována"
+
+#: engines/sword1/animation.cpp:359 engines/sword2/animation.cpp:397
+#, c-format
+msgid "Cutscene '%s' not found"
+msgstr "Video '%s' nenalezeno"
+
+#: 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"
+"\n"
+"Press OK to convert them now, otherwise you will be asked again the next "
+"time you start the game.\n"
+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"
+"\n"
+"Stiskněte OK, abyste je převedli teď, jinak budete požádáni znovu, při "
+"spuštění této hry.\n"
+
+#: engines/sword1/control.cpp:1232
+#, c-format
+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 ""
+"Nová cílová uložená hra již existuje!\n"
+"Chtěli byste ponechat starou uloženou hru (%s), nebo novou (%s)?\n"
+
+#: engines/sword1/control.cpp:1235
+msgid "Keep the old one"
+msgstr "Ponechat starou"
+
+#: engines/sword1/control.cpp:1235
+msgid "Keep the new one"
+msgstr "Ponechat novou"
+
+#: engines/sword1/logic.cpp:1633
+msgid "This is the end of the Broken Sword 1 Demo"
+msgstr "Toto je konec Dema Broken Sword 1"
+
+#: engines/parallaction/saveload.cpp:133
+#, c-format
+msgid ""
+"Can't save game in slot %i\n"
+"\n"
+msgstr ""
+"Nelze uložit hru do pozice %i\n"
+"\n"
+
+#: engines/parallaction/saveload.cpp:211
+msgid "Loading game..."
+msgstr "Nahrávání hry..."
+
+#: engines/parallaction/saveload.cpp:226
+msgid "Saving game..."
+msgstr "Ukládání hry..."
+
+#: engines/parallaction/saveload.cpp:279
+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"
+"\n"
+"Press OK to convert them now, otherwise you will be asked next time.\n"
+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"
+"\n"
+"Stiskněte OK, abyste je převedli teď, jinak budete požádáni příště.\n"
+
+#: engines/parallaction/saveload.cpp:326
+msgid "ScummVM successfully converted all your savefiles."
+msgstr "ScummVM úspěšně převedl všechny Vaše uložené pozice. "
+
+#: engines/parallaction/saveload.cpp:328
+msgid ""
+"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 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"
+
+#: audio/fmopl.cpp:49
+msgid "MAME OPL emulator"
+msgstr "MAME OPL Emulátor"
+
+#: audio/fmopl.cpp:51
+msgid "DOSBox OPL emulator"
+msgstr "DOSBox OPL Emulátor"
+
+#: audio/mididrv.cpp:205
+#, c-format
+msgid ""
+"The selected audio device '%s' was not found (e.g. might be turned off or "
+"disconnected)."
+msgstr ""
+"Zvolené zvukové zařízení '%s' nebylo nalezeno (např. může být vypnuto nebo "
+"odpojeno)."
+
+#: audio/mididrv.cpp:205 audio/mididrv.cpp:217 audio/mididrv.cpp:253
+#: audio/mididrv.cpp:268
+msgid "Attempting to fall back to the next available device..."
+msgstr "Pokus o navrácení na nejbližší dostupné zařízení..."
+
+#: audio/mididrv.cpp:217
+#, c-format
+msgid ""
+"The selected audio device '%s' cannot be used. See log file for more "
+"information."
+msgstr ""
+"Zvolené zvukové zařízení '%s' nelze použít. Podívejte se na záznam pro více "
+"informací."
+
+#: audio/mididrv.cpp:253
+#, c-format
+msgid ""
+"The preferred audio device '%s' was not found (e.g. might be turned off or "
+"disconnected)."
+msgstr ""
+"Upřednostňované zvukové zařízení '%s' nebylo nalezeno (např. může být "
+"vypnuto nebo odpojeno)."
+
+#: audio/mididrv.cpp:268
+#, c-format
+msgid ""
+"The preferred audio device '%s' cannot be used. See log file for more "
+"information."
+msgstr ""
+"Upřednostňované zvukové zařízení '%s' nelze použít. Podívejte se na záznam "
+"pro více informací."
+
+#: audio/null.h:43
+msgid "No music"
+msgstr "Bez hudby"
+
+#: audio/mods/paula.cpp:189
+msgid "Amiga Audio Emulator"
+msgstr "Emulátor zvuku Amiga"
+
+#: audio/softsynth/adlib.cpp:1594
+msgid "AdLib Emulator"
+msgstr "AdLib Emulátor"
+
+#: audio/softsynth/appleiigs.cpp:33
+msgid "Apple II GS Emulator (NOT IMPLEMENTED)"
+msgstr "Apple II GS Emulátor (NENÍ ZAVEDEN)"
+
+#: audio/softsynth/sid.cpp:1430
+msgid "C64 Audio Emulator"
+msgstr "Emulátor zvuku C64"
+
+#: audio/softsynth/mt32.cpp:329
+msgid "Initializing MT-32 Emulator"
+msgstr "Zavádím MT-32 Emulátor"
+
+#: audio/softsynth/mt32.cpp:543
+msgid "MT-32 Emulator"
+msgstr "MT-32 Emulátor"
+
+#: audio/softsynth/pcspk.cpp:139
+msgid "PC Speaker Emulator"
+msgstr "PC Speaker Emulátor"
+
+#: audio/softsynth/pcspk.cpp:158
+msgid "IBM PCjr Emulator"
+msgstr "IBM PCjr Emulátor"
+
+#: backends/keymapper/remap-dialog.cpp:47
+msgid "Keymap:"
+msgstr "Mapa Kláves:"
+
+#: backends/keymapper/remap-dialog.cpp:64
+msgid " (Active)"
+msgstr "(Aktivní)"
+
+#: backends/keymapper/remap-dialog.cpp:98
+msgid " (Global)"
+msgstr "(Globální)"
+
+#: backends/keymapper/remap-dialog.cpp:108
+msgid " (Game)"
+msgstr "(Hra)"
+
+#: backends/midi/windows.cpp:164
+msgid "Windows MIDI"
+msgstr "Windows MIDI"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:57
+msgid "ScummVM Main Menu"
+msgstr "Hlavní Menu ScummVM"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:63
+msgid "~L~eft handed mode"
+msgstr "~R~ežim pro leváky"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:64
+msgid "~I~ndy fight controls"
+msgstr "~O~vládání Indyho boje"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:65
+msgid "Show mouse cursor"
+msgstr "Zobrazit kurzor myši"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:66
+msgid "Snap to edges"
+msgstr "Přichytit k okrajům"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:68
+msgid "Touch X Offset"
+msgstr "Dotykové vyrovnáni na ose X"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:75
+msgid "Touch Y Offset"
+msgstr "Dotykové vyrovnáni na ose Y"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:87
+msgid "Use laptop trackpad-style cursor control"
+msgstr "Použít styl kontroly kurzoru jako u ovládací podušky laptopu"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:88
+msgid "Tap for left click, double tap right click"
+msgstr "Ťukněte pro levé kliknutí, dvakrát pro pravé kliknutí"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:90
+msgid "Sensitivity"
+msgstr "Citlivost"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:99
+msgid "Initial top screen scale:"
+msgstr "Počáteční změna velikosti horní obrazovky:"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:105
+msgid "Main screen scaling:"
+msgstr "Změna velikosti hlavní obrazovky:"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:107
+msgid "Hardware scale (fast, but low quality)"
+msgstr "Hardwarová změna velikosti (rychlé, ale nízká kvalita)"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:108
+msgid "Software scale (good quality, but slower)"
+msgstr "Softwarová změna velikosti (dobrá kvalita, ale pomalejší)"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:109
+msgid "Unscaled (you must scroll left and right)"
+msgstr "Beze změny velikosti (musíte posunovat doleva a doprava)"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:111
+msgid "Brightness:"
+msgstr "Jas:"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:121
+msgid "High quality audio (slower) (reboot)"
+msgstr "Vysoká kvalita zvuku (pomalejší) (restart) "
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:122
+msgid "Disable power off"
+msgstr "Zakázat vypnutí"
+
+#: backends/platform/iphone/osys_events.cpp:338
+msgid "Mouse-click-and-drag mode enabled."
+msgstr "Režim přetáhnutí myši zapnut."
+
+#: backends/platform/iphone/osys_events.cpp:340
+msgid "Mouse-click-and-drag mode disabled."
+msgstr "Režim přetáhnutí myši vypnut."
+
+#: backends/platform/iphone/osys_events.cpp:351
+msgid "Touchpad mode enabled."
+msgstr "Touchpad režim zapnut"
+
+#: backends/platform/iphone/osys_events.cpp:353
+msgid "Touchpad mode disabled."
+msgstr "Touchpad režim vypnut"
+
+#: backends/platform/sdl/macosx/appmenu_osx.mm:67
+msgid "Hide ScummVM"
+msgstr "Skrýt ScummVM"
+
+#: backends/platform/sdl/macosx/appmenu_osx.mm:70
+msgid "Hide Others"
+msgstr "Skrýt Ostatní"
+
+#: backends/platform/sdl/macosx/appmenu_osx.mm:74
+msgid "Show All"
+msgstr "Zobrazit Vše"
+
+#: backends/platform/sdl/macosx/appmenu_osx.mm:92
+#: backends/platform/sdl/macosx/appmenu_osx.mm:99
+msgid "Window"
+msgstr "Okno"
+
+#: backends/platform/sdl/macosx/appmenu_osx.mm:95
+msgid "Minimize"
+msgstr "Minimalizovat"
+
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:45
+msgid "Normal (no scaling)"
+msgstr "Normální (bez změny velikosti)"
+
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:64
+msgctxt "lowres"
+msgid "Normal (no scaling)"
+msgstr "Normální (bez změny velikosti)"
+
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2146
+#: backends/graphics/openglsdl/openglsdl-graphics.cpp:533
+msgid "Enabled aspect ratio correction"
+msgstr "Povolena korekce poměru stran"
+
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2152
+#: backends/graphics/openglsdl/openglsdl-graphics.cpp:538
+msgid "Disabled aspect ratio correction"
+msgstr "Zakázána korekce poměru stran"
+
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2207
+msgid "Active graphics filter:"
+msgstr "Aktivní grafický filtr:"
+
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2249
+#: backends/graphics/openglsdl/openglsdl-graphics.cpp:477
+msgid "Windowed mode"
+msgstr "Režim do okna"
+
+#: backends/graphics/opengl/opengl-graphics.cpp:130
+msgid "OpenGL Normal"
+msgstr "OpenGL Normální"
+
+#: backends/graphics/opengl/opengl-graphics.cpp:131
+msgid "OpenGL Conserve"
+msgstr "OpenGL Zachovávající"
+
+#: backends/graphics/opengl/opengl-graphics.cpp:132
+msgid "OpenGL Original"
+msgstr "OpenGL Původní"
+
+#: backends/graphics/openglsdl/openglsdl-graphics.cpp:415
+msgid "Current display mode"
+msgstr "Současný režim obrazu"
+
+#: backends/graphics/openglsdl/openglsdl-graphics.cpp:428
+msgid "Current scale"
+msgstr "Současná velikost"
+
+#: backends/graphics/openglsdl/openglsdl-graphics.cpp:558
+msgid "Active filter mode: Linear"
+msgstr "Aktivní režim filtru: Lineární"
+
+#: backends/graphics/openglsdl/openglsdl-graphics.cpp:560
+msgid "Active filter mode: Nearest"
+msgstr "Aktivní režim filtru: Nejbližší"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:38
+#: backends/platform/wince/CEActionsSmartphone.cpp:39
+msgid "Up"
+msgstr "Nahoru"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:39
+#: backends/platform/wince/CEActionsSmartphone.cpp:40
+msgid "Down"
+msgstr "Dolů"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:40
+#: backends/platform/wince/CEActionsSmartphone.cpp:41
+msgid "Left"
+msgstr "Doleva"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:41
+#: backends/platform/wince/CEActionsSmartphone.cpp:42
+msgid "Right"
+msgstr "Doprava"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:42
+#: backends/platform/wince/CEActionsPocket.cpp:60
+#: backends/platform/wince/CEActionsSmartphone.cpp:43
+msgid "Left Click"
+msgstr "Levé Kliknutí"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:43
+#: backends/platform/wince/CEActionsSmartphone.cpp:44
+msgid "Right Click"
+msgstr "Pravé kliknutí"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:46
+#: backends/platform/wince/CEActionsSmartphone.cpp:47
+msgid "Zone"
+msgstr "Oblast"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:47
+#: backends/platform/wince/CEActionsPocket.cpp:54
+#: backends/platform/wince/CEActionsSmartphone.cpp:48
+msgid "Multi Function"
+msgstr "Multi Funkce"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:48
+msgid "Swap character"
+msgstr "Zaměnit znaky"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:49
+msgid "Skip text"
+msgstr "Přeskočit text"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:51
+msgid "Fast mode"
+msgstr "Rychlý režim"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:53
+msgid "Debugger"
+msgstr "Ladící program"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:54
+msgid "Global menu"
+msgstr "Globální menu"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:55
+msgid "Virtual keyboard"
+msgstr "Virtuální klávesnice"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:56
+msgid "Key mapper"
+msgstr "Mapovač kláves"
+
+#: backends/events/symbiansdl/symbiansdl-events.cpp:184
+msgid "Do you want to quit ?"
+msgstr "Chcete ukončit ?"
+
+#: backends/platform/wii/options.cpp:51
+msgid "Video"
+msgstr "Video"
+
+#: backends/platform/wii/options.cpp:54
+msgid "Current video mode:"
+msgstr "Současný režim obrazu:"
+
+#: backends/platform/wii/options.cpp:56
+msgid "Double-strike"
+msgstr "Dvojité přeškrtnutí"
+
+#: backends/platform/wii/options.cpp:60
+msgid "Horizontal underscan:"
+msgstr "Horizontální zmenšení"
+
+#: backends/platform/wii/options.cpp:66
+msgid "Vertical underscan:"
+msgstr "Vertikální zmenšení"
+
+#: backends/platform/wii/options.cpp:71
+msgid "Input"
+msgstr "Vstup"
+
+#: backends/platform/wii/options.cpp:74
+msgid "GC Pad sensitivity:"
+msgstr "Citlivost GC Padu"
+
+#: backends/platform/wii/options.cpp:80
+msgid "GC Pad acceleration:"
+msgstr "Zrychlení GC Padu"
+
+#: backends/platform/wii/options.cpp:86
+msgid "DVD"
+msgstr "DVD"
+
+#: backends/platform/wii/options.cpp:89 backends/platform/wii/options.cpp:101
+msgid "Status:"
+msgstr "Stav:"
+
+#: backends/platform/wii/options.cpp:90 backends/platform/wii/options.cpp:102
+msgid "Unknown"
+msgstr "Neznámé"
+
+#: backends/platform/wii/options.cpp:93
+msgid "Mount DVD"
+msgstr "Připojit DVD"
+
+#: backends/platform/wii/options.cpp:94
+msgid "Unmount DVD"
+msgstr "Odpojit DVD"
+
+#: backends/platform/wii/options.cpp:98
+msgid "SMB"
+msgstr "SMB"
+
+#: backends/platform/wii/options.cpp:106
+msgid "Server:"
+msgstr "Server:"
+
+#: backends/platform/wii/options.cpp:110
+msgid "Share:"
+msgstr "Sdílení:"
+
+#: backends/platform/wii/options.cpp:114
+msgid "Username:"
+msgstr "Uživatelské jméno"
+
+#: backends/platform/wii/options.cpp:118
+msgid "Password:"
+msgstr "Heslo"
+
+#: backends/platform/wii/options.cpp:121
+msgid "Init network"
+msgstr "Spustit síť"
+
+#: backends/platform/wii/options.cpp:123
+msgid "Mount SMB"
+msgstr "Připojit SMB"
+
+#: backends/platform/wii/options.cpp:124
+msgid "Unmount SMB"
+msgstr "Odpojit SMB"
+
+#: backends/platform/wii/options.cpp:143
+msgid "DVD Mounted successfully"
+msgstr "DVD úspěšně připojeno"
+
+#: backends/platform/wii/options.cpp:146
+msgid "Error while mounting the DVD"
+msgstr "Chyba při připojování DVD"
+
+#: backends/platform/wii/options.cpp:148
+msgid "DVD not mounted"
+msgstr "DVD nepřipojeno"
+
+#: backends/platform/wii/options.cpp:161
+msgid "Network up, share mounted"
+msgstr "Síť je zapnuta, sdílení připojeno"
+
+#: backends/platform/wii/options.cpp:163
+msgid "Network up"
+msgstr "Síť je zapnuta"
+
+#: backends/platform/wii/options.cpp:166
+msgid ", error while mounting the share"
+msgstr ", chyba při připojování sdílení"
+
+#: backends/platform/wii/options.cpp:168
+msgid ", share not mounted"
+msgstr ", sdílení není připojeno"
+
+#: backends/platform/wii/options.cpp:174
+msgid "Network down"
+msgstr "Síť je nedostupná"
+
+#: backends/platform/wii/options.cpp:178
+msgid "Initializing network"
+msgstr "Zavádím síť"
+
+#: backends/platform/wii/options.cpp:182
+msgid "Timeout while initializing network"
+msgstr "Při zavádění sítě vypršel limit"
+
+#: backends/platform/wii/options.cpp:186
+#, c-format
+msgid "Network not initialized (%d)"
+msgstr "Síť není zavedena (%d)"
+
+#: backends/platform/wince/CEActionsPocket.cpp:46
+msgid "Hide Toolbar"
+msgstr "Skrýt Panel nástrojů"
+
+#: backends/platform/wince/CEActionsPocket.cpp:47
+msgid "Show Keyboard"
+msgstr "Zobrazit klávesnici"
+
+#: backends/platform/wince/CEActionsPocket.cpp:48
+msgid "Sound on/off"
+msgstr "Zvuk zapnout/vypnout"
+
+#: backends/platform/wince/CEActionsPocket.cpp:49
+msgid "Right click"
+msgstr "Pravé kliknutí"
+
+#: backends/platform/wince/CEActionsPocket.cpp:50
+msgid "Show/Hide Cursor"
+msgstr "Ukázat/Skrýt Kurzor"
+
+#: backends/platform/wince/CEActionsPocket.cpp:51
+msgid "Free look"
+msgstr "Rozhlížení pomocí myši"
+
+#: backends/platform/wince/CEActionsPocket.cpp:52
+msgid "Zoom up"
+msgstr "Přiblížení nahoru"
+
+#: backends/platform/wince/CEActionsPocket.cpp:53
+msgid "Zoom down"
+msgstr "Přiblížení dolů"
+
+#: backends/platform/wince/CEActionsPocket.cpp:55
+#: backends/platform/wince/CEActionsSmartphone.cpp:49
+msgid "Bind Keys"
+msgstr "Přiřadit klávesy"
+
+#: backends/platform/wince/CEActionsPocket.cpp:56
+msgid "Cursor Up"
+msgstr "Šipka Nahoru"
+
+#: backends/platform/wince/CEActionsPocket.cpp:57
+msgid "Cursor Down"
+msgstr "Šipka Dolů"
+
+#: backends/platform/wince/CEActionsPocket.cpp:58
+msgid "Cursor Left"
+msgstr "Šipka Doleva"
+
+#: backends/platform/wince/CEActionsPocket.cpp:59
+msgid "Cursor Right"
+msgstr "Šipka Doprava"
+
+#: backends/platform/wince/CEActionsPocket.cpp:267
+#: backends/platform/wince/CEActionsSmartphone.cpp:231
+msgid "Do you want to load or save the game?"
+msgstr "Chcete hru nahrát nebo uložit?"
+
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+msgid " Are you sure you want to quit ? "
+msgstr " Jste si jisti, že chcete odejít ? "
+
+#: backends/platform/wince/CEActionsSmartphone.cpp:50
+msgid "Keyboard"
+msgstr "Klávesnice"
+
+#: backends/platform/wince/CEActionsSmartphone.cpp:51
+msgid "Rotate"
+msgstr "Otáčet"
+
+#: backends/platform/wince/CELauncherDialog.cpp:56
+msgid "Using SDL driver "
+msgstr "Používá ovladač SDL"
+
+#: backends/platform/wince/CELauncherDialog.cpp:60
+msgid "Display "
+msgstr "Displej"
+
+#: backends/platform/wince/CELauncherDialog.cpp:83
+msgid "Do you want to perform an automatic scan ?"
+msgstr "Chcete provést automatické hledání ?"
+
+#: backends/platform/wince/wince-sdl.cpp:471
+msgid "Map right click action"
+msgstr "Mapovat činnost pravé kliknutí"
+
+#: backends/platform/wince/wince-sdl.cpp:475
+msgid "You must map a key to the 'Right Click' action to play this game"
+msgstr ""
+"Musíte namapovat klávesu pro činnost 'Pravé Kliknutí', abyste tuto hru mohli "
+"hrát"
+
+#: backends/platform/wince/wince-sdl.cpp:484
+msgid "Map hide toolbar action"
+msgstr "Mapovat činnost skrýt panel nástrojů"
+
+#: backends/platform/wince/wince-sdl.cpp:488
+msgid "You must map a key to the 'Hide toolbar' action to play this game"
+msgstr ""
+"Musíte namapovat klávesu pro činnost 'Skrýt Panel nástrojů', abyste tuto hru "
+"mohli hrát"
+
+#: backends/platform/wince/wince-sdl.cpp:497
+msgid "Map Zoom Up action (optional)"
+msgstr "Namapovat činnost Přiblížit Nahoru (nepovinné)"
+
+#: backends/platform/wince/wince-sdl.cpp:500
+msgid "Map Zoom Down action (optional)"
+msgstr "Namapovat činnost Přiblížit Dolů (nepovinné)"
+
+#: backends/platform/wince/wince-sdl.cpp:508
+msgid ""
+"Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory"
+msgstr ""
+"Nezapomeňte namapovat klávesu k činnosti 'Skrýt Panel Nástrojů, abyste "
+"viděli celý inventář"
+
+#: backends/events/default/default-events.cpp:222
+msgid "Do you really want to return to the Launcher?"
+msgstr "Opravdu se chcete vrátit tuto do Spouštěče?"
+
+#: backends/events/default/default-events.cpp:222
+msgid "Launcher"
+msgstr "Spouštěč"
+
+#: backends/events/default/default-events.cpp:244
+msgid "Do you really want to quit?"
+msgstr "Opravdu chcete skončit?"
+
+#: backends/events/gph/gph-events.cpp:366
+#: backends/events/gph/gph-events.cpp:409
+#: backends/events/openpandora/op-events.cpp:141
+msgid "Touchscreen 'Tap Mode' - Left Click"
+msgstr "'Režim Ťuknutí' Dotykové Obrazovky - Levé Kliknutí"
+
+#: backends/events/gph/gph-events.cpp:368
+#: backends/events/gph/gph-events.cpp:411
+#: backends/events/openpandora/op-events.cpp:143
+msgid "Touchscreen 'Tap Mode' - Right Click"
+msgstr "'Režim Ťuknutí' Dotykové Obrazovky - Pravé Kliknutí"
+
+#: backends/events/gph/gph-events.cpp:370
+#: backends/events/gph/gph-events.cpp:413
+#: backends/events/openpandora/op-events.cpp:145
+msgid "Touchscreen 'Tap Mode' - Hover (No Click)"
+msgstr "'Režim Ťuknutí' Dotykové Obrazovky - Najetí (Bez Kliknutí)"
+
+#: backends/events/gph/gph-events.cpp:390
+msgid "Maximum Volume"
+msgstr "Maximální Hlasitost"
+
+#: backends/events/gph/gph-events.cpp:392
+msgid "Increasing Volume"
+msgstr "Zvyšuji Hlasitost"
+
+#: backends/events/gph/gph-events.cpp:398
+msgid "Minimal Volume"
+msgstr "Minimální Hlasitost"
+
+#: backends/events/gph/gph-events.cpp:400
+msgid "Decreasing Volume"
+msgstr "Snižuji Hlasitost"
+
+#: backends/updates/macosx/macosx-updates.mm:65
+msgid "Check for Updates..."
+msgstr "Zkontrolovat Aktualizace..."
+
+#~ msgctxt "lowres"
+#~ msgid "Add Game..."
+#~ msgstr "Přidat Hru..."
+
+#~ msgid "Add Game..."
+#~ msgstr "Přidat Hru..."
+
+#~ msgid ""
+#~ "Your game version has been detected using filename matching as a variant "
+#~ "of %s."
+#~ msgstr ""
+#~ "Bylo zjištěno, že Vaše verze hry používá jméno souboru shodující se s "
+#~ "variantou %s."
+
+#~ msgid "If this is an original and unmodified version, please report any"
+#~ msgstr "Pokud je toto původní a nezměněná verze, ohlaste prosím jakékoli"
+
+#~ msgid "information previously printed by ScummVM to the team."
+#~ msgstr "předešle vypsané informace od ScummVM zpátky týmu."
+
+#~ msgid "Discovered %d new games."
+#~ msgstr "Objeveno %d nových her."
+
+#~ msgid "Command line argument not processed"
+#~ msgstr "Argument příkazové řádky nebyl zpracován"
+
+#~ msgid "FM Towns Emulator"
+#~ msgstr "FM Towns Emulátor"
+
+#~ msgid "Invalid Path"
+#~ msgstr "Neplatná Cesta"
diff --git a/po/fr_FR.po b/po/fr_FR.po
index 3824352106..89f07929a1 100644
--- a/po/fr_FR.po
+++ b/po/fr_FR.po
@@ -2,2776 +2,2778 @@
# Copyright (C) 2010-2011 ScummVM Team
# This file is distributed under the same license as the ScummVM package.
# Thierry Crozat <criezy@scummvm.org>, 2010.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: ScummVM 1.3.0svn\n"
-"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2011-08-20 15:12+0100\n"
-"PO-Revision-Date: 2011-05-02 19:50+0100\n"
-"Last-Translator: Thierry Crozat <criezy@scummvm.org>\n"
-"Language-Team: French <scummvm-devel@lists.sf.net>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=iso-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: Francais\n"
-"Plural-Forms: nplurals=2; plural=n>1;\n"
-
-#: gui/about.cpp:91
-#, c-format
-msgid "(built on %s)"
-msgstr "(compilé sur %s)"
-
-#: gui/about.cpp:98
-msgid "Features compiled in:"
-msgstr "Options incluses:"
-
-#: gui/about.cpp:107
-msgid "Available engines:"
-msgstr "Moteurs disponibles:"
-
-#: gui/browser.cpp:66
-msgid "Go up"
-msgstr "Remonter"
-
-#: gui/browser.cpp:66 gui/browser.cpp:68
-msgid "Go to previous directory level"
-msgstr "Remonte d'un niveau dans la hiérarchie de répertoire"
-
-#: gui/browser.cpp:68
-msgctxt "lowres"
-msgid "Go up"
-msgstr "Remonter"
-
-#: gui/browser.cpp:69 gui/chooser.cpp:45 gui/KeysDialog.cpp:43
-#: gui/launcher.cpp:312 gui/massadd.cpp:94 gui/options.cpp:1178
-#: gui/saveload.cpp:63 gui/saveload.cpp:155 gui/themebrowser.cpp:54
-#: engines/engine.cpp:436 engines/scumm/dialogs.cpp:190
-#: engines/sword1/control.cpp:865 engines/parallaction/saveload.cpp:281
-#: backends/platform/wii/options.cpp:48
-#: backends/events/default/default-events.cpp:222
-#: backends/events/default/default-events.cpp:244
-msgid "Cancel"
-msgstr "Annuler"
-
-#: gui/browser.cpp:70 gui/chooser.cpp:46 gui/themebrowser.cpp:55
-msgid "Choose"
-msgstr "Choisir"
-
-#: gui/gui-manager.cpp:116 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 "Fermer"
-
-#: gui/gui-manager.cpp:119
-msgid "Mouse click"
-msgstr "Clic de souris"
-
-#: gui/gui-manager.cpp:122 base/main.cpp:286
-msgid "Display keyboard"
-msgstr "Afficher le clavier"
-
-#: gui/gui-manager.cpp:125 base/main.cpp:289
-msgid "Remap keys"
-msgstr "Changer l'affectation des touches"
-
-#: gui/KeysDialog.h:36 gui/KeysDialog.cpp:145
-msgid "Choose an action to map"
-msgstr "Sélectionnez une action ŕ affecter"
-
-#: gui/KeysDialog.cpp:41
-msgid "Map"
-msgstr "Affecter"
-
-#: gui/KeysDialog.cpp:42 gui/launcher.cpp:313 gui/launcher.cpp:936
-#: gui/launcher.cpp:940 gui/massadd.cpp:91 gui/options.cpp:1179
-#: engines/engine.cpp:359 engines/engine.cpp:370 engines/scumm/dialogs.cpp:192
-#: engines/scumm/scumm.cpp:1770 engines/agos/animation.cpp:545
-#: engines/groovie/script.cpp:420 engines/sky/compact.cpp:131
-#: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:344
-#: engines/sword1/animation.cpp:354 engines/sword1/animation.cpp:360
-#: engines/sword1/control.cpp:865 engines/sword1/logic.cpp:1633
-#: engines/sword2/animation.cpp:379 engines/sword2/animation.cpp:389
-#: engines/sword2/animation.cpp:398 engines/parallaction/saveload.cpp:281
-#: backends/platform/wii/options.cpp:47
-#: backends/platform/wince/CELauncherDialog.cpp:54
-msgid "OK"
-msgstr "OK"
-
-#: gui/KeysDialog.cpp:49
-msgid "Select an action and click 'Map'"
-msgstr "Selectionez une action et cliquez 'Affecter'"
-
-#: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141
-#, c-format
-msgid "Associated key : %s"
-msgstr "Touche associée: %s"
-
-#: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143
-#, c-format
-msgid "Associated key : none"
-msgstr "Touche associée: aucune"
-
-#: gui/KeysDialog.cpp:90
-msgid "Please select an action"
-msgstr "Selectionnez une action"
-
-#: gui/KeysDialog.cpp:106
-msgid "Press the key to associate"
-msgstr "Appuyez sur la touche ŕ associer"
-
-#: gui/launcher.cpp:165
-msgid "Game"
-msgstr "Jeu"
-
-#: gui/launcher.cpp:169
-msgid "ID:"
-msgstr "ID:"
-
-#: gui/launcher.cpp:169 gui/launcher.cpp:171 gui/launcher.cpp:172
-msgid ""
-"Short game identifier used for referring to savegames and running the game "
-"from the command line"
-msgstr ""
-"ID compact du jeu utilisée pour identifier les sauvegardes et démarrer le "
-"jeu depuis la ligne de commande"
-
-#: gui/launcher.cpp:171
-msgctxt "lowres"
-msgid "ID:"
-msgstr "ID:"
-
-#: gui/launcher.cpp:176
-msgid "Name:"
-msgstr "Nom:"
-
-#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179
-msgid "Full title of the game"
-msgstr "Nom complet du jeu"
-
-#: gui/launcher.cpp:178
-msgctxt "lowres"
-msgid "Name:"
-msgstr "Nom:"
-
-#: gui/launcher.cpp:182
-msgid "Language:"
-msgstr "Langue:"
-
-#: gui/launcher.cpp:182 gui/launcher.cpp:183
-msgid ""
-"Language of the game. This will not turn your Spanish game version into "
-"English"
-msgstr ""
-"Langue du jeu. Cela ne traduira pas en anglais par magie votre version "
-"espagnole du jeu."
-
-#: gui/launcher.cpp:184 gui/launcher.cpp:198 gui/options.cpp:74
-#: gui/options.cpp:708 gui/options.cpp:718 gui/options.cpp:1149
-#: audio/null.cpp:40
-msgid "<default>"
-msgstr "<defaut>"
-
-#: gui/launcher.cpp:194
-msgid "Platform:"
-msgstr "Plateforme:"
-
-#: gui/launcher.cpp:194 gui/launcher.cpp:196 gui/launcher.cpp:197
-msgid "Platform the game was originally designed for"
-msgstr "Plateforme pour laquelle votre jeu a été conçu"
-
-#: gui/launcher.cpp:196
-msgctxt "lowres"
-msgid "Platform:"
-msgstr "Systčme:"
-
-#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035
-msgid "Graphics"
-msgstr "Graphique"
-
-#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035
-msgid "GFX"
-msgstr "GFX"
-
-#: gui/launcher.cpp:211
-msgid "Override global graphic settings"
-msgstr "Utiliser des réglages graphiques spécifiques ŕ ce jeux"
-
-#: gui/launcher.cpp:213
-msgctxt "lowres"
-msgid "Override global graphic settings"
-msgstr "Réglages spécifiques ŕ ce jeux"
-
-#: gui/launcher.cpp:220 gui/options.cpp:1041
-msgid "Audio"
-msgstr "Audio"
-
-#: gui/launcher.cpp:223
-msgid "Override global audio settings"
-msgstr "Utiliser des réglages audio spécifiques ŕ ce jeux"
-
-#: gui/launcher.cpp:225
-msgctxt "lowres"
-msgid "Override global audio settings"
-msgstr "Réglages spécifiques ŕ ce jeux"
-
-#: gui/launcher.cpp:234 gui/options.cpp:1046
-msgid "Volume"
-msgstr "Volume"
-
-#: gui/launcher.cpp:236 gui/options.cpp:1048
-msgctxt "lowres"
-msgid "Volume"
-msgstr "Volume"
-
-#: gui/launcher.cpp:239
-msgid "Override global volume settings"
-msgstr "Utiliser des réglages de volume sonore spécifiques ŕ ce jeux"
-
-#: gui/launcher.cpp:241
-msgctxt "lowres"
-msgid "Override global volume settings"
-msgstr "Réglages spécifiques ŕ ce jeux"
-
-#: gui/launcher.cpp:248 gui/options.cpp:1056
-msgid "MIDI"
-msgstr "MIDI"
-
-#: gui/launcher.cpp:251
-msgid "Override global MIDI settings"
-msgstr "Utiliser des réglages MIDI spécifiques ŕ ce jeux"
-
-#: gui/launcher.cpp:253
-msgctxt "lowres"
-msgid "Override global MIDI settings"
-msgstr "Réglages spécifiques ŕ ce jeux"
-
-#: gui/launcher.cpp:263 gui/options.cpp:1062
-msgid "MT-32"
-msgstr "MT-32"
-
-#: gui/launcher.cpp:266
-msgid "Override global MT-32 settings"
-msgstr "Utiliser des réglages MT-32 spécifiques ŕ ce jeux"
-
-#: gui/launcher.cpp:268
-msgctxt "lowres"
-msgid "Override global MT-32 settings"
-msgstr "Réglages spécifiques ŕ ce jeux"
-
-#: gui/launcher.cpp:279 gui/options.cpp:1069
-msgid "Paths"
-msgstr "Chemins"
-
-#: gui/launcher.cpp:281 gui/options.cpp:1071
-msgctxt "lowres"
-msgid "Paths"
-msgstr "Chemins"
-
-#: gui/launcher.cpp:288
-msgid "Game Path:"
-msgstr "Chemin du Jeu:"
-
-#: gui/launcher.cpp:290
-msgctxt "lowres"
-msgid "Game Path:"
-msgstr "Chemin du Jeu:"
-
-#: gui/launcher.cpp:295 gui/options.cpp:1091
-msgid "Extra Path:"
-msgstr "Extra:"
-
-#: gui/launcher.cpp:295 gui/launcher.cpp:297 gui/launcher.cpp:298
-msgid "Specifies path to additional data used the game"
-msgstr "Définie un chemin vers des données suplémentaires utilisées par le jeu"
-
-#: gui/launcher.cpp:297 gui/options.cpp:1093
-msgctxt "lowres"
-msgid "Extra Path:"
-msgstr "Extra:"
-
-#: gui/launcher.cpp:302 gui/options.cpp:1079
-msgid "Save Path:"
-msgstr "Sauvegardes:"
-
-#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305
-#: gui/options.cpp:1079 gui/options.cpp:1081 gui/options.cpp:1082
-msgid "Specifies where your savegames are put"
-msgstr "Définie l'emplacement oů les fichiers de sauvegarde sont créés"
-
-#: gui/launcher.cpp:304 gui/options.cpp:1081
-msgctxt "lowres"
-msgid "Save Path:"
-msgstr "Sauvegardes:"
-
-#: gui/launcher.cpp:321 gui/launcher.cpp:404 gui/launcher.cpp:453
-#: gui/options.cpp:1088 gui/options.cpp:1094 gui/options.cpp:1101
-#: gui/options.cpp:1202 gui/options.cpp:1208 gui/options.cpp:1214
-#: gui/options.cpp:1222 gui/options.cpp:1246 gui/options.cpp:1250
-#: gui/options.cpp:1256 gui/options.cpp:1263 gui/options.cpp:1362
-msgctxt "path"
-msgid "None"
-msgstr "Aucun"
-
-#: gui/launcher.cpp:326 gui/launcher.cpp:408
-#: backends/platform/wii/options.cpp:56
-msgid "Default"
-msgstr "Défaut"
-
-#: gui/launcher.cpp:446 gui/options.cpp:1356
-msgid "Select SoundFont"
-msgstr "Choisir une banque de sons"
-
-#: gui/launcher.cpp:465 gui/launcher.cpp:612
-msgid "Select directory with game data"
-msgstr "Sélectionner le répertoire contenant les données du jeu"
-
-#: gui/launcher.cpp:483
-msgid "Select additional game directory"
-msgstr "Sélectionner un répertoire supplémentaire"
-
-#: gui/launcher.cpp:495
-msgid "Select directory for saved games"
-msgstr "Sélectionner le répertoire pour les sauvegardes"
-
-#: gui/launcher.cpp:514
-msgid "This game ID is already taken. Please choose another one."
-msgstr "Cet ID est déjŕ utilisé par un autre jeu. Choisissez en un autre svp."
-
-#: gui/launcher.cpp:555 engines/dialogs.cpp:110
-msgid "~Q~uit"
-msgstr "~Q~uitter"
-
-#: gui/launcher.cpp:555 backends/platform/sdl/macosx/appmenu_osx.mm:80
-msgid "Quit ScummVM"
-msgstr "Quitter ScummVM"
-
-#: gui/launcher.cpp:556
-msgid "A~b~out..."
-msgstr "Ŕ ~P~ropos..."
-
-#: gui/launcher.cpp:556 backends/platform/sdl/macosx/appmenu_osx.mm:61
-msgid "About ScummVM"
-msgstr "Ŕ propos de ScummVM"
-
-#: gui/launcher.cpp:557
-msgid "~O~ptions..."
-msgstr "~O~ptions..."
-
-#: gui/launcher.cpp:557
-msgid "Change global ScummVM options"
-msgstr "Change les options globales de ScummVM"
-
-#: gui/launcher.cpp:559
-msgid "~S~tart"
-msgstr "~D~émarrer"
-
-#: gui/launcher.cpp:559
-msgid "Start selected game"
-msgstr "Démarre le jeu sélectionné"
-
-#: gui/launcher.cpp:562
-msgid "~L~oad..."
-msgstr "~C~harger"
-
-#: gui/launcher.cpp:562
-msgid "Load savegame for selected game"
-msgstr "Charge une sauvegarde pour le jeu sélectionné"
-
-#: gui/launcher.cpp:567 gui/launcher.cpp:1055
-msgid "~A~dd Game..."
-msgstr "~A~jouter..."
-
-#: gui/launcher.cpp:567 gui/launcher.cpp:574
-msgid "Hold Shift for Mass Add"
-msgstr ""
-"Ajoute un jeu ŕ la Liste. Maintenez Shift enfoncée pour un Ajout Massif"
-
-#: gui/launcher.cpp:569
-msgid "~E~dit Game..."
-msgstr "~E~diter..."
-
-#: gui/launcher.cpp:569 gui/launcher.cpp:576
-msgid "Change game options"
-msgstr "Change les options du jeu"
-
-#: gui/launcher.cpp:571
-msgid "~R~emove Game"
-msgstr "~S~upprimer"
-
-#: gui/launcher.cpp:571 gui/launcher.cpp:578
-msgid "Remove game from the list. The game data files stay intact"
-msgstr "Supprime le jeu de la liste. Les fichiers sont conservés"
-
-#: gui/launcher.cpp:574 gui/launcher.cpp:1055
-msgctxt "lowres"
-msgid "~A~dd Game..."
-msgstr "~A~jouter..."
-
-#: gui/launcher.cpp:576
-msgctxt "lowres"
-msgid "~E~dit Game..."
-msgstr "~E~diter..."
-
-#: gui/launcher.cpp:578
-msgctxt "lowres"
-msgid "~R~emove Game"
-msgstr "~S~upprimer"
-
-#: gui/launcher.cpp:586
-msgid "Search in game list"
-msgstr "Recherche dans la liste de jeux"
-
-#: gui/launcher.cpp:590 gui/launcher.cpp:1102
-msgid "Search:"
-msgstr "Filtre:"
-
-#: gui/launcher.cpp:593 gui/options.cpp:826
-msgid "Clear value"
-msgstr "Effacer la valeur"
-
-#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255
-#: engines/mohawk/riven.cpp:716 engines/cruise/menu.cpp:216
-msgid "Load game:"
-msgstr "Charger le jeu:"
-
-#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/scumm/dialogs.cpp:188
-#: engines/mohawk/myst.cpp:255 engines/mohawk/riven.cpp:716
-#: engines/cruise/menu.cpp:216 backends/platform/wince/CEActionsPocket.cpp:267
-#: backends/platform/wince/CEActionsSmartphone.cpp:231
-msgid "Load"
-msgstr "Charger"
-
-#: gui/launcher.cpp:723
-msgid ""
-"Do you really want to run the mass game detector? This could potentially add "
-"a huge number of games."
-msgstr ""
-"Voulez-vous vraiment lancer la détection automatique des jeux? Cela peut "
-"potentiellement ajouter un grand nombre de jeux."
-
-#: gui/launcher.cpp:724 gui/launcher.cpp:872
-#: backends/events/symbiansdl/symbiansdl-events.cpp:184
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-msgid "Yes"
-msgstr "Oui"
-
-#: gui/launcher.cpp:724 gui/launcher.cpp:872
-#: backends/events/symbiansdl/symbiansdl-events.cpp:184
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-msgid "No"
-msgstr "Non"
-
-#: gui/launcher.cpp:772
-msgid "ScummVM couldn't open the specified directory!"
-msgstr "ScummVM n'a pas pu ouvrir le répertoire sélectionné."
-
-#: gui/launcher.cpp:784
-msgid "ScummVM could not find any game in the specified directory!"
-msgstr "ScummVM n'a pas trouvé de jeux dans le répertoire sélectionné."
-
-#: gui/launcher.cpp:798
-msgid "Pick the game:"
-msgstr "Choisissez le jeu:"
-
-#: gui/launcher.cpp:872
-msgid "Do you really want to remove this game configuration?"
-msgstr "Voulez-vous vraiment supprimer ce jeu?"
-
-#: gui/launcher.cpp:936
-msgid "This game does not support loading games from the launcher."
-msgstr ""
-"Le chargement de sauvegarde depuis le lanceur n'est pas supporté pour ce jeu."
-
-#: gui/launcher.cpp:940
-msgid "ScummVM could not find any engine capable of running the selected game!"
-msgstr "ScummVM n'a pas pu trouvé de moteur pour lancer le jeu sélectionné."
-
-#: gui/launcher.cpp:1054
-msgctxt "lowres"
-msgid "Mass Add..."
-msgstr "Ajout Massif..."
-
-#: gui/launcher.cpp:1054
-msgid "Mass Add..."
-msgstr "Ajout Massif..."
-
-#: gui/massadd.cpp:78 gui/massadd.cpp:81
-msgid "... progress ..."
-msgstr "... en cours ..."
-
-#: gui/massadd.cpp:258
-msgid "Scan complete!"
-msgstr "Examen terminé!"
-
-#: gui/massadd.cpp:261
-#, c-format
-msgid "Discovered %d new games, ignored %d previously added games."
-msgstr ""
-
-#: gui/massadd.cpp:265
-#, c-format
-msgid "Scanned %d directories ..."
-msgstr "%d répertoires examinés ..."
-
-#: gui/massadd.cpp:268
-#, fuzzy, c-format
-msgid "Discovered %d new games, ignored %d previously added games ..."
-msgstr "%d nouveaux jeux trouvés ..."
-
-#: gui/options.cpp:72
-msgid "Never"
-msgstr "Jamais"
-
-#: gui/options.cpp:72
-msgid "every 5 mins"
-msgstr "Toutes les 5 mins"
-
-#: gui/options.cpp:72
-msgid "every 10 mins"
-msgstr "Toutes les 10 mins"
-
-#: gui/options.cpp:72
-msgid "every 15 mins"
-msgstr "Toutes les 15 mins"
-
-#: gui/options.cpp:72
-msgid "every 30 mins"
-msgstr "Toutes les 30 mins"
-
-#: gui/options.cpp:74
-msgid "8 kHz"
-msgstr "8 kHz"
-
-#: gui/options.cpp:74
-msgid "11kHz"
-msgstr "11 kHz"
-
-#: gui/options.cpp:74
-msgid "22 kHz"
-msgstr "22 kHz"
-
-#: gui/options.cpp:74
-msgid "44 kHz"
-msgstr "44 kHz"
-
-#: gui/options.cpp:74
-msgid "48 kHz"
-msgstr "48 kHz"
-
-#: gui/options.cpp:236 gui/options.cpp:464 gui/options.cpp:559
-#: gui/options.cpp:625 gui/options.cpp:825
-msgctxt "soundfont"
-msgid "None"
-msgstr "Aucune"
-
-#: gui/options.cpp:372
-msgid "Failed to apply some of the graphic options changes:"
-msgstr ""
-
-#: gui/options.cpp:384
-msgid "the video mode could not be changed."
-msgstr ""
-
-#: gui/options.cpp:390
-msgid "the fullscreen setting could not be changed"
-msgstr ""
-
-#: gui/options.cpp:396
-msgid "the aspect ratio setting could not be changed"
-msgstr ""
-
-#: gui/options.cpp:705
-msgid "Graphics mode:"
-msgstr "Mode graphique:"
-
-#: gui/options.cpp:716
-msgid "Render mode:"
-msgstr "Mode de rendu:"
-
-#: gui/options.cpp:716 gui/options.cpp:717
-msgid "Special dithering modes supported by some games"
-msgstr "Mode spécial de tramage supporté par certains jeux"
-
-#: gui/options.cpp:726
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2247
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:472
-msgid "Fullscreen mode"
-msgstr "Plein écran"
-
-#: gui/options.cpp:729
-msgid "Aspect ratio correction"
-msgstr "Correction du rapport d'aspect"
-
-#: gui/options.cpp:729
-msgid "Correct aspect ratio for 320x200 games"
-msgstr "Corrige le rapport d'aspect pour les jeu 320x200"
-
-#: gui/options.cpp:730
-msgid "EGA undithering"
-msgstr "Détramage EGA"
-
-#: gui/options.cpp:730
-msgid "Enable undithering in EGA games that support it"
-msgstr "Active le détramage dans les jeux EGA qui le supporte"
-
-#: gui/options.cpp:738
-msgid "Preferred Device:"
-msgstr "Sortie Préféré:"
-
-#: gui/options.cpp:738
-msgid "Music Device:"
-msgstr "Sortie Audio:"
-
-#: gui/options.cpp:738 gui/options.cpp:740
-msgid "Specifies preferred sound device or sound card emulator"
-msgstr ""
-"Spécifie le périphérique de sortie audio ou l'émulateur de carte audio "
-"préféré"
-
-#: gui/options.cpp:738 gui/options.cpp:740 gui/options.cpp:741
-msgid "Specifies output sound device or sound card emulator"
-msgstr "Spécifie le périphérique de sortie audio ou l'émulateur de carte audio"
-
-#: gui/options.cpp:740
-msgctxt "lowres"
-msgid "Preferred Dev.:"
-msgstr "Sortie Préféré:"
-
-#: gui/options.cpp:740
-msgctxt "lowres"
-msgid "Music Device:"
-msgstr "Sortie Audio:"
-
-#: gui/options.cpp:766
-msgid "AdLib emulator:"
-msgstr "Émulateur AdLib:"
-
-#: gui/options.cpp:766 gui/options.cpp:767
-msgid "AdLib is used for music in many games"
-msgstr "AdLib est utilisé pour la musique dans de nombreux jeux"
-
-#: gui/options.cpp:777
-msgid "Output rate:"
-msgstr "Fréquence:"
-
-#: gui/options.cpp:777 gui/options.cpp:778
-msgid ""
-"Higher value specifies better sound quality but may be not supported by your "
-"soundcard"
-msgstr ""
-"Une valeur plus élevée donne une meilleure qualité audio mais peut ne pas "
-"ętre supporté par votre carte son"
-
-#: gui/options.cpp:788
-msgid "GM Device:"
-msgstr "Sortie GM:"
-
-#: gui/options.cpp:788
-msgid "Specifies default sound device for General MIDI output"
-msgstr "Spécifie le périphérique audio par défaut pour la sortie General MIDI"
-
-#: gui/options.cpp:799
-msgid "Don't use General MIDI music"
-msgstr "Ne pas utiliser la musique General MIDI"
-
-#: gui/options.cpp:810 gui/options.cpp:871
-msgid "Use first available device"
-msgstr "Utiliser le premier périphérique disponible"
-
-#: gui/options.cpp:822
-msgid "SoundFont:"
-msgstr "Banque de sons:"
-
-#: gui/options.cpp:822 gui/options.cpp:824 gui/options.cpp:825
-msgid "SoundFont is supported by some audio cards, Fluidsynth and Timidity"
-msgstr ""
-"La banque de sons (SoundFont) est utilisée par certaines cartes audio, "
-"Fluidsynth et Timidity"
-
-#: gui/options.cpp:824
-msgctxt "lowres"
-msgid "SoundFont:"
-msgstr "SoundFont:"
-
-#: gui/options.cpp:829
-msgid "Mixed AdLib/MIDI mode"
-msgstr "Mode mixe AdLib/MIDI"
-
-#: gui/options.cpp:829
-msgid "Use both MIDI and AdLib sound generation"
-msgstr "Utiliser ŕ la fois MIDI et AdLib"
-
-#: gui/options.cpp:832
-msgid "MIDI gain:"
-msgstr "Gain MIDI:"
-
-#: gui/options.cpp:842
-msgid "MT-32 Device:"
-msgstr "Sortie MT-32:"
-
-#: gui/options.cpp:842
-msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
-msgstr ""
-"Spécifie le périphérique audio par défaut pour la sortie Roland MT-32/LAPC1/"
-"CM32l/CM64"
-
-#: gui/options.cpp:847
-msgid "True Roland MT-32 (disable GM emulation)"
-msgstr "Roland MT-32 exacte (désactive l'émulation GM)"
-
-#: gui/options.cpp:847 gui/options.cpp:849
-msgid ""
-"Check if you want to use your real hardware Roland-compatible sound device "
-"connected to your computer"
-msgstr ""
-"Vérifie si vous voulez utiliser un périphérique audio compatible Roland "
-"connecté ŕ l'ordinateur"
-
-#: gui/options.cpp:849
-msgctxt "lowres"
-msgid "True Roland MT-32 (no GM emulation)"
-msgstr "Roland MT-32 exacte (pas d'ému GM)"
-
-#: gui/options.cpp:852
-msgid "Enable Roland GS Mode"
-msgstr "Activer le mode Roland GS"
-
-#: gui/options.cpp:852
-msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack"
-msgstr "Désactiver la conversion des pistes MT-32 en General MIDI"
-
-#: gui/options.cpp:861
-msgid "Don't use Roland MT-32 music"
-msgstr "Ne pas utiliser la musique Roland MT-32"
-
-#: gui/options.cpp:888
-msgid "Text and Speech:"
-msgstr "Dialogue:"
-
-#: gui/options.cpp:892 gui/options.cpp:902
-msgid "Speech"
-msgstr "Voix"
-
-#: gui/options.cpp:893 gui/options.cpp:903
-msgid "Subtitles"
-msgstr "Sous-titres"
-
-#: gui/options.cpp:894
-msgid "Both"
-msgstr "Les deux"
-
-#: gui/options.cpp:896
-msgid "Subtitle speed:"
-msgstr "Vitesse des ST:"
-
-#: gui/options.cpp:898
-msgctxt "lowres"
-msgid "Text and Speech:"
-msgstr "Dialogue:"
-
-#: gui/options.cpp:902
-msgid "Spch"
-msgstr "Voix"
-
-#: gui/options.cpp:903
-msgid "Subs"
-msgstr "Subs"
-
-#: gui/options.cpp:904
-msgctxt "lowres"
-msgid "Both"
-msgstr "V&S"
-
-#: gui/options.cpp:904
-msgid "Show subtitles and play speech"
-msgstr "Affiche les sous-titres et joue les dialogues audio"
-
-#: gui/options.cpp:906
-msgctxt "lowres"
-msgid "Subtitle speed:"
-msgstr "Vitesse des ST:"
-
-#: gui/options.cpp:922
-msgid "Music volume:"
-msgstr "Volume Musique:"
-
-#: gui/options.cpp:924
-msgctxt "lowres"
-msgid "Music volume:"
-msgstr "Musique:"
-
-#: gui/options.cpp:931
-msgid "Mute All"
-msgstr "Silence"
-
-#: gui/options.cpp:934
-msgid "SFX volume:"
-msgstr "Volume Bruitage:"
-
-#: gui/options.cpp:934 gui/options.cpp:936 gui/options.cpp:937
-msgid "Special sound effects volume"
-msgstr "Volume des effets spéciaux sonores"
-
-#: gui/options.cpp:936
-msgctxt "lowres"
-msgid "SFX volume:"
-msgstr "Bruitage:"
-
-#: gui/options.cpp:944
-msgid "Speech volume:"
-msgstr "Volume Dialogues:"
-
-#: gui/options.cpp:946
-msgctxt "lowres"
-msgid "Speech volume:"
-msgstr "Dialogues:"
-
-#: gui/options.cpp:1085
-msgid "Theme Path:"
-msgstr "Thčmes:"
-
-#: gui/options.cpp:1087
-msgctxt "lowres"
-msgid "Theme Path:"
-msgstr "Thčmes:"
-
-#: gui/options.cpp:1091 gui/options.cpp:1093 gui/options.cpp:1094
-msgid "Specifies path to additional data used by all games or ScummVM"
-msgstr ""
-"Spécifie un chemin vers des données supplémentaires utilisées par tous les "
-"jeux ou ScummVM"
-
-#: gui/options.cpp:1098
-msgid "Plugins Path:"
-msgstr "Plugins:"
-
-#: gui/options.cpp:1100
-msgctxt "lowres"
-msgid "Plugins Path:"
-msgstr "Plugins:"
-
-#: gui/options.cpp:1109
-msgid "Misc"
-msgstr "Divers"
-
-#: gui/options.cpp:1111
-msgctxt "lowres"
-msgid "Misc"
-msgstr "Divers"
-
-#: gui/options.cpp:1113
-msgid "Theme:"
-msgstr "Thčme:"
-
-#: gui/options.cpp:1117
-msgid "GUI Renderer:"
-msgstr "Interface:"
-
-#: gui/options.cpp:1129
-msgid "Autosave:"
-msgstr "Sauvegarde auto:"
-
-#: gui/options.cpp:1131
-msgctxt "lowres"
-msgid "Autosave:"
-msgstr "Sauvegarde:"
-
-#: gui/options.cpp:1139
-msgid "Keys"
-msgstr "Touches"
-
-#: gui/options.cpp:1146
-msgid "GUI Language:"
-msgstr "Langue:"
-
-#: gui/options.cpp:1146
-msgid "Language of ScummVM GUI"
-msgstr "Langue de l'interface graphique de ScummVM"
-
-#: gui/options.cpp:1295
-#, fuzzy
-msgid "You have to restart ScummVM before your changes will take effect."
-msgstr ""
-"Vous devez relancer ScummVM pour que le changement soit pris en compte."
-
-#: gui/options.cpp:1308
-msgid "Select directory for savegames"
-msgstr "Sélectionner le répertoire pour les sauvegardes"
-
-#: gui/options.cpp:1315
-msgid "The chosen directory cannot be written to. Please select another one."
-msgstr ""
-"Le répertoire sélectionné est vérouillé en écriture. Sélectionnez un autre "
-"répertoire."
-
-#: gui/options.cpp:1324
-msgid "Select directory for GUI themes"
-msgstr "Sélectionner le répertoire des thčmes d'interface"
-
-#: gui/options.cpp:1334
-msgid "Select directory for extra files"
-msgstr "Sélectionner le répertoire pour les fichiers suplémentaires"
-
-#: gui/options.cpp:1345
-msgid "Select directory for plugins"
-msgstr "Sélectionner le répertoire des plugins"
-
-#: gui/options.cpp:1389
-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 ""
-"Le thčme que vous avez sélectioné ne support pas la langue française. Si "
-"vous voulez l'utiliser vous devez d'abord changer de langue."
-
-#: gui/saveload.cpp:58 gui/saveload.cpp:239
-msgid "No date saved"
-msgstr "Date inconnue"
-
-#: gui/saveload.cpp:59 gui/saveload.cpp:240
-msgid "No time saved"
-msgstr "Heure inconnue"
-
-#: gui/saveload.cpp:60 gui/saveload.cpp:241
-msgid "No playtime saved"
-msgstr "Durée de jeu inconnue"
-
-#: gui/saveload.cpp:67 gui/saveload.cpp:155
-msgid "Delete"
-msgstr "Supprimer"
-
-#: gui/saveload.cpp:154
-msgid "Do you really want to delete this savegame?"
-msgstr "Voulez-vous vraiment supprimer cette sauvegarde?"
-
-#: gui/saveload.cpp:264
-msgid "Date: "
-msgstr "Date: "
-
-#: gui/saveload.cpp:268
-msgid "Time: "
-msgstr "Heure: "
-
-#: gui/saveload.cpp:274
-msgid "Playtime: "
-msgstr "Durée de jeu: "
-
-#: gui/saveload.cpp:287 gui/saveload.cpp:354
-msgid "Untitled savestate"
-msgstr "Sauvegarde sans nom"
-
-#: gui/themebrowser.cpp:44
-msgid "Select a Theme"
-msgstr "Sélectionnez un Thčme"
-
-#: gui/ThemeEngine.cpp:328
-msgid "Disabled GFX"
-msgstr "GFX désactivé"
-
-#: gui/ThemeEngine.cpp:328
-msgctxt "lowres"
-msgid "Disabled GFX"
-msgstr "GFX désactivé"
-
-#: gui/ThemeEngine.cpp:329
-msgid "Standard Renderer (16bpp)"
-msgstr "Rendu Standard (16bpp)"
-
-#: gui/ThemeEngine.cpp:329
-msgid "Standard (16bpp)"
-msgstr "Standard (16bpp)"
-
-#: gui/ThemeEngine.cpp:331
-msgid "Antialiased Renderer (16bpp)"
-msgstr "Rendu Anti-crénelé (16 bpp)"
-
-#: gui/ThemeEngine.cpp:331
-msgid "Antialiased (16bpp)"
-msgstr "Anti-crénelé (16 bpp)"
-
-#: base/main.cpp:206
-#, c-format
-msgid "Engine does not support debug level '%s'"
-msgstr "Le niveau de debug '%s' n'est pas supporté par ce moteur de jeu"
-
-#: base/main.cpp:274
-msgid "Menu"
-msgstr "Menu"
-
-#: base/main.cpp:277 backends/platform/symbian/src/SymbianActions.cpp:45
-#: backends/platform/wince/CEActionsPocket.cpp:45
-#: backends/platform/wince/CEActionsSmartphone.cpp:46
-msgid "Skip"
-msgstr "Passer"
-
-#: base/main.cpp:280 backends/platform/symbian/src/SymbianActions.cpp:50
-#: backends/platform/wince/CEActionsPocket.cpp:42
-msgid "Pause"
-msgstr "Mettre en pause"
-
-#: base/main.cpp:283
-msgid "Skip line"
-msgstr "Passer la phrase"
-
-#: base/main.cpp:442
-msgid "Error running game:"
-msgstr "Erreur lors de l'éxécution du jeu:"
-
-#: base/main.cpp:466
-msgid "Could not find any engine capable of running the selected game"
-msgstr "Impossible de trouver un moteur pour exécuter le jeu sélectionné"
-
-#: common/error.cpp:38
-msgid "No error"
-msgstr "Pas d'erreur"
-
-#: common/error.cpp:40
-msgid "Game data not found"
-msgstr "Fichier de donées introuvable"
-
-#: common/error.cpp:42
-msgid "Game id not supported"
-msgstr "ID de jeu non supporté"
-
-#: common/error.cpp:44
-msgid "Unsupported color mode"
-msgstr "Mode de couleurs non supporté"
-
-#: common/error.cpp:47
-msgid "Read permission denied"
-msgstr "Véroullié en lecture"
-
-#: common/error.cpp:49
-msgid "Write permission denied"
-msgstr "Verrouillé en écriture"
-
-#: common/error.cpp:52
-msgid "Path does not exist"
-msgstr "Chemin inexistant"
-
-#: common/error.cpp:54
-msgid "Path not a directory"
-msgstr "Chemin n'est pas un répertoire"
-
-#: common/error.cpp:56
-msgid "Path not a file"
-msgstr "Chemin n'est pas un fichier"
-
-#: common/error.cpp:59
-msgid "Cannot create file"
-msgstr "Impossible de créer le fichier"
-
-#: common/error.cpp:61
-msgid "Reading data failed"
-msgstr "Echec de la lecture"
-
-#: common/error.cpp:63
-msgid "Writing data failed"
-msgstr "Echec de l'écriture des données"
-
-#: common/error.cpp:66
-msgid "Could not find suitable engine plugin"
-msgstr "Aucun plugin n'a pu ętre trouvé pour ce jeu"
-
-#: common/error.cpp:68
-msgid "Engine plugin does not support save states"
-msgstr "Ce moteur de jeu ne supporte pas les sauvegardes"
-
-#: common/error.cpp:71
-msgid "User canceled"
-msgstr ""
-
-#: common/error.cpp:75
-msgid "Unknown error"
-msgstr "Erreur inconnue"
-
-#. I18N: Hercules is graphics card name
-#: common/util.cpp:275
-msgid "Hercules Green"
-msgstr "Hercules Vert"
-
-#: common/util.cpp:276
-msgid "Hercules Amber"
-msgstr "Hercules Ambre"
-
-#: common/util.cpp:283
-msgctxt "lowres"
-msgid "Hercules Green"
-msgstr "Hercules Vert"
-
-#: common/util.cpp:284
-msgctxt "lowres"
-msgid "Hercules Amber"
-msgstr "Hercules Ambre"
-
-#: engines/advancedDetector.cpp:296
-#, c-format
-msgid "The game in '%s' seems to be unknown."
-msgstr ""
-
-#: engines/advancedDetector.cpp:297
-msgid "Please, report the following data to the ScummVM team along with name"
-msgstr ""
-
-#: engines/advancedDetector.cpp:299
-msgid "of the game you tried to add and its version/language/etc.:"
-msgstr ""
-
-#: engines/dialogs.cpp:84
-msgid "~R~esume"
-msgstr "~R~eprendre"
-
-#: engines/dialogs.cpp:86
-msgid "~L~oad"
-msgstr "~C~harger"
-
-#: engines/dialogs.cpp:90
-msgid "~S~ave"
-msgstr "~S~auver"
-
-#: engines/dialogs.cpp:94
-msgid "~O~ptions"
-msgstr "~O~ptions"
-
-#: engines/dialogs.cpp:99
-msgid "~H~elp"
-msgstr "~A~ide"
-
-#: engines/dialogs.cpp:101
-msgid "~A~bout"
-msgstr "Ŕ ~P~ropos"
-
-#: engines/dialogs.cpp:104 engines/dialogs.cpp:182
-msgid "~R~eturn to Launcher"
-msgstr "Retour au ~L~anceur"
-
-#: engines/dialogs.cpp:106 engines/dialogs.cpp:184
-msgctxt "lowres"
-msgid "~R~eturn to Launcher"
-msgstr "Retour au ~L~anceur"
-
-#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214
-#: engines/sci/engine/kfile.cpp:575
-msgid "Save game:"
-msgstr "Sauvegarde:"
-
-#: engines/dialogs.cpp:116 engines/scumm/dialogs.cpp:187
-#: engines/cruise/menu.cpp:214 engines/sci/engine/kfile.cpp:575
-#: backends/platform/symbian/src/SymbianActions.cpp:44
-#: backends/platform/wince/CEActionsPocket.cpp:43
-#: backends/platform/wince/CEActionsPocket.cpp:267
-#: backends/platform/wince/CEActionsSmartphone.cpp:45
-#: backends/platform/wince/CEActionsSmartphone.cpp:231
-msgid "Save"
-msgstr "Sauver"
-
-#: engines/dialogs.cpp:146
-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 ""
-
-#: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:109
-#: engines/mohawk/dialogs.cpp:174
-msgid "~O~K"
-msgstr "~O~K"
-
-#: engines/dialogs.cpp:309 engines/mohawk/dialogs.cpp:110
-#: engines/mohawk/dialogs.cpp:175
-msgid "~C~ancel"
-msgstr "~A~nnuler"
-
-#: engines/dialogs.cpp:312
-msgid "~K~eys"
-msgstr "~T~ouches"
-
-#: engines/engine.cpp:233
-msgid "Could not initialize color format."
-msgstr ""
-
-#: engines/engine.cpp:241
-#, fuzzy
-msgid "Could not switch to video mode: '"
-msgstr "Mode vidéo actuel"
-
-#: engines/engine.cpp:250
-#, fuzzy
-msgid "Could not apply aspect ratio setting."
-msgstr "Changer correction du rapport d'aspect"
-
-#: engines/engine.cpp:255
-msgid "Could not apply fullscreen setting."
-msgstr ""
-
-#: engines/engine.cpp:355
-msgid ""
-"You appear to be playing this game directly\n"
-"from the CD. This is known to cause problems,\n"
-"and it is therefore recommended that you copy\n"
-"the data files to your hard disk instead.\n"
-"See the README file for details."
-msgstr ""
-
-#: engines/engine.cpp:366
-msgid ""
-"This game has audio tracks in its disk. These\n"
-"tracks need to be ripped from the disk using\n"
-"an appropriate CD audio extracting tool in\n"
-"order to listen to the game's music.\n"
-"See the README file for details."
-msgstr ""
-
-#: engines/engine.cpp:433
-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 ""
-
-#: engines/engine.cpp:436
-msgid "Start anyway"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:175
-#, c-format
-msgid "Insert Disk %c and Press Button to Continue."
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:176
-#, c-format
-msgid "Unable to Find %s, (%c%d) Press Button."
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:177
-#, c-format
-msgid "Error reading disk %c, (%c%d) Press Button."
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:178
-msgid "Game Paused. Press SPACE to Continue."
-msgstr ""
-
-#. 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 "Voulez-vous vraiment quitter?"
-
-#. I18N: you may specify 'Yes' symbol at the endo fo the line. See previous comment
-#: engines/scumm/dialogs.cpp:184
-#, fuzzy
-msgid "Are you sure you want to quit? (Y/N)"
-msgstr "Voulez-vous vraiment quitter?"
-
-#: engines/scumm/dialogs.cpp:189
-msgid "Play"
-msgstr ""
-
-#: 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
-#: backends/platform/wince/CEActionsSmartphone.cpp:52
-#: backends/events/default/default-events.cpp:244
-msgid "Quit"
-msgstr "Quitter"
-
-#: engines/scumm/dialogs.cpp:193
-msgid "Insert save/load game disk"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:194
-msgid "You must enter a name"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:195
-msgid "The game was NOT saved (disk full?)"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:196
-msgid "The game was NOT loaded"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:197
-#, c-format
-msgid "Saving '%s'"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:198
-#, c-format
-msgid "Loading '%s'"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:199
-msgid "Name your SAVE game"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:200
-#, fuzzy
-msgid "Select a game to LOAD"
-msgstr "Sélectionnez un Thčme"
-
-#: engines/scumm/dialogs.cpp:201
-msgid "Game title)"
-msgstr ""
-
-#. I18N: Previous page button
-#: engines/scumm/dialogs.cpp:287
-msgid "~P~revious"
-msgstr "~P~récédent"
-
-#. I18N: Next page button
-#: engines/scumm/dialogs.cpp:289
-msgid "~N~ext"
-msgstr "~S~uivant"
-
-#: engines/scumm/dialogs.cpp:290
-#: backends/platform/ds/arm9/source/dsoptions.cpp:56
-msgid "~C~lose"
-msgstr "~F~ermer"
-
-#: engines/scumm/dialogs.cpp:597
-#, fuzzy
-msgid "Speech Only"
-msgstr "Voix"
-
-#: engines/scumm/dialogs.cpp:598
-#, fuzzy
-msgid "Speech and Subtitles"
-msgstr "Sous-titres"
-
-#: engines/scumm/dialogs.cpp:599
-#, fuzzy
-msgid "Subtitles Only"
-msgstr "Sous-titres"
-
-#: engines/scumm/dialogs.cpp:607
-#, fuzzy
-msgctxt "lowres"
-msgid "Speech & Subs"
-msgstr "Voix"
-
-#: engines/scumm/help.cpp:73
-msgid "Common keyboard commands:"
-msgstr "Commandes clavier communes:"
-
-#: engines/scumm/help.cpp:74
-msgid "Save / Load dialog"
-msgstr "Dialogue de Sauvegarde/Chargement"
-
-#: engines/scumm/help.cpp:76
-msgid "Skip line of text"
-msgstr "Passer la phrase"
-
-#: engines/scumm/help.cpp:77
-msgid "Esc"
-msgstr "Esc"
-
-#: engines/scumm/help.cpp:77
-msgid "Skip cutscene"
-msgstr "Passer la séquence"
-
-#: engines/scumm/help.cpp:78
-msgid "Space"
-msgstr "Espace"
-
-#: engines/scumm/help.cpp:78
-msgid "Pause game"
-msgstr "Mettre en pause:"
-
-#: 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 "Charger sauvegarde 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
-msgid "Alt"
-msgstr "Alt"
-
-#: engines/scumm/help.cpp:80
-msgid "Save game state 1-10"
-msgstr "Écrire sauvegarde 1-10:"
-
-#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:89
-msgid "Enter"
-msgstr "Entrer"
-
-#: engines/scumm/help.cpp:86
-msgid "Toggle fullscreen"
-msgstr "Basculer en plein écran"
-
-#: engines/scumm/help.cpp:87
-msgid "Music volume up / down"
-msgstr "Augmenter / Diminuer volume musique"
-
-#: engines/scumm/help.cpp:88
-msgid "Text speed slower / faster"
-msgstr "Diminuer/Augmenter vitesse du texte"
-
-#: engines/scumm/help.cpp:89
-msgid "Simulate left mouse button"
-msgstr "Simuler bouton gauche de la souris"
-
-#: engines/scumm/help.cpp:90
-msgid "Tab"
-msgstr "Tab"
-
-#: engines/scumm/help.cpp:90
-msgid "Simulate right mouse button"
-msgstr "Simuler bouton droit de la souris"
-
-#: engines/scumm/help.cpp:93
-msgid "Special keyboard commands:"
-msgstr "Commandes clavier spéciales:"
-
-#: engines/scumm/help.cpp:94
-msgid "Show / Hide console"
-msgstr "Afficher/Cacher la console"
-
-#: engines/scumm/help.cpp:95
-msgid "Start the debugger"
-msgstr "Ouvrir le débugger"
-
-#: engines/scumm/help.cpp:96
-msgid "Show memory consumption"
-msgstr "Afficher la consomation de mémoire"
-
-#: engines/scumm/help.cpp:97
-msgid "Run in fast mode (*)"
-msgstr "Jouer en mode rapide (*)"
-
-#: engines/scumm/help.cpp:98
-msgid "Run in really fast mode (*)"
-msgstr "Jouer en mode trčs rapide (*)"
-
-#: engines/scumm/help.cpp:99
-msgid "Toggle mouse capture"
-msgstr "Capturer/Libérer la souris"
-
-#: engines/scumm/help.cpp:100
-msgid "Switch between graphics filters"
-msgstr "Changer de filtre graphique"
-
-#: engines/scumm/help.cpp:101
-msgid "Increase / Decrease scale factor"
-msgstr "Augmenter/Diminuer le facteur d'échelle"
-
-#: engines/scumm/help.cpp:102
-msgid "Toggle aspect-ratio correction"
-msgstr "Changer correction du rapport d'aspect"
-
-#: engines/scumm/help.cpp:107
-msgid "* Note that using ctrl-f and"
-msgstr "* Note que l'utilisation de crtl-f et"
-
-#: engines/scumm/help.cpp:108
-msgid " ctrl-g are not recommended"
-msgstr " crtl-g n'est pas recommandé car"
-
-#: engines/scumm/help.cpp:109
-msgid " since they may cause crashes"
-msgstr " elle peut causer des plantages ou"
-
-#: engines/scumm/help.cpp:110
-#, fuzzy
-msgid " or incorrect game behavior."
-msgstr " un comportement incorrect du jeu"
-
-#: engines/scumm/help.cpp:114
-msgid "Spinning drafts on the keyboard:"
-msgstr "Filage au clavier:"
-
-#: engines/scumm/help.cpp:116
-msgid "Main game controls:"
-msgstr "Controles principaux du jeu:"
-
-#: engines/scumm/help.cpp:121 engines/scumm/help.cpp:136
-#: engines/scumm/help.cpp:161
-msgid "Push"
-msgstr "Pousser"
-
-#: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137
-#: engines/scumm/help.cpp:162
-msgid "Pull"
-msgstr "Tirer"
-
-#: 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 "Donner"
-
-#: 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 "Ouvrir"
-
-#: engines/scumm/help.cpp:126
-msgid "Go to"
-msgstr "Aller"
-
-#: engines/scumm/help.cpp:127
-msgid "Get"
-msgstr "Prendre"
-
-#: 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 "Utiliser"
-
-#: engines/scumm/help.cpp:129 engines/scumm/help.cpp:141
-msgid "Read"
-msgstr "Lire"
-
-#: engines/scumm/help.cpp:130 engines/scumm/help.cpp:147
-msgid "New kid"
-msgstr "Changer"
-
-#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:153
-#: engines/scumm/help.cpp:171
-msgid "Turn on"
-msgstr "Allumer"
-
-#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:154
-#: engines/scumm/help.cpp:172
-msgid "Turn off"
-msgstr "Éteindre"
-
-#: engines/scumm/help.cpp:142 engines/scumm/help.cpp:167
-#: engines/scumm/help.cpp:194
-msgid "Walk to"
-msgstr "Aller"
-
-#: 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 "Prendre"
-
-#: engines/scumm/help.cpp:144 engines/scumm/help.cpp:169
-msgid "What is"
-msgstr "Qu'est-ce"
-
-#: engines/scumm/help.cpp:146
-msgid "Unlock"
-msgstr "Déverrouiller"
-
-#: engines/scumm/help.cpp:149
-msgid "Put on"
-msgstr "Mettre"
-
-#: engines/scumm/help.cpp:150
-msgid "Take off"
-msgstr "Enlever"
-
-#: engines/scumm/help.cpp:156
-msgid "Fix"
-msgstr "Réparer"
-
-#: engines/scumm/help.cpp:158
-msgid "Switch"
-msgstr "Commuter"
-
-#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:228
-msgid "Look"
-msgstr "Regarder"
-
-#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:223
-msgid "Talk"
-msgstr "Parler"
-
-#: engines/scumm/help.cpp:174
-msgid "Travel"
-msgstr "Voyager"
-
-#: engines/scumm/help.cpp:175
-msgid "To Henry / To Indy"
-msgstr "Henry / Indy"
-
-#. I18N: These are different musical notes
-#: engines/scumm/help.cpp:179
-msgid "play C minor on distaff"
-msgstr "jouer Do mineur sur la quenouille"
-
-#: engines/scumm/help.cpp:180
-msgid "play D on distaff"
-msgstr "jouer Ré sur la quenouille"
-
-#: engines/scumm/help.cpp:181
-msgid "play E on distaff"
-msgstr "jouer Mi sur la quenouille"
-
-#: engines/scumm/help.cpp:182
-msgid "play F on distaff"
-msgstr "jouer Fa sur la quenouille"
-
-#: engines/scumm/help.cpp:183
-msgid "play G on distaff"
-msgstr "jouer Sol sur la quenouille"
-
-#: engines/scumm/help.cpp:184
-msgid "play A on distaff"
-msgstr "jouer La sur la quenouille"
-
-#: engines/scumm/help.cpp:185
-msgid "play B on distaff"
-msgstr "jouer Si sur la quenouille"
-
-#: engines/scumm/help.cpp:186
-msgid "play C major on distaff"
-msgstr "jouer Do Majeur sur la quenouille"
-
-#: engines/scumm/help.cpp:192 engines/scumm/help.cpp:214
-msgid "puSh"
-msgstr "Pousser"
-
-#: engines/scumm/help.cpp:193 engines/scumm/help.cpp:215
-msgid "pull (Yank)"
-msgstr "Tirer"
-
-#: engines/scumm/help.cpp:196 engines/scumm/help.cpp:212
-#: engines/scumm/help.cpp:248
-msgid "Talk to"
-msgstr "Parler ŕ"
-
-#: engines/scumm/help.cpp:199 engines/scumm/help.cpp:211
-msgid "Look at"
-msgstr "Regarder"
-
-#: engines/scumm/help.cpp:200
-msgid "turn oN"
-msgstr "Allumer"
-
-#: engines/scumm/help.cpp:201
-msgid "turn oFf"
-msgstr "Éteindre"
-
-#: engines/scumm/help.cpp:217
-msgid "KeyUp"
-msgstr "Touche Haut"
-
-#: engines/scumm/help.cpp:217
-msgid "Highlight prev dialogue"
-msgstr "Sélectionner le dialogue précédent"
-
-#: engines/scumm/help.cpp:218
-msgid "KeyDown"
-msgstr "Touche Bas"
-
-#: engines/scumm/help.cpp:218
-msgid "Highlight next dialogue"
-msgstr "Sélectionner le dialogue suivant"
-
-#: engines/scumm/help.cpp:222
-msgid "Walk"
-msgstr "Marcher"
-
-#: engines/scumm/help.cpp:225 engines/scumm/help.cpp:234
-#: engines/scumm/help.cpp:241 engines/scumm/help.cpp:249
-msgid "Inventory"
-msgstr "Inventaire"
-
-#: engines/scumm/help.cpp:226
-msgid "Object"
-msgstr "Objet"
-
-#: engines/scumm/help.cpp:229
-msgid "Black and White / Color"
-msgstr "Noir et Blanc / Couleur"
-
-#: engines/scumm/help.cpp:232
-msgid "Eyes"
-msgstr "Yeux"
-
-#: engines/scumm/help.cpp:233
-msgid "Tongue"
-msgstr "Langue"
-
-#: engines/scumm/help.cpp:235
-msgid "Punch"
-msgstr "Frapper"
-
-#: engines/scumm/help.cpp:236
-msgid "Kick"
-msgstr "Coup de pied"
-
-#: engines/scumm/help.cpp:239 engines/scumm/help.cpp:247
-msgid "Examine"
-msgstr "Examiner"
-
-#: engines/scumm/help.cpp:240
-msgid "Regular cursor"
-msgstr "Curseur normal"
-
-#. I18N: Comm is a communication device
-#: engines/scumm/help.cpp:243
-msgid "Comm"
-msgstr "Comm"
-
-#: engines/scumm/help.cpp:246
-msgid "Save / Load / Options"
-msgstr "Sauvegarder / Charger / Options"
-
-#: engines/scumm/help.cpp:255
-msgid "Other game controls:"
-msgstr "Autres controles du jeu:"
-
-#: engines/scumm/help.cpp:257 engines/scumm/help.cpp:267
-msgid "Inventory:"
-msgstr "Inventaires:"
-
-#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:274
-msgid "Scroll list up"
-msgstr "Faire défiler vers le haut"
-
-#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:275
-msgid "Scroll list down"
-msgstr "Faire défiler vers le bas"
-
-#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:268
-msgid "Upper left item"
-msgstr "Élément en haut ŕ gauche"
-
-#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:270
-msgid "Lower left item"
-msgstr "Élément en bas ŕ gauche"
-
-#: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271
-msgid "Upper right item"
-msgstr "Élément en haut ŕ droite"
-
-#: engines/scumm/help.cpp:263 engines/scumm/help.cpp:273
-msgid "Lower right item"
-msgstr "Élément en bas ŕ droite"
-
-#: engines/scumm/help.cpp:269
-msgid "Middle left item"
-msgstr "Élément au milieu ŕ gauche"
-
-#: engines/scumm/help.cpp:272
-msgid "Middle right item"
-msgstr "Élément au milieu ŕ droite"
-
-#: engines/scumm/help.cpp:279 engines/scumm/help.cpp:284
-msgid "Switching characters:"
-msgstr "Changer de personnage"
-
-#: engines/scumm/help.cpp:281
-msgid "Second kid"
-msgstr "Second enfant"
-
-#: engines/scumm/help.cpp:282
-msgid "Third kid"
-msgstr "Troisičme enfant"
-
-#: engines/scumm/help.cpp:294
-msgid "Fighting controls (numpad):"
-msgstr "Controles de combat (pavet numérique):"
-
-#: engines/scumm/help.cpp:295 engines/scumm/help.cpp:296
-#: engines/scumm/help.cpp:297
-msgid "Step back"
-msgstr "Pas en arričre"
-
-#: engines/scumm/help.cpp:298
-msgid "Block high"
-msgstr "Bloquer haut"
-
-#: engines/scumm/help.cpp:299
-msgid "Block middle"
-msgstr "Bloquer milieu"
-
-#: engines/scumm/help.cpp:300
-msgid "Block low"
-msgstr "Bloquer bas"
-
-#: engines/scumm/help.cpp:301
-msgid "Punch high"
-msgstr "Fraper haut"
-
-#: engines/scumm/help.cpp:302
-msgid "Punch middle"
-msgstr "Frapper milieu"
-
-#: engines/scumm/help.cpp:303
-msgid "Punch low"
-msgstr "Frapper bas"
-
-#: engines/scumm/help.cpp:306
-msgid "These are for Indy on left."
-msgstr "Correct quand Indy est ŕ gauche."
-
-#: engines/scumm/help.cpp:307
-msgid "When Indy is on the right,"
-msgstr "Quand Indy est ŕ droite, 7, 4 et 1"
-
-#: engines/scumm/help.cpp:308
-msgid "7, 4, and 1 are switched with"
-msgstr "sont interverties avec 9, 6 et 3"
-
-#: engines/scumm/help.cpp:309
-msgid "9, 6, and 3, respectively."
-msgstr "respectivement."
-
-#: engines/scumm/help.cpp:316
-msgid "Biplane controls (numpad):"
-msgstr "Controles du biplane (paver numérique):"
-
-#: engines/scumm/help.cpp:317
-msgid "Fly to upper left"
-msgstr "Voler vers le haut ŕ gauche"
-
-#: engines/scumm/help.cpp:318
-msgid "Fly to left"
-msgstr "Voler vers la gauche"
-
-#: engines/scumm/help.cpp:319
-msgid "Fly to lower left"
-msgstr "Voler vers le bas ŕ gauche"
-
-#: engines/scumm/help.cpp:320
-msgid "Fly upwards"
-msgstr "Voler vers le haut"
-
-#: engines/scumm/help.cpp:321
-msgid "Fly straight"
-msgstr "Voler tout droit"
-
-#: engines/scumm/help.cpp:322
-msgid "Fly down"
-msgstr "Voler vers le bas"
-
-#: engines/scumm/help.cpp:323
-msgid "Fly to upper right"
-msgstr "Voler vers le haut ŕ droite"
-
-#: engines/scumm/help.cpp:324
-msgid "Fly to right"
-msgstr "Voler vers la droite"
-
-#: engines/scumm/help.cpp:325
-msgid "Fly to lower right"
-msgstr "Voler vers la bas ŕ droite"
-
-#: engines/scumm/scumm.cpp:1768
-#, c-format
-msgid ""
-"Native MIDI support requires the Roland Upgrade from LucasArts,\n"
-"but %s is missing. Using AdLib instead."
-msgstr ""
-
-#: engines/scumm/scumm.cpp:2258 engines/agos/saveload.cpp:189
-#, c-format
-msgid ""
-"Failed to save game state to file:\n"
-"\n"
-"%s"
-msgstr ""
-"Échec de l'enregistrement de l'état du jeu dans le fichier:\n"
-"\n"
-"%s"
-
-#: engines/scumm/scumm.cpp:2265 engines/agos/saveload.cpp:154
-#, c-format
-msgid ""
-"Failed to load game state from file:\n"
-"\n"
-"%s"
-msgstr ""
-"Échec du chargement de l'état du jeu depuis le fichier:\n"
-"\n"
-"%s"
-
-#: engines/scumm/scumm.cpp:2277 engines/agos/saveload.cpp:197
-#, c-format
-msgid ""
-"Successfully saved game state in file:\n"
-"\n"
-"%s"
-msgstr ""
-"État du jeu enregistré avec succčs dans le fichier:\n"
-"\n"
-"%s"
-
-#: engines/scumm/scumm.cpp:2492
-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 ""
-"Normalement, Maniac Mansion devrait démarrer maintenant. Cependant ScummVM "
-"ne supporte pas encore cette fonctionalité. Pour jouer ŕ Maniac Mansion, "
-"choisissez 'Ajouter...' dans le Lanceur de ScummVM et sélectionnez le "
-"répertoire 'Maniac Mansion' dans le répertoire du jeu Day Of The Tentacle."
-
-#. I18N: Option for fast scene switching
-#: engines/mohawk/dialogs.cpp:92 engines/mohawk/dialogs.cpp:171
-msgid "~Z~ip Mode Activated"
-msgstr "Mode ~Z~ip Activé"
-
-#: engines/mohawk/dialogs.cpp:93
-msgid "~T~ransitions Enabled"
-msgstr "T~r~ansitions activées"
-
-#. I18N: Drop book page
-#: engines/mohawk/dialogs.cpp:95
-msgid "~D~rop Page"
-msgstr ""
-
-#: engines/mohawk/dialogs.cpp:99
-msgid "~S~how Map"
-msgstr ""
-
-#: engines/mohawk/dialogs.cpp:105
-#, fuzzy
-msgid "~M~ain Menu"
-msgstr "Menu Principal ScummVM"
-
-#: engines/mohawk/dialogs.cpp:172
-msgid "~W~ater Effect Enabled"
-msgstr "~E~ffets de l'Eau Activés"
-
-#: engines/sci/engine/kfile.cpp:678
-msgid "Restore game:"
-msgstr "Charger le jeu:"
-
-#: engines/sci/engine/kfile.cpp:678
-msgid "Restore"
-msgstr "Charger"
-
-#: engines/agos/animation.cpp:544
-#, c-format
-msgid "Cutscene file '%s' not found!"
-msgstr ""
-
-#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1283
-#: engines/tinsel/saveload.cpp:475
-#, fuzzy
-msgid "Failed to load game state from file."
-msgstr ""
-"Échec du chargement de l'état du jeu depuis le fichier:\n"
-"\n"
-"%s"
-
-#: engines/gob/inter_v2.cpp:1353 engines/tinsel/saveload.cpp:553
-#, fuzzy
-msgid "Failed to save game state to file."
-msgstr ""
-"Échec de l'enregistrement de l'état du jeu dans le fichier:\n"
-"\n"
-"%s"
-
-#: engines/gob/inter_v5.cpp:107
-#, fuzzy
-msgid "Failed to delete file."
-msgstr ""
-"Échec de l'enregistrement de l'état du jeu dans le fichier:\n"
-"\n"
-"%s"
-
-#: engines/groovie/script.cpp:420
-#, fuzzy
-msgid "Failed to save game"
-msgstr ""
-"Échec de l'enregistrement de l'état du jeu dans le fichier:\n"
-"\n"
-"%s"
-
-#: 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."
-msgstr ""
-
-#: engines/m4/m4_menus.cpp:138
-#, fuzzy
-msgid "Save game failed!"
-msgstr "Sauvegarde:"
-
-#: engines/sky/compact.cpp:130
-msgid ""
-"Unable to find \"sky.cpt\" file!\n"
-"Please download it from www.scummvm.org"
-msgstr ""
-
-#: engines/sky/compact.cpp:141
-msgid ""
-"The \"sky.cpt\" file has an incorrect size.\n"
-"Please (re)download it from www.scummvm.org"
-msgstr ""
-
-#: engines/sword1/animation.cpp:344 engines/sword2/animation.cpp:379
-msgid "DXA cutscenes found but ScummVM has been built without zlib support"
-msgstr ""
-
-#: engines/sword1/animation.cpp:354 engines/sword2/animation.cpp:389
-msgid "MPEG2 cutscenes are no longer supported"
-msgstr ""
-
-#: engines/sword1/animation.cpp:359 engines/sword2/animation.cpp:397
-#, c-format
-msgid "Cutscene '%s' not found"
-msgstr ""
-
-#: 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"
-"\n"
-"Press OK to convert them now, otherwise you will be asked again the next "
-"time you start the game.\n"
-msgstr ""
-
-#: engines/sword1/control.cpp:1232
-#, c-format
-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 ""
-
-#: engines/sword1/control.cpp:1235
-msgid "Keep the old one"
-msgstr ""
-
-#: engines/sword1/control.cpp:1235
-msgid "Keep the new one"
-msgstr ""
-
-#: engines/sword1/logic.cpp:1633
-msgid "This is the end of the Broken Sword 1 Demo"
-msgstr ""
-
-#: engines/parallaction/saveload.cpp:133
-#, c-format
-msgid ""
-"Can't save game in slot %i\n"
-"\n"
-msgstr ""
-
-#: engines/parallaction/saveload.cpp:211
-#, fuzzy
-msgid "Loading game..."
-msgstr "Charger le jeu:"
-
-#: engines/parallaction/saveload.cpp:226
-#, fuzzy
-msgid "Saving game..."
-msgstr "Sauvegarde:"
-
-#: engines/parallaction/saveload.cpp:279
-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"
-"\n"
-"Press OK to convert them now, otherwise you will be asked next time.\n"
-msgstr ""
-
-#: engines/parallaction/saveload.cpp:326
-msgid "ScummVM successfully converted all your savefiles."
-msgstr ""
-
-#: engines/parallaction/saveload.cpp:328
-msgid ""
-"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 ""
-
-#: audio/fmopl.cpp:49
-msgid "MAME OPL emulator"
-msgstr "Émulateur MAME OPL"
-
-#: audio/fmopl.cpp:51
-msgid "DOSBox OPL emulator"
-msgstr "Émulateur DOSBox OPL"
-
-#: audio/mididrv.cpp:205
-#, c-format
-msgid ""
-"The selected audio device '%s' was not found (e.g. might be turned off or "
-"disconnected)."
-msgstr ""
-
-#: audio/mididrv.cpp:205 audio/mididrv.cpp:217 audio/mididrv.cpp:253
-#: audio/mididrv.cpp:268
-msgid "Attempting to fall back to the next available device..."
-msgstr ""
-
-#: audio/mididrv.cpp:217
-#, c-format
-msgid ""
-"The selected audio device '%s' cannot be used. See log file for more "
-"information."
-msgstr ""
-
-#: audio/mididrv.cpp:253
-#, c-format
-msgid ""
-"The preferred audio device '%s' was not found (e.g. might be turned off or "
-"disconnected)."
-msgstr ""
-
-#: audio/mididrv.cpp:268
-#, c-format
-msgid ""
-"The preferred audio device '%s' cannot be used. See log file for more "
-"information."
-msgstr ""
-
-#: audio/null.h:43
-msgid "No music"
-msgstr "Pas de musique"
-
-#: audio/mods/paula.cpp:189
-msgid "Amiga Audio Emulator"
-msgstr "Émulateur Amiga Audio"
-
-#: audio/softsynth/adlib.cpp:1594
-msgid "AdLib Emulator"
-msgstr "Émulateur AdLib"
-
-#: audio/softsynth/appleiigs.cpp:33
-msgid "Apple II GS Emulator (NOT IMPLEMENTED)"
-msgstr "Émulateur Apple II GS (PAS IMPLÉMENTÉ)"
-
-#: audio/softsynth/sid.cpp:1430
-msgid "C64 Audio Emulator"
-msgstr "Émulateur C64 Audio"
-
-#: audio/softsynth/mt32.cpp:329
-#, fuzzy
-msgid "Initializing MT-32 Emulator"
-msgstr "Initialisation de l'Émulateur MT-32"
-
-#: audio/softsynth/mt32.cpp:543
-msgid "MT-32 Emulator"
-msgstr "Émulateur MT-32"
-
-#: audio/softsynth/pcspk.cpp:139
-msgid "PC Speaker Emulator"
-msgstr "Émulateur Haut Parleur PC"
-
-#: audio/softsynth/pcspk.cpp:158
-msgid "IBM PCjr Emulator"
-msgstr "Émulateur IBM PCjr"
-
-#: backends/keymapper/remap-dialog.cpp:47
-msgid "Keymap:"
-msgstr "Affectation des touches:"
-
-#: backends/keymapper/remap-dialog.cpp:64
-msgid " (Active)"
-msgstr "(Actif)"
-
-#: backends/keymapper/remap-dialog.cpp:98
-msgid " (Global)"
-msgstr "(Global)"
-
-#: backends/keymapper/remap-dialog.cpp:108
-msgid " (Game)"
-msgstr "(Jeu)"
-
-#: backends/midi/windows.cpp:164
-msgid "Windows MIDI"
-msgstr "MIDI Windows"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:57
-msgid "ScummVM Main Menu"
-msgstr "Menu Principal ScummVM"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:63
-msgid "~L~eft handed mode"
-msgstr "Mode ~G~aucher"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:64
-msgid "~I~ndy fight controls"
-msgstr "Contrôle des combats d'~I~ndy"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:65
-msgid "Show mouse cursor"
-msgstr "Afficher le curseur de la souris"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:66
-msgid "Snap to edges"
-msgstr "Aligner sur les bords"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:68
-msgid "Touch X Offset"
-msgstr "Décalage X du toucher"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:75
-msgid "Touch Y Offset"
-msgstr "Décallage Y du toucher"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:87
-msgid "Use laptop trackpad-style cursor control"
-msgstr "Activer le contrôle du curseur de type trackpad"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:88
-msgid "Tap for left click, double tap right click"
-msgstr "Toucher pour un clic gauche, toucher deux fois pour un clic droit"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:90
-msgid "Sensitivity"
-msgstr "Sensibilité"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:99
-msgid "Initial top screen scale:"
-msgstr "Échelle initiale de l'écran du haut"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:105
-msgid "Main screen scaling:"
-msgstr "Échelle de l'écran principal"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:107
-msgid "Hardware scale (fast, but low quality)"
-msgstr "Mise ŕ l'echelle matérielle (rapide mais qualité faible)"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:108
-msgid "Software scale (good quality, but slower)"
-msgstr "Mise ŕ l'échelle logicielle (bonne qualité mais plus lent)"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:109
-msgid "Unscaled (you must scroll left and right)"
-msgstr "Sans changement d'échelle (vous devez faire défiler l'écran)"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:111
-msgid "Brightness:"
-msgstr "Luminosité:"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:121
-msgid "High quality audio (slower) (reboot)"
-msgstr "Audio haute qualité (plus lent) (redémarrer)"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:122
-msgid "Disable power off"
-msgstr "Désactivé l'extinction"
-
-#: backends/platform/iphone/osys_events.cpp:338
-#, fuzzy
-msgid "Mouse-click-and-drag mode enabled."
-msgstr "Mode touchpad activé"
-
-#: backends/platform/iphone/osys_events.cpp:340
-#, fuzzy
-msgid "Mouse-click-and-drag mode disabled."
-msgstr "Mode touchpad désactivé"
-
-#: backends/platform/iphone/osys_events.cpp:351
-msgid "Touchpad mode enabled."
-msgstr "Mode touchpad activé"
-
-#: backends/platform/iphone/osys_events.cpp:353
-msgid "Touchpad mode disabled."
-msgstr "Mode touchpad désactivé"
-
-#: backends/platform/sdl/macosx/appmenu_osx.mm:67
-#, fuzzy
-msgid "Hide ScummVM"
-msgstr "Quitter ScummVM"
-
-#: backends/platform/sdl/macosx/appmenu_osx.mm:70
-msgid "Hide Others"
-msgstr ""
-
-#: backends/platform/sdl/macosx/appmenu_osx.mm:74
-msgid "Show All"
-msgstr ""
-
-#: backends/platform/sdl/macosx/appmenu_osx.mm:92
-#: backends/platform/sdl/macosx/appmenu_osx.mm:99
-#, fuzzy
-msgid "Window"
-msgstr "MIDI Windows"
-
-#: backends/platform/sdl/macosx/appmenu_osx.mm:95
-msgid "Minimize"
-msgstr ""
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:45
-msgid "Normal (no scaling)"
-msgstr "Normal (échelle d'origine)"
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:64
-msgctxt "lowres"
-msgid "Normal (no scaling)"
-msgstr "Normal"
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2146
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:533
-#, fuzzy
-msgid "Enabled aspect ratio correction"
-msgstr "Changer correction du rapport d'aspect"
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2152
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:538
-#, fuzzy
-msgid "Disabled aspect ratio correction"
-msgstr "Changer correction du rapport d'aspect"
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2207
-#, fuzzy
-msgid "Active graphics filter:"
-msgstr "Changer de filtre graphique"
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2249
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:477
-#, fuzzy
-msgid "Windowed mode"
-msgstr "Mode de rendu:"
-
-#: backends/graphics/opengl/opengl-graphics.cpp:130
-msgid "OpenGL Normal"
-msgstr "OpenGL Normal"
-
-#: backends/graphics/opengl/opengl-graphics.cpp:131
-msgid "OpenGL Conserve"
-msgstr "OpenGL Préserve"
-
-#: backends/graphics/opengl/opengl-graphics.cpp:132
-msgid "OpenGL Original"
-msgstr "OpenGL Originel"
-
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:415
-#, fuzzy
-msgid "Current display mode"
-msgstr "Mode vidéo actuel"
-
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:428
-msgid "Current scale"
-msgstr ""
-
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:558
-msgid "Active filter mode: Linear"
-msgstr ""
-
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:560
-msgid "Active filter mode: Nearest"
-msgstr ""
-
-#: backends/platform/symbian/src/SymbianActions.cpp:38
-#: backends/platform/wince/CEActionsSmartphone.cpp:39
-msgid "Up"
-msgstr "Haut"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:39
-#: backends/platform/wince/CEActionsSmartphone.cpp:40
-msgid "Down"
-msgstr "Bas"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:40
-#: backends/platform/wince/CEActionsSmartphone.cpp:41
-msgid "Left"
-msgstr "Gauche"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:41
-#: backends/platform/wince/CEActionsSmartphone.cpp:42
-msgid "Right"
-msgstr "Droite"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:42
-#: backends/platform/wince/CEActionsPocket.cpp:60
-#: backends/platform/wince/CEActionsSmartphone.cpp:43
-msgid "Left Click"
-msgstr "Clic Gauche"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:43
-#: backends/platform/wince/CEActionsSmartphone.cpp:44
-msgid "Right Click"
-msgstr "Clic Droit"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:46
-#: backends/platform/wince/CEActionsSmartphone.cpp:47
-msgid "Zone"
-msgstr "Zone"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:47
-#: backends/platform/wince/CEActionsPocket.cpp:54
-#: backends/platform/wince/CEActionsSmartphone.cpp:48
-msgid "Multi Function"
-msgstr "Fonction Multiple"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:48
-msgid "Swap character"
-msgstr "Changement de personnage"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:49
-msgid "Skip text"
-msgstr "Sauter le texte"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:51
-msgid "Fast mode"
-msgstr "Mode rapide"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:53
-msgid "Debugger"
-msgstr "Debugger"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:54
-msgid "Global menu"
-msgstr "Menu global"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:55
-msgid "Virtual keyboard"
-msgstr "Clavier virtuel"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:56
-msgid "Key mapper"
-msgstr "Affectation des touches"
-
-#: backends/events/symbiansdl/symbiansdl-events.cpp:184
-msgid "Do you want to quit ?"
-msgstr "Voulez-vous quitter?"
-
-#: backends/platform/wii/options.cpp:51
-msgid "Video"
-msgstr "Vidéo"
-
-#: backends/platform/wii/options.cpp:54
-msgid "Current video mode:"
-msgstr "Mode vidéo actuel"
-
-#: backends/platform/wii/options.cpp:56
-msgid "Double-strike"
-msgstr "Coup double"
-
-#: backends/platform/wii/options.cpp:60
-msgid "Horizontal underscan:"
-msgstr "Underscan horizontal:"
-
-#: backends/platform/wii/options.cpp:66
-msgid "Vertical underscan:"
-msgstr "Underscan vertical:"
-
-#: backends/platform/wii/options.cpp:71
-msgid "Input"
-msgstr "Entrée"
-
-#: backends/platform/wii/options.cpp:74
-msgid "GC Pad sensitivity:"
-msgstr "Sensibilité du pad GC:"
-
-#: backends/platform/wii/options.cpp:80
-msgid "GC Pad acceleration:"
-msgstr "Acceleration du pad GC:"
-
-#: backends/platform/wii/options.cpp:86
-msgid "DVD"
-msgstr "DVD"
-
-#: 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
-msgid "Unknown"
-msgstr "Inconue"
-
-#: backends/platform/wii/options.cpp:93
-msgid "Mount DVD"
-msgstr "Monter le DVD"
-
-#: backends/platform/wii/options.cpp:94
-msgid "Unmount DVD"
-msgstr "Démonter le DVD"
-
-#: backends/platform/wii/options.cpp:98
-msgid "SMB"
-msgstr "SMB"
-
-#: backends/platform/wii/options.cpp:106
-msgid "Server:"
-msgstr "Serveur:"
-
-#: backends/platform/wii/options.cpp:110
-msgid "Share:"
-msgstr "Disque partagé:"
-
-#: backends/platform/wii/options.cpp:114
-msgid "Username:"
-msgstr "Nom d'utilisateur:"
-
-#: backends/platform/wii/options.cpp:118
-msgid "Password:"
-msgstr "Mot de passe:"
-
-#: backends/platform/wii/options.cpp:121
-msgid "Init network"
-msgstr "Initialiser le réseau"
-
-#: backends/platform/wii/options.cpp:123
-msgid "Mount SMB"
-msgstr "Monter SMB"
-
-#: backends/platform/wii/options.cpp:124
-msgid "Unmount SMB"
-msgstr "Démonter SMB"
-
-#: backends/platform/wii/options.cpp:143
-msgid "DVD Mounted successfully"
-msgstr "DVD monté avec succčs"
-
-#: backends/platform/wii/options.cpp:146
-msgid "Error while mounting the DVD"
-msgstr "Échec du montage du DVD"
-
-#: backends/platform/wii/options.cpp:148
-msgid "DVD not mounted"
-msgstr "DVD non monté"
-
-#: backends/platform/wii/options.cpp:161
-msgid "Network up, share mounted"
-msgstr "Réseau connecté, disque partagé monté"
-
-#: backends/platform/wii/options.cpp:163
-msgid "Network up"
-msgstr "Réseau connecté"
-
-#: backends/platform/wii/options.cpp:166
-msgid ", error while mounting the share"
-msgstr ", échec du montage du disque partagé"
-
-#: backends/platform/wii/options.cpp:168
-msgid ", share not mounted"
-msgstr ", disque partagé non monté"
-
-#: backends/platform/wii/options.cpp:174
-msgid "Network down"
-msgstr "Réseau déconnecté"
-
-#: backends/platform/wii/options.cpp:178
-#, fuzzy
-msgid "Initializing network"
-msgstr "Initialisation du réseau"
-
-#: backends/platform/wii/options.cpp:182
-#, fuzzy
-msgid "Timeout while initializing network"
-msgstr "Dépassement du délai lors de l'initialisation du réseau"
-
-#: backends/platform/wii/options.cpp:186
-#, fuzzy, c-format
-msgid "Network not initialized (%d)"
-msgstr "Réseau non initialisé (%d)"
-
-#: backends/platform/wince/CEActionsPocket.cpp:46
-msgid "Hide Toolbar"
-msgstr "Caché la barre d'outils"
-
-#: backends/platform/wince/CEActionsPocket.cpp:47
-msgid "Show Keyboard"
-msgstr "Afficher le clavier"
-
-#: backends/platform/wince/CEActionsPocket.cpp:48
-msgid "Sound on/off"
-msgstr "Audio marche/arręt"
-
-#: backends/platform/wince/CEActionsPocket.cpp:49
-msgid "Right click"
-msgstr "Clic droit"
-
-#: backends/platform/wince/CEActionsPocket.cpp:50
-msgid "Show/Hide Cursor"
-msgstr "Afficher/Cacher le curseur"
-
-#: backends/platform/wince/CEActionsPocket.cpp:51
-msgid "Free look"
-msgstr "Regarder autour"
-
-#: backends/platform/wince/CEActionsPocket.cpp:52
-msgid "Zoom up"
-msgstr "Dézoomer"
-
-#: backends/platform/wince/CEActionsPocket.cpp:53
-msgid "Zoom down"
-msgstr "Zoomer"
-
-#: backends/platform/wince/CEActionsPocket.cpp:55
-#: backends/platform/wince/CEActionsSmartphone.cpp:49
-msgid "Bind Keys"
-msgstr "Affecter les touches"
-
-#: backends/platform/wince/CEActionsPocket.cpp:56
-msgid "Cursor Up"
-msgstr "Haut"
-
-#: backends/platform/wince/CEActionsPocket.cpp:57
-msgid "Cursor Down"
-msgstr "Bas"
-
-#: backends/platform/wince/CEActionsPocket.cpp:58
-msgid "Cursor Left"
-msgstr "Gauche"
-
-#: backends/platform/wince/CEActionsPocket.cpp:59
-msgid "Cursor Right"
-msgstr "Droit"
-
-#: backends/platform/wince/CEActionsPocket.cpp:267
-#: backends/platform/wince/CEActionsSmartphone.cpp:231
-msgid "Do you want to load or save the game?"
-msgstr "Voulez-vous charger ou enregistrer le jeu?"
-
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-msgid " Are you sure you want to quit ? "
-msgstr "Voulez-vous vraiment quitter?"
-
-#: backends/platform/wince/CEActionsSmartphone.cpp:50
-msgid "Keyboard"
-msgstr "Clavier"
-
-#: backends/platform/wince/CEActionsSmartphone.cpp:51
-msgid "Rotate"
-msgstr "Pivoter"
-
-#: backends/platform/wince/CELauncherDialog.cpp:56
-msgid "Using SDL driver "
-msgstr "Utilise le pilote SDL"
-
-#: backends/platform/wince/CELauncherDialog.cpp:60
-msgid "Display "
-msgstr "Affichage"
-
-#: backends/platform/wince/CELauncherDialog.cpp:83
-msgid "Do you want to perform an automatic scan ?"
-msgstr "Voulez-vous exécuter une recherche automatique?"
-
-#: backends/platform/wince/wince-sdl.cpp:471
-msgid "Map right click action"
-msgstr "Affecter l'action 'Clic Droit'"
-
-#: backends/platform/wince/wince-sdl.cpp:475
-msgid "You must map a key to the 'Right Click' action to play this game"
-msgstr ""
-"Vous devez affecter une touche ŕ l'action de 'Clic Droit' pour pouvoir jouer "
-"ŕ ce jeu"
-
-#: backends/platform/wince/wince-sdl.cpp:484
-msgid "Map hide toolbar action"
-msgstr "Affecter l'action 'Cacher Bar d'Outils'"
-
-#: backends/platform/wince/wince-sdl.cpp:488
-msgid "You must map a key to the 'Hide toolbar' action to play this game"
-msgstr ""
-"Vous devez affecter une touche ŕ l'action 'Cacher Bar d'Outils' pour pouvoir "
-"jouer ŕ ce jeu"
-
-#: backends/platform/wince/wince-sdl.cpp:497
-msgid "Map Zoom Up action (optional)"
-msgstr "Affecter l'action 'Dézoomer' (optionnelle)"
-
-#: backends/platform/wince/wince-sdl.cpp:500
-msgid "Map Zoom Down action (optional)"
-msgstr "Affecter l'action 'Zoomer' (optionnelle)"
-
-#: backends/platform/wince/wince-sdl.cpp:508
-msgid ""
-"Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory"
-msgstr ""
-"Noubliez pas d'affecter une touche ŕ l'action 'Cacher Bar d'Outils' pour "
-"pouvoir voir entičrement l'inventaire"
-
-#: backends/events/default/default-events.cpp:222
-#, fuzzy
-msgid "Do you really want to return to the Launcher?"
-msgstr "Voulez-vous vraiment supprimer cette sauvegarde?"
-
-#: backends/events/default/default-events.cpp:222
-#, fuzzy
-msgid "Launcher"
-msgstr "Frapper"
-
-#: backends/events/default/default-events.cpp:244
-#, fuzzy
-msgid "Do you really want to quit?"
-msgstr "Voulez-vous quitter?"
-
-#: backends/events/gph/gph-events.cpp:366
-#: backends/events/gph/gph-events.cpp:409
-#: backends/events/openpandora/op-events.cpp:141
-msgid "Touchscreen 'Tap Mode' - Left Click"
-msgstr ""
-
-#: backends/events/gph/gph-events.cpp:368
-#: backends/events/gph/gph-events.cpp:411
-#: backends/events/openpandora/op-events.cpp:143
-msgid "Touchscreen 'Tap Mode' - Right Click"
-msgstr ""
-
-#: backends/events/gph/gph-events.cpp:370
-#: backends/events/gph/gph-events.cpp:413
-#: backends/events/openpandora/op-events.cpp:145
-msgid "Touchscreen 'Tap Mode' - Hover (No Click)"
-msgstr ""
-
-#: backends/events/gph/gph-events.cpp:390
-#, fuzzy
-msgid "Maximum Volume"
-msgstr "Volume"
-
-#: backends/events/gph/gph-events.cpp:392
-msgid "Increasing Volume"
-msgstr ""
-
-#: backends/events/gph/gph-events.cpp:398
-#, fuzzy
-msgid "Minimal Volume"
-msgstr "Volume"
-
-#: backends/events/gph/gph-events.cpp:400
-msgid "Decreasing Volume"
-msgstr ""
-
-#: backends/updates/macosx/macosx-updates.mm:65
-msgid "Check for Updates..."
-msgstr ""
-
-#~ msgctxt "lowres"
-#~ msgid "Add Game..."
-#~ msgstr "Ajouter..."
-
-#~ msgid "Add Game..."
-#~ msgstr "Ajouter..."
-
-#~ msgid "Discovered %d new games."
-#~ msgstr "%d nouveaux jeux trouvés."
-
-#~ msgid "Command line argument not processed"
-#~ msgstr "Argument de ligne de commande non traité"
-
-#~ msgid "FM Towns Emulator"
-#~ msgstr "Émulateur FM Towns"
-
-#~ msgid "Invalid Path"
-#~ msgstr "Chemin Invalide"
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ScummVM 1.3.0svn\n"
+"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
+"POT-Creation-Date: 2011-08-20 15:12+0100\n"
+"PO-Revision-Date: 2011-08-22 22:27+0100\n"
+"Last-Translator: Thierry Crozat <criezy@scummvm.org>\n"
+"Language-Team: French <scummvm-devel@lists.sf.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: Francais\n"
+"Plural-Forms: nplurals=2; plural=n>1;\n"
+
+#: gui/about.cpp:91
+#, c-format
+msgid "(built on %s)"
+msgstr "(compilé sur %s)"
+
+#: gui/about.cpp:98
+msgid "Features compiled in:"
+msgstr "Options incluses:"
+
+#: gui/about.cpp:107
+msgid "Available engines:"
+msgstr "Moteurs disponibles:"
+
+#: gui/browser.cpp:66
+msgid "Go up"
+msgstr "Remonter"
+
+#: gui/browser.cpp:66 gui/browser.cpp:68
+msgid "Go to previous directory level"
+msgstr "Remonte d'un niveau dans la hiérarchie de répertoire"
+
+#: gui/browser.cpp:68
+msgctxt "lowres"
+msgid "Go up"
+msgstr "Remonter"
+
+#: gui/browser.cpp:69 gui/chooser.cpp:45 gui/KeysDialog.cpp:43
+#: gui/launcher.cpp:312 gui/massadd.cpp:94 gui/options.cpp:1178
+#: gui/saveload.cpp:63 gui/saveload.cpp:155 gui/themebrowser.cpp:54
+#: engines/engine.cpp:436 engines/scumm/dialogs.cpp:190
+#: engines/sword1/control.cpp:865 engines/parallaction/saveload.cpp:281
+#: backends/platform/wii/options.cpp:48
+#: backends/events/default/default-events.cpp:222
+#: backends/events/default/default-events.cpp:244
+msgid "Cancel"
+msgstr "Annuler"
+
+#: gui/browser.cpp:70 gui/chooser.cpp:46 gui/themebrowser.cpp:55
+msgid "Choose"
+msgstr "Choisir"
+
+#: gui/gui-manager.cpp:116 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 "Fermer"
+
+#: gui/gui-manager.cpp:119
+msgid "Mouse click"
+msgstr "Clic de souris"
+
+#: gui/gui-manager.cpp:122 base/main.cpp:286
+msgid "Display keyboard"
+msgstr "Afficher le clavier"
+
+#: gui/gui-manager.cpp:125 base/main.cpp:289
+msgid "Remap keys"
+msgstr "Changer l'affectation des touches"
+
+#: gui/KeysDialog.h:36 gui/KeysDialog.cpp:145
+msgid "Choose an action to map"
+msgstr "Sélectionnez une action ŕ affecter"
+
+#: gui/KeysDialog.cpp:41
+msgid "Map"
+msgstr "Affecter"
+
+#: gui/KeysDialog.cpp:42 gui/launcher.cpp:313 gui/launcher.cpp:936
+#: gui/launcher.cpp:940 gui/massadd.cpp:91 gui/options.cpp:1179
+#: engines/engine.cpp:359 engines/engine.cpp:370 engines/scumm/dialogs.cpp:192
+#: engines/scumm/scumm.cpp:1770 engines/agos/animation.cpp:545
+#: engines/groovie/script.cpp:420 engines/sky/compact.cpp:131
+#: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:344
+#: engines/sword1/animation.cpp:354 engines/sword1/animation.cpp:360
+#: engines/sword1/control.cpp:865 engines/sword1/logic.cpp:1633
+#: engines/sword2/animation.cpp:379 engines/sword2/animation.cpp:389
+#: engines/sword2/animation.cpp:398 engines/parallaction/saveload.cpp:281
+#: backends/platform/wii/options.cpp:47
+#: backends/platform/wince/CELauncherDialog.cpp:54
+msgid "OK"
+msgstr "OK"
+
+#: gui/KeysDialog.cpp:49
+msgid "Select an action and click 'Map'"
+msgstr "Selectionez une action et cliquez 'Affecter'"
+
+#: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141
+#, c-format
+msgid "Associated key : %s"
+msgstr "Touche associée: %s"
+
+#: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143
+#, c-format
+msgid "Associated key : none"
+msgstr "Touche associée: aucune"
+
+#: gui/KeysDialog.cpp:90
+msgid "Please select an action"
+msgstr "Selectionnez une action"
+
+#: gui/KeysDialog.cpp:106
+msgid "Press the key to associate"
+msgstr "Appuyez sur la touche ŕ associer"
+
+#: gui/launcher.cpp:165
+msgid "Game"
+msgstr "Jeu"
+
+#: gui/launcher.cpp:169
+msgid "ID:"
+msgstr "ID:"
+
+#: gui/launcher.cpp:169 gui/launcher.cpp:171 gui/launcher.cpp:172
+msgid ""
+"Short game identifier used for referring to savegames and running the game "
+"from the command line"
+msgstr ""
+"ID compact du jeu utilisée pour identifier les sauvegardes et démarrer le "
+"jeu depuis la ligne de commande"
+
+#: gui/launcher.cpp:171
+msgctxt "lowres"
+msgid "ID:"
+msgstr "ID:"
+
+#: gui/launcher.cpp:176
+msgid "Name:"
+msgstr "Nom:"
+
+#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179
+msgid "Full title of the game"
+msgstr "Nom complet du jeu"
+
+#: gui/launcher.cpp:178
+msgctxt "lowres"
+msgid "Name:"
+msgstr "Nom:"
+
+#: gui/launcher.cpp:182
+msgid "Language:"
+msgstr "Langue:"
+
+#: gui/launcher.cpp:182 gui/launcher.cpp:183
+msgid ""
+"Language of the game. This will not turn your Spanish game version into "
+"English"
+msgstr ""
+"Langue du jeu. Cela ne traduira pas en anglais par magie votre version "
+"espagnole du jeu."
+
+#: gui/launcher.cpp:184 gui/launcher.cpp:198 gui/options.cpp:74
+#: gui/options.cpp:708 gui/options.cpp:718 gui/options.cpp:1149
+#: audio/null.cpp:40
+msgid "<default>"
+msgstr "<defaut>"
+
+#: gui/launcher.cpp:194
+msgid "Platform:"
+msgstr "Plateforme:"
+
+#: gui/launcher.cpp:194 gui/launcher.cpp:196 gui/launcher.cpp:197
+msgid "Platform the game was originally designed for"
+msgstr "Plateforme pour laquelle votre jeu a été conçu"
+
+#: gui/launcher.cpp:196
+msgctxt "lowres"
+msgid "Platform:"
+msgstr "Systčme:"
+
+#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035
+msgid "Graphics"
+msgstr "Graphique"
+
+#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035
+msgid "GFX"
+msgstr "GFX"
+
+#: gui/launcher.cpp:211
+msgid "Override global graphic settings"
+msgstr "Utiliser des réglages graphiques spécifiques ŕ ce jeux"
+
+#: gui/launcher.cpp:213
+msgctxt "lowres"
+msgid "Override global graphic settings"
+msgstr "Réglages spécifiques ŕ ce jeux"
+
+#: gui/launcher.cpp:220 gui/options.cpp:1041
+msgid "Audio"
+msgstr "Audio"
+
+#: gui/launcher.cpp:223
+msgid "Override global audio settings"
+msgstr "Utiliser des réglages audio spécifiques ŕ ce jeux"
+
+#: gui/launcher.cpp:225
+msgctxt "lowres"
+msgid "Override global audio settings"
+msgstr "Réglages spécifiques ŕ ce jeux"
+
+#: gui/launcher.cpp:234 gui/options.cpp:1046
+msgid "Volume"
+msgstr "Volume"
+
+#: gui/launcher.cpp:236 gui/options.cpp:1048
+msgctxt "lowres"
+msgid "Volume"
+msgstr "Volume"
+
+#: gui/launcher.cpp:239
+msgid "Override global volume settings"
+msgstr "Utiliser des réglages de volume sonore spécifiques ŕ ce jeux"
+
+#: gui/launcher.cpp:241
+msgctxt "lowres"
+msgid "Override global volume settings"
+msgstr "Réglages spécifiques ŕ ce jeux"
+
+#: gui/launcher.cpp:248 gui/options.cpp:1056
+msgid "MIDI"
+msgstr "MIDI"
+
+#: gui/launcher.cpp:251
+msgid "Override global MIDI settings"
+msgstr "Utiliser des réglages MIDI spécifiques ŕ ce jeux"
+
+#: gui/launcher.cpp:253
+msgctxt "lowres"
+msgid "Override global MIDI settings"
+msgstr "Réglages spécifiques ŕ ce jeux"
+
+#: gui/launcher.cpp:263 gui/options.cpp:1062
+msgid "MT-32"
+msgstr "MT-32"
+
+#: gui/launcher.cpp:266
+msgid "Override global MT-32 settings"
+msgstr "Utiliser des réglages MT-32 spécifiques ŕ ce jeux"
+
+#: gui/launcher.cpp:268
+msgctxt "lowres"
+msgid "Override global MT-32 settings"
+msgstr "Réglages spécifiques ŕ ce jeux"
+
+#: gui/launcher.cpp:279 gui/options.cpp:1069
+msgid "Paths"
+msgstr "Chemins"
+
+#: gui/launcher.cpp:281 gui/options.cpp:1071
+msgctxt "lowres"
+msgid "Paths"
+msgstr "Chemins"
+
+#: gui/launcher.cpp:288
+msgid "Game Path:"
+msgstr "Chemin du Jeu:"
+
+#: gui/launcher.cpp:290
+msgctxt "lowres"
+msgid "Game Path:"
+msgstr "Chemin du Jeu:"
+
+#: gui/launcher.cpp:295 gui/options.cpp:1091
+msgid "Extra Path:"
+msgstr "Extra:"
+
+#: gui/launcher.cpp:295 gui/launcher.cpp:297 gui/launcher.cpp:298
+msgid "Specifies path to additional data used the game"
+msgstr "Définie un chemin vers des données suplémentaires utilisées par le jeu"
+
+#: gui/launcher.cpp:297 gui/options.cpp:1093
+msgctxt "lowres"
+msgid "Extra Path:"
+msgstr "Extra:"
+
+#: gui/launcher.cpp:302 gui/options.cpp:1079
+msgid "Save Path:"
+msgstr "Sauvegardes:"
+
+#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305
+#: gui/options.cpp:1079 gui/options.cpp:1081 gui/options.cpp:1082
+msgid "Specifies where your savegames are put"
+msgstr "Définie l'emplacement oů les fichiers de sauvegarde sont créés"
+
+#: gui/launcher.cpp:304 gui/options.cpp:1081
+msgctxt "lowres"
+msgid "Save Path:"
+msgstr "Sauvegardes:"
+
+#: gui/launcher.cpp:321 gui/launcher.cpp:404 gui/launcher.cpp:453
+#: gui/options.cpp:1088 gui/options.cpp:1094 gui/options.cpp:1101
+#: gui/options.cpp:1202 gui/options.cpp:1208 gui/options.cpp:1214
+#: gui/options.cpp:1222 gui/options.cpp:1246 gui/options.cpp:1250
+#: gui/options.cpp:1256 gui/options.cpp:1263 gui/options.cpp:1362
+msgctxt "path"
+msgid "None"
+msgstr "Aucun"
+
+#: gui/launcher.cpp:326 gui/launcher.cpp:408
+#: backends/platform/wii/options.cpp:56
+msgid "Default"
+msgstr "Défaut"
+
+#: gui/launcher.cpp:446 gui/options.cpp:1356
+msgid "Select SoundFont"
+msgstr "Choisir une banque de sons"
+
+#: gui/launcher.cpp:465 gui/launcher.cpp:612
+msgid "Select directory with game data"
+msgstr "Sélectionner le répertoire contenant les données du jeu"
+
+#: gui/launcher.cpp:483
+msgid "Select additional game directory"
+msgstr "Sélectionner un répertoire supplémentaire"
+
+#: gui/launcher.cpp:495
+msgid "Select directory for saved games"
+msgstr "Sélectionner le répertoire pour les sauvegardes"
+
+#: gui/launcher.cpp:514
+msgid "This game ID is already taken. Please choose another one."
+msgstr "Cet ID est déjŕ utilisé par un autre jeu. Choisissez en un autre svp."
+
+#: gui/launcher.cpp:555 engines/dialogs.cpp:110
+msgid "~Q~uit"
+msgstr "~Q~uitter"
+
+#: gui/launcher.cpp:555 backends/platform/sdl/macosx/appmenu_osx.mm:80
+msgid "Quit ScummVM"
+msgstr "Quitter ScummVM"
+
+#: gui/launcher.cpp:556
+msgid "A~b~out..."
+msgstr "Ŕ ~P~ropos..."
+
+#: gui/launcher.cpp:556 backends/platform/sdl/macosx/appmenu_osx.mm:61
+msgid "About ScummVM"
+msgstr "Ŕ propos de ScummVM"
+
+#: gui/launcher.cpp:557
+msgid "~O~ptions..."
+msgstr "~O~ptions..."
+
+#: gui/launcher.cpp:557
+msgid "Change global ScummVM options"
+msgstr "Change les options globales de ScummVM"
+
+#: gui/launcher.cpp:559
+msgid "~S~tart"
+msgstr "~D~émarrer"
+
+#: gui/launcher.cpp:559
+msgid "Start selected game"
+msgstr "Démarre le jeu sélectionné"
+
+#: gui/launcher.cpp:562
+msgid "~L~oad..."
+msgstr "~C~harger"
+
+#: gui/launcher.cpp:562
+msgid "Load savegame for selected game"
+msgstr "Charge une sauvegarde pour le jeu sélectionné"
+
+#: gui/launcher.cpp:567 gui/launcher.cpp:1055
+msgid "~A~dd Game..."
+msgstr "~A~jouter..."
+
+#: gui/launcher.cpp:567 gui/launcher.cpp:574
+msgid "Hold Shift for Mass Add"
+msgstr ""
+"Ajoute un jeu ŕ la Liste. Maintenez Shift enfoncée pour un Ajout Massif"
+
+#: gui/launcher.cpp:569
+msgid "~E~dit Game..."
+msgstr "~E~diter..."
+
+#: gui/launcher.cpp:569 gui/launcher.cpp:576
+msgid "Change game options"
+msgstr "Change les options du jeu"
+
+#: gui/launcher.cpp:571
+msgid "~R~emove Game"
+msgstr "~S~upprimer"
+
+#: gui/launcher.cpp:571 gui/launcher.cpp:578
+msgid "Remove game from the list. The game data files stay intact"
+msgstr "Supprime le jeu de la liste. Les fichiers sont conservés"
+
+#: gui/launcher.cpp:574 gui/launcher.cpp:1055
+msgctxt "lowres"
+msgid "~A~dd Game..."
+msgstr "~A~jouter..."
+
+#: gui/launcher.cpp:576
+msgctxt "lowres"
+msgid "~E~dit Game..."
+msgstr "~E~diter..."
+
+#: gui/launcher.cpp:578
+msgctxt "lowres"
+msgid "~R~emove Game"
+msgstr "~S~upprimer"
+
+#: gui/launcher.cpp:586
+msgid "Search in game list"
+msgstr "Recherche dans la liste de jeux"
+
+#: gui/launcher.cpp:590 gui/launcher.cpp:1102
+msgid "Search:"
+msgstr "Filtre:"
+
+#: gui/launcher.cpp:593 gui/options.cpp:826
+msgid "Clear value"
+msgstr "Effacer la valeur"
+
+#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255
+#: engines/mohawk/riven.cpp:716 engines/cruise/menu.cpp:216
+msgid "Load game:"
+msgstr "Charger le jeu:"
+
+#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/scumm/dialogs.cpp:188
+#: engines/mohawk/myst.cpp:255 engines/mohawk/riven.cpp:716
+#: engines/cruise/menu.cpp:216 backends/platform/wince/CEActionsPocket.cpp:267
+#: backends/platform/wince/CEActionsSmartphone.cpp:231
+msgid "Load"
+msgstr "Charger"
+
+#: gui/launcher.cpp:723
+msgid ""
+"Do you really want to run the mass game detector? This could potentially add "
+"a huge number of games."
+msgstr ""
+"Voulez-vous vraiment lancer la détection automatique des jeux? Cela peut "
+"potentiellement ajouter un grand nombre de jeux."
+
+#: gui/launcher.cpp:724 gui/launcher.cpp:872
+#: backends/events/symbiansdl/symbiansdl-events.cpp:184
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+msgid "Yes"
+msgstr "Oui"
+
+#: gui/launcher.cpp:724 gui/launcher.cpp:872
+#: backends/events/symbiansdl/symbiansdl-events.cpp:184
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+msgid "No"
+msgstr "Non"
+
+#: gui/launcher.cpp:772
+msgid "ScummVM couldn't open the specified directory!"
+msgstr "ScummVM n'a pas pu ouvrir le répertoire sélectionné."
+
+#: gui/launcher.cpp:784
+msgid "ScummVM could not find any game in the specified directory!"
+msgstr "ScummVM n'a pas trouvé de jeux dans le répertoire sélectionné."
+
+#: gui/launcher.cpp:798
+msgid "Pick the game:"
+msgstr "Choisissez le jeu:"
+
+#: gui/launcher.cpp:872
+msgid "Do you really want to remove this game configuration?"
+msgstr "Voulez-vous vraiment supprimer ce jeu?"
+
+#: gui/launcher.cpp:936
+msgid "This game does not support loading games from the launcher."
+msgstr ""
+"Le chargement de sauvegarde depuis le lanceur n'est pas supporté pour ce jeu."
+
+#: gui/launcher.cpp:940
+msgid "ScummVM could not find any engine capable of running the selected game!"
+msgstr "ScummVM n'a pas pu trouvé de moteur pour lancer le jeu sélectionné."
+
+#: gui/launcher.cpp:1054
+msgctxt "lowres"
+msgid "Mass Add..."
+msgstr "Ajout Massif..."
+
+#: gui/launcher.cpp:1054
+msgid "Mass Add..."
+msgstr "Ajout Massif..."
+
+#: gui/massadd.cpp:78 gui/massadd.cpp:81
+msgid "... progress ..."
+msgstr "... en cours ..."
+
+#: gui/massadd.cpp:258
+msgid "Scan complete!"
+msgstr "Examen terminé!"
+
+#: gui/massadd.cpp:261
+#, c-format
+msgid "Discovered %d new games, ignored %d previously added games."
+msgstr "%d nouveaux jeux trouvés, %d jeux ignorés (déjŕ ajoutés précédemment)."
+
+#: gui/massadd.cpp:265
+#, c-format
+msgid "Scanned %d directories ..."
+msgstr "%d répertoires examinés ..."
+
+#: gui/massadd.cpp:268
+#, c-format
+msgid "Discovered %d new games, ignored %d previously added games ..."
+msgstr ""
+"%d nouveaux jeux trouvés, %d jeux ignorés (déjŕ ajouté précédemment) ..."
+
+#: gui/options.cpp:72
+msgid "Never"
+msgstr "Jamais"
+
+#: gui/options.cpp:72
+msgid "every 5 mins"
+msgstr "Toutes les 5 mins"
+
+#: gui/options.cpp:72
+msgid "every 10 mins"
+msgstr "Toutes les 10 mins"
+
+#: gui/options.cpp:72
+msgid "every 15 mins"
+msgstr "Toutes les 15 mins"
+
+#: gui/options.cpp:72
+msgid "every 30 mins"
+msgstr "Toutes les 30 mins"
+
+#: gui/options.cpp:74
+msgid "8 kHz"
+msgstr "8 kHz"
+
+#: gui/options.cpp:74
+msgid "11kHz"
+msgstr "11 kHz"
+
+#: gui/options.cpp:74
+msgid "22 kHz"
+msgstr "22 kHz"
+
+#: gui/options.cpp:74
+msgid "44 kHz"
+msgstr "44 kHz"
+
+#: gui/options.cpp:74
+msgid "48 kHz"
+msgstr "48 kHz"
+
+#: gui/options.cpp:236 gui/options.cpp:464 gui/options.cpp:559
+#: gui/options.cpp:625 gui/options.cpp:825
+msgctxt "soundfont"
+msgid "None"
+msgstr "Aucune"
+
+#: gui/options.cpp:372
+msgid "Failed to apply some of the graphic options changes:"
+msgstr "Certaines options graphiques n'ont pu ętre changées:"
+
+#: gui/options.cpp:384
+msgid "the video mode could not be changed."
+msgstr "le mode vidéo n'a pu ętre changé."
+
+#: gui/options.cpp:390
+msgid "the fullscreen setting could not be changed"
+msgstr "le mode plein écran n'a pu ętre changé."
+
+#: gui/options.cpp:396
+msgid "the aspect ratio setting could not be changed"
+msgstr "la correction de rapport d'aspect n'a pu ętre changée."
+
+#: gui/options.cpp:705
+msgid "Graphics mode:"
+msgstr "Mode graphique:"
+
+#: gui/options.cpp:716
+msgid "Render mode:"
+msgstr "Mode de rendu:"
+
+#: gui/options.cpp:716 gui/options.cpp:717
+msgid "Special dithering modes supported by some games"
+msgstr "Mode spécial de tramage supporté par certains jeux"
+
+#: gui/options.cpp:726
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2247
+#: backends/graphics/openglsdl/openglsdl-graphics.cpp:472
+msgid "Fullscreen mode"
+msgstr "Plein écran"
+
+#: gui/options.cpp:729
+msgid "Aspect ratio correction"
+msgstr "Correction du rapport d'aspect"
+
+#: gui/options.cpp:729
+msgid "Correct aspect ratio for 320x200 games"
+msgstr "Corrige le rapport d'aspect pour les jeu 320x200"
+
+#: gui/options.cpp:730
+msgid "EGA undithering"
+msgstr "Détramage EGA"
+
+#: gui/options.cpp:730
+msgid "Enable undithering in EGA games that support it"
+msgstr "Active le détramage dans les jeux EGA qui le supporte"
+
+#: gui/options.cpp:738
+msgid "Preferred Device:"
+msgstr "Sortie Préféré:"
+
+#: gui/options.cpp:738
+msgid "Music Device:"
+msgstr "Sortie Audio:"
+
+#: gui/options.cpp:738 gui/options.cpp:740
+msgid "Specifies preferred sound device or sound card emulator"
+msgstr ""
+"Spécifie le périphérique de sortie audio ou l'émulateur de carte audio "
+"préféré"
+
+#: gui/options.cpp:738 gui/options.cpp:740 gui/options.cpp:741
+msgid "Specifies output sound device or sound card emulator"
+msgstr "Spécifie le périphérique de sortie audio ou l'émulateur de carte audio"
+
+#: gui/options.cpp:740
+msgctxt "lowres"
+msgid "Preferred Dev.:"
+msgstr "Sortie Préféré:"
+
+#: gui/options.cpp:740
+msgctxt "lowres"
+msgid "Music Device:"
+msgstr "Sortie Audio:"
+
+#: gui/options.cpp:766
+msgid "AdLib emulator:"
+msgstr "Émulateur AdLib:"
+
+#: gui/options.cpp:766 gui/options.cpp:767
+msgid "AdLib is used for music in many games"
+msgstr "AdLib est utilisé pour la musique dans de nombreux jeux"
+
+#: gui/options.cpp:777
+msgid "Output rate:"
+msgstr "Fréquence:"
+
+#: gui/options.cpp:777 gui/options.cpp:778
+msgid ""
+"Higher value specifies better sound quality but may be not supported by your "
+"soundcard"
+msgstr ""
+"Une valeur plus élevée donne une meilleure qualité audio mais peut ne pas "
+"ętre supporté par votre carte son"
+
+#: gui/options.cpp:788
+msgid "GM Device:"
+msgstr "Sortie GM:"
+
+#: gui/options.cpp:788
+msgid "Specifies default sound device for General MIDI output"
+msgstr "Spécifie le périphérique audio par défaut pour la sortie General MIDI"
+
+#: gui/options.cpp:799
+msgid "Don't use General MIDI music"
+msgstr "Ne pas utiliser la musique General MIDI"
+
+#: gui/options.cpp:810 gui/options.cpp:871
+msgid "Use first available device"
+msgstr "Utiliser le premier périphérique disponible"
+
+#: gui/options.cpp:822
+msgid "SoundFont:"
+msgstr "Banque de sons:"
+
+#: gui/options.cpp:822 gui/options.cpp:824 gui/options.cpp:825
+msgid "SoundFont is supported by some audio cards, Fluidsynth and Timidity"
+msgstr ""
+"La banque de sons (SoundFont) est utilisée par certaines cartes audio, "
+"Fluidsynth et Timidity"
+
+#: gui/options.cpp:824
+msgctxt "lowres"
+msgid "SoundFont:"
+msgstr "SoundFont:"
+
+#: gui/options.cpp:829
+msgid "Mixed AdLib/MIDI mode"
+msgstr "Mode mixe AdLib/MIDI"
+
+#: gui/options.cpp:829
+msgid "Use both MIDI and AdLib sound generation"
+msgstr "Utiliser ŕ la fois MIDI et AdLib"
+
+#: gui/options.cpp:832
+msgid "MIDI gain:"
+msgstr "Gain MIDI:"
+
+#: gui/options.cpp:842
+msgid "MT-32 Device:"
+msgstr "Sortie MT-32:"
+
+#: gui/options.cpp:842
+msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
+msgstr ""
+"Spécifie le périphérique audio par défaut pour la sortie Roland MT-32/LAPC1/"
+"CM32l/CM64"
+
+#: gui/options.cpp:847
+msgid "True Roland MT-32 (disable GM emulation)"
+msgstr "Roland MT-32 exacte (désactive l'émulation GM)"
+
+#: gui/options.cpp:847 gui/options.cpp:849
+msgid ""
+"Check if you want to use your real hardware Roland-compatible sound device "
+"connected to your computer"
+msgstr ""
+"Vérifie si vous voulez utiliser un périphérique audio compatible Roland "
+"connecté ŕ l'ordinateur"
+
+#: gui/options.cpp:849
+msgctxt "lowres"
+msgid "True Roland MT-32 (no GM emulation)"
+msgstr "Roland MT-32 exacte (pas d'ému GM)"
+
+#: gui/options.cpp:852
+msgid "Enable Roland GS Mode"
+msgstr "Activer le mode Roland GS"
+
+#: gui/options.cpp:852
+msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack"
+msgstr "Désactiver la conversion des pistes MT-32 en General MIDI"
+
+#: gui/options.cpp:861
+msgid "Don't use Roland MT-32 music"
+msgstr "Ne pas utiliser la musique Roland MT-32"
+
+#: gui/options.cpp:888
+msgid "Text and Speech:"
+msgstr "Dialogue:"
+
+#: gui/options.cpp:892 gui/options.cpp:902
+msgid "Speech"
+msgstr "Voix"
+
+#: gui/options.cpp:893 gui/options.cpp:903
+msgid "Subtitles"
+msgstr "Sous-titres"
+
+#: gui/options.cpp:894
+msgid "Both"
+msgstr "Les deux"
+
+#: gui/options.cpp:896
+msgid "Subtitle speed:"
+msgstr "Vitesse des ST:"
+
+#: gui/options.cpp:898
+msgctxt "lowres"
+msgid "Text and Speech:"
+msgstr "Dialogue:"
+
+#: gui/options.cpp:902
+msgid "Spch"
+msgstr "Voix"
+
+#: gui/options.cpp:903
+msgid "Subs"
+msgstr "Subs"
+
+#: gui/options.cpp:904
+msgctxt "lowres"
+msgid "Both"
+msgstr "V&S"
+
+#: gui/options.cpp:904
+msgid "Show subtitles and play speech"
+msgstr "Affiche les sous-titres et joue les dialogues audio"
+
+#: gui/options.cpp:906
+msgctxt "lowres"
+msgid "Subtitle speed:"
+msgstr "Vitesse des ST:"
+
+#: gui/options.cpp:922
+msgid "Music volume:"
+msgstr "Volume Musique:"
+
+#: gui/options.cpp:924
+msgctxt "lowres"
+msgid "Music volume:"
+msgstr "Musique:"
+
+#: gui/options.cpp:931
+msgid "Mute All"
+msgstr "Silence"
+
+#: gui/options.cpp:934
+msgid "SFX volume:"
+msgstr "Volume Bruitage:"
+
+#: gui/options.cpp:934 gui/options.cpp:936 gui/options.cpp:937
+msgid "Special sound effects volume"
+msgstr "Volume des effets spéciaux sonores"
+
+#: gui/options.cpp:936
+msgctxt "lowres"
+msgid "SFX volume:"
+msgstr "Bruitage:"
+
+#: gui/options.cpp:944
+msgid "Speech volume:"
+msgstr "Volume Dialogues:"
+
+#: gui/options.cpp:946
+msgctxt "lowres"
+msgid "Speech volume:"
+msgstr "Dialogues:"
+
+#: gui/options.cpp:1085
+msgid "Theme Path:"
+msgstr "Thčmes:"
+
+#: gui/options.cpp:1087
+msgctxt "lowres"
+msgid "Theme Path:"
+msgstr "Thčmes:"
+
+#: gui/options.cpp:1091 gui/options.cpp:1093 gui/options.cpp:1094
+msgid "Specifies path to additional data used by all games or ScummVM"
+msgstr ""
+"Spécifie un chemin vers des données supplémentaires utilisées par tous les "
+"jeux ou ScummVM"
+
+#: gui/options.cpp:1098
+msgid "Plugins Path:"
+msgstr "Plugins:"
+
+#: gui/options.cpp:1100
+msgctxt "lowres"
+msgid "Plugins Path:"
+msgstr "Plugins:"
+
+#: gui/options.cpp:1109
+msgid "Misc"
+msgstr "Divers"
+
+#: gui/options.cpp:1111
+msgctxt "lowres"
+msgid "Misc"
+msgstr "Divers"
+
+#: gui/options.cpp:1113
+msgid "Theme:"
+msgstr "Thčme:"
+
+#: gui/options.cpp:1117
+msgid "GUI Renderer:"
+msgstr "Interface:"
+
+#: gui/options.cpp:1129
+msgid "Autosave:"
+msgstr "Sauvegarde auto:"
+
+#: gui/options.cpp:1131
+msgctxt "lowres"
+msgid "Autosave:"
+msgstr "Sauvegarde:"
+
+#: gui/options.cpp:1139
+msgid "Keys"
+msgstr "Touches"
+
+#: gui/options.cpp:1146
+msgid "GUI Language:"
+msgstr "Langue:"
+
+#: gui/options.cpp:1146
+msgid "Language of ScummVM GUI"
+msgstr "Langue de l'interface graphique de ScummVM"
+
+#: gui/options.cpp:1295
+msgid "You have to restart ScummVM before your changes will take effect."
+msgstr ""
+"Vous devez relancer ScummVM pour que le changement soit pris en compte."
+
+#: gui/options.cpp:1308
+msgid "Select directory for savegames"
+msgstr "Sélectionner le répertoire pour les sauvegardes"
+
+#: gui/options.cpp:1315
+msgid "The chosen directory cannot be written to. Please select another one."
+msgstr ""
+"Le répertoire sélectionné est vérouillé en écriture. Sélectionnez un autre "
+"répertoire."
+
+#: gui/options.cpp:1324
+msgid "Select directory for GUI themes"
+msgstr "Sélectionner le répertoire des thčmes d'interface"
+
+#: gui/options.cpp:1334
+msgid "Select directory for extra files"
+msgstr "Sélectionner le répertoire pour les fichiers suplémentaires"
+
+#: gui/options.cpp:1345
+msgid "Select directory for plugins"
+msgstr "Sélectionner le répertoire des plugins"
+
+#: gui/options.cpp:1389
+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 ""
+"Le thčme que vous avez sélectioné ne support pas la langue française. Si "
+"vous voulez l'utiliser vous devez d'abord changer de langue."
+
+#: gui/saveload.cpp:58 gui/saveload.cpp:239
+msgid "No date saved"
+msgstr "Date inconnue"
+
+#: gui/saveload.cpp:59 gui/saveload.cpp:240
+msgid "No time saved"
+msgstr "Heure inconnue"
+
+#: gui/saveload.cpp:60 gui/saveload.cpp:241
+msgid "No playtime saved"
+msgstr "Durée de jeu inconnue"
+
+#: gui/saveload.cpp:67 gui/saveload.cpp:155
+msgid "Delete"
+msgstr "Supprimer"
+
+#: gui/saveload.cpp:154
+msgid "Do you really want to delete this savegame?"
+msgstr "Voulez-vous vraiment supprimer cette sauvegarde?"
+
+#: gui/saveload.cpp:264
+msgid "Date: "
+msgstr "Date: "
+
+#: gui/saveload.cpp:268
+msgid "Time: "
+msgstr "Heure: "
+
+#: gui/saveload.cpp:274
+msgid "Playtime: "
+msgstr "Durée de jeu: "
+
+#: gui/saveload.cpp:287 gui/saveload.cpp:354
+msgid "Untitled savestate"
+msgstr "Sauvegarde sans nom"
+
+#: gui/themebrowser.cpp:44
+msgid "Select a Theme"
+msgstr "Sélectionnez un Thčme"
+
+#: gui/ThemeEngine.cpp:328
+msgid "Disabled GFX"
+msgstr "GFX désactivé"
+
+#: gui/ThemeEngine.cpp:328
+msgctxt "lowres"
+msgid "Disabled GFX"
+msgstr "GFX désactivé"
+
+#: gui/ThemeEngine.cpp:329
+msgid "Standard Renderer (16bpp)"
+msgstr "Rendu Standard (16bpp)"
+
+#: gui/ThemeEngine.cpp:329
+msgid "Standard (16bpp)"
+msgstr "Standard (16bpp)"
+
+#: gui/ThemeEngine.cpp:331
+msgid "Antialiased Renderer (16bpp)"
+msgstr "Rendu Anti-crénelé (16 bpp)"
+
+#: gui/ThemeEngine.cpp:331
+msgid "Antialiased (16bpp)"
+msgstr "Anti-crénelé (16 bpp)"
+
+#: base/main.cpp:206
+#, c-format
+msgid "Engine does not support debug level '%s'"
+msgstr "Le niveau de debug '%s' n'est pas supporté par ce moteur de jeu"
+
+#: base/main.cpp:274
+msgid "Menu"
+msgstr "Menu"
+
+#: base/main.cpp:277 backends/platform/symbian/src/SymbianActions.cpp:45
+#: backends/platform/wince/CEActionsPocket.cpp:45
+#: backends/platform/wince/CEActionsSmartphone.cpp:46
+msgid "Skip"
+msgstr "Passer"
+
+#: base/main.cpp:280 backends/platform/symbian/src/SymbianActions.cpp:50
+#: backends/platform/wince/CEActionsPocket.cpp:42
+msgid "Pause"
+msgstr "Mettre en pause"
+
+#: base/main.cpp:283
+msgid "Skip line"
+msgstr "Passer la phrase"
+
+#: base/main.cpp:442
+msgid "Error running game:"
+msgstr "Erreur lors de l'éxécution du jeu:"
+
+#: base/main.cpp:466
+msgid "Could not find any engine capable of running the selected game"
+msgstr "Impossible de trouver un moteur pour exécuter le jeu sélectionné"
+
+#: common/error.cpp:38
+msgid "No error"
+msgstr "Pas d'erreur"
+
+#: common/error.cpp:40
+msgid "Game data not found"
+msgstr "Fichier de donées introuvable"
+
+#: common/error.cpp:42
+msgid "Game id not supported"
+msgstr "ID de jeu non supporté"
+
+#: common/error.cpp:44
+msgid "Unsupported color mode"
+msgstr "Mode de couleurs non supporté"
+
+#: common/error.cpp:47
+msgid "Read permission denied"
+msgstr "Véroullié en lecture"
+
+#: common/error.cpp:49
+msgid "Write permission denied"
+msgstr "Verrouillé en écriture"
+
+#: common/error.cpp:52
+msgid "Path does not exist"
+msgstr "Chemin inexistant"
+
+#: common/error.cpp:54
+msgid "Path not a directory"
+msgstr "Chemin n'est pas un répertoire"
+
+#: common/error.cpp:56
+msgid "Path not a file"
+msgstr "Chemin n'est pas un fichier"
+
+#: common/error.cpp:59
+msgid "Cannot create file"
+msgstr "Impossible de créer le fichier"
+
+#: common/error.cpp:61
+msgid "Reading data failed"
+msgstr "Echec de la lecture"
+
+#: common/error.cpp:63
+msgid "Writing data failed"
+msgstr "Echec de l'écriture des données"
+
+#: common/error.cpp:66
+msgid "Could not find suitable engine plugin"
+msgstr "Aucun plugin n'a pu ętre trouvé pour ce jeu"
+
+#: common/error.cpp:68
+msgid "Engine plugin does not support save states"
+msgstr "Ce moteur de jeu ne supporte pas les sauvegardes"
+
+#: common/error.cpp:71
+msgid "User canceled"
+msgstr "Annuler par l'utilisateur"
+
+#: common/error.cpp:75
+msgid "Unknown error"
+msgstr "Erreur inconnue"
+
+#. I18N: Hercules is graphics card name
+#: common/util.cpp:275
+msgid "Hercules Green"
+msgstr "Hercules Vert"
+
+#: common/util.cpp:276
+msgid "Hercules Amber"
+msgstr "Hercules Ambre"
+
+#: common/util.cpp:283
+msgctxt "lowres"
+msgid "Hercules Green"
+msgstr "Hercules Vert"
+
+#: common/util.cpp:284
+msgctxt "lowres"
+msgid "Hercules Amber"
+msgstr "Hercules Ambre"
+
+#: engines/advancedDetector.cpp:296
+#, c-format
+msgid "The game in '%s' seems to be unknown."
+msgstr "Le jeu dans '%s' n'est pas reconnu."
+
+#: engines/advancedDetector.cpp:297
+msgid "Please, report the following data to the ScummVM team along with name"
+msgstr ""
+"Veuillez reporter les informations suivantes ŕ l'équipe ScummVM ainsi que le "
+"nom"
+
+#: engines/advancedDetector.cpp:299
+msgid "of the game you tried to add and its version/language/etc.:"
+msgstr "du jeu que vous avez essayé d'ajouter, sa version, le langage, etc..."
+
+#: engines/dialogs.cpp:84
+msgid "~R~esume"
+msgstr "~R~eprendre"
+
+#: engines/dialogs.cpp:86
+msgid "~L~oad"
+msgstr "~C~harger"
+
+#: engines/dialogs.cpp:90
+msgid "~S~ave"
+msgstr "~S~auver"
+
+#: engines/dialogs.cpp:94
+msgid "~O~ptions"
+msgstr "~O~ptions"
+
+#: engines/dialogs.cpp:99
+msgid "~H~elp"
+msgstr "~A~ide"
+
+#: engines/dialogs.cpp:101
+msgid "~A~bout"
+msgstr "Ŕ ~P~ropos"
+
+#: engines/dialogs.cpp:104 engines/dialogs.cpp:182
+msgid "~R~eturn to Launcher"
+msgstr "Retour au ~L~anceur"
+
+#: engines/dialogs.cpp:106 engines/dialogs.cpp:184
+msgctxt "lowres"
+msgid "~R~eturn to Launcher"
+msgstr "Retour au ~L~anceur"
+
+#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214
+#: engines/sci/engine/kfile.cpp:575
+msgid "Save game:"
+msgstr "Sauvegarde:"
+
+#: engines/dialogs.cpp:116 engines/scumm/dialogs.cpp:187
+#: engines/cruise/menu.cpp:214 engines/sci/engine/kfile.cpp:575
+#: backends/platform/symbian/src/SymbianActions.cpp:44
+#: backends/platform/wince/CEActionsPocket.cpp:43
+#: backends/platform/wince/CEActionsPocket.cpp:267
+#: backends/platform/wince/CEActionsSmartphone.cpp:45
+#: backends/platform/wince/CEActionsSmartphone.cpp:231
+msgid "Save"
+msgstr "Sauver"
+
+#: engines/dialogs.cpp:146
+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 ""
+"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."
+
+#: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:109
+#: engines/mohawk/dialogs.cpp:174
+msgid "~O~K"
+msgstr "~O~K"
+
+#: engines/dialogs.cpp:309 engines/mohawk/dialogs.cpp:110
+#: engines/mohawk/dialogs.cpp:175
+msgid "~C~ancel"
+msgstr "~A~nnuler"
+
+#: engines/dialogs.cpp:312
+msgid "~K~eys"
+msgstr "~T~ouches"
+
+#: engines/engine.cpp:233
+msgid "Could not initialize color format."
+msgstr "Impossible d'initialiser le format des couleurs."
+
+#: engines/engine.cpp:241
+msgid "Could not switch to video mode: '"
+msgstr "Impossible de changer le mode vidéo ŕ: '"
+
+#: engines/engine.cpp:250
+msgid "Could not apply aspect ratio setting."
+msgstr "Impossible d'appliquer la correction du rapport d'aspect."
+
+#: engines/engine.cpp:255
+msgid "Could not apply fullscreen setting."
+msgstr "Impossible d'appliquer l'option plein écran."
+
+#: engines/engine.cpp:355
+msgid ""
+"You appear to be playing this game directly\n"
+"from the CD. This is known to cause problems,\n"
+"and it is therefore recommended that you copy\n"
+"the data files to your hard disk instead.\n"
+"See the README file for details."
+msgstr ""
+"Il semble que vous essayez de jouez directement\n"
+"depuis le CD. Cela peut occasionner des problčmes\n"
+"et il est donc recommandé de copier les fichier de\n"
+"données du jeu sur votre disque dur.\n"
+"Lisez le fichier README pour plus de détails."
+
+#: engines/engine.cpp:366
+msgid ""
+"This game has audio tracks in its disk. These\n"
+"tracks need to be ripped from the disk using\n"
+"an appropriate CD audio extracting tool in\n"
+"order to listen to the game's music.\n"
+"See the README file for details."
+msgstr ""
+"Ce jeu possčde des pistes audio sur le CD. Pour\n"
+"profiter de la musique, ces pistes doivent ętre\n"
+"extraite du CD et réencodée en utilisant un\n"
+"logiciel approprié.\n"
+"Lisez le fichier README pour plus de détails."
+
+#: engines/engine.cpp:433
+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 ""
+"Attention:le jeu que vous vous apprętez ŕ jouer n'est pas encore "
+"complčtement supporté par ScummVM. Il est donc instable et les sauvegardes "
+"peuvent ne pas marcher avec une future version de ScummVM."
+
+#: engines/engine.cpp:436
+msgid "Start anyway"
+msgstr "Jouer quand męme"
+
+#: engines/scumm/dialogs.cpp:175
+#, c-format
+msgid "Insert Disk %c and Press Button to Continue."
+msgstr "Insérer le Disque %c et appuyer sur le Bouton pour Continuer."
+
+#: engines/scumm/dialogs.cpp:176
+#, c-format
+msgid "Unable to Find %s, (%c%d) Press Button."
+msgstr "Impossible de trouver %s, (%c%d) Appuyer sur le Bouton."
+
+#: engines/scumm/dialogs.cpp:177
+#, c-format
+msgid "Error reading disk %c, (%c%d) Press Button."
+msgstr "Erreur lors de la lecture du disque %c, (%c%d). Appuyer sur le Bouton."
+
+#: engines/scumm/dialogs.cpp:178
+msgid "Game Paused. Press SPACE to Continue."
+msgstr "Jeu en pause. Appuyer sur Espace pour Reprendre."
+
+#. 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
+msgid "Are you sure you want to restart? (Y/N)"
+msgstr "Voulez-vous vraiment recommencer? (O/N)"
+
+#. I18N: you may specify 'Yes' symbol at the endo fo the line. See previous comment
+#: engines/scumm/dialogs.cpp:184
+msgid "Are you sure you want to quit? (Y/N)"
+msgstr "Voulez-vous vraiment quitter? (O/N)"
+
+#: engines/scumm/dialogs.cpp:189
+msgid "Play"
+msgstr "Jouer"
+
+#: 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
+#: backends/platform/wince/CEActionsSmartphone.cpp:52
+#: backends/events/default/default-events.cpp:244
+msgid "Quit"
+msgstr "Quitter"
+
+#: engines/scumm/dialogs.cpp:193
+msgid "Insert save/load game disk"
+msgstr "Insérer le disque de sauvegarde/chargement"
+
+#: engines/scumm/dialogs.cpp:194
+msgid "You must enter a name"
+msgstr "Vous devez entrer un nom"
+
+#: engines/scumm/dialogs.cpp:195
+msgid "The game was NOT saved (disk full?)"
+msgstr "Le jeu n'a pu ętre sauvé (disque plein?)"
+
+#: engines/scumm/dialogs.cpp:196
+msgid "The game was NOT loaded"
+msgstr "Le jeu n'a pu ętre chargé"
+
+#: engines/scumm/dialogs.cpp:197
+#, c-format
+msgid "Saving '%s'"
+msgstr "Sauvegarde de '%s'"
+
+#: engines/scumm/dialogs.cpp:198
+#, c-format
+msgid "Loading '%s'"
+msgstr "Chargement de '%s'"
+
+#: engines/scumm/dialogs.cpp:199
+msgid "Name your SAVE game"
+msgstr "Donnez un nom ŕ votre sauvegarde"
+
+#: engines/scumm/dialogs.cpp:200
+msgid "Select a game to LOAD"
+msgstr "Sélectionnez un jeu ŕ charger"
+
+#: engines/scumm/dialogs.cpp:201
+msgid "Game title)"
+msgstr "Nom du jeu)"
+
+#. I18N: Previous page button
+#: engines/scumm/dialogs.cpp:287
+msgid "~P~revious"
+msgstr "~P~récédent"
+
+#. I18N: Next page button
+#: engines/scumm/dialogs.cpp:289
+msgid "~N~ext"
+msgstr "~S~uivant"
+
+#: engines/scumm/dialogs.cpp:290
+#: backends/platform/ds/arm9/source/dsoptions.cpp:56
+msgid "~C~lose"
+msgstr "~F~ermer"
+
+#: engines/scumm/dialogs.cpp:597
+msgid "Speech Only"
+msgstr "Voix"
+
+#: engines/scumm/dialogs.cpp:598
+msgid "Speech and Subtitles"
+msgstr "Voix et Sous-titres"
+
+#: engines/scumm/dialogs.cpp:599
+msgid "Subtitles Only"
+msgstr "Sous-titres"
+
+#: engines/scumm/dialogs.cpp:607
+msgctxt "lowres"
+msgid "Speech & Subs"
+msgstr "Voix & ST"
+
+#: engines/scumm/help.cpp:73
+msgid "Common keyboard commands:"
+msgstr "Commandes clavier communes:"
+
+#: engines/scumm/help.cpp:74
+msgid "Save / Load dialog"
+msgstr "Dialogue de Sauvegarde/Chargement"
+
+#: engines/scumm/help.cpp:76
+msgid "Skip line of text"
+msgstr "Passer la phrase"
+
+#: engines/scumm/help.cpp:77
+msgid "Esc"
+msgstr "Esc"
+
+#: engines/scumm/help.cpp:77
+msgid "Skip cutscene"
+msgstr "Passer la séquence"
+
+#: engines/scumm/help.cpp:78
+msgid "Space"
+msgstr "Espace"
+
+#: engines/scumm/help.cpp:78
+msgid "Pause game"
+msgstr "Mettre en pause:"
+
+#: 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 "Charger sauvegarde 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
+msgid "Alt"
+msgstr "Alt"
+
+#: engines/scumm/help.cpp:80
+msgid "Save game state 1-10"
+msgstr "Écrire sauvegarde 1-10:"
+
+#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:89
+msgid "Enter"
+msgstr "Entrer"
+
+#: engines/scumm/help.cpp:86
+msgid "Toggle fullscreen"
+msgstr "Basculer en plein écran"
+
+#: engines/scumm/help.cpp:87
+msgid "Music volume up / down"
+msgstr "Augmenter / Diminuer volume musique"
+
+#: engines/scumm/help.cpp:88
+msgid "Text speed slower / faster"
+msgstr "Diminuer/Augmenter vitesse du texte"
+
+#: engines/scumm/help.cpp:89
+msgid "Simulate left mouse button"
+msgstr "Simuler bouton gauche de la souris"
+
+#: engines/scumm/help.cpp:90
+msgid "Tab"
+msgstr "Tab"
+
+#: engines/scumm/help.cpp:90
+msgid "Simulate right mouse button"
+msgstr "Simuler bouton droit de la souris"
+
+#: engines/scumm/help.cpp:93
+msgid "Special keyboard commands:"
+msgstr "Commandes clavier spéciales:"
+
+#: engines/scumm/help.cpp:94
+msgid "Show / Hide console"
+msgstr "Afficher/Cacher la console"
+
+#: engines/scumm/help.cpp:95
+msgid "Start the debugger"
+msgstr "Ouvrir le débugger"
+
+#: engines/scumm/help.cpp:96
+msgid "Show memory consumption"
+msgstr "Afficher la consomation de mémoire"
+
+#: engines/scumm/help.cpp:97
+msgid "Run in fast mode (*)"
+msgstr "Jouer en mode rapide (*)"
+
+#: engines/scumm/help.cpp:98
+msgid "Run in really fast mode (*)"
+msgstr "Jouer en mode trčs rapide (*)"
+
+#: engines/scumm/help.cpp:99
+msgid "Toggle mouse capture"
+msgstr "Capturer/Libérer la souris"
+
+#: engines/scumm/help.cpp:100
+msgid "Switch between graphics filters"
+msgstr "Changer de filtre graphique"
+
+#: engines/scumm/help.cpp:101
+msgid "Increase / Decrease scale factor"
+msgstr "Augmenter/Diminuer le facteur d'échelle"
+
+#: engines/scumm/help.cpp:102
+msgid "Toggle aspect-ratio correction"
+msgstr "Changer correction du rapport d'aspect"
+
+#: engines/scumm/help.cpp:107
+msgid "* Note that using ctrl-f and"
+msgstr "* Note que l'utilisation de crtl-f et"
+
+#: engines/scumm/help.cpp:108
+msgid " ctrl-g are not recommended"
+msgstr " crtl-g n'est pas recommandé car"
+
+#: engines/scumm/help.cpp:109
+msgid " since they may cause crashes"
+msgstr " elle peut causer des plantages ou"
+
+#: engines/scumm/help.cpp:110
+msgid " or incorrect game behavior."
+msgstr " ou comportement incorrect du jeu."
+
+#: engines/scumm/help.cpp:114
+msgid "Spinning drafts on the keyboard:"
+msgstr "Filage au clavier:"
+
+#: engines/scumm/help.cpp:116
+msgid "Main game controls:"
+msgstr "Controles principaux du jeu:"
+
+#: engines/scumm/help.cpp:121 engines/scumm/help.cpp:136
+#: engines/scumm/help.cpp:161
+msgid "Push"
+msgstr "Pousser"
+
+#: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137
+#: engines/scumm/help.cpp:162
+msgid "Pull"
+msgstr "Tirer"
+
+#: 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 "Donner"
+
+#: 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 "Ouvrir"
+
+#: engines/scumm/help.cpp:126
+msgid "Go to"
+msgstr "Aller"
+
+#: engines/scumm/help.cpp:127
+msgid "Get"
+msgstr "Prendre"
+
+#: 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 "Utiliser"
+
+#: engines/scumm/help.cpp:129 engines/scumm/help.cpp:141
+msgid "Read"
+msgstr "Lire"
+
+#: engines/scumm/help.cpp:130 engines/scumm/help.cpp:147
+msgid "New kid"
+msgstr "Changer"
+
+#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:153
+#: engines/scumm/help.cpp:171
+msgid "Turn on"
+msgstr "Allumer"
+
+#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:154
+#: engines/scumm/help.cpp:172
+msgid "Turn off"
+msgstr "Éteindre"
+
+#: engines/scumm/help.cpp:142 engines/scumm/help.cpp:167
+#: engines/scumm/help.cpp:194
+msgid "Walk to"
+msgstr "Aller"
+
+#: 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 "Prendre"
+
+#: engines/scumm/help.cpp:144 engines/scumm/help.cpp:169
+msgid "What is"
+msgstr "Qu'est-ce"
+
+#: engines/scumm/help.cpp:146
+msgid "Unlock"
+msgstr "Déverrouiller"
+
+#: engines/scumm/help.cpp:149
+msgid "Put on"
+msgstr "Mettre"
+
+#: engines/scumm/help.cpp:150
+msgid "Take off"
+msgstr "Enlever"
+
+#: engines/scumm/help.cpp:156
+msgid "Fix"
+msgstr "Réparer"
+
+#: engines/scumm/help.cpp:158
+msgid "Switch"
+msgstr "Commuter"
+
+#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:228
+msgid "Look"
+msgstr "Regarder"
+
+#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:223
+msgid "Talk"
+msgstr "Parler"
+
+#: engines/scumm/help.cpp:174
+msgid "Travel"
+msgstr "Voyager"
+
+#: engines/scumm/help.cpp:175
+msgid "To Henry / To Indy"
+msgstr "Henry / Indy"
+
+#. I18N: These are different musical notes
+#: engines/scumm/help.cpp:179
+msgid "play C minor on distaff"
+msgstr "jouer Do mineur sur la quenouille"
+
+#: engines/scumm/help.cpp:180
+msgid "play D on distaff"
+msgstr "jouer Ré sur la quenouille"
+
+#: engines/scumm/help.cpp:181
+msgid "play E on distaff"
+msgstr "jouer Mi sur la quenouille"
+
+#: engines/scumm/help.cpp:182
+msgid "play F on distaff"
+msgstr "jouer Fa sur la quenouille"
+
+#: engines/scumm/help.cpp:183
+msgid "play G on distaff"
+msgstr "jouer Sol sur la quenouille"
+
+#: engines/scumm/help.cpp:184
+msgid "play A on distaff"
+msgstr "jouer La sur la quenouille"
+
+#: engines/scumm/help.cpp:185
+msgid "play B on distaff"
+msgstr "jouer Si sur la quenouille"
+
+#: engines/scumm/help.cpp:186
+msgid "play C major on distaff"
+msgstr "jouer Do Majeur sur la quenouille"
+
+#: engines/scumm/help.cpp:192 engines/scumm/help.cpp:214
+msgid "puSh"
+msgstr "Pousser"
+
+#: engines/scumm/help.cpp:193 engines/scumm/help.cpp:215
+msgid "pull (Yank)"
+msgstr "Tirer"
+
+#: engines/scumm/help.cpp:196 engines/scumm/help.cpp:212
+#: engines/scumm/help.cpp:248
+msgid "Talk to"
+msgstr "Parler ŕ"
+
+#: engines/scumm/help.cpp:199 engines/scumm/help.cpp:211
+msgid "Look at"
+msgstr "Regarder"
+
+#: engines/scumm/help.cpp:200
+msgid "turn oN"
+msgstr "Allumer"
+
+#: engines/scumm/help.cpp:201
+msgid "turn oFf"
+msgstr "Éteindre"
+
+#: engines/scumm/help.cpp:217
+msgid "KeyUp"
+msgstr "Touche Haut"
+
+#: engines/scumm/help.cpp:217
+msgid "Highlight prev dialogue"
+msgstr "Sélectionner le dialogue précédent"
+
+#: engines/scumm/help.cpp:218
+msgid "KeyDown"
+msgstr "Touche Bas"
+
+#: engines/scumm/help.cpp:218
+msgid "Highlight next dialogue"
+msgstr "Sélectionner le dialogue suivant"
+
+#: engines/scumm/help.cpp:222
+msgid "Walk"
+msgstr "Marcher"
+
+#: engines/scumm/help.cpp:225 engines/scumm/help.cpp:234
+#: engines/scumm/help.cpp:241 engines/scumm/help.cpp:249
+msgid "Inventory"
+msgstr "Inventaire"
+
+#: engines/scumm/help.cpp:226
+msgid "Object"
+msgstr "Objet"
+
+#: engines/scumm/help.cpp:229
+msgid "Black and White / Color"
+msgstr "Noir et Blanc / Couleur"
+
+#: engines/scumm/help.cpp:232
+msgid "Eyes"
+msgstr "Yeux"
+
+#: engines/scumm/help.cpp:233
+msgid "Tongue"
+msgstr "Langue"
+
+#: engines/scumm/help.cpp:235
+msgid "Punch"
+msgstr "Frapper"
+
+#: engines/scumm/help.cpp:236
+msgid "Kick"
+msgstr "Coup de pied"
+
+#: engines/scumm/help.cpp:239 engines/scumm/help.cpp:247
+msgid "Examine"
+msgstr "Examiner"
+
+#: engines/scumm/help.cpp:240
+msgid "Regular cursor"
+msgstr "Curseur normal"
+
+#. I18N: Comm is a communication device
+#: engines/scumm/help.cpp:243
+msgid "Comm"
+msgstr "Comm"
+
+#: engines/scumm/help.cpp:246
+msgid "Save / Load / Options"
+msgstr "Sauvegarder / Charger / Options"
+
+#: engines/scumm/help.cpp:255
+msgid "Other game controls:"
+msgstr "Autres controles du jeu:"
+
+#: engines/scumm/help.cpp:257 engines/scumm/help.cpp:267
+msgid "Inventory:"
+msgstr "Inventaires:"
+
+#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:274
+msgid "Scroll list up"
+msgstr "Faire défiler vers le haut"
+
+#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:275
+msgid "Scroll list down"
+msgstr "Faire défiler vers le bas"
+
+#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:268
+msgid "Upper left item"
+msgstr "Élément en haut ŕ gauche"
+
+#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:270
+msgid "Lower left item"
+msgstr "Élément en bas ŕ gauche"
+
+#: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271
+msgid "Upper right item"
+msgstr "Élément en haut ŕ droite"
+
+#: engines/scumm/help.cpp:263 engines/scumm/help.cpp:273
+msgid "Lower right item"
+msgstr "Élément en bas ŕ droite"
+
+#: engines/scumm/help.cpp:269
+msgid "Middle left item"
+msgstr "Élément au milieu ŕ gauche"
+
+#: engines/scumm/help.cpp:272
+msgid "Middle right item"
+msgstr "Élément au milieu ŕ droite"
+
+#: engines/scumm/help.cpp:279 engines/scumm/help.cpp:284
+msgid "Switching characters:"
+msgstr "Changer de personnage"
+
+#: engines/scumm/help.cpp:281
+msgid "Second kid"
+msgstr "Second enfant"
+
+#: engines/scumm/help.cpp:282
+msgid "Third kid"
+msgstr "Troisičme enfant"
+
+#: engines/scumm/help.cpp:294
+msgid "Fighting controls (numpad):"
+msgstr "Controles de combat (pavet numérique):"
+
+#: engines/scumm/help.cpp:295 engines/scumm/help.cpp:296
+#: engines/scumm/help.cpp:297
+msgid "Step back"
+msgstr "Pas en arričre"
+
+#: engines/scumm/help.cpp:298
+msgid "Block high"
+msgstr "Bloquer haut"
+
+#: engines/scumm/help.cpp:299
+msgid "Block middle"
+msgstr "Bloquer milieu"
+
+#: engines/scumm/help.cpp:300
+msgid "Block low"
+msgstr "Bloquer bas"
+
+#: engines/scumm/help.cpp:301
+msgid "Punch high"
+msgstr "Fraper haut"
+
+#: engines/scumm/help.cpp:302
+msgid "Punch middle"
+msgstr "Frapper milieu"
+
+#: engines/scumm/help.cpp:303
+msgid "Punch low"
+msgstr "Frapper bas"
+
+#: engines/scumm/help.cpp:306
+msgid "These are for Indy on left."
+msgstr "Correct quand Indy est ŕ gauche."
+
+#: engines/scumm/help.cpp:307
+msgid "When Indy is on the right,"
+msgstr "Quand Indy est ŕ droite, 7, 4 et 1"
+
+#: engines/scumm/help.cpp:308
+msgid "7, 4, and 1 are switched with"
+msgstr "sont interverties avec 9, 6 et 3"
+
+#: engines/scumm/help.cpp:309
+msgid "9, 6, and 3, respectively."
+msgstr "respectivement."
+
+#: engines/scumm/help.cpp:316
+msgid "Biplane controls (numpad):"
+msgstr "Controles du biplane (paver numérique):"
+
+#: engines/scumm/help.cpp:317
+msgid "Fly to upper left"
+msgstr "Voler vers le haut ŕ gauche"
+
+#: engines/scumm/help.cpp:318
+msgid "Fly to left"
+msgstr "Voler vers la gauche"
+
+#: engines/scumm/help.cpp:319
+msgid "Fly to lower left"
+msgstr "Voler vers le bas ŕ gauche"
+
+#: engines/scumm/help.cpp:320
+msgid "Fly upwards"
+msgstr "Voler vers le haut"
+
+#: engines/scumm/help.cpp:321
+msgid "Fly straight"
+msgstr "Voler tout droit"
+
+#: engines/scumm/help.cpp:322
+msgid "Fly down"
+msgstr "Voler vers le bas"
+
+#: engines/scumm/help.cpp:323
+msgid "Fly to upper right"
+msgstr "Voler vers le haut ŕ droite"
+
+#: engines/scumm/help.cpp:324
+msgid "Fly to right"
+msgstr "Voler vers la droite"
+
+#: engines/scumm/help.cpp:325
+msgid "Fly to lower right"
+msgstr "Voler vers la bas ŕ droite"
+
+#: engines/scumm/scumm.cpp:1768
+#, c-format
+msgid ""
+"Native MIDI support requires the Roland Upgrade from LucasArts,\n"
+"but %s is missing. Using AdLib instead."
+msgstr ""
+"Support MIDI natif requičre la mise ŕ jour Roland de LucasArt,\n"
+"mais %s manque. Utilise AdLib ŕ la place."
+
+#: engines/scumm/scumm.cpp:2258 engines/agos/saveload.cpp:189
+#, c-format
+msgid ""
+"Failed to save game state to file:\n"
+"\n"
+"%s"
+msgstr ""
+"Échec de l'enregistrement de l'état du jeu dans le fichier:\n"
+"\n"
+"%s"
+
+#: engines/scumm/scumm.cpp:2265 engines/agos/saveload.cpp:154
+#, c-format
+msgid ""
+"Failed to load game state from file:\n"
+"\n"
+"%s"
+msgstr ""
+"Échec du chargement de l'état du jeu depuis le fichier:\n"
+"\n"
+"%s"
+
+#: engines/scumm/scumm.cpp:2277 engines/agos/saveload.cpp:197
+#, c-format
+msgid ""
+"Successfully saved game state in file:\n"
+"\n"
+"%s"
+msgstr ""
+"État du jeu enregistré avec succčs dans le fichier:\n"
+"\n"
+"%s"
+
+#: engines/scumm/scumm.cpp:2492
+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 ""
+"Normalement, Maniac Mansion devrait démarrer maintenant. Cependant ScummVM "
+"ne supporte pas encore cette fonctionalité. Pour jouer ŕ Maniac Mansion, "
+"choisissez 'Ajouter...' dans le Lanceur de ScummVM et sélectionnez le "
+"répertoire 'Maniac Mansion' dans le répertoire du jeu Day Of The Tentacle."
+
+#. I18N: Option for fast scene switching
+#: engines/mohawk/dialogs.cpp:92 engines/mohawk/dialogs.cpp:171
+msgid "~Z~ip Mode Activated"
+msgstr "Mode ~Z~ip Activé"
+
+#: engines/mohawk/dialogs.cpp:93
+msgid "~T~ransitions Enabled"
+msgstr "T~r~ansitions activées"
+
+#. I18N: Drop book page
+#: engines/mohawk/dialogs.cpp:95
+msgid "~D~rop Page"
+msgstr ""
+
+#: engines/mohawk/dialogs.cpp:99
+msgid "~S~how Map"
+msgstr ""
+
+#: engines/mohawk/dialogs.cpp:105
+msgid "~M~ain Menu"
+msgstr "~M~enu Principal"
+
+#: engines/mohawk/dialogs.cpp:172
+msgid "~W~ater Effect Enabled"
+msgstr "~E~ffets de l'Eau Activés"
+
+#: engines/sci/engine/kfile.cpp:678
+msgid "Restore game:"
+msgstr "Charger le jeu:"
+
+#: engines/sci/engine/kfile.cpp:678
+msgid "Restore"
+msgstr "Charger"
+
+#: engines/agos/animation.cpp:544
+#, c-format
+msgid "Cutscene file '%s' not found!"
+msgstr "Fichier de séquence '%s' non trouvé!"
+
+#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1283
+#: engines/tinsel/saveload.cpp:475
+msgid "Failed to load game state from file."
+msgstr "Échec du chargement de l'état du jeu depuis le disque."
+
+#: engines/gob/inter_v2.cpp:1353 engines/tinsel/saveload.cpp:553
+msgid "Failed to save game state to file."
+msgstr "Échec de l'enregistrement de l'état du jeu sur le disque."
+
+#: engines/gob/inter_v5.cpp:107
+msgid "Failed to delete file."
+msgstr "Échec de la suppression du fichier."
+
+#: engines/groovie/script.cpp:420
+msgid "Failed to save game"
+msgstr "Échec de la sauvegarde."
+
+#: 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."
+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."
+
+#: engines/m4/m4_menus.cpp:138
+msgid "Save game failed!"
+msgstr "Échec de la sauvegarde!"
+
+#: engines/sky/compact.cpp:130
+msgid ""
+"Unable to find \"sky.cpt\" file!\n"
+"Please download it from www.scummvm.org"
+msgstr ""
+"Fichier \"sky.cpt\" manquant\n"
+"Vous pouvez le télécharger sur 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 ""
+"Le fichier \"sky.cpt\" a une taille incorrecte.\n"
+"Vous pouvez le (re)télécharger sur www.scummvm.org"
+
+#: engines/sword1/animation.cpp:344 engines/sword2/animation.cpp:379
+msgid "DXA cutscenes found but ScummVM has been built without zlib support"
+msgstr ""
+"Les séquences DXA sont présente mais ScummVM a été compilé sans le support "
+"zlib."
+
+#: engines/sword1/animation.cpp:354 engines/sword2/animation.cpp:389
+msgid "MPEG2 cutscenes are no longer supported"
+msgstr "Les séquences MPEG2 ne sont plus supportées"
+
+#: engines/sword1/animation.cpp:359 engines/sword2/animation.cpp:397
+#, c-format
+msgid "Cutscene '%s' not found"
+msgstr "Séquence '%s' non trouvé"
+
+#: 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"
+"\n"
+"Press OK to convert them now, otherwise you will be asked again the next "
+"time you start the game.\n"
+msgstr ""
+"ScummVM a trouvé des anciens fichiers de sauvegarde pour Broken Sword 1 qui "
+"ont besoin d'ętre convertis.\n"
+"L'ancien format de sauvegarde n'est plus supporté, donc vous ne pourrez pas "
+"les charger si vous ne les convertissez pas.\n"
+"\n"
+"Appuyer sur OK pour les convertir maintenant, sinon le męme message "
+"s'affichera la prochaine fois que vous démarrerez le jeu.\n"
+
+#: engines/sword1/control.cpp:1232
+#, c-format
+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 ""
+"La sauvegarde cible existe déjŕ!\n"
+"Voulez-vous conserver l'ancienne sauvegarde (%s) ou la nouvelle (%s)?\n"
+
+#: engines/sword1/control.cpp:1235
+msgid "Keep the old one"
+msgstr "Garde l'ancienne"
+
+#: engines/sword1/control.cpp:1235
+msgid "Keep the new one"
+msgstr "Garder la nouvelle"
+
+#: engines/sword1/logic.cpp:1633
+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/parallaction/saveload.cpp:133
+#, c-format
+msgid ""
+"Can't save game in slot %i\n"
+"\n"
+msgstr ""
+"Erreur lors de la sauvegarde dans l'emplacement %i\n"
+"\n"
+
+#: engines/parallaction/saveload.cpp:211
+msgid "Loading game..."
+msgstr "Chargement en cours..."
+
+#: engines/parallaction/saveload.cpp:226
+msgid "Saving game..."
+msgstr "Sauvegarde en cours..."
+
+#: engines/parallaction/saveload.cpp:279
+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"
+"\n"
+"Press OK to convert them now, otherwise you will be asked next time.\n"
+msgstr ""
+"ScummVM a trouvé des anciens fichiers de sauvegarde pour Nippon Safes qui "
+"ont besoin d'ętre convertis.\n"
+"L'ancien format de sauvegarde n'est plus supporté, donc vous ne pourrez pas "
+"les charger si vous ne les convertissez pas.\n"
+"\n"
+"Appuyer sur OK pour les convertir maintenant, sinon le męme message "
+"s'affichera la prochaine fois que vous démarrerez le jeu.\n"
+
+#: engines/parallaction/saveload.cpp:326
+msgid "ScummVM successfully converted all your savefiles."
+msgstr "ScummVM a converti avec succčs vos anciennes sauvegardes."
+
+#: engines/parallaction/saveload.cpp:328
+msgid ""
+"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 ""
+
+#: audio/fmopl.cpp:49
+msgid "MAME OPL emulator"
+msgstr "Émulateur MAME OPL"
+
+#: audio/fmopl.cpp:51
+msgid "DOSBox OPL emulator"
+msgstr "Émulateur DOSBox OPL"
+
+#: audio/mididrv.cpp:205
+#, c-format
+msgid ""
+"The selected audio device '%s' was not found (e.g. might be turned off or "
+"disconnected)."
+msgstr ""
+
+#: audio/mididrv.cpp:205 audio/mididrv.cpp:217 audio/mididrv.cpp:253
+#: audio/mididrv.cpp:268
+msgid "Attempting to fall back to the next available device..."
+msgstr ""
+
+#: audio/mididrv.cpp:217
+#, c-format
+msgid ""
+"The selected audio device '%s' cannot be used. See log file for more "
+"information."
+msgstr ""
+
+#: audio/mididrv.cpp:253
+#, c-format
+msgid ""
+"The preferred audio device '%s' was not found (e.g. might be turned off or "
+"disconnected)."
+msgstr ""
+
+#: audio/mididrv.cpp:268
+#, c-format
+msgid ""
+"The preferred audio device '%s' cannot be used. See log file for more "
+"information."
+msgstr ""
+
+#: audio/null.h:43
+msgid "No music"
+msgstr "Pas de musique"
+
+#: audio/mods/paula.cpp:189
+msgid "Amiga Audio Emulator"
+msgstr "Émulateur Amiga Audio"
+
+#: audio/softsynth/adlib.cpp:1594
+msgid "AdLib Emulator"
+msgstr "Émulateur AdLib"
+
+#: audio/softsynth/appleiigs.cpp:33
+msgid "Apple II GS Emulator (NOT IMPLEMENTED)"
+msgstr "Émulateur Apple II GS (PAS IMPLÉMENTÉ)"
+
+#: audio/softsynth/sid.cpp:1430
+msgid "C64 Audio Emulator"
+msgstr "Émulateur C64 Audio"
+
+#: audio/softsynth/mt32.cpp:329
+msgid "Initializing MT-32 Emulator"
+msgstr "Initialisation de l'Émulateur MT-32"
+
+#: audio/softsynth/mt32.cpp:543
+msgid "MT-32 Emulator"
+msgstr "Émulateur MT-32"
+
+#: audio/softsynth/pcspk.cpp:139
+msgid "PC Speaker Emulator"
+msgstr "Émulateur Haut Parleur PC"
+
+#: audio/softsynth/pcspk.cpp:158
+msgid "IBM PCjr Emulator"
+msgstr "Émulateur IBM PCjr"
+
+#: backends/keymapper/remap-dialog.cpp:47
+msgid "Keymap:"
+msgstr "Affectation des touches:"
+
+#: backends/keymapper/remap-dialog.cpp:64
+msgid " (Active)"
+msgstr "(Actif)"
+
+#: backends/keymapper/remap-dialog.cpp:98
+msgid " (Global)"
+msgstr "(Global)"
+
+#: backends/keymapper/remap-dialog.cpp:108
+msgid " (Game)"
+msgstr "(Jeu)"
+
+#: backends/midi/windows.cpp:164
+msgid "Windows MIDI"
+msgstr "MIDI Windows"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:57
+msgid "ScummVM Main Menu"
+msgstr "Menu Principal ScummVM"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:63
+msgid "~L~eft handed mode"
+msgstr "Mode ~G~aucher"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:64
+msgid "~I~ndy fight controls"
+msgstr "Contrôle des combats d'~I~ndy"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:65
+msgid "Show mouse cursor"
+msgstr "Afficher le curseur de la souris"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:66
+msgid "Snap to edges"
+msgstr "Aligner sur les bords"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:68
+msgid "Touch X Offset"
+msgstr "Décalage X du toucher"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:75
+msgid "Touch Y Offset"
+msgstr "Décallage Y du toucher"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:87
+msgid "Use laptop trackpad-style cursor control"
+msgstr "Activer le contrôle du curseur de type trackpad"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:88
+msgid "Tap for left click, double tap right click"
+msgstr "Toucher pour un clic gauche, toucher deux fois pour un clic droit"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:90
+msgid "Sensitivity"
+msgstr "Sensibilité"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:99
+msgid "Initial top screen scale:"
+msgstr "Échelle initiale de l'écran du haut"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:105
+msgid "Main screen scaling:"
+msgstr "Échelle de l'écran principal"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:107
+msgid "Hardware scale (fast, but low quality)"
+msgstr "Mise ŕ l'echelle matérielle (rapide mais qualité faible)"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:108
+msgid "Software scale (good quality, but slower)"
+msgstr "Mise ŕ l'échelle logicielle (bonne qualité mais plus lent)"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:109
+msgid "Unscaled (you must scroll left and right)"
+msgstr "Sans changement d'échelle (vous devez faire défiler l'écran)"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:111
+msgid "Brightness:"
+msgstr "Luminosité:"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:121
+msgid "High quality audio (slower) (reboot)"
+msgstr "Audio haute qualité (plus lent) (redémarrer)"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:122
+msgid "Disable power off"
+msgstr "Désactivé l'extinction"
+
+#: backends/platform/iphone/osys_events.cpp:338
+msgid "Mouse-click-and-drag mode enabled."
+msgstr "Mode souris-cliquer-et-déplacer activé"
+
+#: backends/platform/iphone/osys_events.cpp:340
+msgid "Mouse-click-and-drag mode disabled."
+msgstr "Mode souris-cliquer-et-déplacer désactivé"
+
+#: backends/platform/iphone/osys_events.cpp:351
+msgid "Touchpad mode enabled."
+msgstr "Mode touchpad activé"
+
+#: backends/platform/iphone/osys_events.cpp:353
+msgid "Touchpad mode disabled."
+msgstr "Mode touchpad désactivé"
+
+#: backends/platform/sdl/macosx/appmenu_osx.mm:67
+msgid "Hide ScummVM"
+msgstr "Cacher ScummVM"
+
+#: backends/platform/sdl/macosx/appmenu_osx.mm:70
+msgid "Hide Others"
+msgstr "Masquer les Autres"
+
+#: backends/platform/sdl/macosx/appmenu_osx.mm:74
+msgid "Show All"
+msgstr "Tout Afficher"
+
+#: backends/platform/sdl/macosx/appmenu_osx.mm:92
+#: backends/platform/sdl/macosx/appmenu_osx.mm:99
+msgid "Window"
+msgstr "Fenętre"
+
+#: backends/platform/sdl/macosx/appmenu_osx.mm:95
+msgid "Minimize"
+msgstr "Minimiser"
+
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:45
+msgid "Normal (no scaling)"
+msgstr "Normal (échelle d'origine)"
+
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:64
+msgctxt "lowres"
+msgid "Normal (no scaling)"
+msgstr "Normal"
+
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2146
+#: backends/graphics/openglsdl/openglsdl-graphics.cpp:533
+msgid "Enabled aspect ratio correction"
+msgstr "Activer la correction du rapport d'aspect"
+
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2152
+#: backends/graphics/openglsdl/openglsdl-graphics.cpp:538
+msgid "Disabled aspect ratio correction"
+msgstr "Désactiver la correction du rapport d'aspect"
+
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2207
+msgid "Active graphics filter:"
+msgstr "Mode graphique actif:"
+
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2249
+#: backends/graphics/openglsdl/openglsdl-graphics.cpp:477
+msgid "Windowed mode"
+msgstr "Mode Fenętre"
+
+#: backends/graphics/opengl/opengl-graphics.cpp:130
+msgid "OpenGL Normal"
+msgstr "OpenGL Normal"
+
+#: backends/graphics/opengl/opengl-graphics.cpp:131
+msgid "OpenGL Conserve"
+msgstr "OpenGL Préserve"
+
+#: backends/graphics/opengl/opengl-graphics.cpp:132
+msgid "OpenGL Original"
+msgstr "OpenGL Originel"
+
+#: backends/graphics/openglsdl/openglsdl-graphics.cpp:415
+msgid "Current display mode"
+msgstr "Mode vidéo actuel"
+
+#: backends/graphics/openglsdl/openglsdl-graphics.cpp:428
+msgid "Current scale"
+msgstr ""
+
+#: backends/graphics/openglsdl/openglsdl-graphics.cpp:558
+msgid "Active filter mode: Linear"
+msgstr "Filtre actif: Linéaire"
+
+#: backends/graphics/openglsdl/openglsdl-graphics.cpp:560
+msgid "Active filter mode: Nearest"
+msgstr "Filtre actif: Plus proche"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:38
+#: backends/platform/wince/CEActionsSmartphone.cpp:39
+msgid "Up"
+msgstr "Haut"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:39
+#: backends/platform/wince/CEActionsSmartphone.cpp:40
+msgid "Down"
+msgstr "Bas"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:40
+#: backends/platform/wince/CEActionsSmartphone.cpp:41
+msgid "Left"
+msgstr "Gauche"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:41
+#: backends/platform/wince/CEActionsSmartphone.cpp:42
+msgid "Right"
+msgstr "Droite"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:42
+#: backends/platform/wince/CEActionsPocket.cpp:60
+#: backends/platform/wince/CEActionsSmartphone.cpp:43
+msgid "Left Click"
+msgstr "Clic Gauche"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:43
+#: backends/platform/wince/CEActionsSmartphone.cpp:44
+msgid "Right Click"
+msgstr "Clic Droit"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:46
+#: backends/platform/wince/CEActionsSmartphone.cpp:47
+msgid "Zone"
+msgstr "Zone"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:47
+#: backends/platform/wince/CEActionsPocket.cpp:54
+#: backends/platform/wince/CEActionsSmartphone.cpp:48
+msgid "Multi Function"
+msgstr "Fonction Multiple"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:48
+msgid "Swap character"
+msgstr "Changement de personnage"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:49
+msgid "Skip text"
+msgstr "Sauter le texte"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:51
+msgid "Fast mode"
+msgstr "Mode rapide"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:53
+msgid "Debugger"
+msgstr "Debugger"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:54
+msgid "Global menu"
+msgstr "Menu global"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:55
+msgid "Virtual keyboard"
+msgstr "Clavier virtuel"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:56
+msgid "Key mapper"
+msgstr "Affectation des touches"
+
+#: backends/events/symbiansdl/symbiansdl-events.cpp:184
+msgid "Do you want to quit ?"
+msgstr "Voulez-vous quitter?"
+
+#: backends/platform/wii/options.cpp:51
+msgid "Video"
+msgstr "Vidéo"
+
+#: backends/platform/wii/options.cpp:54
+msgid "Current video mode:"
+msgstr "Mode vidéo actuel"
+
+#: backends/platform/wii/options.cpp:56
+msgid "Double-strike"
+msgstr "Coup double"
+
+#: backends/platform/wii/options.cpp:60
+msgid "Horizontal underscan:"
+msgstr "Underscan horizontal:"
+
+#: backends/platform/wii/options.cpp:66
+msgid "Vertical underscan:"
+msgstr "Underscan vertical:"
+
+#: backends/platform/wii/options.cpp:71
+msgid "Input"
+msgstr "Entrée"
+
+#: backends/platform/wii/options.cpp:74
+msgid "GC Pad sensitivity:"
+msgstr "Sensibilité du pad GC:"
+
+#: backends/platform/wii/options.cpp:80
+msgid "GC Pad acceleration:"
+msgstr "Acceleration du pad GC:"
+
+#: backends/platform/wii/options.cpp:86
+msgid "DVD"
+msgstr "DVD"
+
+#: 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
+msgid "Unknown"
+msgstr "Inconue"
+
+#: backends/platform/wii/options.cpp:93
+msgid "Mount DVD"
+msgstr "Monter le DVD"
+
+#: backends/platform/wii/options.cpp:94
+msgid "Unmount DVD"
+msgstr "Démonter le DVD"
+
+#: backends/platform/wii/options.cpp:98
+msgid "SMB"
+msgstr "SMB"
+
+#: backends/platform/wii/options.cpp:106
+msgid "Server:"
+msgstr "Serveur:"
+
+#: backends/platform/wii/options.cpp:110
+msgid "Share:"
+msgstr "Disque partagé:"
+
+#: backends/platform/wii/options.cpp:114
+msgid "Username:"
+msgstr "Nom d'utilisateur:"
+
+#: backends/platform/wii/options.cpp:118
+msgid "Password:"
+msgstr "Mot de passe:"
+
+#: backends/platform/wii/options.cpp:121
+msgid "Init network"
+msgstr "Initialiser le réseau"
+
+#: backends/platform/wii/options.cpp:123
+msgid "Mount SMB"
+msgstr "Monter SMB"
+
+#: backends/platform/wii/options.cpp:124
+msgid "Unmount SMB"
+msgstr "Démonter SMB"
+
+#: backends/platform/wii/options.cpp:143
+msgid "DVD Mounted successfully"
+msgstr "DVD monté avec succčs"
+
+#: backends/platform/wii/options.cpp:146
+msgid "Error while mounting the DVD"
+msgstr "Échec du montage du DVD"
+
+#: backends/platform/wii/options.cpp:148
+msgid "DVD not mounted"
+msgstr "DVD non monté"
+
+#: backends/platform/wii/options.cpp:161
+msgid "Network up, share mounted"
+msgstr "Réseau connecté, disque partagé monté"
+
+#: backends/platform/wii/options.cpp:163
+msgid "Network up"
+msgstr "Réseau connecté"
+
+#: backends/platform/wii/options.cpp:166
+msgid ", error while mounting the share"
+msgstr ", échec du montage du disque partagé"
+
+#: backends/platform/wii/options.cpp:168
+msgid ", share not mounted"
+msgstr ", disque partagé non monté"
+
+#: backends/platform/wii/options.cpp:174
+msgid "Network down"
+msgstr "Réseau déconnecté"
+
+#: backends/platform/wii/options.cpp:178
+msgid "Initializing network"
+msgstr "Initialisation du réseau"
+
+#: backends/platform/wii/options.cpp:182
+msgid "Timeout while initializing network"
+msgstr "Dépassement du délai lors de l'initialisation du réseau"
+
+#: backends/platform/wii/options.cpp:186
+#, c-format
+msgid "Network not initialized (%d)"
+msgstr "Réseau non initialisé (%d)"
+
+#: backends/platform/wince/CEActionsPocket.cpp:46
+msgid "Hide Toolbar"
+msgstr "Caché la barre d'outils"
+
+#: backends/platform/wince/CEActionsPocket.cpp:47
+msgid "Show Keyboard"
+msgstr "Afficher le clavier"
+
+#: backends/platform/wince/CEActionsPocket.cpp:48
+msgid "Sound on/off"
+msgstr "Audio marche/arręt"
+
+#: backends/platform/wince/CEActionsPocket.cpp:49
+msgid "Right click"
+msgstr "Clic droit"
+
+#: backends/platform/wince/CEActionsPocket.cpp:50
+msgid "Show/Hide Cursor"
+msgstr "Afficher/Cacher le curseur"
+
+#: backends/platform/wince/CEActionsPocket.cpp:51
+msgid "Free look"
+msgstr "Regarder autour"
+
+#: backends/platform/wince/CEActionsPocket.cpp:52
+msgid "Zoom up"
+msgstr "Dézoomer"
+
+#: backends/platform/wince/CEActionsPocket.cpp:53
+msgid "Zoom down"
+msgstr "Zoomer"
+
+#: backends/platform/wince/CEActionsPocket.cpp:55
+#: backends/platform/wince/CEActionsSmartphone.cpp:49
+msgid "Bind Keys"
+msgstr "Affecter les touches"
+
+#: backends/platform/wince/CEActionsPocket.cpp:56
+msgid "Cursor Up"
+msgstr "Haut"
+
+#: backends/platform/wince/CEActionsPocket.cpp:57
+msgid "Cursor Down"
+msgstr "Bas"
+
+#: backends/platform/wince/CEActionsPocket.cpp:58
+msgid "Cursor Left"
+msgstr "Gauche"
+
+#: backends/platform/wince/CEActionsPocket.cpp:59
+msgid "Cursor Right"
+msgstr "Droit"
+
+#: backends/platform/wince/CEActionsPocket.cpp:267
+#: backends/platform/wince/CEActionsSmartphone.cpp:231
+msgid "Do you want to load or save the game?"
+msgstr "Voulez-vous charger ou enregistrer le jeu?"
+
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+msgid " Are you sure you want to quit ? "
+msgstr "Voulez-vous vraiment quitter?"
+
+#: backends/platform/wince/CEActionsSmartphone.cpp:50
+msgid "Keyboard"
+msgstr "Clavier"
+
+#: backends/platform/wince/CEActionsSmartphone.cpp:51
+msgid "Rotate"
+msgstr "Pivoter"
+
+#: backends/platform/wince/CELauncherDialog.cpp:56
+msgid "Using SDL driver "
+msgstr "Utilise le pilote SDL"
+
+#: backends/platform/wince/CELauncherDialog.cpp:60
+msgid "Display "
+msgstr "Affichage"
+
+#: backends/platform/wince/CELauncherDialog.cpp:83
+msgid "Do you want to perform an automatic scan ?"
+msgstr "Voulez-vous exécuter une recherche automatique?"
+
+#: backends/platform/wince/wince-sdl.cpp:471
+msgid "Map right click action"
+msgstr "Affecter l'action 'Clic Droit'"
+
+#: backends/platform/wince/wince-sdl.cpp:475
+msgid "You must map a key to the 'Right Click' action to play this game"
+msgstr ""
+"Vous devez affecter une touche ŕ l'action de 'Clic Droit' pour pouvoir jouer "
+"ŕ ce jeu"
+
+#: backends/platform/wince/wince-sdl.cpp:484
+msgid "Map hide toolbar action"
+msgstr "Affecter l'action 'Cacher Bar d'Outils'"
+
+#: backends/platform/wince/wince-sdl.cpp:488
+msgid "You must map a key to the 'Hide toolbar' action to play this game"
+msgstr ""
+"Vous devez affecter une touche ŕ l'action 'Cacher Bar d'Outils' pour pouvoir "
+"jouer ŕ ce jeu"
+
+#: backends/platform/wince/wince-sdl.cpp:497
+msgid "Map Zoom Up action (optional)"
+msgstr "Affecter l'action 'Dézoomer' (optionnelle)"
+
+#: backends/platform/wince/wince-sdl.cpp:500
+msgid "Map Zoom Down action (optional)"
+msgstr "Affecter l'action 'Zoomer' (optionnelle)"
+
+#: backends/platform/wince/wince-sdl.cpp:508
+msgid ""
+"Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory"
+msgstr ""
+"Noubliez pas d'affecter une touche ŕ l'action 'Cacher Bar d'Outils' pour "
+"pouvoir voir entičrement l'inventaire"
+
+#: backends/events/default/default-events.cpp:222
+msgid "Do you really want to return to the Launcher?"
+msgstr "Voulez-vous vraiment retourner au Lanceur?"
+
+#: backends/events/default/default-events.cpp:222
+msgid "Launcher"
+msgstr "Lanceur"
+
+#: backends/events/default/default-events.cpp:244
+msgid "Do you really want to quit?"
+msgstr "Voulez-vous vraiment quitter?"
+
+#: backends/events/gph/gph-events.cpp:366
+#: backends/events/gph/gph-events.cpp:409
+#: backends/events/openpandora/op-events.cpp:141
+msgid "Touchscreen 'Tap Mode' - Left Click"
+msgstr ""
+
+#: backends/events/gph/gph-events.cpp:368
+#: backends/events/gph/gph-events.cpp:411
+#: backends/events/openpandora/op-events.cpp:143
+msgid "Touchscreen 'Tap Mode' - Right Click"
+msgstr ""
+
+#: backends/events/gph/gph-events.cpp:370
+#: backends/events/gph/gph-events.cpp:413
+#: backends/events/openpandora/op-events.cpp:145
+msgid "Touchscreen 'Tap Mode' - Hover (No Click)"
+msgstr ""
+
+#: backends/events/gph/gph-events.cpp:390
+msgid "Maximum Volume"
+msgstr "Volume Maximum"
+
+#: backends/events/gph/gph-events.cpp:392
+msgid "Increasing Volume"
+msgstr "Augmentation Volume"
+
+#: backends/events/gph/gph-events.cpp:398
+msgid "Minimal Volume"
+msgstr "Volume Minimum"
+
+#: backends/events/gph/gph-events.cpp:400
+msgid "Decreasing Volume"
+msgstr "Diminution Volume"
+
+#: backends/updates/macosx/macosx-updates.mm:65
+msgid "Check for Updates..."
+msgstr "Recherche des mises ŕ jour..."
+
+#~ msgctxt "lowres"
+#~ msgid "Add Game..."
+#~ msgstr "Ajouter..."
+
+#~ msgid "Add Game..."
+#~ msgstr "Ajouter..."
+
+#~ msgid "Discovered %d new games."
+#~ msgstr "%d nouveaux jeux trouvés."
+
+#~ msgid "Command line argument not processed"
+#~ msgstr "Argument de ligne de commande non traité"
+
+#~ msgid "FM Towns Emulator"
+#~ msgstr "Émulateur FM Towns"
+
+#~ msgid "Invalid Path"
+#~ msgstr "Chemin Invalide"
diff --git a/po/hu_HU.po b/po/hu_HU.po
index cbd9ae902b..0a11aa8c4f 100644
--- a/po/hu_HU.po
+++ b/po/hu_HU.po
@@ -1,2789 +1,2777 @@
-# Hungarian translation for ScummVM.
-# Copyright (C) 2010-2011 ScummVM Team
-# This file is distributed under the same license as the ScummVM package.
-# George Kormendi <grubycza@hotmail.com>, 2010.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: ScummVM 1.3.0svn\n"
-"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2011-08-20 15:12+0100\n"
-"PO-Revision-Date: 2011-06-21 09:54+0100\n"
-"Last-Translator: Gruby <grubycza@hotmail.com>\n"
-"Language-Team: Hungarian\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=iso-8859-2\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: Magyar\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-"X-Poedit-Language: Hungarian\n"
-"X-Poedit-Country: HUNGARY\n"
-"X-Poedit-SourceCharset: iso-8859-1\n"
-
-#: gui/about.cpp:91
-#, c-format
-msgid "(built on %s)"
-msgstr "(készült %s)"
-
-#: gui/about.cpp:98
-msgid "Features compiled in:"
-msgstr "Lefordított összetevők:"
-
-#: gui/about.cpp:107
-msgid "Available engines:"
-msgstr "Támogatott játékmotorok:"
-
-#: gui/browser.cpp:66
-msgid "Go up"
-msgstr "Feljebb"
-
-#: gui/browser.cpp:66 gui/browser.cpp:68
-msgid "Go to previous directory level"
-msgstr "Vissza az előző könyvtárszintre"
-
-#: gui/browser.cpp:68
-msgctxt "lowres"
-msgid "Go up"
-msgstr "Feljebb"
-
-#: gui/browser.cpp:69 gui/chooser.cpp:45 gui/KeysDialog.cpp:43
-#: gui/launcher.cpp:312 gui/massadd.cpp:94 gui/options.cpp:1178
-#: gui/saveload.cpp:63 gui/saveload.cpp:155 gui/themebrowser.cpp:54
-#: engines/engine.cpp:436 engines/scumm/dialogs.cpp:190
-#: engines/sword1/control.cpp:865 engines/parallaction/saveload.cpp:281
-#: backends/platform/wii/options.cpp:48
-#: backends/events/default/default-events.cpp:222
-#: backends/events/default/default-events.cpp:244
-msgid "Cancel"
-msgstr "Mégse"
-
-#: gui/browser.cpp:70 gui/chooser.cpp:46 gui/themebrowser.cpp:55
-msgid "Choose"
-msgstr "Választ"
-
-#: gui/gui-manager.cpp:116 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 "Bezár"
-
-#: gui/gui-manager.cpp:119
-msgid "Mouse click"
-msgstr "Egérkattintás"
-
-#: gui/gui-manager.cpp:122 base/main.cpp:286
-msgid "Display keyboard"
-msgstr "Billentyűzet beállítások"
-
-#: gui/gui-manager.cpp:125 base/main.cpp:289
-msgid "Remap keys"
-msgstr "Billentyűk átállítása"
-
-#: gui/KeysDialog.h:36 gui/KeysDialog.cpp:145
-msgid "Choose an action to map"
-msgstr "Válassz műveletet a kiosztáshoz"
-
-#: gui/KeysDialog.cpp:41
-msgid "Map"
-msgstr "Kiosztás"
-
-#: gui/KeysDialog.cpp:42 gui/launcher.cpp:313 gui/launcher.cpp:936
-#: gui/launcher.cpp:940 gui/massadd.cpp:91 gui/options.cpp:1179
-#: engines/engine.cpp:359 engines/engine.cpp:370 engines/scumm/dialogs.cpp:192
-#: engines/scumm/scumm.cpp:1770 engines/agos/animation.cpp:545
-#: engines/groovie/script.cpp:420 engines/sky/compact.cpp:131
-#: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:344
-#: engines/sword1/animation.cpp:354 engines/sword1/animation.cpp:360
-#: engines/sword1/control.cpp:865 engines/sword1/logic.cpp:1633
-#: engines/sword2/animation.cpp:379 engines/sword2/animation.cpp:389
-#: engines/sword2/animation.cpp:398 engines/parallaction/saveload.cpp:281
-#: backends/platform/wii/options.cpp:47
-#: backends/platform/wince/CELauncherDialog.cpp:54
-msgid "OK"
-msgstr "OK"
-
-#: gui/KeysDialog.cpp:49
-msgid "Select an action and click 'Map'"
-msgstr "Válassz műveletet és katt a 'Kiosztás'-ra"
-
-#: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141
-#, c-format
-msgid "Associated key : %s"
-msgstr "Társított billentyű: %s"
-
-#: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143
-#, c-format
-msgid "Associated key : none"
-msgstr "Társított billentyű: nincs"
-
-#: gui/KeysDialog.cpp:90
-msgid "Please select an action"
-msgstr "Válassz egy műveletet"
-
-#: gui/KeysDialog.cpp:106
-msgid "Press the key to associate"
-msgstr "Nyomj egy billentyűt a társításhoz"
-
-#: gui/launcher.cpp:165
-msgid "Game"
-msgstr "Játék"
-
-#: gui/launcher.cpp:169
-msgid "ID:"
-msgstr "ID:"
-
-#: gui/launcher.cpp:169 gui/launcher.cpp:171 gui/launcher.cpp:172
-msgid ""
-"Short game identifier used for referring to savegames and running the game "
-"from the command line"
-msgstr ""
-"Rövid játékazonosító a játékmentésekhez és a játék parancssori futtatásához"
-
-#: gui/launcher.cpp:171
-msgctxt "lowres"
-msgid "ID:"
-msgstr "ID:"
-
-#: gui/launcher.cpp:176
-msgid "Name:"
-msgstr "Név:"
-
-#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179
-msgid "Full title of the game"
-msgstr "A játék teljes neve"
-
-#: gui/launcher.cpp:178
-msgctxt "lowres"
-msgid "Name:"
-msgstr "Név:"
-
-#: gui/launcher.cpp:182
-msgid "Language:"
-msgstr "Nyelv:"
-
-#: gui/launcher.cpp:182 gui/launcher.cpp:183
-msgid ""
-"Language of the game. This will not turn your Spanish game version into "
-"English"
-msgstr ""
-"A játék nyelve. Ne állítsd át a pl. Spanyol nyelvű játékodat Angolra nyelvre"
-
-#: gui/launcher.cpp:184 gui/launcher.cpp:198 gui/options.cpp:74
-#: gui/options.cpp:708 gui/options.cpp:718 gui/options.cpp:1149
-#: audio/null.cpp:40
-msgid "<default>"
-msgstr "<alapértelmezett>"
-
-#: gui/launcher.cpp:194
-msgid "Platform:"
-msgstr "Platform:"
-
-#: gui/launcher.cpp:194 gui/launcher.cpp:196 gui/launcher.cpp:197
-msgid "Platform the game was originally designed for"
-msgstr "Platform amire a játékot eredetileg készítették"
-
-#: gui/launcher.cpp:196
-msgctxt "lowres"
-msgid "Platform:"
-msgstr "Platform:"
-
-#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035
-msgid "Graphics"
-msgstr "Grafika"
-
-#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035
-msgid "GFX"
-msgstr "GFX"
-
-#: gui/launcher.cpp:211
-msgid "Override global graphic settings"
-msgstr "Globális grafikai beállítások felülbírálása"
-
-#: gui/launcher.cpp:213
-msgctxt "lowres"
-msgid "Override global graphic settings"
-msgstr "Globális grafikai beállítások felülbírálása"
-
-#: gui/launcher.cpp:220 gui/options.cpp:1041
-msgid "Audio"
-msgstr "Audió"
-
-#: gui/launcher.cpp:223
-msgid "Override global audio settings"
-msgstr "Globális audió beállítások felülbírálása"
-
-#: gui/launcher.cpp:225
-msgctxt "lowres"
-msgid "Override global audio settings"
-msgstr "Globális audió beállítások felülbírálása"
-
-#: gui/launcher.cpp:234 gui/options.cpp:1046
-msgid "Volume"
-msgstr "Hangerő"
-
-#: gui/launcher.cpp:236 gui/options.cpp:1048
-msgctxt "lowres"
-msgid "Volume"
-msgstr "Hangerő"
-
-#: gui/launcher.cpp:239
-msgid "Override global volume settings"
-msgstr "Globális hangerőbeállítások felülbírálása"
-
-#: gui/launcher.cpp:241
-msgctxt "lowres"
-msgid "Override global volume settings"
-msgstr "Globális hangerőbeállítások felülbírálása"
-
-#: gui/launcher.cpp:248 gui/options.cpp:1056
-msgid "MIDI"
-msgstr "MIDI"
-
-#: gui/launcher.cpp:251
-msgid "Override global MIDI settings"
-msgstr "Globális MIDI beállítások felülbírálása"
-
-#: gui/launcher.cpp:253
-msgctxt "lowres"
-msgid "Override global MIDI settings"
-msgstr "Globális MIDI beállítások felülbírálása"
-
-#: gui/launcher.cpp:263 gui/options.cpp:1062
-msgid "MT-32"
-msgstr "MT-32"
-
-#: gui/launcher.cpp:266
-msgid "Override global MT-32 settings"
-msgstr "Globális MT-32 beállítások felülbírálása"
-
-#: gui/launcher.cpp:268
-msgctxt "lowres"
-msgid "Override global MT-32 settings"
-msgstr "Globális MT-32 beállítások felülbírálása"
-
-#: gui/launcher.cpp:279 gui/options.cpp:1069
-msgid "Paths"
-msgstr "Mappák"
-
-#: gui/launcher.cpp:281 gui/options.cpp:1071
-msgctxt "lowres"
-msgid "Paths"
-msgstr "Mappák"
-
-#: gui/launcher.cpp:288
-msgid "Game Path:"
-msgstr "Játék Mappa:"
-
-#: gui/launcher.cpp:290
-msgctxt "lowres"
-msgid "Game Path:"
-msgstr "Játék Mappa:"
-
-#: gui/launcher.cpp:295 gui/options.cpp:1091
-msgid "Extra Path:"
-msgstr "Extra Mappa:"
-
-#: gui/launcher.cpp:295 gui/launcher.cpp:297 gui/launcher.cpp:298
-msgid "Specifies path to additional data used the game"
-msgstr "Mappa kiválasztás a játékok kiegészítő fájljaihoz"
-
-#: gui/launcher.cpp:297 gui/options.cpp:1093
-msgctxt "lowres"
-msgid "Extra Path:"
-msgstr "Extra Mappa:"
-
-#: gui/launcher.cpp:302 gui/options.cpp:1079
-msgid "Save Path:"
-msgstr "Mentés Mappa:"
-
-#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305
-#: gui/options.cpp:1079 gui/options.cpp:1081 gui/options.cpp:1082
-msgid "Specifies where your savegames are put"
-msgstr "Játékmentések helyének meghatározása"
-
-#: gui/launcher.cpp:304 gui/options.cpp:1081
-msgctxt "lowres"
-msgid "Save Path:"
-msgstr "Mentés Mappa:"
-
-#: gui/launcher.cpp:321 gui/launcher.cpp:404 gui/launcher.cpp:453
-#: gui/options.cpp:1088 gui/options.cpp:1094 gui/options.cpp:1101
-#: gui/options.cpp:1202 gui/options.cpp:1208 gui/options.cpp:1214
-#: gui/options.cpp:1222 gui/options.cpp:1246 gui/options.cpp:1250
-#: gui/options.cpp:1256 gui/options.cpp:1263 gui/options.cpp:1362
-msgctxt "path"
-msgid "None"
-msgstr "Nincs"
-
-#: gui/launcher.cpp:326 gui/launcher.cpp:408
-#: backends/platform/wii/options.cpp:56
-msgid "Default"
-msgstr "Alapértelmezett"
-
-#: gui/launcher.cpp:446 gui/options.cpp:1356
-msgid "Select SoundFont"
-msgstr "SoundFont kiválasztás"
-
-#: gui/launcher.cpp:465 gui/launcher.cpp:612
-msgid "Select directory with game data"
-msgstr "Játékok helyének kiválasztása"
-
-#: gui/launcher.cpp:483
-msgid "Select additional game directory"
-msgstr "Válassz mappát a játék kiegészítőkhöz"
-
-#: gui/launcher.cpp:495
-msgid "Select directory for saved games"
-msgstr "Válaszz játékmentéseknek mappát"
-
-#: gui/launcher.cpp:514
-msgid "This game ID is already taken. Please choose another one."
-msgstr "Ez a játékazonosító ID már foglalt, Válassz egy másikat."
-
-#: gui/launcher.cpp:555 engines/dialogs.cpp:110
-msgid "~Q~uit"
-msgstr "Kilépés"
-
-#: gui/launcher.cpp:555 backends/platform/sdl/macosx/appmenu_osx.mm:80
-msgid "Quit ScummVM"
-msgstr "ScummVM bezárása"
-
-#: gui/launcher.cpp:556
-msgid "A~b~out..."
-msgstr "Névjegy"
-
-#: gui/launcher.cpp:556 backends/platform/sdl/macosx/appmenu_osx.mm:61
-msgid "About ScummVM"
-msgstr "ScummVM névjegy"
-
-#: gui/launcher.cpp:557
-msgid "~O~ptions..."
-msgstr "~O~pciók..."
-
-#: gui/launcher.cpp:557
-msgid "Change global ScummVM options"
-msgstr "Globális ScummVM opciók cseréje"
-
-#: gui/launcher.cpp:559
-msgid "~S~tart"
-msgstr "Indítás"
-
-#: gui/launcher.cpp:559
-msgid "Start selected game"
-msgstr "A választott játék indítása"
-
-#: gui/launcher.cpp:562
-msgid "~L~oad..."
-msgstr "Betöltés"
-
-#: gui/launcher.cpp:562
-msgid "Load savegame for selected game"
-msgstr "Kimentett játékállás betöltése"
-
-#: gui/launcher.cpp:567 gui/launcher.cpp:1055
-msgid "~A~dd Game..."
-msgstr "Játék hozzáadás"
-
-#: gui/launcher.cpp:567 gui/launcher.cpp:574
-msgid "Hold Shift for Mass Add"
-msgstr "Tratsd lenyomva a Shift-et a Masszív módhoz"
-
-#: gui/launcher.cpp:569
-msgid "~E~dit Game..."
-msgstr "Játékopciók"
-
-#: gui/launcher.cpp:569 gui/launcher.cpp:576
-msgid "Change game options"
-msgstr "Játék beállítások megváltoztatása"
-
-#: gui/launcher.cpp:571
-msgid "~R~emove Game"
-msgstr "Játék törlése"
-
-#: gui/launcher.cpp:571 gui/launcher.cpp:578
-msgid "Remove game from the list. The game data files stay intact"
-msgstr "Törli a játék nevét a listáról. A játékfájlok megmaradnak"
-
-#: gui/launcher.cpp:574 gui/launcher.cpp:1055
-msgctxt "lowres"
-msgid "~A~dd Game..."
-msgstr "Játék hozzáadás"
-
-#: gui/launcher.cpp:576
-msgctxt "lowres"
-msgid "~E~dit Game..."
-msgstr "Játékopciók"
-
-#: gui/launcher.cpp:578
-msgctxt "lowres"
-msgid "~R~emove Game"
-msgstr "Játék törlése"
-
-#: gui/launcher.cpp:586
-msgid "Search in game list"
-msgstr "Keresés a játéklistában"
-
-#: gui/launcher.cpp:590 gui/launcher.cpp:1102
-msgid "Search:"
-msgstr "Keresés:"
-
-#: gui/launcher.cpp:593 gui/options.cpp:826
-msgid "Clear value"
-msgstr "Érték törlése"
-
-#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255
-#: engines/mohawk/riven.cpp:716 engines/cruise/menu.cpp:216
-msgid "Load game:"
-msgstr "Játék betöltése:"
-
-#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/scumm/dialogs.cpp:188
-#: engines/mohawk/myst.cpp:255 engines/mohawk/riven.cpp:716
-#: engines/cruise/menu.cpp:216 backends/platform/wince/CEActionsPocket.cpp:267
-#: backends/platform/wince/CEActionsSmartphone.cpp:231
-msgid "Load"
-msgstr "Betöltés"
-
-#: gui/launcher.cpp:723
-msgid ""
-"Do you really want to run the mass game detector? This could potentially add "
-"a huge number of games."
-msgstr ""
-"Biztos hogy futtatod a Masszív játékdetektort? Ez potenciálisan sok játékot "
-"hozzáad a listához."
-
-#: gui/launcher.cpp:724 gui/launcher.cpp:872
-#: backends/events/symbiansdl/symbiansdl-events.cpp:184
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-msgid "Yes"
-msgstr "Igen"
-
-#: gui/launcher.cpp:724 gui/launcher.cpp:872
-#: backends/events/symbiansdl/symbiansdl-events.cpp:184
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-msgid "No"
-msgstr "Nem"
-
-#: gui/launcher.cpp:772
-msgid "ScummVM couldn't open the specified directory!"
-msgstr "ScummVM nem tudja megnyitni a választott mappát!"
-
-#: gui/launcher.cpp:784
-msgid "ScummVM could not find any game in the specified directory!"
-msgstr "A ScummVM nem talált egy játékot sem a választott mappában!"
-
-#: gui/launcher.cpp:798
-msgid "Pick the game:"
-msgstr "Válassztott játék:"
-
-#: gui/launcher.cpp:872
-msgid "Do you really want to remove this game configuration?"
-msgstr "Biztosan törölni akarod ezt a játékkonfigurációt?"
-
-#: gui/launcher.cpp:936
-msgid "This game does not support loading games from the launcher."
-msgstr "Ez a játék nem támogatja a játékállás betöltést az indítóból."
-
-#: gui/launcher.cpp:940
-msgid "ScummVM could not find any engine capable of running the selected game!"
-msgstr ""
-"ScummVM nem talált olyan játékmotort ami a választott játékot támogatja!"
-
-#: gui/launcher.cpp:1054
-msgctxt "lowres"
-msgid "Mass Add..."
-msgstr "Masszív mód..."
-
-#: gui/launcher.cpp:1054
-msgid "Mass Add..."
-msgstr "Masszív mód..."
-
-#: gui/massadd.cpp:78 gui/massadd.cpp:81
-msgid "... progress ..."
-msgstr "... folyamatban ..."
-
-#: gui/massadd.cpp:258
-msgid "Scan complete!"
-msgstr "Vizsgálat kész!"
-
-#: gui/massadd.cpp:261
-#, c-format
-msgid "Discovered %d new games, ignored %d previously added games."
-msgstr "%d új játékot találtam, %d előzőleg hozzáadott játék kihagyva..."
-
-#: gui/massadd.cpp:265
-#, c-format
-msgid "Scanned %d directories ..."
-msgstr "%d Mappa átvizsgálva..."
-
-#: gui/massadd.cpp:268
-#, c-format
-msgid "Discovered %d new games, ignored %d previously added games ..."
-msgstr "%d új játékot találtam, %d előzőleg hozzáadott játék kihagyva..."
-
-#: gui/options.cpp:72
-msgid "Never"
-msgstr "Soha"
-
-#: gui/options.cpp:72
-msgid "every 5 mins"
-msgstr "5 percenként"
-
-#: gui/options.cpp:72
-msgid "every 10 mins"
-msgstr "10 percenként"
-
-#: gui/options.cpp:72
-msgid "every 15 mins"
-msgstr "15 percenként"
-
-#: gui/options.cpp:72
-msgid "every 30 mins"
-msgstr "30 percenként"
-
-#: gui/options.cpp:74
-msgid "8 kHz"
-msgstr "8 kHz"
-
-#: gui/options.cpp:74
-msgid "11kHz"
-msgstr "11kHz"
-
-#: gui/options.cpp:74
-msgid "22 kHz"
-msgstr "22 kHz"
-
-#: gui/options.cpp:74
-msgid "44 kHz"
-msgstr "44 kHz"
-
-#: gui/options.cpp:74
-msgid "48 kHz"
-msgstr "48 kHz"
-
-#: gui/options.cpp:236 gui/options.cpp:464 gui/options.cpp:559
-#: gui/options.cpp:625 gui/options.cpp:825
-msgctxt "soundfont"
-msgid "None"
-msgstr "Nincs"
-
-#: gui/options.cpp:372
-msgid "Failed to apply some of the graphic options changes:"
-msgstr "Néhány grafikus opció változtatása sikertelen:"
-
-#: gui/options.cpp:384
-msgid "the video mode could not be changed."
-msgstr "a videómód nem változott."
-
-#: gui/options.cpp:390
-msgid "the fullscreen setting could not be changed"
-msgstr "a teljesképernyős beállítás nem változott"
-
-#: gui/options.cpp:396
-msgid "the aspect ratio setting could not be changed"
-msgstr "a képméretarány beállítások nem változtak"
-
-#: gui/options.cpp:705
-msgid "Graphics mode:"
-msgstr "Grafikus mód:"
-
-#: gui/options.cpp:716
-msgid "Render mode:"
-msgstr "Kirajzolás mód:"
-
-#: gui/options.cpp:716 gui/options.cpp:717
-msgid "Special dithering modes supported by some games"
-msgstr "Néhány játék támogatja a speciális árnyalási módokat"
-
-#: gui/options.cpp:726
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2247
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:472
-msgid "Fullscreen mode"
-msgstr "Teljesképernyős mód:"
-
-#: gui/options.cpp:729
-msgid "Aspect ratio correction"
-msgstr "Képméretarány korrekció"
-
-#: gui/options.cpp:729
-msgid "Correct aspect ratio for 320x200 games"
-msgstr "Helyes oldalarány a 320x200 játékokhoz"
-
-#: gui/options.cpp:730
-msgid "EGA undithering"
-msgstr "EGA szinjavítás"
-
-#: gui/options.cpp:730
-msgid "Enable undithering in EGA games that support it"
-msgstr "EGA színjavítás támogatott EGA játékokban"
-
-#: gui/options.cpp:738
-msgid "Preferred Device:"
-msgstr "Elsődleges eszköz:"
-
-#: gui/options.cpp:738
-msgid "Music Device:"
-msgstr "Zene eszköz:"
-
-#: gui/options.cpp:738 gui/options.cpp:740
-msgid "Specifies preferred sound device or sound card emulator"
-msgstr "Elsődleges hangeszköz vagy hang emulátor beállítások"
-
-#: gui/options.cpp:738 gui/options.cpp:740 gui/options.cpp:741
-msgid "Specifies output sound device or sound card emulator"
-msgstr "Hangeszköz vagy hangkártya emulátor beállítások"
-
-#: gui/options.cpp:740
-msgctxt "lowres"
-msgid "Preferred Dev.:"
-msgstr "Elsődleges eszk.:"
-
-#: gui/options.cpp:740
-msgctxt "lowres"
-msgid "Music Device:"
-msgstr "Zene eszköz:"
-
-#: gui/options.cpp:766
-msgid "AdLib emulator:"
-msgstr "AdLib emulátor:"
-
-#: gui/options.cpp:766 gui/options.cpp:767
-msgid "AdLib is used for music in many games"
-msgstr "AdLib meghajtót sok játék használja zenéhez"
-
-#: gui/options.cpp:777
-msgid "Output rate:"
-msgstr "Kimeneti ráta:"
-
-#: gui/options.cpp:777 gui/options.cpp:778
-msgid ""
-"Higher value specifies better sound quality but may be not supported by your "
-"soundcard"
-msgstr ""
-"Nagyobb értékek jobb hangminőséget adnak, de nem minden hangkártya támogatja"
-
-#: gui/options.cpp:788
-msgid "GM Device:"
-msgstr "GM Eszköz:"
-
-#: gui/options.cpp:788
-msgid "Specifies default sound device for General MIDI output"
-msgstr "Alapértelmezett hangeszköz General MIDI kimenethez"
-
-#: gui/options.cpp:799
-msgid "Don't use General MIDI music"
-msgstr "Ne használj General MIDI zenét"
-
-#: gui/options.cpp:810 gui/options.cpp:871
-msgid "Use first available device"
-msgstr "Első elérhető eszköz használata"
-
-#: gui/options.cpp:822
-msgid "SoundFont:"
-msgstr "SoundFont:"
-
-#: gui/options.cpp:822 gui/options.cpp:824 gui/options.cpp:825
-msgid "SoundFont is supported by some audio cards, Fluidsynth and Timidity"
-msgstr ""
-"Néhány hangkárya, Fluidsynth és Timidyti támogatja a SoundFont betöltését"
-
-#: gui/options.cpp:824
-msgctxt "lowres"
-msgid "SoundFont:"
-msgstr "SoundFont:"
-
-#: gui/options.cpp:829
-msgid "Mixed AdLib/MIDI mode"
-msgstr "Vegyes AdLib/MIDI mód"
-
-#: gui/options.cpp:829
-msgid "Use both MIDI and AdLib sound generation"
-msgstr "MIDI és AdLib hanggenerátorok használata"
-
-#: gui/options.cpp:832
-msgid "MIDI gain:"
-msgstr "MIDI erősítés:"
-
-#: gui/options.cpp:842
-msgid "MT-32 Device:"
-msgstr "MT-32 Eszköz:"
-
-#: gui/options.cpp:842
-msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
-msgstr "Roland MT-32/LAPC1/CM32l/CM64 alapértelmezett hangeszközök beállítása"
-
-#: gui/options.cpp:847
-msgid "True Roland MT-32 (disable GM emulation)"
-msgstr "Roland MT-32 Hardver (GM emuláció tiltva)"
-
-#: gui/options.cpp:847 gui/options.cpp:849
-msgid ""
-"Check if you want to use your real hardware Roland-compatible sound device "
-"connected to your computer"
-msgstr ""
-"Jelöld be, ha hardveres Roland-Kompatibilis hangeszköz van csatlakoztatva a "
-"gépedhez és használni akarod"
-
-#: gui/options.cpp:849
-msgctxt "lowres"
-msgid "True Roland MT-32 (no GM emulation)"
-msgstr "Roland MT-32 Hardver (GM emuláció nincs)"
-
-#: gui/options.cpp:852
-msgid "Enable Roland GS Mode"
-msgstr "Roland GS Mód engedélyezve"
-
-#: gui/options.cpp:852
-msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack"
-msgstr "General MIDI leképezés Roland MT-32 zenés játékokhoz kikapcsolva"
-
-#: gui/options.cpp:861
-msgid "Don't use Roland MT-32 music"
-msgstr "Ne használj Roland MT-32 zenét"
-
-#: gui/options.cpp:888
-msgid "Text and Speech:"
-msgstr "Szöveg és beszéd:"
-
-#: gui/options.cpp:892 gui/options.cpp:902
-msgid "Speech"
-msgstr "Csak beszéd"
-
-#: gui/options.cpp:893 gui/options.cpp:903
-msgid "Subtitles"
-msgstr "Csak felirat"
-
-#: gui/options.cpp:894
-msgid "Both"
-msgstr "Mind"
-
-#: gui/options.cpp:896
-msgid "Subtitle speed:"
-msgstr "Felirat sebesség:"
-
-#: gui/options.cpp:898
-msgctxt "lowres"
-msgid "Text and Speech:"
-msgstr "Felirat és beszéd:"
-
-#: gui/options.cpp:902
-msgid "Spch"
-msgstr "Besz"
-
-#: gui/options.cpp:903
-msgid "Subs"
-msgstr "Text"
-
-#: gui/options.cpp:904
-msgctxt "lowres"
-msgid "Both"
-msgstr "Mind"
-
-#: gui/options.cpp:904
-msgid "Show subtitles and play speech"
-msgstr "Hang és feliratok megjelenítése"
-
-#: gui/options.cpp:906
-msgctxt "lowres"
-msgid "Subtitle speed:"
-msgstr "Felirat sebesség:"
-
-#: gui/options.cpp:922
-msgid "Music volume:"
-msgstr "Zene hangerő:"
-
-#: gui/options.cpp:924
-msgctxt "lowres"
-msgid "Music volume:"
-msgstr "Zene hangerő:"
-
-#: gui/options.cpp:931
-msgid "Mute All"
-msgstr "Összes némítása"
-
-#: gui/options.cpp:934
-msgid "SFX volume:"
-msgstr "SFX hangerő:"
-
-#: gui/options.cpp:934 gui/options.cpp:936 gui/options.cpp:937
-msgid "Special sound effects volume"
-msgstr "Speciális hangeffektusok hangereje"
-
-#: gui/options.cpp:936
-msgctxt "lowres"
-msgid "SFX volume:"
-msgstr "SFX hangerő:"
-
-#: gui/options.cpp:944
-msgid "Speech volume:"
-msgstr "Beszéd hangerő:"
-
-#: gui/options.cpp:946
-msgctxt "lowres"
-msgid "Speech volume:"
-msgstr "Beszéd hangerő:"
-
-#: gui/options.cpp:1085
-msgid "Theme Path:"
-msgstr "Téma Mappa:"
-
-#: gui/options.cpp:1087
-msgctxt "lowres"
-msgid "Theme Path:"
-msgstr "Téma Mappa:"
-
-#: gui/options.cpp:1091 gui/options.cpp:1093 gui/options.cpp:1094
-msgid "Specifies path to additional data used by all games or ScummVM"
-msgstr "Minden jéték és ScummVM kiegészítő fájljainak mappája:"
-
-#: gui/options.cpp:1098
-msgid "Plugins Path:"
-msgstr "Plugin Mappa:"
-
-#: gui/options.cpp:1100
-msgctxt "lowres"
-msgid "Plugins Path:"
-msgstr "Plugin Mappa:"
-
-#: gui/options.cpp:1109
-msgid "Misc"
-msgstr "Vegyes"
-
-#: gui/options.cpp:1111
-msgctxt "lowres"
-msgid "Misc"
-msgstr "Vegyes"
-
-#: gui/options.cpp:1113
-msgid "Theme:"
-msgstr "Téma:"
-
-#: gui/options.cpp:1117
-msgid "GUI Renderer:"
-msgstr "GUI Renderelő:"
-
-#: gui/options.cpp:1129
-msgid "Autosave:"
-msgstr "Automentés:"
-
-#: gui/options.cpp:1131
-msgctxt "lowres"
-msgid "Autosave:"
-msgstr "Automentés:"
-
-#: gui/options.cpp:1139
-msgid "Keys"
-msgstr "Billentyűk"
-
-#: gui/options.cpp:1146
-msgid "GUI Language:"
-msgstr "GUI nyelve:"
-
-#: gui/options.cpp:1146
-msgid "Language of ScummVM GUI"
-msgstr "A ScummVM GUI nyelve"
-
-#: gui/options.cpp:1295
-msgid "You have to restart ScummVM before your changes will take effect."
-msgstr "Indítsd újra a ScummVM-et a változások érvényesítéséhez."
-
-#: gui/options.cpp:1308
-msgid "Select directory for savegames"
-msgstr "Válassz játékmentés mappát"
-
-#: gui/options.cpp:1315
-msgid "The chosen directory cannot be written to. Please select another one."
-msgstr "A kiválasztott mappába nem lehet írni, válassz egy másikat"
-
-#: gui/options.cpp:1324
-msgid "Select directory for GUI themes"
-msgstr "GUI téma mappa kiválasztása"
-
-#: gui/options.cpp:1334
-msgid "Select directory for extra files"
-msgstr "Mappa választás az extra fájloknak"
-
-#: gui/options.cpp:1345
-msgid "Select directory for plugins"
-msgstr "Plugin mappa kiválasztása"
-
-#: gui/options.cpp:1389
-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 ""
-"A kiválasztott téma nem támogatja a nyelvedet. Ha használni akarod ezt a "
-"témát, előszőr válts át egy másik nyelvre."
-
-#: gui/saveload.cpp:58 gui/saveload.cpp:239
-msgid "No date saved"
-msgstr "Dátum nincs mentve"
-
-#: gui/saveload.cpp:59 gui/saveload.cpp:240
-msgid "No time saved"
-msgstr "Idő nincs mentve"
-
-#: gui/saveload.cpp:60 gui/saveload.cpp:241
-msgid "No playtime saved"
-msgstr "Játékidő nincs mentve"
-
-#: gui/saveload.cpp:67 gui/saveload.cpp:155
-msgid "Delete"
-msgstr "Töröl"
-
-#: gui/saveload.cpp:154
-msgid "Do you really want to delete this savegame?"
-msgstr "Biztos hogy törölni akarod ezt a játékállást?"
-
-#: gui/saveload.cpp:264
-msgid "Date: "
-msgstr "Dátum:"
-
-#: gui/saveload.cpp:268
-msgid "Time: "
-msgstr "Idő:"
-
-#: gui/saveload.cpp:274
-msgid "Playtime: "
-msgstr "Játékidő:"
-
-#: gui/saveload.cpp:287 gui/saveload.cpp:354
-msgid "Untitled savestate"
-msgstr "Névtelen játékállás"
-
-#: gui/themebrowser.cpp:44
-msgid "Select a Theme"
-msgstr "Válassz témát"
-
-#: gui/ThemeEngine.cpp:328
-msgid "Disabled GFX"
-msgstr "GFX letiltva"
-
-#: gui/ThemeEngine.cpp:328
-msgctxt "lowres"
-msgid "Disabled GFX"
-msgstr "GFX letiltva"
-
-#: gui/ThemeEngine.cpp:329
-msgid "Standard Renderer (16bpp)"
-msgstr "Standard leképező (16bpp)"
-
-#: gui/ThemeEngine.cpp:329
-msgid "Standard (16bpp)"
-msgstr "Standard (16bpp)"
-
-#: gui/ThemeEngine.cpp:331
-msgid "Antialiased Renderer (16bpp)"
-msgstr "Élsimításos leképező (16bpp)"
-
-#: gui/ThemeEngine.cpp:331
-msgid "Antialiased (16bpp)"
-msgstr "Élsimított (16bpp)"
-
-#: base/main.cpp:206
-#, c-format
-msgid "Engine does not support debug level '%s'"
-msgstr "A motor nem támogatja a '%s' debug szintet"
-
-#: base/main.cpp:274
-msgid "Menu"
-msgstr "Menü"
-
-#: base/main.cpp:277 backends/platform/symbian/src/SymbianActions.cpp:45
-#: backends/platform/wince/CEActionsPocket.cpp:45
-#: backends/platform/wince/CEActionsSmartphone.cpp:46
-msgid "Skip"
-msgstr "Tovább"
-
-#: base/main.cpp:280 backends/platform/symbian/src/SymbianActions.cpp:50
-#: backends/platform/wince/CEActionsPocket.cpp:42
-msgid "Pause"
-msgstr "Szünet"
-
-#: base/main.cpp:283
-msgid "Skip line"
-msgstr "Sor átlépése"
-
-#: base/main.cpp:442
-msgid "Error running game:"
-msgstr "Hiba a játék futtatásakor:"
-
-#: base/main.cpp:466
-msgid "Could not find any engine capable of running the selected game"
-msgstr "Nem található olyan játékmotor ami a választott játékot támogatja"
-
-#: common/error.cpp:38
-msgid "No error"
-msgstr "Nincs hiba"
-
-#: common/error.cpp:40
-msgid "Game data not found"
-msgstr "Játék adat nem található"
-
-#: common/error.cpp:42
-msgid "Game id not supported"
-msgstr "Játék id nem támogatott"
-
-#: common/error.cpp:44
-msgid "Unsupported color mode"
-msgstr "Nem támogatott színmód"
-
-#: common/error.cpp:47
-msgid "Read permission denied"
-msgstr "Olvasás hozzáfárés megtagadva"
-
-#: common/error.cpp:49
-msgid "Write permission denied"
-msgstr "Írás hozzáférés megtagadva"
-
-#: common/error.cpp:52
-msgid "Path does not exist"
-msgstr "Mappa nem létezik"
-
-#: common/error.cpp:54
-msgid "Path not a directory"
-msgstr "Mappa nem egy könyvtár"
-
-#: common/error.cpp:56
-msgid "Path not a file"
-msgstr "Mappa nem egy fájl"
-
-#: common/error.cpp:59
-msgid "Cannot create file"
-msgstr "Fájl nem hozható létre"
-
-#: common/error.cpp:61
-msgid "Reading data failed"
-msgstr "A Beolvasott adat hibás"
-
-#: common/error.cpp:63
-msgid "Writing data failed"
-msgstr "Kiírt adat hibás"
-
-#: common/error.cpp:66
-msgid "Could not find suitable engine plugin"
-msgstr "Nem található alkalmas motor plugin"
-
-#: common/error.cpp:68
-msgid "Engine plugin does not support save states"
-msgstr "A motor nem támogatja a játékállás mentését"
-
-#: common/error.cpp:71
-msgid "User canceled"
-msgstr "Felhasználói megszakítás"
-
-#: common/error.cpp:75
-msgid "Unknown error"
-msgstr "Ismeretlen hiba"
-
-#. I18N: Hercules is graphics card name
-#: common/util.cpp:275
-msgid "Hercules Green"
-msgstr "Hercules Zöld"
-
-#: common/util.cpp:276
-msgid "Hercules Amber"
-msgstr "Hercules Sárga"
-
-#: common/util.cpp:283
-msgctxt "lowres"
-msgid "Hercules Green"
-msgstr "Hercules Zöld"
-
-#: common/util.cpp:284
-msgctxt "lowres"
-msgid "Hercules Amber"
-msgstr "Hercules Sárga"
-
-#: engines/advancedDetector.cpp:296
-#, c-format
-msgid "The game in '%s' seems to be unknown."
-msgstr "A '%s' játék ismeretlennek tűnik."
-
-#: engines/advancedDetector.cpp:297
-msgid "Please, report the following data to the ScummVM team along with name"
-msgstr "Kérlek jelezd a ScummVM csapatnak a következő adatokat, együtt a játék"
-
-#: engines/advancedDetector.cpp:299
-msgid "of the game you tried to add and its version/language/etc.:"
-msgstr "címével és megbízható adataival játékverzió/nyelv(ek)/stb.:"
-
-#: engines/dialogs.cpp:84
-msgid "~R~esume"
-msgstr "Folytatás"
-
-#: engines/dialogs.cpp:86
-msgid "~L~oad"
-msgstr "Betöltés"
-
-#: engines/dialogs.cpp:90
-msgid "~S~ave"
-msgstr "Mentés"
-
-#: engines/dialogs.cpp:94
-msgid "~O~ptions"
-msgstr "~O~pciók"
-
-#: engines/dialogs.cpp:99
-msgid "~H~elp"
-msgstr "Súgó"
-
-#: engines/dialogs.cpp:101
-msgid "~A~bout"
-msgstr "Névjegy"
-
-#: engines/dialogs.cpp:104 engines/dialogs.cpp:182
-msgid "~R~eturn to Launcher"
-msgstr "Visszatérés az indítóba"
-
-#: engines/dialogs.cpp:106 engines/dialogs.cpp:184
-msgctxt "lowres"
-msgid "~R~eturn to Launcher"
-msgstr "Visszatérés az indítóba"
-
-#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214
-#: engines/sci/engine/kfile.cpp:575
-msgid "Save game:"
-msgstr "Játék mentése:"
-
-#: engines/dialogs.cpp:116 engines/scumm/dialogs.cpp:187
-#: engines/cruise/menu.cpp:214 engines/sci/engine/kfile.cpp:575
-#: backends/platform/symbian/src/SymbianActions.cpp:44
-#: backends/platform/wince/CEActionsPocket.cpp:43
-#: backends/platform/wince/CEActionsPocket.cpp:267
-#: backends/platform/wince/CEActionsSmartphone.cpp:45
-#: backends/platform/wince/CEActionsSmartphone.cpp:231
-msgid "Save"
-msgstr "Mentés"
-
-#: engines/dialogs.cpp:146
-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 ""
-"Sajnálom, a motor jelenleg nem tartalmaz játék közbeni súgót. Olvassd el a "
-"README-t az alap információkról, és hogy hogyan segíthetsz a későbbiekben."
-
-#: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:109
-#: engines/mohawk/dialogs.cpp:174
-msgid "~O~K"
-msgstr "~O~K"
-
-#: engines/dialogs.cpp:309 engines/mohawk/dialogs.cpp:110
-#: engines/mohawk/dialogs.cpp:175
-msgid "~C~ancel"
-msgstr "Mégse"
-
-#: engines/dialogs.cpp:312
-msgid "~K~eys"
-msgstr "Billentyük"
-
-#: engines/engine.cpp:233
-msgid "Could not initialize color format."
-msgstr "Szín formátum nincs alkalmazva"
-
-#: engines/engine.cpp:241
-msgid "Could not switch to video mode: '"
-msgstr "Videómód nincs átállítva: ' "
-
-#: engines/engine.cpp:250
-msgid "Could not apply aspect ratio setting."
-msgstr "Méretarány korrekció nem változott."
-
-#: engines/engine.cpp:255
-msgid "Could not apply fullscreen setting."
-msgstr "Teljesképernyős beállítás nincs alkalmazva"
-
-#: engines/engine.cpp:355
-msgid ""
-"You appear to be playing this game directly\n"
-"from the CD. This is known to cause problems,\n"
-"and it is therefore recommended that you copy\n"
-"the data files to your hard disk instead.\n"
-"See the README file for details."
-msgstr ""
-"Úgy néz ki, ezt a játékot CD-ről futtatod\n"
-"Ez ismert problémákat okoz, ezért\n"
-"ajánlatos átmásolni a játék\n"
-"adatfájljait a merevlemezedre.\n"
-"Nézd meg a README fájlt a részletekért."
-
-#: engines/engine.cpp:366
-msgid ""
-"This game has audio tracks in its disk. These\n"
-"tracks need to be ripped from the disk using\n"
-"an appropriate CD audio extracting tool in\n"
-"order to listen to the game's music.\n"
-"See the README file for details."
-msgstr ""
-"A játékhoz audiósávok tartoznak a lemezen\n"
-"ezeket a sávokat másold ki egy megfelelő\n"
-"CD audió kitömörítő programmal\n"
-"hogy a játék zenéje hallható legyen.\n"
-"Nézd meg a README fájlt a részletekért."
-
-#: engines/engine.cpp:433
-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 ""
-"FIGYELEM: A játékot amit indítani akarsz még nem teljesen támogatotja a "
-"ScummVM. Számíts rá hogy nem stabilan fut, és a mentések nem működnek a "
-"jövőbeni ScummVM verziókkal."
-
-#: engines/engine.cpp:436
-msgid "Start anyway"
-msgstr "Indítás így is"
-
-#: engines/scumm/dialogs.cpp:175
-#, c-format
-msgid "Insert Disk %c and Press Button to Continue."
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:176
-#, c-format
-msgid "Unable to Find %s, (%c%d) Press Button."
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:177
-#, c-format
-msgid "Error reading disk %c, (%c%d) Press Button."
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:178
-msgid "Game Paused. Press SPACE to Continue."
-msgstr ""
-
-#. 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 " Biztos hogy ki akarsz lépni ? "
-
-#. I18N: you may specify 'Yes' symbol at the endo fo the line. See previous comment
-#: engines/scumm/dialogs.cpp:184
-#, fuzzy
-msgid "Are you sure you want to quit? (Y/N)"
-msgstr " Biztos hogy ki akarsz lépni ? "
-
-#: engines/scumm/dialogs.cpp:189
-msgid "Play"
-msgstr ""
-
-#: 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
-#: backends/platform/wince/CEActionsSmartphone.cpp:52
-#: backends/events/default/default-events.cpp:244
-msgid "Quit"
-msgstr "Kilépés"
-
-#: engines/scumm/dialogs.cpp:193
-msgid "Insert save/load game disk"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:194
-msgid "You must enter a name"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:195
-msgid "The game was NOT saved (disk full?)"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:196
-msgid "The game was NOT loaded"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:197
-#, c-format
-msgid "Saving '%s'"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:198
-#, c-format
-msgid "Loading '%s'"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:199
-msgid "Name your SAVE game"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:200
-#, fuzzy
-msgid "Select a game to LOAD"
-msgstr "Válassz témát"
-
-#: engines/scumm/dialogs.cpp:201
-msgid "Game title)"
-msgstr ""
-
-#. I18N: Previous page button
-#: engines/scumm/dialogs.cpp:287
-msgid "~P~revious"
-msgstr "Előző"
-
-#. I18N: Next page button
-#: engines/scumm/dialogs.cpp:289
-msgid "~N~ext"
-msgstr "Következő"
-
-#: engines/scumm/dialogs.cpp:290
-#: backends/platform/ds/arm9/source/dsoptions.cpp:56
-msgid "~C~lose"
-msgstr "Bezár"
-
-#: engines/scumm/dialogs.cpp:597
-#, fuzzy
-msgid "Speech Only"
-msgstr "Csak beszéd"
-
-#: engines/scumm/dialogs.cpp:598
-#, fuzzy
-msgid "Speech and Subtitles"
-msgstr "Csak felirat"
-
-#: engines/scumm/dialogs.cpp:599
-#, fuzzy
-msgid "Subtitles Only"
-msgstr "Csak felirat"
-
-#: engines/scumm/dialogs.cpp:607
-#, fuzzy
-msgctxt "lowres"
-msgid "Speech & Subs"
-msgstr "Csak beszéd"
-
-#: engines/scumm/help.cpp:73
-msgid "Common keyboard commands:"
-msgstr "Általános billentyűparancsok:"
-
-#: engines/scumm/help.cpp:74
-msgid "Save / Load dialog"
-msgstr "Ment / Tölt dialógus"
-
-#: engines/scumm/help.cpp:76
-msgid "Skip line of text"
-msgstr "Szövegsor átugrása"
-
-#: engines/scumm/help.cpp:77
-msgid "Esc"
-msgstr "Esc"
-
-#: engines/scumm/help.cpp:77
-msgid "Skip cutscene"
-msgstr "Bevezető átugrása"
-
-#: engines/scumm/help.cpp:78
-msgid "Space"
-msgstr "Szóköz"
-
-#: engines/scumm/help.cpp:78
-msgid "Pause game"
-msgstr "Szünet a játékban"
-
-#: 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 "1-10 Játékállás betöltése"
-
-#: 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"
-
-#: engines/scumm/help.cpp:80
-msgid "Save game state 1-10"
-msgstr "1-10 Játékállás mentése"
-
-#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:89
-msgid "Enter"
-msgstr "Enter"
-
-#: engines/scumm/help.cpp:86
-msgid "Toggle fullscreen"
-msgstr "Teljesképernyő kapcsoló"
-
-#: engines/scumm/help.cpp:87
-msgid "Music volume up / down"
-msgstr "Zene hangerő fel / le"
-
-#: engines/scumm/help.cpp:88
-msgid "Text speed slower / faster"
-msgstr "Szövegsebesség gyors / lassú"
-
-#: engines/scumm/help.cpp:89
-msgid "Simulate left mouse button"
-msgstr "Bal egérgomb szimuláció"
-
-#: engines/scumm/help.cpp:90
-msgid "Tab"
-msgstr "Tab"
-
-#: engines/scumm/help.cpp:90
-msgid "Simulate right mouse button"
-msgstr "Jobb egérgomb szimuláció"
-
-#: engines/scumm/help.cpp:93
-msgid "Special keyboard commands:"
-msgstr "Speciális billentyűparancsok:"
-
-#: engines/scumm/help.cpp:94
-msgid "Show / Hide console"
-msgstr "Konzol be / ki kapcsolás"
-
-#: engines/scumm/help.cpp:95
-msgid "Start the debugger"
-msgstr "Hibakereső indítása"
-
-#: engines/scumm/help.cpp:96
-msgid "Show memory consumption"
-msgstr "Memóriakihasználtság látszik"
-
-#: engines/scumm/help.cpp:97
-msgid "Run in fast mode (*)"
-msgstr "Futtatás gyors módban (*)"
-
-#: engines/scumm/help.cpp:98
-msgid "Run in really fast mode (*)"
-msgstr "Futtatás túlgyors módban (*)"
-
-#: engines/scumm/help.cpp:99
-msgid "Toggle mouse capture"
-msgstr "Egér rögzítés kapcsoló"
-
-#: engines/scumm/help.cpp:100
-msgid "Switch between graphics filters"
-msgstr "Kapcsolás grafikus szűrők között"
-
-#: engines/scumm/help.cpp:101
-msgid "Increase / Decrease scale factor"
-msgstr "Lépték növelés / csökkentés"
-
-#: engines/scumm/help.cpp:102
-msgid "Toggle aspect-ratio correction"
-msgstr "Méretarány korrekció kapcsoló"
-
-#: engines/scumm/help.cpp:107
-msgid "* Note that using ctrl-f and"
-msgstr "* Megjegyzés, ctrl-f és"
-
-#: engines/scumm/help.cpp:108
-msgid " ctrl-g are not recommended"
-msgstr " ctrl-g használata nem javasolt"
-
-#: engines/scumm/help.cpp:109
-msgid " since they may cause crashes"
-msgstr " mert rendszerösszeomlást vagy"
-
-#: engines/scumm/help.cpp:110
-msgid " or incorrect game behavior."
-msgstr " vagy hibás játékműködést okoz."
-
-#: engines/scumm/help.cpp:114
-msgid "Spinning drafts on the keyboard:"
-msgstr "Forgó draftok a billentyűzeten:"
-
-#: engines/scumm/help.cpp:116
-msgid "Main game controls:"
-msgstr "Fő játékvezérlők:"
-
-#: engines/scumm/help.cpp:121 engines/scumm/help.cpp:136
-#: engines/scumm/help.cpp:161
-msgid "Push"
-msgstr "Tol"
-
-#: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137
-#: engines/scumm/help.cpp:162
-msgid "Pull"
-msgstr "Húz"
-
-#: 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 "Ad"
-
-#: 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 "Nyit"
-
-#: engines/scumm/help.cpp:126
-msgid "Go to"
-msgstr "Menj"
-
-#: engines/scumm/help.cpp:127
-msgid "Get"
-msgstr "Vesz"
-
-#: 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 "Használ"
-
-#: engines/scumm/help.cpp:129 engines/scumm/help.cpp:141
-msgid "Read"
-msgstr "Olvas"
-
-#: engines/scumm/help.cpp:130 engines/scumm/help.cpp:147
-msgid "New kid"
-msgstr "Új gyerek"
-
-#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:153
-#: engines/scumm/help.cpp:171
-msgid "Turn on"
-msgstr "Bekapcsol"
-
-#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:154
-#: engines/scumm/help.cpp:172
-msgid "Turn off"
-msgstr "Kikapcsol"
-
-#: engines/scumm/help.cpp:142 engines/scumm/help.cpp:167
-#: engines/scumm/help.cpp:194
-msgid "Walk to"
-msgstr "Odamegy"
-
-#: 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 "Felvesz"
-
-#: engines/scumm/help.cpp:144 engines/scumm/help.cpp:169
-msgid "What is"
-msgstr "Mi ez"
-
-#: engines/scumm/help.cpp:146
-msgid "Unlock"
-msgstr "Felold"
-
-#: engines/scumm/help.cpp:149
-msgid "Put on"
-msgstr "Felvesz"
-
-#: engines/scumm/help.cpp:150
-msgid "Take off"
-msgstr "Letesz"
-
-#: engines/scumm/help.cpp:156
-msgid "Fix"
-msgstr "Javít"
-
-#: engines/scumm/help.cpp:158
-msgid "Switch"
-msgstr "Kapcsol"
-
-#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:228
-msgid "Look"
-msgstr "Megnéz"
-
-#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:223
-msgid "Talk"
-msgstr "Beszél"
-
-#: engines/scumm/help.cpp:174
-msgid "Travel"
-msgstr "Utazás"
-
-#: engines/scumm/help.cpp:175
-msgid "To Henry / To Indy"
-msgstr "Henrytől / Indytől"
-
-#. I18N: These are different musical notes
-#: engines/scumm/help.cpp:179
-msgid "play C minor on distaff"
-msgstr "C moll játék a bottal"
-
-#: engines/scumm/help.cpp:180
-msgid "play D on distaff"
-msgstr "Játék D-ben a bottal"
-
-#: engines/scumm/help.cpp:181
-msgid "play E on distaff"
-msgstr "Játék E-ben a bottal"
-
-#: engines/scumm/help.cpp:182
-msgid "play F on distaff"
-msgstr "Játék F-ben a bottal"
-
-#: engines/scumm/help.cpp:183
-msgid "play G on distaff"
-msgstr "Játék G-ben a bottal"
-
-#: engines/scumm/help.cpp:184
-msgid "play A on distaff"
-msgstr "Játék A-ban a bottal"
-
-#: engines/scumm/help.cpp:185
-msgid "play B on distaff"
-msgstr "Játék B-ben a bottal"
-
-#: engines/scumm/help.cpp:186
-msgid "play C major on distaff"
-msgstr "C dúr játék a bottal"
-
-#: engines/scumm/help.cpp:192 engines/scumm/help.cpp:214
-msgid "puSh"
-msgstr "Megtol"
-
-#: engines/scumm/help.cpp:193 engines/scumm/help.cpp:215
-msgid "pull (Yank)"
-msgstr "húz (Ránt)"
-
-#: engines/scumm/help.cpp:196 engines/scumm/help.cpp:212
-#: engines/scumm/help.cpp:248
-msgid "Talk to"
-msgstr "Beszél"
-
-#: engines/scumm/help.cpp:199 engines/scumm/help.cpp:211
-msgid "Look at"
-msgstr "Megnézi"
-
-#: engines/scumm/help.cpp:200
-msgid "turn oN"
-msgstr "Bekapcsol"
-
-#: engines/scumm/help.cpp:201
-msgid "turn oFf"
-msgstr "Kikapcsol"
-
-#: engines/scumm/help.cpp:217
-msgid "KeyUp"
-msgstr "FelGomb"
-
-#: engines/scumm/help.cpp:217
-msgid "Highlight prev dialogue"
-msgstr "Előző dialógus kiemelése"
-
-#: engines/scumm/help.cpp:218
-msgid "KeyDown"
-msgstr "LeGomb"
-
-#: engines/scumm/help.cpp:218
-msgid "Highlight next dialogue"
-msgstr "Következő dialógus kiemelése"
-
-#: engines/scumm/help.cpp:222
-msgid "Walk"
-msgstr "Megy"
-
-#: engines/scumm/help.cpp:225 engines/scumm/help.cpp:234
-#: engines/scumm/help.cpp:241 engines/scumm/help.cpp:249
-msgid "Inventory"
-msgstr "Tárgylista"
-
-#: engines/scumm/help.cpp:226
-msgid "Object"
-msgstr "Tárgy"
-
-#: engines/scumm/help.cpp:229
-msgid "Black and White / Color"
-msgstr "Fekete fehér / Színes"
-
-#: engines/scumm/help.cpp:232
-msgid "Eyes"
-msgstr "Szemek"
-
-#: engines/scumm/help.cpp:233
-msgid "Tongue"
-msgstr "Nyelv"
-
-#: engines/scumm/help.cpp:235
-msgid "Punch"
-msgstr "Megüt"
-
-#: engines/scumm/help.cpp:236
-msgid "Kick"
-msgstr "Megüt"
-
-#: engines/scumm/help.cpp:239 engines/scumm/help.cpp:247
-msgid "Examine"
-msgstr "Vizsgál"
-
-#: engines/scumm/help.cpp:240
-msgid "Regular cursor"
-msgstr "Szabvány kurzor"
-
-#. I18N: Comm is a communication device
-#: engines/scumm/help.cpp:243
-msgid "Comm"
-msgstr "Comm"
-
-#: engines/scumm/help.cpp:246
-msgid "Save / Load / Options"
-msgstr "Ment / Tölt / Opciók"
-
-#: engines/scumm/help.cpp:255
-msgid "Other game controls:"
-msgstr "Egyébb játékvezérlők:"
-
-#: engines/scumm/help.cpp:257 engines/scumm/help.cpp:267
-msgid "Inventory:"
-msgstr "Tárgylista:"
-
-#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:274
-msgid "Scroll list up"
-msgstr "Listagörgetés fel"
-
-#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:275
-msgid "Scroll list down"
-msgstr "Listagörgetés le"
-
-#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:268
-msgid "Upper left item"
-msgstr "Bal felső tárgy"
-
-#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:270
-msgid "Lower left item"
-msgstr "Bal alsó tárgy"
-
-#: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271
-msgid "Upper right item"
-msgstr "Jobb felső tárgy"
-
-#: engines/scumm/help.cpp:263 engines/scumm/help.cpp:273
-msgid "Lower right item"
-msgstr "Jobb alsó tárgy"
-
-#: engines/scumm/help.cpp:269
-msgid "Middle left item"
-msgstr "Bal középső tárgy"
-
-#: engines/scumm/help.cpp:272
-msgid "Middle right item"
-msgstr "Jobb középső tárgy"
-
-#: engines/scumm/help.cpp:279 engines/scumm/help.cpp:284
-msgid "Switching characters:"
-msgstr "Karakterek cseréje:"
-
-#: engines/scumm/help.cpp:281
-msgid "Second kid"
-msgstr "Második gyerek"
-
-#: engines/scumm/help.cpp:282
-msgid "Third kid"
-msgstr "Harmadik gyerek"
-
-#: engines/scumm/help.cpp:294
-msgid "Fighting controls (numpad):"
-msgstr "Verekedés irányítók (numpad):"
-
-#: engines/scumm/help.cpp:295 engines/scumm/help.cpp:296
-#: engines/scumm/help.cpp:297
-msgid "Step back"
-msgstr "Hátralép"
-
-#: engines/scumm/help.cpp:298
-msgid "Block high"
-msgstr "Felső védés"
-
-#: engines/scumm/help.cpp:299
-msgid "Block middle"
-msgstr "Védés középen"
-
-#: engines/scumm/help.cpp:300
-msgid "Block low"
-msgstr "Alsó védés"
-
-#: engines/scumm/help.cpp:301
-msgid "Punch high"
-msgstr "Felső ütés"
-
-#: engines/scumm/help.cpp:302
-msgid "Punch middle"
-msgstr "Ütés középen"
-
-#: engines/scumm/help.cpp:303
-msgid "Punch low"
-msgstr "Alsó ütés"
-
-#: engines/scumm/help.cpp:306
-msgid "These are for Indy on left."
-msgstr "Indytől balra levő."
-
-#: engines/scumm/help.cpp:307
-msgid "When Indy is on the right,"
-msgstr "Indytől jobbra levő,"
-
-#: engines/scumm/help.cpp:308
-msgid "7, 4, and 1 are switched with"
-msgstr "7, 4, és 1 átkapcsolva"
-
-#: engines/scumm/help.cpp:309
-msgid "9, 6, and 3, respectively."
-msgstr "9, 6, és 3-ra, egyenként."
-
-#: engines/scumm/help.cpp:316
-msgid "Biplane controls (numpad):"
-msgstr "Repülő vezérlők (numpad):"
-
-#: engines/scumm/help.cpp:317
-msgid "Fly to upper left"
-msgstr "Balra fel repülés"
-
-#: engines/scumm/help.cpp:318
-msgid "Fly to left"
-msgstr "Balra repülés"
-
-#: engines/scumm/help.cpp:319
-msgid "Fly to lower left"
-msgstr "Balra le repülés"
-
-#: engines/scumm/help.cpp:320
-msgid "Fly upwards"
-msgstr "Repülés fel"
-
-#: engines/scumm/help.cpp:321
-msgid "Fly straight"
-msgstr "Repülés előre"
-
-#: engines/scumm/help.cpp:322
-msgid "Fly down"
-msgstr "Repülés le"
-
-#: engines/scumm/help.cpp:323
-msgid "Fly to upper right"
-msgstr "Jobbra fel repülés"
-
-#: engines/scumm/help.cpp:324
-msgid "Fly to right"
-msgstr "Jobbra repülés"
-
-#: engines/scumm/help.cpp:325
-msgid "Fly to lower right"
-msgstr "Jobbra le repülés"
-
-#: engines/scumm/scumm.cpp:1768
-#, c-format
-msgid ""
-"Native MIDI support requires the Roland Upgrade from LucasArts,\n"
-"but %s is missing. Using AdLib instead."
-msgstr ""
-"Native MIDI támogatáshoz kell a Roland Upgrade a LucasArts-tól,\n"
-"a %s hiányzik. AdLib-ot használok helyette."
-
-#: engines/scumm/scumm.cpp:2258 engines/agos/saveload.cpp:189
-#, c-format
-msgid ""
-"Failed to save game state to file:\n"
-"\n"
-"%s"
-msgstr ""
-"Játékállás mentése:\n"
-"\n"
-"%s fájlba nem sikerült"
-
-#: engines/scumm/scumm.cpp:2265 engines/agos/saveload.cpp:154
-#, c-format
-msgid ""
-"Failed to load game state from file:\n"
-"\n"
-"%s"
-msgstr ""
-"Játékállás betöltése:\n"
-"\n"
-"%s fájlból nem sikerült"
-
-#: engines/scumm/scumm.cpp:2277 engines/agos/saveload.cpp:197
-#, c-format
-msgid ""
-"Successfully saved game state in file:\n"
-"\n"
-"%s"
-msgstr ""
-"Játékállás mentése:\n"
-"\n"
-"%s fájlba elkészült"
-
-#: engines/scumm/scumm.cpp:2492
-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 ""
-"Általában a Maniac Mansion indulna itt. De a ScummVM most nem indítja el. Ha "
-"játszani akarsz vele menj a ScummVM főmenüben a 'Játék hozzáadás' ra és "
-"válaszd a 'Maniac' mappát a 'Tentacle' könyvtárában."
-
-#. I18N: Option for fast scene switching
-#: engines/mohawk/dialogs.cpp:92 engines/mohawk/dialogs.cpp:171
-msgid "~Z~ip Mode Activated"
-msgstr "~Z~ip Mód aktiválva"
-
-#: engines/mohawk/dialogs.cpp:93
-msgid "~T~ransitions Enabled"
-msgstr "Átmenetek engedélyezve"
-
-#. I18N: Drop book page
-#: engines/mohawk/dialogs.cpp:95
-msgid "~D~rop Page"
-msgstr "Oldal~D~obás"
-
-#: engines/mohawk/dialogs.cpp:99
-msgid "~S~how Map"
-msgstr "~S~ Térkép"
-
-#: engines/mohawk/dialogs.cpp:105
-#, fuzzy
-msgid "~M~ain Menu"
-msgstr "ScummVM Főmenü"
-
-#: engines/mohawk/dialogs.cpp:172
-msgid "~W~ater Effect Enabled"
-msgstr "Vízeffektus engedélyezve"
-
-#: engines/sci/engine/kfile.cpp:678
-msgid "Restore game:"
-msgstr "Játékmenet visszaállítása:"
-
-#: engines/sci/engine/kfile.cpp:678
-msgid "Restore"
-msgstr "Visszaállítás"
-
-#: engines/agos/animation.cpp:544
-#, c-format
-msgid "Cutscene file '%s' not found!"
-msgstr "'%s' átvezető fájl nem található"
-
-#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1283
-#: engines/tinsel/saveload.cpp:475
-msgid "Failed to load game state from file."
-msgstr "Játékállás betöltése fájlból nem sikerült."
-
-#: engines/gob/inter_v2.cpp:1353 engines/tinsel/saveload.cpp:553
-msgid "Failed to save game state to file."
-msgstr "Játékállás mentése fájlba nem sikerült."
-
-#: engines/gob/inter_v5.cpp:107
-msgid "Failed to delete file."
-msgstr "Fájl törlés sikertelen."
-
-#: engines/groovie/script.cpp:420
-msgid "Failed to save game"
-msgstr "Játék mentés nem sikerült"
-
-#: 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."
-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."
-
-#: engines/m4/m4_menus.cpp:138
-msgid "Save game failed!"
-msgstr "Játék mentése nem sikerült!"
-
-#: engines/sky/compact.cpp:130
-msgid ""
-"Unable to find \"sky.cpt\" file!\n"
-"Please download it from www.scummvm.org"
-msgstr ""
-"A \"sky.cpt\" fájl nem található!\n"
-"Töltsd le a www.scummvm.org oldaláról"
-
-#: engines/sky/compact.cpp:141
-msgid ""
-"The \"sky.cpt\" file has an incorrect size.\n"
-"Please (re)download it from www.scummvm.org"
-msgstr ""
-"A \"sky.cpt\" fájl mérete nem megfelelő.\n"
-"Töltsd le a www.scummvm.org oldaláról"
-
-#: engines/sword1/animation.cpp:344 engines/sword2/animation.cpp:379
-msgid "DXA cutscenes found but ScummVM has been built without zlib support"
-msgstr "DXA átvezető elérhető, de a ScummVM zlib támogatás nincs lefordítva"
-
-#: engines/sword1/animation.cpp:354 engines/sword2/animation.cpp:389
-msgid "MPEG2 cutscenes are no longer supported"
-msgstr "MPEG2 átvezetők már nem támogatottak"
-
-#: engines/sword1/animation.cpp:359 engines/sword2/animation.cpp:397
-#, c-format
-msgid "Cutscene '%s' not found"
-msgstr "'%s' átvezető nem található"
-
-#: 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"
-"\n"
-"Press OK to convert them now, otherwise you will be asked again the next "
-"time you start the game.\n"
-msgstr ""
-"ScummVM régi játékmentést talált a Broken Sword 1 hez, ezt át kell "
-"alakítani.\n"
-"A régi játékmentés nem támogatott, ezért a játék nem töltődik be átalakítás "
-"nélkül.\n"
-"\n"
-"Nyomj OK-t az átalakításhoz, vagy rákérdezzek ha legközelebb elindítod a "
-"játékot.\n"
-
-#: engines/sword1/control.cpp:1232
-#, c-format
-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 ""
-"A választott játékmentés már létezik!\n"
-"Megtartod a régi játékmentést (%s) vagy kicseréled az újra (%s)?\n"
-
-#: engines/sword1/control.cpp:1235
-msgid "Keep the old one"
-msgstr "A régit megtartom"
-
-#: engines/sword1/control.cpp:1235
-msgid "Keep the new one"
-msgstr "Az újat megtartom"
-
-#: engines/sword1/logic.cpp:1633
-msgid "This is the end of the Broken Sword 1 Demo"
-msgstr "Ez a Broken Sword 1 Demo vége"
-
-#: engines/parallaction/saveload.cpp:133
-#, c-format
-msgid ""
-"Can't save game in slot %i\n"
-"\n"
-msgstr ""
-"Játékállás nem menthető %i slotba\n"
-"\n"
-
-#: engines/parallaction/saveload.cpp:211
-msgid "Loading game..."
-msgstr "Játék betöltés..."
-
-#: engines/parallaction/saveload.cpp:226
-msgid "Saving game..."
-msgstr "Játék mentés..."
-
-#: engines/parallaction/saveload.cpp:279
-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"
-"\n"
-"Press OK to convert them now, otherwise you will be asked next time.\n"
-msgstr ""
-"ScummVM régi játékmentést talált a Nippon Safes hez ezt át kell nevezni.\n"
-"A régi játékmentés nem támogatott, ezért a játék nem töltődik be átnevezés "
-"nélkül..\n"
-"\n"
-"Nyomj OK-t az átalakításhoz, vagy rákérdezzek ha legközelebb elindítod a "
-"játékot.\n"
-
-#: engines/parallaction/saveload.cpp:326
-msgid "ScummVM successfully converted all your savefiles."
-msgstr "ScummVM konvertálta az összes játékállásodat."
-
-#: engines/parallaction/saveload.cpp:328
-msgid ""
-"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 kiírt néhány figyelmeztetést a konzolablakba és nem biztos hogy az "
-"összes fájlod át lett alakítva.\n"
-"\n"
-"Légyszíves jelentsd a csapatnak."
-
-#: audio/fmopl.cpp:49
-msgid "MAME OPL emulator"
-msgstr "MAME OPL emulátor"
-
-#: audio/fmopl.cpp:51
-msgid "DOSBox OPL emulator"
-msgstr "DOSBox OPL emulátor"
-
-#: audio/mididrv.cpp:205
-#, fuzzy, c-format
-msgid ""
-"The selected audio device '%s' was not found (e.g. might be turned off or "
-"disconnected)."
-msgstr ""
-"A kiválasztott '%s' hangeszköz nem található. (Lekapcsoltad, vagy kihúztad). "
-"A következő elérhető eszköz keresése..."
-
-#: audio/mididrv.cpp:205 audio/mididrv.cpp:217 audio/mididrv.cpp:253
-#: audio/mididrv.cpp:268
-msgid "Attempting to fall back to the next available device..."
-msgstr ""
-
-#: audio/mididrv.cpp:217
-#, fuzzy, c-format
-msgid ""
-"The selected audio device '%s' cannot be used. See log file for more "
-"information."
-msgstr ""
-"A kiválasztott '%s' hangeszköz nem használható. Bővebb információ a "
-"naplófájlban. A következő elérhető eszköz keresése..."
-
-#: audio/mididrv.cpp:253
-#, fuzzy, c-format
-msgid ""
-"The preferred audio device '%s' was not found (e.g. might be turned off or "
-"disconnected)."
-msgstr ""
-"Az elsődleges '%s' hangeszköz nem található. (Lekapcsoltad, vagy kihúztad). "
-"A következő elérhető eszköz keresése..."
-
-#: audio/mididrv.cpp:268
-#, fuzzy, c-format
-msgid ""
-"The preferred audio device '%s' cannot be used. See log file for more "
-"information."
-msgstr ""
-"Az elsődleges '%s' hangeszköz nem használható. Bővebb információ a "
-"naplófájlban. A következő elérhető eszköz keresése..."
-
-#: audio/null.h:43
-msgid "No music"
-msgstr "Nincs zene"
-
-#: audio/mods/paula.cpp:189
-msgid "Amiga Audio Emulator"
-msgstr "Amiga Audió Emulátor"
-
-#: audio/softsynth/adlib.cpp:1594
-msgid "AdLib Emulator"
-msgstr "AdLib Emulátor"
-
-#: audio/softsynth/appleiigs.cpp:33
-msgid "Apple II GS Emulator (NOT IMPLEMENTED)"
-msgstr "Apple II GS Emulátor (NEM TÁMOGATOTT)"
-
-#: audio/softsynth/sid.cpp:1430
-msgid "C64 Audio Emulator"
-msgstr "C64 Audio Emulátor"
-
-#: audio/softsynth/mt32.cpp:329
-msgid "Initializing MT-32 Emulator"
-msgstr "MT-32 Emulátor inicializálása"
-
-#: audio/softsynth/mt32.cpp:543
-msgid "MT-32 Emulator"
-msgstr "MT-32 Emulátor"
-
-#: audio/softsynth/pcspk.cpp:139
-msgid "PC Speaker Emulator"
-msgstr "PC Speaker Emulátor"
-
-#: audio/softsynth/pcspk.cpp:158
-msgid "IBM PCjr Emulator"
-msgstr "IBM PCjr Emulátor"
-
-#: backends/keymapper/remap-dialog.cpp:47
-msgid "Keymap:"
-msgstr "Billentyűzet kiosztás:"
-
-#: backends/keymapper/remap-dialog.cpp:64
-msgid " (Active)"
-msgstr " (Aktív)"
-
-#: backends/keymapper/remap-dialog.cpp:98
-msgid " (Global)"
-msgstr " (Globális)"
-
-#: backends/keymapper/remap-dialog.cpp:108
-msgid " (Game)"
-msgstr " (Játék)"
-
-#: backends/midi/windows.cpp:164
-msgid "Windows MIDI"
-msgstr "Windows MIDI"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:57
-msgid "ScummVM Main Menu"
-msgstr "ScummVM Főmenü"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:63
-msgid "~L~eft handed mode"
-msgstr "Balkezes mód:"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:64
-msgid "~I~ndy fight controls"
-msgstr "~I~ndy fight controls"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:65
-msgid "Show mouse cursor"
-msgstr "Egérkurzor látszik"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:66
-msgid "Snap to edges"
-msgstr "Élekre illesztés"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:68
-msgid "Touch X Offset"
-msgstr "Touch X Eltolás"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:75
-msgid "Touch Y Offset"
-msgstr "Touch Y Eltolás"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:87
-msgid "Use laptop trackpad-style cursor control"
-msgstr "Laptop trackpad stílusu kurzor vezérlő"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:88
-msgid "Tap for left click, double tap right click"
-msgstr "Érintés balkatt, duplaérintés jobbkatt"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:90
-msgid "Sensitivity"
-msgstr "Érzékenység"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:99
-msgid "Initial top screen scale:"
-msgstr "Képernyő felső kezdőpont:"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:105
-msgid "Main screen scaling:"
-msgstr "Főképernyő átméretezés:"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:107
-msgid "Hardware scale (fast, but low quality)"
-msgstr "Hardveres átméretezés (gyors, alacsony minőség)"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:108
-msgid "Software scale (good quality, but slower)"
-msgstr "Szoftveres átméretezés (jó minőség, lassú)"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:109
-msgid "Unscaled (you must scroll left and right)"
-msgstr "Eredeti (görgethetsz jobbra és balra)"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:111
-msgid "Brightness:"
-msgstr "Fényerő:"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:121
-msgid "High quality audio (slower) (reboot)"
-msgstr "Jóminőségü audió (lassabb)(újraindítás)"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:122
-msgid "Disable power off"
-msgstr "Leállítás tiltva"
-
-#: backends/platform/iphone/osys_events.cpp:338
-msgid "Mouse-click-and-drag mode enabled."
-msgstr "Egér kattint-és-húz mód engedélyezve."
-
-#: backends/platform/iphone/osys_events.cpp:340
-msgid "Mouse-click-and-drag mode disabled."
-msgstr "Egér kattint-és-húz mód letiltva."
-
-#: backends/platform/iphone/osys_events.cpp:351
-msgid "Touchpad mode enabled."
-msgstr "Touchpad mód engedélyezve."
-
-#: backends/platform/iphone/osys_events.cpp:353
-msgid "Touchpad mode disabled."
-msgstr "Touchpad mód letiltva."
-
-#: backends/platform/sdl/macosx/appmenu_osx.mm:67
-#, fuzzy
-msgid "Hide ScummVM"
-msgstr "ScummVM bezárása"
-
-#: backends/platform/sdl/macosx/appmenu_osx.mm:70
-msgid "Hide Others"
-msgstr ""
-
-#: backends/platform/sdl/macosx/appmenu_osx.mm:74
-msgid "Show All"
-msgstr ""
-
-#: backends/platform/sdl/macosx/appmenu_osx.mm:92
-#: backends/platform/sdl/macosx/appmenu_osx.mm:99
-#, fuzzy
-msgid "Window"
-msgstr "Windows MIDI"
-
-#: backends/platform/sdl/macosx/appmenu_osx.mm:95
-msgid "Minimize"
-msgstr ""
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:45
-msgid "Normal (no scaling)"
-msgstr "Normál (nincs átméretezés)"
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:64
-msgctxt "lowres"
-msgid "Normal (no scaling)"
-msgstr "Normál (nincs átméretezés)"
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2146
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:533
-msgid "Enabled aspect ratio correction"
-msgstr "Méretarány korrekció engedélyezve"
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2152
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:538
-msgid "Disabled aspect ratio correction"
-msgstr "Méretarány korrekció letiltva"
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2207
-msgid "Active graphics filter:"
-msgstr "Aktív grafikus szűrők:"
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2249
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:477
-msgid "Windowed mode"
-msgstr "Ablakos mód"
-
-#: backends/graphics/opengl/opengl-graphics.cpp:130
-msgid "OpenGL Normal"
-msgstr "OpenGL Normál"
-
-#: backends/graphics/opengl/opengl-graphics.cpp:131
-msgid "OpenGL Conserve"
-msgstr "OpenGL Megtartott"
-
-#: backends/graphics/opengl/opengl-graphics.cpp:132
-msgid "OpenGL Original"
-msgstr "OpenGL Eredeti"
-
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:415
-msgid "Current display mode"
-msgstr "Jelenlegi videómód"
-
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:428
-msgid "Current scale"
-msgstr "Aktuális méretezés"
-
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:558
-msgid "Active filter mode: Linear"
-msgstr "Aktív filter mód: Lineáris"
-
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:560
-msgid "Active filter mode: Nearest"
-msgstr "Aktív filter mód: Közelítő"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:38
-#: backends/platform/wince/CEActionsSmartphone.cpp:39
-msgid "Up"
-msgstr "Fel"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:39
-#: backends/platform/wince/CEActionsSmartphone.cpp:40
-msgid "Down"
-msgstr "Le"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:40
-#: backends/platform/wince/CEActionsSmartphone.cpp:41
-msgid "Left"
-msgstr "Bal"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:41
-#: backends/platform/wince/CEActionsSmartphone.cpp:42
-msgid "Right"
-msgstr "Jobb"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:42
-#: backends/platform/wince/CEActionsPocket.cpp:60
-#: backends/platform/wince/CEActionsSmartphone.cpp:43
-msgid "Left Click"
-msgstr "Bal katt"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:43
-#: backends/platform/wince/CEActionsSmartphone.cpp:44
-msgid "Right Click"
-msgstr "Jobb katt"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:46
-#: backends/platform/wince/CEActionsSmartphone.cpp:47
-msgid "Zone"
-msgstr "Zóna"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:47
-#: backends/platform/wince/CEActionsPocket.cpp:54
-#: backends/platform/wince/CEActionsSmartphone.cpp:48
-msgid "Multi Function"
-msgstr "Többfunkciós"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:48
-msgid "Swap character"
-msgstr "Karakter csere"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:49
-msgid "Skip text"
-msgstr "Szöveg átugrása"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:51
-msgid "Fast mode"
-msgstr "Gyors mód"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:53
-msgid "Debugger"
-msgstr "Hibakereső"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:54
-msgid "Global menu"
-msgstr "Globális menü"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:55
-msgid "Virtual keyboard"
-msgstr "Virtuális billentyűzet"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:56
-msgid "Key mapper"
-msgstr "Billentyű kiosztás"
-
-#: backends/events/symbiansdl/symbiansdl-events.cpp:184
-msgid "Do you want to quit ?"
-msgstr "Ki akarsz lépni ?"
-
-#: backends/platform/wii/options.cpp:51
-msgid "Video"
-msgstr "Videó"
-
-#: backends/platform/wii/options.cpp:54
-msgid "Current video mode:"
-msgstr "Jelenlegi videómód:"
-
-#: backends/platform/wii/options.cpp:56
-msgid "Double-strike"
-msgstr "Dupla érintés"
-
-#: backends/platform/wii/options.cpp:60
-msgid "Horizontal underscan:"
-msgstr "Vízszintes eltolás:"
-
-#: backends/platform/wii/options.cpp:66
-msgid "Vertical underscan:"
-msgstr "Függőleges eltolás:"
-
-#: backends/platform/wii/options.cpp:71
-msgid "Input"
-msgstr "Bemenet"
-
-#: backends/platform/wii/options.cpp:74
-msgid "GC Pad sensitivity:"
-msgstr "GC Pad érzékenység:"
-
-#: backends/platform/wii/options.cpp:80
-msgid "GC Pad acceleration:"
-msgstr "GC Pad felbontás:"
-
-#: backends/platform/wii/options.cpp:86
-msgid "DVD"
-msgstr "DVD"
-
-#: backends/platform/wii/options.cpp:89 backends/platform/wii/options.cpp:101
-msgid "Status:"
-msgstr "Státusz:"
-
-#: backends/platform/wii/options.cpp:90 backends/platform/wii/options.cpp:102
-msgid "Unknown"
-msgstr "Ismeretlen"
-
-#: backends/platform/wii/options.cpp:93
-msgid "Mount DVD"
-msgstr "DVD csatolás"
-
-#: backends/platform/wii/options.cpp:94
-msgid "Unmount DVD"
-msgstr "DVD kiadás"
-
-#: backends/platform/wii/options.cpp:98
-msgid "SMB"
-msgstr "SMB"
-
-#: backends/platform/wii/options.cpp:106
-msgid "Server:"
-msgstr "Szerver:"
-
-#: backends/platform/wii/options.cpp:110
-msgid "Share:"
-msgstr "Megoszt:"
-
-#: backends/platform/wii/options.cpp:114
-msgid "Username:"
-msgstr "Felhasználó:"
-
-#: backends/platform/wii/options.cpp:118
-msgid "Password:"
-msgstr "Jelszó:"
-
-#: backends/platform/wii/options.cpp:121
-msgid "Init network"
-msgstr "Hálózat inicializálás"
-
-#: backends/platform/wii/options.cpp:123
-msgid "Mount SMB"
-msgstr "SMB csatolás"
-
-#: backends/platform/wii/options.cpp:124
-msgid "Unmount SMB"
-msgstr "SMB kiadás"
-
-#: backends/platform/wii/options.cpp:143
-msgid "DVD Mounted successfully"
-msgstr "DVD csatlakoztatva"
-
-#: backends/platform/wii/options.cpp:146
-msgid "Error while mounting the DVD"
-msgstr "Hiba a DVD csatlakoztatásakor"
-
-#: backends/platform/wii/options.cpp:148
-msgid "DVD not mounted"
-msgstr "DVD nincs csatolva"
-
-#: backends/platform/wii/options.cpp:161
-msgid "Network up, share mounted"
-msgstr "Hálózat és megosztás csatlakozva"
-
-#: backends/platform/wii/options.cpp:163
-msgid "Network up"
-msgstr "Hálózat csatlakozva"
-
-#: backends/platform/wii/options.cpp:166
-msgid ", error while mounting the share"
-msgstr ", hiba a megosztás csatolásakor"
-
-#: backends/platform/wii/options.cpp:168
-msgid ", share not mounted"
-msgstr ", megosztás nincs csatolva"
-
-#: backends/platform/wii/options.cpp:174
-msgid "Network down"
-msgstr "Nincs hálózat"
-
-#: backends/platform/wii/options.cpp:178
-msgid "Initializing network"
-msgstr "Hálózat inicializálása"
-
-#: backends/platform/wii/options.cpp:182
-msgid "Timeout while initializing network"
-msgstr "Időtúllépés a hálózat inicializálásakor"
-
-#: backends/platform/wii/options.cpp:186
-#, c-format
-msgid "Network not initialized (%d)"
-msgstr "(%d) Hálózat nincs inicializálva"
-
-#: backends/platform/wince/CEActionsPocket.cpp:46
-msgid "Hide Toolbar"
-msgstr "Eszköztár rejtés"
-
-#: backends/platform/wince/CEActionsPocket.cpp:47
-msgid "Show Keyboard"
-msgstr "Billentyűzet megjelenítés"
-
-#: backends/platform/wince/CEActionsPocket.cpp:48
-msgid "Sound on/off"
-msgstr "Hang be/ki"
-
-#: backends/platform/wince/CEActionsPocket.cpp:49
-msgid "Right click"
-msgstr "Jobb katt"
-
-#: backends/platform/wince/CEActionsPocket.cpp:50
-msgid "Show/Hide Cursor"
-msgstr "Kurzor be/ki"
-
-#: backends/platform/wince/CEActionsPocket.cpp:51
-msgid "Free look"
-msgstr "Szabad nézet"
-
-#: backends/platform/wince/CEActionsPocket.cpp:52
-msgid "Zoom up"
-msgstr "Nagyítás"
-
-#: backends/platform/wince/CEActionsPocket.cpp:53
-msgid "Zoom down"
-msgstr "Kicsinyítés"
-
-#: backends/platform/wince/CEActionsPocket.cpp:55
-#: backends/platform/wince/CEActionsSmartphone.cpp:49
-msgid "Bind Keys"
-msgstr "Kapcsolódás kulcsok"
-
-#: backends/platform/wince/CEActionsPocket.cpp:56
-msgid "Cursor Up"
-msgstr "Kurzor Fel"
-
-#: backends/platform/wince/CEActionsPocket.cpp:57
-msgid "Cursor Down"
-msgstr "Kurzor Le"
-
-#: backends/platform/wince/CEActionsPocket.cpp:58
-msgid "Cursor Left"
-msgstr "Kurzor Bal"
-
-#: backends/platform/wince/CEActionsPocket.cpp:59
-msgid "Cursor Right"
-msgstr "Kurzor Jobb"
-
-#: backends/platform/wince/CEActionsPocket.cpp:267
-#: backends/platform/wince/CEActionsSmartphone.cpp:231
-msgid "Do you want to load or save the game?"
-msgstr "Játékállás betöltése vagy mentése?"
-
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-msgid " Are you sure you want to quit ? "
-msgstr " Biztos hogy ki akarsz lépni ? "
-
-#: backends/platform/wince/CEActionsSmartphone.cpp:50
-msgid "Keyboard"
-msgstr "Billentyűzet"
-
-#: backends/platform/wince/CEActionsSmartphone.cpp:51
-msgid "Rotate"
-msgstr "Forgatás"
-
-#: backends/platform/wince/CELauncherDialog.cpp:56
-msgid "Using SDL driver "
-msgstr "SDL meghajtó használata"
-
-#: backends/platform/wince/CELauncherDialog.cpp:60
-msgid "Display "
-msgstr "Kijelző"
-
-#: backends/platform/wince/CELauncherDialog.cpp:83
-msgid "Do you want to perform an automatic scan ?"
-msgstr "El akarod kezdeni az automatikus vizsgálatot ?"
-
-#: backends/platform/wince/wince-sdl.cpp:471
-msgid "Map right click action"
-msgstr "Jobbkatt művelet gomb"
-
-#: backends/platform/wince/wince-sdl.cpp:475
-msgid "You must map a key to the 'Right Click' action to play this game"
-msgstr "Válassz egy billentyűt a 'Jobbkatt' művelethez"
-
-#: backends/platform/wince/wince-sdl.cpp:484
-msgid "Map hide toolbar action"
-msgstr "Eszköztár rejtés gomb"
-
-#: backends/platform/wince/wince-sdl.cpp:488
-msgid "You must map a key to the 'Hide toolbar' action to play this game"
-msgstr "Válassz egy billentyűt az 'Eszköztár rejtés' művelethez"
-
-#: backends/platform/wince/wince-sdl.cpp:497
-msgid "Map Zoom Up action (optional)"
-msgstr "Nagyítás művelet (opcionális)"
-
-#: backends/platform/wince/wince-sdl.cpp:500
-msgid "Map Zoom Down action (optional)"
-msgstr "Kicsinyítés művelet (opcionális)"
-
-#: backends/platform/wince/wince-sdl.cpp:508
-msgid ""
-"Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory"
-msgstr ""
-"Ne felejts billentyűt társítani az 'Eszköztár rejtés' művelethez, hogy lásd "
-"a teljes listát"
-
-#: backends/events/default/default-events.cpp:222
-msgid "Do you really want to return to the Launcher?"
-msgstr "Biztos hogy visszatérsz az indítópulthoz?"
-
-#: backends/events/default/default-events.cpp:222
-msgid "Launcher"
-msgstr "Indítópult"
-
-#: backends/events/default/default-events.cpp:244
-msgid "Do you really want to quit?"
-msgstr "Biztos hogy ki akarsz lépni ?"
-
-#: backends/events/gph/gph-events.cpp:366
-#: backends/events/gph/gph-events.cpp:409
-#: backends/events/openpandora/op-events.cpp:141
-msgid "Touchscreen 'Tap Mode' - Left Click"
-msgstr "Érintőképernyő 'Tap Mód' - Bal katt"
-
-#: backends/events/gph/gph-events.cpp:368
-#: backends/events/gph/gph-events.cpp:411
-#: backends/events/openpandora/op-events.cpp:143
-msgid "Touchscreen 'Tap Mode' - Right Click"
-msgstr "Érintőképernyő 'Tap Mód' - Jobb katt"
-
-#: backends/events/gph/gph-events.cpp:370
-#: backends/events/gph/gph-events.cpp:413
-#: backends/events/openpandora/op-events.cpp:145
-msgid "Touchscreen 'Tap Mode' - Hover (No Click)"
-msgstr "Érintőképernyő 'Tap Mód' - Lebegő (Nincs katt)"
-
-#: backends/events/gph/gph-events.cpp:390
-msgid "Maximum Volume"
-msgstr "Maximum Hangerő"
-
-#: backends/events/gph/gph-events.cpp:392
-msgid "Increasing Volume"
-msgstr "Hangerő növelése"
-
-#: backends/events/gph/gph-events.cpp:398
-msgid "Minimal Volume"
-msgstr "Minimum Hangerő"
-
-#: backends/events/gph/gph-events.cpp:400
-msgid "Decreasing Volume"
-msgstr "Hangerő csökkentése"
-
-#: backends/updates/macosx/macosx-updates.mm:65
-msgid "Check for Updates..."
-msgstr ""
-
-#~ msgctxt "lowres"
-#~ msgid "Add Game..."
-#~ msgstr "Játék hozzáadás"
-
-#~ msgid "Add Game..."
-#~ msgstr "Játék hozzáadás"
-
-#~ msgid ""
-#~ "Your game version has been detected using filename matching as a variant "
-#~ "of %s."
-#~ msgstr "A felismert játékverziód a használt fájlnévvel a %s egy változata."
-
-#~ msgid "If this is an original and unmodified version, please report any"
-#~ msgstr "Ha ez egy eredeti nem változtatott verzió, kérlek jelezd minden"
-
-#~ msgid "information previously printed by ScummVM to the team."
-#~ msgstr "előzőleg kiírt információt a ScummVM csapatnak."
-
-#~ msgid "Discovered %d new games."
-#~ msgstr "%d Új játékot találtam."
-
-#~ msgid "Command line argument not processed"
-#~ msgstr "Parancssori paraméter nem működik"
-
-#~ msgid "FM Towns Emulator"
-#~ msgstr "FM Towns Emulátor"
-
-#~ msgid "Invalid Path"
-#~ msgstr "Érvénytelen mappa"
+# Hungarian translation for ScummVM.
+# Copyright (C) 2010-2011 ScummVM Team
+# This file is distributed under the same license as the ScummVM package.
+# George Kormendi <grubycza@hotmail.com>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ScummVM 1.3.0svn\n"
+"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
+"POT-Creation-Date: 2011-08-20 15:12+0100\n"
+"PO-Revision-Date: 2011-08-23 06:45+0100\n"
+"Last-Translator: Gruby <grubycza@hotmail.com>\n"
+"Language-Team: Hungarian\n"
+"Language: Magyar\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"X-Poedit-Language: Hungarian\n"
+"X-Poedit-Country: HUNGARY\n"
+"X-Poedit-SourceCharset: iso-8859-1\n"
+
+#: gui/about.cpp:91
+#, c-format
+msgid "(built on %s)"
+msgstr "(készült %s)"
+
+#: gui/about.cpp:98
+msgid "Features compiled in:"
+msgstr "Lefordított összetevők:"
+
+#: gui/about.cpp:107
+msgid "Available engines:"
+msgstr "Támogatott játékmotorok:"
+
+#: gui/browser.cpp:66
+msgid "Go up"
+msgstr "Feljebb"
+
+#: gui/browser.cpp:66 gui/browser.cpp:68
+msgid "Go to previous directory level"
+msgstr "Vissza az előző könyvtárszintre"
+
+#: gui/browser.cpp:68
+msgctxt "lowres"
+msgid "Go up"
+msgstr "Feljebb"
+
+#: gui/browser.cpp:69 gui/chooser.cpp:45 gui/KeysDialog.cpp:43
+#: gui/launcher.cpp:312 gui/massadd.cpp:94 gui/options.cpp:1178
+#: gui/saveload.cpp:63 gui/saveload.cpp:155 gui/themebrowser.cpp:54
+#: engines/engine.cpp:436 engines/scumm/dialogs.cpp:190
+#: engines/sword1/control.cpp:865 engines/parallaction/saveload.cpp:281
+#: backends/platform/wii/options.cpp:48
+#: backends/events/default/default-events.cpp:222
+#: backends/events/default/default-events.cpp:244
+msgid "Cancel"
+msgstr "Mégse"
+
+#: gui/browser.cpp:70 gui/chooser.cpp:46 gui/themebrowser.cpp:55
+msgid "Choose"
+msgstr "Választ"
+
+#: gui/gui-manager.cpp:116 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 "Bezár"
+
+#: gui/gui-manager.cpp:119
+msgid "Mouse click"
+msgstr "Egérkattintás"
+
+#: gui/gui-manager.cpp:122 base/main.cpp:286
+msgid "Display keyboard"
+msgstr "Billentyűzet beállítások"
+
+#: gui/gui-manager.cpp:125 base/main.cpp:289
+msgid "Remap keys"
+msgstr "Billentyűk átállítása"
+
+#: gui/KeysDialog.h:36 gui/KeysDialog.cpp:145
+msgid "Choose an action to map"
+msgstr "Válassz műveletet a kiosztáshoz"
+
+#: gui/KeysDialog.cpp:41
+msgid "Map"
+msgstr "Kiosztás"
+
+#: gui/KeysDialog.cpp:42 gui/launcher.cpp:313 gui/launcher.cpp:936
+#: gui/launcher.cpp:940 gui/massadd.cpp:91 gui/options.cpp:1179
+#: engines/engine.cpp:359 engines/engine.cpp:370 engines/scumm/dialogs.cpp:192
+#: engines/scumm/scumm.cpp:1770 engines/agos/animation.cpp:545
+#: engines/groovie/script.cpp:420 engines/sky/compact.cpp:131
+#: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:344
+#: engines/sword1/animation.cpp:354 engines/sword1/animation.cpp:360
+#: engines/sword1/control.cpp:865 engines/sword1/logic.cpp:1633
+#: engines/sword2/animation.cpp:379 engines/sword2/animation.cpp:389
+#: engines/sword2/animation.cpp:398 engines/parallaction/saveload.cpp:281
+#: backends/platform/wii/options.cpp:47
+#: backends/platform/wince/CELauncherDialog.cpp:54
+msgid "OK"
+msgstr "OK"
+
+#: gui/KeysDialog.cpp:49
+msgid "Select an action and click 'Map'"
+msgstr "Válassz műveletet és katt a 'Kiosztás'-ra"
+
+#: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141
+#, c-format
+msgid "Associated key : %s"
+msgstr "Társított billentyű: %s"
+
+#: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143
+#, c-format
+msgid "Associated key : none"
+msgstr "Társított billentyű: nincs"
+
+#: gui/KeysDialog.cpp:90
+msgid "Please select an action"
+msgstr "Válassz egy műveletet"
+
+#: gui/KeysDialog.cpp:106
+msgid "Press the key to associate"
+msgstr "Nyomj egy billentyűt a társításhoz"
+
+#: gui/launcher.cpp:165
+msgid "Game"
+msgstr "Játék"
+
+#: gui/launcher.cpp:169
+msgid "ID:"
+msgstr "ID:"
+
+#: gui/launcher.cpp:169 gui/launcher.cpp:171 gui/launcher.cpp:172
+msgid ""
+"Short game identifier used for referring to savegames and running the game "
+"from the command line"
+msgstr ""
+"Rövid játékazonosító a játékmentésekhez és a játék parancssori futtatásához"
+
+#: gui/launcher.cpp:171
+msgctxt "lowres"
+msgid "ID:"
+msgstr "ID:"
+
+#: gui/launcher.cpp:176
+msgid "Name:"
+msgstr "Név:"
+
+#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179
+msgid "Full title of the game"
+msgstr "A játék teljes neve"
+
+#: gui/launcher.cpp:178
+msgctxt "lowres"
+msgid "Name:"
+msgstr "Név:"
+
+#: gui/launcher.cpp:182
+msgid "Language:"
+msgstr "Nyelv:"
+
+#: gui/launcher.cpp:182 gui/launcher.cpp:183
+msgid ""
+"Language of the game. This will not turn your Spanish game version into "
+"English"
+msgstr ""
+"A játék nyelve. Ne állítsd át a pl. Spanyol nyelvű játékodat Angol nyelvre"
+
+#: gui/launcher.cpp:184 gui/launcher.cpp:198 gui/options.cpp:74
+#: gui/options.cpp:708 gui/options.cpp:718 gui/options.cpp:1149
+#: audio/null.cpp:40
+msgid "<default>"
+msgstr "<alapértelmezett>"
+
+#: gui/launcher.cpp:194
+msgid "Platform:"
+msgstr "Platform:"
+
+#: gui/launcher.cpp:194 gui/launcher.cpp:196 gui/launcher.cpp:197
+msgid "Platform the game was originally designed for"
+msgstr "Platform amire a játékot eredetileg készítették"
+
+#: gui/launcher.cpp:196
+msgctxt "lowres"
+msgid "Platform:"
+msgstr "Platform:"
+
+#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035
+msgid "Graphics"
+msgstr "Grafika"
+
+#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035
+msgid "GFX"
+msgstr "GFX"
+
+#: gui/launcher.cpp:211
+msgid "Override global graphic settings"
+msgstr "Globális grafikai beállítások felülbírálása"
+
+#: gui/launcher.cpp:213
+msgctxt "lowres"
+msgid "Override global graphic settings"
+msgstr "Globális grafikai beállítások felülbírálása"
+
+#: gui/launcher.cpp:220 gui/options.cpp:1041
+msgid "Audio"
+msgstr "Audió"
+
+#: gui/launcher.cpp:223
+msgid "Override global audio settings"
+msgstr "Globális audió beállítások felülbírálása"
+
+#: gui/launcher.cpp:225
+msgctxt "lowres"
+msgid "Override global audio settings"
+msgstr "Globális audió beállítások felülbírálása"
+
+#: gui/launcher.cpp:234 gui/options.cpp:1046
+msgid "Volume"
+msgstr "Hangerő"
+
+#: gui/launcher.cpp:236 gui/options.cpp:1048
+msgctxt "lowres"
+msgid "Volume"
+msgstr "Hangerő"
+
+#: gui/launcher.cpp:239
+msgid "Override global volume settings"
+msgstr "Globális hangerőbeállítások felülbírálása"
+
+#: gui/launcher.cpp:241
+msgctxt "lowres"
+msgid "Override global volume settings"
+msgstr "Globális hangerőbeállítások felülbírálása"
+
+#: gui/launcher.cpp:248 gui/options.cpp:1056
+msgid "MIDI"
+msgstr "MIDI"
+
+#: gui/launcher.cpp:251
+msgid "Override global MIDI settings"
+msgstr "Globális MIDI beállítások felülbírálása"
+
+#: gui/launcher.cpp:253
+msgctxt "lowres"
+msgid "Override global MIDI settings"
+msgstr "Globális MIDI beállítások felülbírálása"
+
+#: gui/launcher.cpp:263 gui/options.cpp:1062
+msgid "MT-32"
+msgstr "MT-32"
+
+#: gui/launcher.cpp:266
+msgid "Override global MT-32 settings"
+msgstr "Globális MT-32 beállítások felülbírálása"
+
+#: gui/launcher.cpp:268
+msgctxt "lowres"
+msgid "Override global MT-32 settings"
+msgstr "Globális MT-32 beállítások felülbírálása"
+
+#: gui/launcher.cpp:279 gui/options.cpp:1069
+msgid "Paths"
+msgstr "Mappák"
+
+#: gui/launcher.cpp:281 gui/options.cpp:1071
+msgctxt "lowres"
+msgid "Paths"
+msgstr "Mappák"
+
+#: gui/launcher.cpp:288
+msgid "Game Path:"
+msgstr "Játék Mappa:"
+
+#: gui/launcher.cpp:290
+msgctxt "lowres"
+msgid "Game Path:"
+msgstr "Játék Mappa:"
+
+#: gui/launcher.cpp:295 gui/options.cpp:1091
+msgid "Extra Path:"
+msgstr "Extra Mappa:"
+
+#: gui/launcher.cpp:295 gui/launcher.cpp:297 gui/launcher.cpp:298
+msgid "Specifies path to additional data used the game"
+msgstr "Mappa kiválasztás a játékok kiegészítő fájljaihoz"
+
+#: gui/launcher.cpp:297 gui/options.cpp:1093
+msgctxt "lowres"
+msgid "Extra Path:"
+msgstr "Extra Mappa:"
+
+#: gui/launcher.cpp:302 gui/options.cpp:1079
+msgid "Save Path:"
+msgstr "Mentés Mappa:"
+
+#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305
+#: gui/options.cpp:1079 gui/options.cpp:1081 gui/options.cpp:1082
+msgid "Specifies where your savegames are put"
+msgstr "Játékmentések helyének meghatározása"
+
+#: gui/launcher.cpp:304 gui/options.cpp:1081
+msgctxt "lowres"
+msgid "Save Path:"
+msgstr "Mentés Mappa:"
+
+#: gui/launcher.cpp:321 gui/launcher.cpp:404 gui/launcher.cpp:453
+#: gui/options.cpp:1088 gui/options.cpp:1094 gui/options.cpp:1101
+#: gui/options.cpp:1202 gui/options.cpp:1208 gui/options.cpp:1214
+#: gui/options.cpp:1222 gui/options.cpp:1246 gui/options.cpp:1250
+#: gui/options.cpp:1256 gui/options.cpp:1263 gui/options.cpp:1362
+msgctxt "path"
+msgid "None"
+msgstr "Nincs"
+
+#: gui/launcher.cpp:326 gui/launcher.cpp:408
+#: backends/platform/wii/options.cpp:56
+msgid "Default"
+msgstr "Alapértelmezett"
+
+#: gui/launcher.cpp:446 gui/options.cpp:1356
+msgid "Select SoundFont"
+msgstr "SoundFont kiválasztás"
+
+#: gui/launcher.cpp:465 gui/launcher.cpp:612
+msgid "Select directory with game data"
+msgstr "Játékok helyének kiválasztása"
+
+#: gui/launcher.cpp:483
+msgid "Select additional game directory"
+msgstr "Válassz mappát a játék kiegészítőkhöz"
+
+#: gui/launcher.cpp:495
+msgid "Select directory for saved games"
+msgstr "Válaszz játékmentéseknek mappát"
+
+#: gui/launcher.cpp:514
+msgid "This game ID is already taken. Please choose another one."
+msgstr "Ez a játékazonosító ID már foglalt, Válassz egy másikat."
+
+#: gui/launcher.cpp:555 engines/dialogs.cpp:110
+msgid "~Q~uit"
+msgstr "Kilépés"
+
+#: gui/launcher.cpp:555 backends/platform/sdl/macosx/appmenu_osx.mm:80
+msgid "Quit ScummVM"
+msgstr "ScummVM bezárása"
+
+#: gui/launcher.cpp:556
+msgid "A~b~out..."
+msgstr "Névjegy"
+
+#: gui/launcher.cpp:556 backends/platform/sdl/macosx/appmenu_osx.mm:61
+msgid "About ScummVM"
+msgstr "ScummVM névjegy"
+
+#: gui/launcher.cpp:557
+msgid "~O~ptions..."
+msgstr "~O~pciók..."
+
+#: gui/launcher.cpp:557
+msgid "Change global ScummVM options"
+msgstr "Globális ScummVM opciók cseréje"
+
+#: gui/launcher.cpp:559
+msgid "~S~tart"
+msgstr "Indítás"
+
+#: gui/launcher.cpp:559
+msgid "Start selected game"
+msgstr "A választott játék indítása"
+
+#: gui/launcher.cpp:562
+msgid "~L~oad..."
+msgstr "Betöltés"
+
+#: gui/launcher.cpp:562
+msgid "Load savegame for selected game"
+msgstr "Kimentett játékállás betöltése"
+
+#: gui/launcher.cpp:567 gui/launcher.cpp:1055
+msgid "~A~dd Game..."
+msgstr "Játék hozzáadás"
+
+#: gui/launcher.cpp:567 gui/launcher.cpp:574
+msgid "Hold Shift for Mass Add"
+msgstr "Tratsd lenyomva a Shift-et a Masszív módhoz"
+
+#: gui/launcher.cpp:569
+msgid "~E~dit Game..."
+msgstr "Játékopciók"
+
+#: gui/launcher.cpp:569 gui/launcher.cpp:576
+msgid "Change game options"
+msgstr "Játék beállítások megváltoztatása"
+
+#: gui/launcher.cpp:571
+msgid "~R~emove Game"
+msgstr "Játék törlése"
+
+#: gui/launcher.cpp:571 gui/launcher.cpp:578
+msgid "Remove game from the list. The game data files stay intact"
+msgstr "Törli a játék nevét a listáról. A játékfájlok megmaradnak"
+
+#: gui/launcher.cpp:574 gui/launcher.cpp:1055
+msgctxt "lowres"
+msgid "~A~dd Game..."
+msgstr "Játék hozzáadás"
+
+#: gui/launcher.cpp:576
+msgctxt "lowres"
+msgid "~E~dit Game..."
+msgstr "Játékopciók"
+
+#: gui/launcher.cpp:578
+msgctxt "lowres"
+msgid "~R~emove Game"
+msgstr "Játék törlése"
+
+#: gui/launcher.cpp:586
+msgid "Search in game list"
+msgstr "Keresés a játéklistában"
+
+#: gui/launcher.cpp:590 gui/launcher.cpp:1102
+msgid "Search:"
+msgstr "Keresés:"
+
+#: gui/launcher.cpp:593 gui/options.cpp:826
+msgid "Clear value"
+msgstr "Érték törlése"
+
+#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255
+#: engines/mohawk/riven.cpp:716 engines/cruise/menu.cpp:216
+msgid "Load game:"
+msgstr "Játék betöltése:"
+
+#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/scumm/dialogs.cpp:188
+#: engines/mohawk/myst.cpp:255 engines/mohawk/riven.cpp:716
+#: engines/cruise/menu.cpp:216 backends/platform/wince/CEActionsPocket.cpp:267
+#: backends/platform/wince/CEActionsSmartphone.cpp:231
+msgid "Load"
+msgstr "Betöltés"
+
+#: gui/launcher.cpp:723
+msgid ""
+"Do you really want to run the mass game detector? This could potentially add "
+"a huge number of games."
+msgstr ""
+"Biztos hogy futtatod a Masszív játékdetektort? Ez potenciálisan sok játékot "
+"hozzáad a listához."
+
+#: gui/launcher.cpp:724 gui/launcher.cpp:872
+#: backends/events/symbiansdl/symbiansdl-events.cpp:184
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+msgid "Yes"
+msgstr "Igen"
+
+#: gui/launcher.cpp:724 gui/launcher.cpp:872
+#: backends/events/symbiansdl/symbiansdl-events.cpp:184
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+msgid "No"
+msgstr "Nem"
+
+#: gui/launcher.cpp:772
+msgid "ScummVM couldn't open the specified directory!"
+msgstr "ScummVM nem tudja megnyitni a választott mappát!"
+
+#: gui/launcher.cpp:784
+msgid "ScummVM could not find any game in the specified directory!"
+msgstr "A ScummVM nem talált egy játékot sem a választott mappában!"
+
+#: gui/launcher.cpp:798
+msgid "Pick the game:"
+msgstr "Válassztott játék:"
+
+#: gui/launcher.cpp:872
+msgid "Do you really want to remove this game configuration?"
+msgstr "Biztosan törölni akarod ezt a játékkonfigurációt?"
+
+#: gui/launcher.cpp:936
+msgid "This game does not support loading games from the launcher."
+msgstr "Ez a játék nem támogatja a játékállás betöltést az indítóból."
+
+#: gui/launcher.cpp:940
+msgid "ScummVM could not find any engine capable of running the selected game!"
+msgstr ""
+"ScummVM nem talált olyan játékmotort ami a választott játékot támogatja!"
+
+#: gui/launcher.cpp:1054
+msgctxt "lowres"
+msgid "Mass Add..."
+msgstr "Masszív mód..."
+
+#: gui/launcher.cpp:1054
+msgid "Mass Add..."
+msgstr "Masszív mód..."
+
+#: gui/massadd.cpp:78 gui/massadd.cpp:81
+msgid "... progress ..."
+msgstr "... folyamatban ..."
+
+#: gui/massadd.cpp:258
+msgid "Scan complete!"
+msgstr "Vizsgálat kész!"
+
+#: gui/massadd.cpp:261
+#, c-format
+msgid "Discovered %d new games, ignored %d previously added games."
+msgstr "%d új játékot találtam, %d előzőleg hozzáadott játék kihagyva..."
+
+#: gui/massadd.cpp:265
+#, c-format
+msgid "Scanned %d directories ..."
+msgstr "%d Mappa átvizsgálva..."
+
+#: gui/massadd.cpp:268
+#, c-format
+msgid "Discovered %d new games, ignored %d previously added games ..."
+msgstr "%d új játékot találtam, %d előzőleg hozzáadott játék kihagyva..."
+
+#: gui/options.cpp:72
+msgid "Never"
+msgstr "Soha"
+
+#: gui/options.cpp:72
+msgid "every 5 mins"
+msgstr "5 percenként"
+
+#: gui/options.cpp:72
+msgid "every 10 mins"
+msgstr "10 percenként"
+
+#: gui/options.cpp:72
+msgid "every 15 mins"
+msgstr "15 percenként"
+
+#: gui/options.cpp:72
+msgid "every 30 mins"
+msgstr "30 percenként"
+
+#: gui/options.cpp:74
+msgid "8 kHz"
+msgstr "8 kHz"
+
+#: gui/options.cpp:74
+msgid "11kHz"
+msgstr "11kHz"
+
+#: gui/options.cpp:74
+msgid "22 kHz"
+msgstr "22 kHz"
+
+#: gui/options.cpp:74
+msgid "44 kHz"
+msgstr "44 kHz"
+
+#: gui/options.cpp:74
+msgid "48 kHz"
+msgstr "48 kHz"
+
+#: gui/options.cpp:236 gui/options.cpp:464 gui/options.cpp:559
+#: gui/options.cpp:625 gui/options.cpp:825
+msgctxt "soundfont"
+msgid "None"
+msgstr "Nincs"
+
+#: gui/options.cpp:372
+msgid "Failed to apply some of the graphic options changes:"
+msgstr "Néhány grafikus opció változtatása sikertelen:"
+
+#: gui/options.cpp:384
+msgid "the video mode could not be changed."
+msgstr "a videómód nem változott."
+
+#: gui/options.cpp:390
+msgid "the fullscreen setting could not be changed"
+msgstr "a teljesképernyős beállítás nem változott"
+
+#: gui/options.cpp:396
+msgid "the aspect ratio setting could not be changed"
+msgstr "a képméretarány beállítások nem változtak"
+
+#: gui/options.cpp:705
+msgid "Graphics mode:"
+msgstr "Grafikus mód:"
+
+#: gui/options.cpp:716
+msgid "Render mode:"
+msgstr "Kirajzolás mód:"
+
+#: gui/options.cpp:716 gui/options.cpp:717
+msgid "Special dithering modes supported by some games"
+msgstr "Néhány játék támogatja a speciális árnyalási módokat"
+
+#: gui/options.cpp:726
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2247
+#: backends/graphics/openglsdl/openglsdl-graphics.cpp:472
+msgid "Fullscreen mode"
+msgstr "Teljesképernyős mód:"
+
+#: gui/options.cpp:729
+msgid "Aspect ratio correction"
+msgstr "Képméretarány korrekció"
+
+#: gui/options.cpp:729
+msgid "Correct aspect ratio for 320x200 games"
+msgstr "Helyes oldalarány a 320x200 játékokhoz"
+
+#: gui/options.cpp:730
+msgid "EGA undithering"
+msgstr "EGA szinjavítás"
+
+#: gui/options.cpp:730
+msgid "Enable undithering in EGA games that support it"
+msgstr "EGA színjavítás támogatott EGA játékokban"
+
+#: gui/options.cpp:738
+msgid "Preferred Device:"
+msgstr "Elsődleges eszköz:"
+
+#: gui/options.cpp:738
+msgid "Music Device:"
+msgstr "Zene eszköz:"
+
+#: gui/options.cpp:738 gui/options.cpp:740
+msgid "Specifies preferred sound device or sound card emulator"
+msgstr "Elsődleges hangeszköz vagy hang emulátor beállítások"
+
+#: gui/options.cpp:738 gui/options.cpp:740 gui/options.cpp:741
+msgid "Specifies output sound device or sound card emulator"
+msgstr "Hangeszköz vagy hangkártya emulátor beállítások"
+
+#: gui/options.cpp:740
+msgctxt "lowres"
+msgid "Preferred Dev.:"
+msgstr "Elsődleges eszk.:"
+
+#: gui/options.cpp:740
+msgctxt "lowres"
+msgid "Music Device:"
+msgstr "Zene eszköz:"
+
+#: gui/options.cpp:766
+msgid "AdLib emulator:"
+msgstr "AdLib emulátor:"
+
+#: gui/options.cpp:766 gui/options.cpp:767
+msgid "AdLib is used for music in many games"
+msgstr "AdLib meghajtót sok játék használja zenéhez"
+
+#: gui/options.cpp:777
+msgid "Output rate:"
+msgstr "Kimeneti ráta:"
+
+#: gui/options.cpp:777 gui/options.cpp:778
+msgid ""
+"Higher value specifies better sound quality but may be not supported by your "
+"soundcard"
+msgstr ""
+"Nagyobb értékek jobb hangminőséget adnak, de nem minden hangkártya támogatja"
+
+#: gui/options.cpp:788
+msgid "GM Device:"
+msgstr "GM Eszköz:"
+
+#: gui/options.cpp:788
+msgid "Specifies default sound device for General MIDI output"
+msgstr "Alapértelmezett hangeszköz General MIDI kimenethez"
+
+#: gui/options.cpp:799
+msgid "Don't use General MIDI music"
+msgstr "Ne használj General MIDI zenét"
+
+#: gui/options.cpp:810 gui/options.cpp:871
+msgid "Use first available device"
+msgstr "Első elérhető eszköz használata"
+
+#: gui/options.cpp:822
+msgid "SoundFont:"
+msgstr "SoundFont:"
+
+#: gui/options.cpp:822 gui/options.cpp:824 gui/options.cpp:825
+msgid "SoundFont is supported by some audio cards, Fluidsynth and Timidity"
+msgstr ""
+"Néhány hangkárya, Fluidsynth és Timidyti támogatja a SoundFont betöltését"
+
+#: gui/options.cpp:824
+msgctxt "lowres"
+msgid "SoundFont:"
+msgstr "SoundFont:"
+
+#: gui/options.cpp:829
+msgid "Mixed AdLib/MIDI mode"
+msgstr "Vegyes AdLib/MIDI mód"
+
+#: gui/options.cpp:829
+msgid "Use both MIDI and AdLib sound generation"
+msgstr "MIDI és AdLib hanggenerátorok használata"
+
+#: gui/options.cpp:832
+msgid "MIDI gain:"
+msgstr "MIDI erősítés:"
+
+#: gui/options.cpp:842
+msgid "MT-32 Device:"
+msgstr "MT-32 Eszköz:"
+
+#: gui/options.cpp:842
+msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
+msgstr "Roland MT-32/LAPC1/CM32l/CM64 alapértelmezett hangeszközök beállítása"
+
+#: gui/options.cpp:847
+msgid "True Roland MT-32 (disable GM emulation)"
+msgstr "Roland MT-32 Hardver (GM emuláció tiltva)"
+
+#: gui/options.cpp:847 gui/options.cpp:849
+msgid ""
+"Check if you want to use your real hardware Roland-compatible sound device "
+"connected to your computer"
+msgstr ""
+"Jelöld be, ha hardveres Roland-Kompatibilis hangeszköz van csatlakoztatva a "
+"gépedhez és használni akarod"
+
+#: gui/options.cpp:849
+msgctxt "lowres"
+msgid "True Roland MT-32 (no GM emulation)"
+msgstr "Roland MT-32 Hardver (GM emuláció nincs)"
+
+#: gui/options.cpp:852
+msgid "Enable Roland GS Mode"
+msgstr "Roland GS Mód engedélyezve"
+
+#: gui/options.cpp:852
+msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack"
+msgstr "General MIDI leképezés Roland MT-32 zenés játékokhoz kikapcsolva"
+
+#: gui/options.cpp:861
+msgid "Don't use Roland MT-32 music"
+msgstr "Ne használj Roland MT-32 zenét"
+
+#: gui/options.cpp:888
+msgid "Text and Speech:"
+msgstr "Szöveg és beszéd:"
+
+#: gui/options.cpp:892 gui/options.cpp:902
+msgid "Speech"
+msgstr "Csak beszéd"
+
+#: gui/options.cpp:893 gui/options.cpp:903
+msgid "Subtitles"
+msgstr "Csak felirat"
+
+#: gui/options.cpp:894
+msgid "Both"
+msgstr "Mind"
+
+#: gui/options.cpp:896
+msgid "Subtitle speed:"
+msgstr "Felirat sebesség:"
+
+#: gui/options.cpp:898
+msgctxt "lowres"
+msgid "Text and Speech:"
+msgstr "Felirat és beszéd:"
+
+#: gui/options.cpp:902
+msgid "Spch"
+msgstr "Besz"
+
+#: gui/options.cpp:903
+msgid "Subs"
+msgstr "Text"
+
+#: gui/options.cpp:904
+msgctxt "lowres"
+msgid "Both"
+msgstr "Mind"
+
+#: gui/options.cpp:904
+msgid "Show subtitles and play speech"
+msgstr "Hang és feliratok megjelenítése"
+
+#: gui/options.cpp:906
+msgctxt "lowres"
+msgid "Subtitle speed:"
+msgstr "Felirat sebesség:"
+
+#: gui/options.cpp:922
+msgid "Music volume:"
+msgstr "Zene hangerő:"
+
+#: gui/options.cpp:924
+msgctxt "lowres"
+msgid "Music volume:"
+msgstr "Zene hangerő:"
+
+#: gui/options.cpp:931
+msgid "Mute All"
+msgstr "Összes némítása"
+
+#: gui/options.cpp:934
+msgid "SFX volume:"
+msgstr "SFX hangerő:"
+
+#: gui/options.cpp:934 gui/options.cpp:936 gui/options.cpp:937
+msgid "Special sound effects volume"
+msgstr "Speciális hangeffektusok hangereje"
+
+#: gui/options.cpp:936
+msgctxt "lowres"
+msgid "SFX volume:"
+msgstr "SFX hangerő:"
+
+#: gui/options.cpp:944
+msgid "Speech volume:"
+msgstr "Beszéd hangerő:"
+
+#: gui/options.cpp:946
+msgctxt "lowres"
+msgid "Speech volume:"
+msgstr "Beszéd hangerő:"
+
+#: gui/options.cpp:1085
+msgid "Theme Path:"
+msgstr "Téma Mappa:"
+
+#: gui/options.cpp:1087
+msgctxt "lowres"
+msgid "Theme Path:"
+msgstr "Téma Mappa:"
+
+#: gui/options.cpp:1091 gui/options.cpp:1093 gui/options.cpp:1094
+msgid "Specifies path to additional data used by all games or ScummVM"
+msgstr "Minden jéték és ScummVM kiegészítő fájljainak mappája:"
+
+#: gui/options.cpp:1098
+msgid "Plugins Path:"
+msgstr "Plugin Mappa:"
+
+#: gui/options.cpp:1100
+msgctxt "lowres"
+msgid "Plugins Path:"
+msgstr "Plugin Mappa:"
+
+#: gui/options.cpp:1109
+msgid "Misc"
+msgstr "Vegyes"
+
+#: gui/options.cpp:1111
+msgctxt "lowres"
+msgid "Misc"
+msgstr "Vegyes"
+
+#: gui/options.cpp:1113
+msgid "Theme:"
+msgstr "Téma:"
+
+#: gui/options.cpp:1117
+msgid "GUI Renderer:"
+msgstr "GUI Renderelő:"
+
+#: gui/options.cpp:1129
+msgid "Autosave:"
+msgstr "Automentés:"
+
+#: gui/options.cpp:1131
+msgctxt "lowres"
+msgid "Autosave:"
+msgstr "Automentés:"
+
+#: gui/options.cpp:1139
+msgid "Keys"
+msgstr "Billentyűk"
+
+#: gui/options.cpp:1146
+msgid "GUI Language:"
+msgstr "GUI nyelve:"
+
+#: gui/options.cpp:1146
+msgid "Language of ScummVM GUI"
+msgstr "A ScummVM GUI nyelve"
+
+#: gui/options.cpp:1295
+msgid "You have to restart ScummVM before your changes will take effect."
+msgstr "Indítsd újra a ScummVM-et a változások érvényesítéséhez."
+
+#: gui/options.cpp:1308
+msgid "Select directory for savegames"
+msgstr "Válassz játékmentés mappát"
+
+#: gui/options.cpp:1315
+msgid "The chosen directory cannot be written to. Please select another one."
+msgstr "A kiválasztott mappába nem lehet írni, válassz egy másikat"
+
+#: gui/options.cpp:1324
+msgid "Select directory for GUI themes"
+msgstr "GUI téma mappa kiválasztása"
+
+#: gui/options.cpp:1334
+msgid "Select directory for extra files"
+msgstr "Mappa választás az extra fájloknak"
+
+#: gui/options.cpp:1345
+msgid "Select directory for plugins"
+msgstr "Plugin mappa kiválasztása"
+
+#: gui/options.cpp:1389
+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 ""
+"A kiválasztott téma nem támogatja a nyelvedet. Ha használni akarod ezt a "
+"témát, előszőr válts át egy másik nyelvre."
+
+#: gui/saveload.cpp:58 gui/saveload.cpp:239
+msgid "No date saved"
+msgstr "Dátum nincs mentve"
+
+#: gui/saveload.cpp:59 gui/saveload.cpp:240
+msgid "No time saved"
+msgstr "Idő nincs mentve"
+
+#: gui/saveload.cpp:60 gui/saveload.cpp:241
+msgid "No playtime saved"
+msgstr "Játékidő nincs mentve"
+
+#: gui/saveload.cpp:67 gui/saveload.cpp:155
+msgid "Delete"
+msgstr "Töröl"
+
+#: gui/saveload.cpp:154
+msgid "Do you really want to delete this savegame?"
+msgstr "Biztos hogy törölni akarod ezt a játékállást?"
+
+#: gui/saveload.cpp:264
+msgid "Date: "
+msgstr "Dátum:"
+
+#: gui/saveload.cpp:268
+msgid "Time: "
+msgstr "Idő:"
+
+#: gui/saveload.cpp:274
+msgid "Playtime: "
+msgstr "Játékidő:"
+
+#: gui/saveload.cpp:287 gui/saveload.cpp:354
+msgid "Untitled savestate"
+msgstr "Névtelen játékállás"
+
+#: gui/themebrowser.cpp:44
+msgid "Select a Theme"
+msgstr "Válassz témát"
+
+#: gui/ThemeEngine.cpp:328
+msgid "Disabled GFX"
+msgstr "GFX letiltva"
+
+#: gui/ThemeEngine.cpp:328
+msgctxt "lowres"
+msgid "Disabled GFX"
+msgstr "GFX letiltva"
+
+#: gui/ThemeEngine.cpp:329
+msgid "Standard Renderer (16bpp)"
+msgstr "Standard leképező (16bpp)"
+
+#: gui/ThemeEngine.cpp:329
+msgid "Standard (16bpp)"
+msgstr "Standard (16bpp)"
+
+#: gui/ThemeEngine.cpp:331
+msgid "Antialiased Renderer (16bpp)"
+msgstr "Élsimításos leképező (16bpp)"
+
+#: gui/ThemeEngine.cpp:331
+msgid "Antialiased (16bpp)"
+msgstr "Élsimított (16bpp)"
+
+#: base/main.cpp:206
+#, c-format
+msgid "Engine does not support debug level '%s'"
+msgstr "A motor nem támogatja a '%s' debug szintet"
+
+#: base/main.cpp:274
+msgid "Menu"
+msgstr "Menü"
+
+#: base/main.cpp:277 backends/platform/symbian/src/SymbianActions.cpp:45
+#: backends/platform/wince/CEActionsPocket.cpp:45
+#: backends/platform/wince/CEActionsSmartphone.cpp:46
+msgid "Skip"
+msgstr "Tovább"
+
+#: base/main.cpp:280 backends/platform/symbian/src/SymbianActions.cpp:50
+#: backends/platform/wince/CEActionsPocket.cpp:42
+msgid "Pause"
+msgstr "Szünet"
+
+#: base/main.cpp:283
+msgid "Skip line"
+msgstr "Sor átlépése"
+
+#: base/main.cpp:442
+msgid "Error running game:"
+msgstr "Hiba a játék futtatásakor:"
+
+#: base/main.cpp:466
+msgid "Could not find any engine capable of running the selected game"
+msgstr "Nem található olyan játékmotor ami a választott játékot támogatja"
+
+#: common/error.cpp:38
+msgid "No error"
+msgstr "Nincs hiba"
+
+#: common/error.cpp:40
+msgid "Game data not found"
+msgstr "Játék adat nem található"
+
+#: common/error.cpp:42
+msgid "Game id not supported"
+msgstr "Játék id nem támogatott"
+
+#: common/error.cpp:44
+msgid "Unsupported color mode"
+msgstr "Nem támogatott színmód"
+
+#: common/error.cpp:47
+msgid "Read permission denied"
+msgstr "Olvasás hozzáfárés megtagadva"
+
+#: common/error.cpp:49
+msgid "Write permission denied"
+msgstr "Írás hozzáférés megtagadva"
+
+#: common/error.cpp:52
+msgid "Path does not exist"
+msgstr "Mappa nem létezik"
+
+#: common/error.cpp:54
+msgid "Path not a directory"
+msgstr "Mappa nem egy könyvtár"
+
+#: common/error.cpp:56
+msgid "Path not a file"
+msgstr "Mappa nem egy fájl"
+
+#: common/error.cpp:59
+msgid "Cannot create file"
+msgstr "Fájl nem hozható létre"
+
+#: common/error.cpp:61
+msgid "Reading data failed"
+msgstr "A Beolvasott adat hibás"
+
+#: common/error.cpp:63
+msgid "Writing data failed"
+msgstr "Kiírt adat hibás"
+
+#: common/error.cpp:66
+msgid "Could not find suitable engine plugin"
+msgstr "Nem található alkalmas motor plugin"
+
+#: common/error.cpp:68
+msgid "Engine plugin does not support save states"
+msgstr "A motor nem támogatja a játékállás mentését"
+
+#: common/error.cpp:71
+msgid "User canceled"
+msgstr "Felhasználói megszakítás"
+
+#: common/error.cpp:75
+msgid "Unknown error"
+msgstr "Ismeretlen hiba"
+
+#. I18N: Hercules is graphics card name
+#: common/util.cpp:275
+msgid "Hercules Green"
+msgstr "Hercules Zöld"
+
+#: common/util.cpp:276
+msgid "Hercules Amber"
+msgstr "Hercules Sárga"
+
+#: common/util.cpp:283
+msgctxt "lowres"
+msgid "Hercules Green"
+msgstr "Hercules Zöld"
+
+#: common/util.cpp:284
+msgctxt "lowres"
+msgid "Hercules Amber"
+msgstr "Hercules Sárga"
+
+#: engines/advancedDetector.cpp:296
+#, c-format
+msgid "The game in '%s' seems to be unknown."
+msgstr "A '%s' játék ismeretlennek tűnik."
+
+#: engines/advancedDetector.cpp:297
+msgid "Please, report the following data to the ScummVM team along with name"
+msgstr "Kérlek jelezd a ScummVM csapatnak a következő adatokat, együtt a játék"
+
+#: engines/advancedDetector.cpp:299
+msgid "of the game you tried to add and its version/language/etc.:"
+msgstr "címével és megbízható adataival játékverzió/nyelv(ek)/stb.:"
+
+#: engines/dialogs.cpp:84
+msgid "~R~esume"
+msgstr "Folytatás"
+
+#: engines/dialogs.cpp:86
+msgid "~L~oad"
+msgstr "Betöltés"
+
+#: engines/dialogs.cpp:90
+msgid "~S~ave"
+msgstr "Mentés"
+
+#: engines/dialogs.cpp:94
+msgid "~O~ptions"
+msgstr "~O~pciók"
+
+#: engines/dialogs.cpp:99
+msgid "~H~elp"
+msgstr "Súgó"
+
+#: engines/dialogs.cpp:101
+msgid "~A~bout"
+msgstr "Névjegy"
+
+#: engines/dialogs.cpp:104 engines/dialogs.cpp:182
+msgid "~R~eturn to Launcher"
+msgstr "Visszatérés az indítóba"
+
+#: engines/dialogs.cpp:106 engines/dialogs.cpp:184
+msgctxt "lowres"
+msgid "~R~eturn to Launcher"
+msgstr "Visszatérés az indítóba"
+
+#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214
+#: engines/sci/engine/kfile.cpp:575
+msgid "Save game:"
+msgstr "Játék mentése:"
+
+#: engines/dialogs.cpp:116 engines/scumm/dialogs.cpp:187
+#: engines/cruise/menu.cpp:214 engines/sci/engine/kfile.cpp:575
+#: backends/platform/symbian/src/SymbianActions.cpp:44
+#: backends/platform/wince/CEActionsPocket.cpp:43
+#: backends/platform/wince/CEActionsPocket.cpp:267
+#: backends/platform/wince/CEActionsSmartphone.cpp:45
+#: backends/platform/wince/CEActionsSmartphone.cpp:231
+msgid "Save"
+msgstr "Mentés"
+
+#: engines/dialogs.cpp:146
+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 ""
+"Sajnálom, a motor jelenleg nem tartalmaz játék közbeni súgót. Olvassd el a "
+"README-t az alap információkról, és hogy hogyan segíthetsz a későbbiekben."
+
+#: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:109
+#: engines/mohawk/dialogs.cpp:174
+msgid "~O~K"
+msgstr "~O~K"
+
+#: engines/dialogs.cpp:309 engines/mohawk/dialogs.cpp:110
+#: engines/mohawk/dialogs.cpp:175
+msgid "~C~ancel"
+msgstr "Mégse"
+
+#: engines/dialogs.cpp:312
+msgid "~K~eys"
+msgstr "Billentyük"
+
+#: engines/engine.cpp:233
+msgid "Could not initialize color format."
+msgstr "Szín formátum nincs alkalmazva"
+
+#: engines/engine.cpp:241
+msgid "Could not switch to video mode: '"
+msgstr "Videómód nincs átállítva: ' "
+
+#: engines/engine.cpp:250
+msgid "Could not apply aspect ratio setting."
+msgstr "Méretarány korrekció nem változott."
+
+#: engines/engine.cpp:255
+msgid "Could not apply fullscreen setting."
+msgstr "Teljesképernyős beállítás nincs alkalmazva"
+
+#: engines/engine.cpp:355
+msgid ""
+"You appear to be playing this game directly\n"
+"from the CD. This is known to cause problems,\n"
+"and it is therefore recommended that you copy\n"
+"the data files to your hard disk instead.\n"
+"See the README file for details."
+msgstr ""
+"Úgy néz ki, ezt a játékot CD-ről futtatod\n"
+"Ez ismert problémákat okoz, ezért\n"
+"ajánlatos átmásolni a játék\n"
+"adatfájljait a merevlemezedre.\n"
+"Nézd meg a README fájlt a részletekért."
+
+#: engines/engine.cpp:366
+msgid ""
+"This game has audio tracks in its disk. These\n"
+"tracks need to be ripped from the disk using\n"
+"an appropriate CD audio extracting tool in\n"
+"order to listen to the game's music.\n"
+"See the README file for details."
+msgstr ""
+"A játékhoz audiósávok tartoznak a lemezen\n"
+"ezeket a sávokat másold ki egy megfelelő\n"
+"CD audió kitömörítő programmal\n"
+"hogy a játék zenéje hallható legyen.\n"
+"Nézd meg a README fájlt a részletekért."
+
+#: engines/engine.cpp:433
+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 ""
+"FIGYELEM: A játékot amit indítani akarsz még nem teljesen támogatotja a "
+"ScummVM. Számíts rá hogy nem stabilan fut, és a mentések nem működnek a "
+"jövőbeni ScummVM verziókkal."
+
+#: engines/engine.cpp:436
+msgid "Start anyway"
+msgstr "Indítás így is"
+
+#: engines/scumm/dialogs.cpp:175
+#, c-format
+msgid "Insert Disk %c and Press Button to Continue."
+msgstr "Helyezd be a %c lemezt és gombnyomás a folytatáshoz."
+
+#: engines/scumm/dialogs.cpp:176
+#, c-format
+msgid "Unable to Find %s, (%c%d) Press Button."
+msgstr "%s, (%c%d) nem található. Nyomj egy billentyűt."
+
+#: engines/scumm/dialogs.cpp:177
+#, c-format
+msgid "Error reading disk %c, (%c%d) Press Button."
+msgstr "Hiba a %c, (%c%d) lemez olvasásakor. Nyomj egy billentyűt."
+
+#: engines/scumm/dialogs.cpp:178
+msgid "Game Paused. Press SPACE to Continue."
+msgstr "Játék szünetel. SPACE a folytatáshoz."
+
+#. 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
+msgid "Are you sure you want to restart? (Y/N)"
+msgstr "Biztos hogy újra akarod indítani? (Y/N)"
+
+#. I18N: you may specify 'Yes' symbol at the endo fo the line. See previous comment
+#: engines/scumm/dialogs.cpp:184
+msgid "Are you sure you want to quit? (Y/N)"
+msgstr "Biztos hogy ki akarsz lépni? (Y/N)"
+
+#: engines/scumm/dialogs.cpp:189
+msgid "Play"
+msgstr "Játék"
+
+#: 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
+#: backends/platform/wince/CEActionsSmartphone.cpp:52
+#: backends/events/default/default-events.cpp:244
+msgid "Quit"
+msgstr "Kilépés"
+
+#: engines/scumm/dialogs.cpp:193
+msgid "Insert save/load game disk"
+msgstr "Helyezd be a játékmentés lemezt"
+
+#: engines/scumm/dialogs.cpp:194
+msgid "You must enter a name"
+msgstr "Meg kell adnod egy nevet"
+
+#: engines/scumm/dialogs.cpp:195
+msgid "The game was NOT saved (disk full?)"
+msgstr "A játék NINCS mentve (Megtelt a lemez?)"
+
+#: engines/scumm/dialogs.cpp:196
+msgid "The game was NOT loaded"
+msgstr "A játék NINCS betöltve"
+
+#: engines/scumm/dialogs.cpp:197
+#, c-format
+msgid "Saving '%s'"
+msgstr "'%s' Mentése"
+
+#: engines/scumm/dialogs.cpp:198
+#, c-format
+msgid "Loading '%s'"
+msgstr "'%s' Betöltése"
+
+#: engines/scumm/dialogs.cpp:199
+msgid "Name your SAVE game"
+msgstr "JátékMENTÉS neve"
+
+#: engines/scumm/dialogs.cpp:200
+msgid "Select a game to LOAD"
+msgstr "Válassz egy játékot Betöltésre"
+
+#: engines/scumm/dialogs.cpp:201
+msgid "Game title)"
+msgstr "Játék címe)"
+
+#. I18N: Previous page button
+#: engines/scumm/dialogs.cpp:287
+msgid "~P~revious"
+msgstr "Előző"
+
+#. I18N: Next page button
+#: engines/scumm/dialogs.cpp:289
+msgid "~N~ext"
+msgstr "Következő"
+
+#: engines/scumm/dialogs.cpp:290
+#: backends/platform/ds/arm9/source/dsoptions.cpp:56
+msgid "~C~lose"
+msgstr "Bezár"
+
+#: engines/scumm/dialogs.cpp:597
+msgid "Speech Only"
+msgstr "Csak beszéd"
+
+#: engines/scumm/dialogs.cpp:598
+msgid "Speech and Subtitles"
+msgstr "Beszéd és felirat"
+
+#: engines/scumm/dialogs.cpp:599
+msgid "Subtitles Only"
+msgstr "Csak felirat"
+
+#: engines/scumm/dialogs.cpp:607
+msgctxt "lowres"
+msgid "Speech & Subs"
+msgstr "Beszéd & Felir"
+
+#: engines/scumm/help.cpp:73
+msgid "Common keyboard commands:"
+msgstr "Általános billentyűparancsok:"
+
+#: engines/scumm/help.cpp:74
+msgid "Save / Load dialog"
+msgstr "Ment / Tölt dialógus"
+
+#: engines/scumm/help.cpp:76
+msgid "Skip line of text"
+msgstr "Szövegsor átugrása"
+
+#: engines/scumm/help.cpp:77
+msgid "Esc"
+msgstr "Esc"
+
+#: engines/scumm/help.cpp:77
+msgid "Skip cutscene"
+msgstr "Bevezető átugrása"
+
+#: engines/scumm/help.cpp:78
+msgid "Space"
+msgstr "Szóköz"
+
+#: engines/scumm/help.cpp:78
+msgid "Pause game"
+msgstr "Szünet a játékban"
+
+#: 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 "1-10 Játékállás betöltése"
+
+#: 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"
+
+#: engines/scumm/help.cpp:80
+msgid "Save game state 1-10"
+msgstr "1-10 Játékállás mentése"
+
+#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:89
+msgid "Enter"
+msgstr "Enter"
+
+#: engines/scumm/help.cpp:86
+msgid "Toggle fullscreen"
+msgstr "Teljesképernyő kapcsoló"
+
+#: engines/scumm/help.cpp:87
+msgid "Music volume up / down"
+msgstr "Zene hangerő fel / le"
+
+#: engines/scumm/help.cpp:88
+msgid "Text speed slower / faster"
+msgstr "Szövegsebesség gyors / lassú"
+
+#: engines/scumm/help.cpp:89
+msgid "Simulate left mouse button"
+msgstr "Bal egérgomb szimuláció"
+
+#: engines/scumm/help.cpp:90
+msgid "Tab"
+msgstr "Tab"
+
+#: engines/scumm/help.cpp:90
+msgid "Simulate right mouse button"
+msgstr "Jobb egérgomb szimuláció"
+
+#: engines/scumm/help.cpp:93
+msgid "Special keyboard commands:"
+msgstr "Speciális billentyűparancsok:"
+
+#: engines/scumm/help.cpp:94
+msgid "Show / Hide console"
+msgstr "Konzol be / ki kapcsolás"
+
+#: engines/scumm/help.cpp:95
+msgid "Start the debugger"
+msgstr "Hibakereső indítása"
+
+#: engines/scumm/help.cpp:96
+msgid "Show memory consumption"
+msgstr "Memóriakihasználtság látszik"
+
+#: engines/scumm/help.cpp:97
+msgid "Run in fast mode (*)"
+msgstr "Futtatás gyors módban (*)"
+
+#: engines/scumm/help.cpp:98
+msgid "Run in really fast mode (*)"
+msgstr "Futtatás túlgyors módban (*)"
+
+#: engines/scumm/help.cpp:99
+msgid "Toggle mouse capture"
+msgstr "Egér rögzítés kapcsoló"
+
+#: engines/scumm/help.cpp:100
+msgid "Switch between graphics filters"
+msgstr "Kapcsolás grafikus szűrők között"
+
+#: engines/scumm/help.cpp:101
+msgid "Increase / Decrease scale factor"
+msgstr "Lépték növelés / csökkentés"
+
+#: engines/scumm/help.cpp:102
+msgid "Toggle aspect-ratio correction"
+msgstr "Méretarány korrekció kapcsoló"
+
+#: engines/scumm/help.cpp:107
+msgid "* Note that using ctrl-f and"
+msgstr "* Megjegyzés, ctrl-f és"
+
+#: engines/scumm/help.cpp:108
+msgid " ctrl-g are not recommended"
+msgstr " ctrl-g használata nem javasolt"
+
+#: engines/scumm/help.cpp:109
+msgid " since they may cause crashes"
+msgstr " mert rendszerösszeomlást vagy"
+
+#: engines/scumm/help.cpp:110
+msgid " or incorrect game behavior."
+msgstr " vagy hibás játékműködést okoz."
+
+#: engines/scumm/help.cpp:114
+msgid "Spinning drafts on the keyboard:"
+msgstr "Forgó draftok a billentyűzeten:"
+
+#: engines/scumm/help.cpp:116
+msgid "Main game controls:"
+msgstr "Fő játékvezérlők:"
+
+#: engines/scumm/help.cpp:121 engines/scumm/help.cpp:136
+#: engines/scumm/help.cpp:161
+msgid "Push"
+msgstr "Tol"
+
+#: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137
+#: engines/scumm/help.cpp:162
+msgid "Pull"
+msgstr "Húz"
+
+#: 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 "Ad"
+
+#: 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 "Nyit"
+
+#: engines/scumm/help.cpp:126
+msgid "Go to"
+msgstr "Menj"
+
+#: engines/scumm/help.cpp:127
+msgid "Get"
+msgstr "Vesz"
+
+#: 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 "Használ"
+
+#: engines/scumm/help.cpp:129 engines/scumm/help.cpp:141
+msgid "Read"
+msgstr "Olvas"
+
+#: engines/scumm/help.cpp:130 engines/scumm/help.cpp:147
+msgid "New kid"
+msgstr "Új gyerek"
+
+#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:153
+#: engines/scumm/help.cpp:171
+msgid "Turn on"
+msgstr "Bekapcsol"
+
+#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:154
+#: engines/scumm/help.cpp:172
+msgid "Turn off"
+msgstr "Kikapcsol"
+
+#: engines/scumm/help.cpp:142 engines/scumm/help.cpp:167
+#: engines/scumm/help.cpp:194
+msgid "Walk to"
+msgstr "Odamegy"
+
+#: 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 "Felvesz"
+
+#: engines/scumm/help.cpp:144 engines/scumm/help.cpp:169
+msgid "What is"
+msgstr "Mi ez"
+
+#: engines/scumm/help.cpp:146
+msgid "Unlock"
+msgstr "Felold"
+
+#: engines/scumm/help.cpp:149
+msgid "Put on"
+msgstr "Felvesz"
+
+#: engines/scumm/help.cpp:150
+msgid "Take off"
+msgstr "Letesz"
+
+#: engines/scumm/help.cpp:156
+msgid "Fix"
+msgstr "Javít"
+
+#: engines/scumm/help.cpp:158
+msgid "Switch"
+msgstr "Kapcsol"
+
+#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:228
+msgid "Look"
+msgstr "Megnéz"
+
+#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:223
+msgid "Talk"
+msgstr "Beszél"
+
+#: engines/scumm/help.cpp:174
+msgid "Travel"
+msgstr "Utazás"
+
+#: engines/scumm/help.cpp:175
+msgid "To Henry / To Indy"
+msgstr "Henrytől / Indytől"
+
+#. I18N: These are different musical notes
+#: engines/scumm/help.cpp:179
+msgid "play C minor on distaff"
+msgstr "C moll játék a bottal"
+
+#: engines/scumm/help.cpp:180
+msgid "play D on distaff"
+msgstr "Játék D-ben a bottal"
+
+#: engines/scumm/help.cpp:181
+msgid "play E on distaff"
+msgstr "Játék E-ben a bottal"
+
+#: engines/scumm/help.cpp:182
+msgid "play F on distaff"
+msgstr "Játék F-ben a bottal"
+
+#: engines/scumm/help.cpp:183
+msgid "play G on distaff"
+msgstr "Játék G-ben a bottal"
+
+#: engines/scumm/help.cpp:184
+msgid "play A on distaff"
+msgstr "Játék A-ban a bottal"
+
+#: engines/scumm/help.cpp:185
+msgid "play B on distaff"
+msgstr "Játék B-ben a bottal"
+
+#: engines/scumm/help.cpp:186
+msgid "play C major on distaff"
+msgstr "C dúr játék a bottal"
+
+#: engines/scumm/help.cpp:192 engines/scumm/help.cpp:214
+msgid "puSh"
+msgstr "Megtol"
+
+#: engines/scumm/help.cpp:193 engines/scumm/help.cpp:215
+msgid "pull (Yank)"
+msgstr "húz (Ránt)"
+
+#: engines/scumm/help.cpp:196 engines/scumm/help.cpp:212
+#: engines/scumm/help.cpp:248
+msgid "Talk to"
+msgstr "Beszél"
+
+#: engines/scumm/help.cpp:199 engines/scumm/help.cpp:211
+msgid "Look at"
+msgstr "Megnézi"
+
+#: engines/scumm/help.cpp:200
+msgid "turn oN"
+msgstr "Bekapcsol"
+
+#: engines/scumm/help.cpp:201
+msgid "turn oFf"
+msgstr "Kikapcsol"
+
+#: engines/scumm/help.cpp:217
+msgid "KeyUp"
+msgstr "FelGomb"
+
+#: engines/scumm/help.cpp:217
+msgid "Highlight prev dialogue"
+msgstr "Előző dialógus kiemelése"
+
+#: engines/scumm/help.cpp:218
+msgid "KeyDown"
+msgstr "LeGomb"
+
+#: engines/scumm/help.cpp:218
+msgid "Highlight next dialogue"
+msgstr "Következő dialógus kiemelése"
+
+#: engines/scumm/help.cpp:222
+msgid "Walk"
+msgstr "Megy"
+
+#: engines/scumm/help.cpp:225 engines/scumm/help.cpp:234
+#: engines/scumm/help.cpp:241 engines/scumm/help.cpp:249
+msgid "Inventory"
+msgstr "Tárgylista"
+
+#: engines/scumm/help.cpp:226
+msgid "Object"
+msgstr "Tárgy"
+
+#: engines/scumm/help.cpp:229
+msgid "Black and White / Color"
+msgstr "Fekete fehér / Színes"
+
+#: engines/scumm/help.cpp:232
+msgid "Eyes"
+msgstr "Szemek"
+
+#: engines/scumm/help.cpp:233
+msgid "Tongue"
+msgstr "Nyelv"
+
+#: engines/scumm/help.cpp:235
+msgid "Punch"
+msgstr "Megüt"
+
+#: engines/scumm/help.cpp:236
+msgid "Kick"
+msgstr "Megüt"
+
+#: engines/scumm/help.cpp:239 engines/scumm/help.cpp:247
+msgid "Examine"
+msgstr "Vizsgál"
+
+#: engines/scumm/help.cpp:240
+msgid "Regular cursor"
+msgstr "Szabvány kurzor"
+
+#. I18N: Comm is a communication device
+#: engines/scumm/help.cpp:243
+msgid "Comm"
+msgstr "Comm"
+
+#: engines/scumm/help.cpp:246
+msgid "Save / Load / Options"
+msgstr "Ment / Tölt / Opciók"
+
+#: engines/scumm/help.cpp:255
+msgid "Other game controls:"
+msgstr "Egyébb játékvezérlők:"
+
+#: engines/scumm/help.cpp:257 engines/scumm/help.cpp:267
+msgid "Inventory:"
+msgstr "Tárgylista:"
+
+#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:274
+msgid "Scroll list up"
+msgstr "Listagörgetés fel"
+
+#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:275
+msgid "Scroll list down"
+msgstr "Listagörgetés le"
+
+#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:268
+msgid "Upper left item"
+msgstr "Bal felső tárgy"
+
+#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:270
+msgid "Lower left item"
+msgstr "Bal alsó tárgy"
+
+#: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271
+msgid "Upper right item"
+msgstr "Jobb felső tárgy"
+
+#: engines/scumm/help.cpp:263 engines/scumm/help.cpp:273
+msgid "Lower right item"
+msgstr "Jobb alsó tárgy"
+
+#: engines/scumm/help.cpp:269
+msgid "Middle left item"
+msgstr "Bal középső tárgy"
+
+#: engines/scumm/help.cpp:272
+msgid "Middle right item"
+msgstr "Jobb középső tárgy"
+
+#: engines/scumm/help.cpp:279 engines/scumm/help.cpp:284
+msgid "Switching characters:"
+msgstr "Karakterek cseréje:"
+
+#: engines/scumm/help.cpp:281
+msgid "Second kid"
+msgstr "Második gyerek"
+
+#: engines/scumm/help.cpp:282
+msgid "Third kid"
+msgstr "Harmadik gyerek"
+
+#: engines/scumm/help.cpp:294
+msgid "Fighting controls (numpad):"
+msgstr "Verekedés irányítók (numpad):"
+
+#: engines/scumm/help.cpp:295 engines/scumm/help.cpp:296
+#: engines/scumm/help.cpp:297
+msgid "Step back"
+msgstr "Hátralép"
+
+#: engines/scumm/help.cpp:298
+msgid "Block high"
+msgstr "Felső védés"
+
+#: engines/scumm/help.cpp:299
+msgid "Block middle"
+msgstr "Védés középen"
+
+#: engines/scumm/help.cpp:300
+msgid "Block low"
+msgstr "Alsó védés"
+
+#: engines/scumm/help.cpp:301
+msgid "Punch high"
+msgstr "Felső ütés"
+
+#: engines/scumm/help.cpp:302
+msgid "Punch middle"
+msgstr "Ütés középen"
+
+#: engines/scumm/help.cpp:303
+msgid "Punch low"
+msgstr "Alsó ütés"
+
+#: engines/scumm/help.cpp:306
+msgid "These are for Indy on left."
+msgstr "Indytől balra levő."
+
+#: engines/scumm/help.cpp:307
+msgid "When Indy is on the right,"
+msgstr "Indytől jobbra levő,"
+
+#: engines/scumm/help.cpp:308
+msgid "7, 4, and 1 are switched with"
+msgstr "7, 4, és 1 átkapcsolva"
+
+#: engines/scumm/help.cpp:309
+msgid "9, 6, and 3, respectively."
+msgstr "9, 6, és 3-ra, egyenként."
+
+#: engines/scumm/help.cpp:316
+msgid "Biplane controls (numpad):"
+msgstr "Repülő vezérlők (numpad):"
+
+#: engines/scumm/help.cpp:317
+msgid "Fly to upper left"
+msgstr "Balra fel repülés"
+
+#: engines/scumm/help.cpp:318
+msgid "Fly to left"
+msgstr "Balra repülés"
+
+#: engines/scumm/help.cpp:319
+msgid "Fly to lower left"
+msgstr "Balra le repülés"
+
+#: engines/scumm/help.cpp:320
+msgid "Fly upwards"
+msgstr "Repülés fel"
+
+#: engines/scumm/help.cpp:321
+msgid "Fly straight"
+msgstr "Repülés előre"
+
+#: engines/scumm/help.cpp:322
+msgid "Fly down"
+msgstr "Repülés le"
+
+#: engines/scumm/help.cpp:323
+msgid "Fly to upper right"
+msgstr "Jobbra fel repülés"
+
+#: engines/scumm/help.cpp:324
+msgid "Fly to right"
+msgstr "Jobbra repülés"
+
+#: engines/scumm/help.cpp:325
+msgid "Fly to lower right"
+msgstr "Jobbra le repülés"
+
+#: engines/scumm/scumm.cpp:1768
+#, c-format
+msgid ""
+"Native MIDI support requires the Roland Upgrade from LucasArts,\n"
+"but %s is missing. Using AdLib instead."
+msgstr ""
+"Native MIDI támogatáshoz kell a Roland Upgrade a LucasArts-tól,\n"
+"a %s hiányzik. AdLib-ot használok helyette."
+
+#: engines/scumm/scumm.cpp:2258 engines/agos/saveload.cpp:189
+#, c-format
+msgid ""
+"Failed to save game state to file:\n"
+"\n"
+"%s"
+msgstr ""
+"Játékállás mentése:\n"
+"\n"
+"%s fájlba nem sikerült"
+
+#: engines/scumm/scumm.cpp:2265 engines/agos/saveload.cpp:154
+#, c-format
+msgid ""
+"Failed to load game state from file:\n"
+"\n"
+"%s"
+msgstr ""
+"Játékállás betöltése:\n"
+"\n"
+"%s fájlból nem sikerült"
+
+#: engines/scumm/scumm.cpp:2277 engines/agos/saveload.cpp:197
+#, c-format
+msgid ""
+"Successfully saved game state in file:\n"
+"\n"
+"%s"
+msgstr ""
+"Játékállás mentése:\n"
+"\n"
+"%s fájlba elkészült"
+
+#: engines/scumm/scumm.cpp:2492
+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 ""
+"Általában a Maniac Mansion indulna itt. De a ScummVM most nem indítja el. Ha "
+"játszani akarsz vele menj a ScummVM főmenüben a 'Játék hozzáadás' ra és "
+"válaszd a 'Maniac' mappát a 'Tentacle' könyvtárában."
+
+#. I18N: Option for fast scene switching
+#: engines/mohawk/dialogs.cpp:92 engines/mohawk/dialogs.cpp:171
+msgid "~Z~ip Mode Activated"
+msgstr "~Z~ip Mód aktiválva"
+
+#: engines/mohawk/dialogs.cpp:93
+msgid "~T~ransitions Enabled"
+msgstr "Átmenetek engedélyezve"
+
+#. I18N: Drop book page
+#: engines/mohawk/dialogs.cpp:95
+msgid "~D~rop Page"
+msgstr "Oldal~D~obás"
+
+#: engines/mohawk/dialogs.cpp:99
+msgid "~S~how Map"
+msgstr "~S~ Térkép"
+
+#: engines/mohawk/dialogs.cpp:105
+msgid "~M~ain Menu"
+msgstr "Fő~M~enü"
+
+#: engines/mohawk/dialogs.cpp:172
+msgid "~W~ater Effect Enabled"
+msgstr "Vízeffektus engedélyezve"
+
+#: engines/sci/engine/kfile.cpp:678
+msgid "Restore game:"
+msgstr "Játékmenet visszaállítása:"
+
+#: engines/sci/engine/kfile.cpp:678
+msgid "Restore"
+msgstr "Visszaállítás"
+
+#: engines/agos/animation.cpp:544
+#, c-format
+msgid "Cutscene file '%s' not found!"
+msgstr "'%s' átvezető fájl nem található"
+
+#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1283
+#: engines/tinsel/saveload.cpp:475
+msgid "Failed to load game state from file."
+msgstr "Játékállás betöltése fájlból nem sikerült."
+
+#: engines/gob/inter_v2.cpp:1353 engines/tinsel/saveload.cpp:553
+msgid "Failed to save game state to file."
+msgstr "Játékállás mentése fájlba nem sikerült."
+
+#: engines/gob/inter_v5.cpp:107
+msgid "Failed to delete file."
+msgstr "Fájl törlés sikertelen."
+
+#: engines/groovie/script.cpp:420
+msgid "Failed to save game"
+msgstr "Játék mentés nem sikerült"
+
+#: 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."
+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."
+
+#: engines/m4/m4_menus.cpp:138
+msgid "Save game failed!"
+msgstr "Játék mentése nem sikerült!"
+
+#: engines/sky/compact.cpp:130
+msgid ""
+"Unable to find \"sky.cpt\" file!\n"
+"Please download it from www.scummvm.org"
+msgstr ""
+"A \"sky.cpt\" fájl nem található!\n"
+"Töltsd le a www.scummvm.org oldaláról"
+
+#: engines/sky/compact.cpp:141
+msgid ""
+"The \"sky.cpt\" file has an incorrect size.\n"
+"Please (re)download it from www.scummvm.org"
+msgstr ""
+"A \"sky.cpt\" fájl mérete nem megfelelő.\n"
+"Töltsd le a www.scummvm.org oldaláról"
+
+#: engines/sword1/animation.cpp:344 engines/sword2/animation.cpp:379
+msgid "DXA cutscenes found but ScummVM has been built without zlib support"
+msgstr "DXA átvezető elérhető, de a ScummVM zlib támogatás nincs lefordítva"
+
+#: engines/sword1/animation.cpp:354 engines/sword2/animation.cpp:389
+msgid "MPEG2 cutscenes are no longer supported"
+msgstr "MPEG2 átvezetők már nem támogatottak"
+
+#: engines/sword1/animation.cpp:359 engines/sword2/animation.cpp:397
+#, c-format
+msgid "Cutscene '%s' not found"
+msgstr "'%s' átvezető nem található"
+
+#: 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"
+"\n"
+"Press OK to convert them now, otherwise you will be asked again the next "
+"time you start the game.\n"
+msgstr ""
+"ScummVM régi játékmentést talált a Broken Sword 1 hez, ezt át kell "
+"alakítani.\n"
+"A régi játékmentés nem támogatott, ezért a játék nem töltődik be átalakítás "
+"nélkül.\n"
+"\n"
+"Nyomj OK-t az átalakításhoz, vagy rákérdezzek ha legközelebb elindítod a "
+"játékot.\n"
+
+#: engines/sword1/control.cpp:1232
+#, c-format
+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 ""
+"A választott játékmentés már létezik!\n"
+"Megtartod a régi játékmentést (%s) vagy kicseréled az újra (%s)?\n"
+
+#: engines/sword1/control.cpp:1235
+msgid "Keep the old one"
+msgstr "A régit megtartom"
+
+#: engines/sword1/control.cpp:1235
+msgid "Keep the new one"
+msgstr "Az újat megtartom"
+
+#: engines/sword1/logic.cpp:1633
+msgid "This is the end of the Broken Sword 1 Demo"
+msgstr "Ez a Broken Sword 1 Demo vége"
+
+#: engines/parallaction/saveload.cpp:133
+#, c-format
+msgid ""
+"Can't save game in slot %i\n"
+"\n"
+msgstr ""
+"Játékállás nem menthető %i slotba\n"
+"\n"
+
+#: engines/parallaction/saveload.cpp:211
+msgid "Loading game..."
+msgstr "Játék betöltés..."
+
+#: engines/parallaction/saveload.cpp:226
+msgid "Saving game..."
+msgstr "Játék mentés..."
+
+#: engines/parallaction/saveload.cpp:279
+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"
+"\n"
+"Press OK to convert them now, otherwise you will be asked next time.\n"
+msgstr ""
+"ScummVM régi játékmentést talált a Nippon Safes hez ezt át kell nevezni.\n"
+"A régi játékmentés nem támogatott, ezért a játék nem töltődik be átnevezés "
+"nélkül..\n"
+"\n"
+"Nyomj OK-t az átalakításhoz, vagy rákérdezzek ha legközelebb elindítod a "
+"játékot.\n"
+
+#: engines/parallaction/saveload.cpp:326
+msgid "ScummVM successfully converted all your savefiles."
+msgstr "ScummVM konvertálta az összes játékállásodat."
+
+#: engines/parallaction/saveload.cpp:328
+msgid ""
+"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 kiírt néhány figyelmeztetést a konzolablakba és nem biztos hogy az "
+"összes fájlod át lett alakítva.\n"
+"\n"
+"Légyszíves jelentsd a csapatnak."
+
+#: audio/fmopl.cpp:49
+msgid "MAME OPL emulator"
+msgstr "MAME OPL emulátor"
+
+#: audio/fmopl.cpp:51
+msgid "DOSBox OPL emulator"
+msgstr "DOSBox OPL emulátor"
+
+#: audio/mididrv.cpp:205
+#, c-format
+msgid ""
+"The selected audio device '%s' was not found (e.g. might be turned off or "
+"disconnected)."
+msgstr ""
+"A kiválasztott '%s' hangeszköz nem található (Lekapcsoltad, vagy kihúztad)."
+
+#: audio/mididrv.cpp:205 audio/mididrv.cpp:217 audio/mididrv.cpp:253
+#: audio/mididrv.cpp:268
+msgid "Attempting to fall back to the next available device..."
+msgstr "A következő elérhető eszköz keresése..."
+
+#: audio/mididrv.cpp:217
+#, c-format
+msgid ""
+"The selected audio device '%s' cannot be used. See log file for more "
+"information."
+msgstr ""
+"A kiválasztott '%s' hangeszköz nem használható. Bővebb információ a "
+"naplófájlban."
+
+#: audio/mididrv.cpp:253
+#, c-format
+msgid ""
+"The preferred audio device '%s' was not found (e.g. might be turned off or "
+"disconnected)."
+msgstr ""
+"Az elsődleges '%s' hangeszköz nem található (Lekapcsoltad, vagy kihúztad)."
+
+#: audio/mididrv.cpp:268
+#, c-format
+msgid ""
+"The preferred audio device '%s' cannot be used. See log file for more "
+"information."
+msgstr ""
+"Az elsődleges '%s' hangeszköz nem használható. Bővebb információ a "
+"naplófájlban."
+
+#: audio/null.h:43
+msgid "No music"
+msgstr "Nincs zene"
+
+#: audio/mods/paula.cpp:189
+msgid "Amiga Audio Emulator"
+msgstr "Amiga Audió Emulátor"
+
+#: audio/softsynth/adlib.cpp:1594
+msgid "AdLib Emulator"
+msgstr "AdLib Emulátor"
+
+#: audio/softsynth/appleiigs.cpp:33
+msgid "Apple II GS Emulator (NOT IMPLEMENTED)"
+msgstr "Apple II GS Emulátor (NEM TÁMOGATOTT)"
+
+#: audio/softsynth/sid.cpp:1430
+msgid "C64 Audio Emulator"
+msgstr "C64 Audio Emulátor"
+
+#: audio/softsynth/mt32.cpp:329
+msgid "Initializing MT-32 Emulator"
+msgstr "MT-32 Emulátor inicializálása"
+
+#: audio/softsynth/mt32.cpp:543
+msgid "MT-32 Emulator"
+msgstr "MT-32 Emulátor"
+
+#: audio/softsynth/pcspk.cpp:139
+msgid "PC Speaker Emulator"
+msgstr "PC Speaker Emulátor"
+
+#: audio/softsynth/pcspk.cpp:158
+msgid "IBM PCjr Emulator"
+msgstr "IBM PCjr Emulátor"
+
+#: backends/keymapper/remap-dialog.cpp:47
+msgid "Keymap:"
+msgstr "Billentyűzet kiosztás:"
+
+#: backends/keymapper/remap-dialog.cpp:64
+msgid " (Active)"
+msgstr " (Aktív)"
+
+#: backends/keymapper/remap-dialog.cpp:98
+msgid " (Global)"
+msgstr " (Globális)"
+
+#: backends/keymapper/remap-dialog.cpp:108
+msgid " (Game)"
+msgstr " (Játék)"
+
+#: backends/midi/windows.cpp:164
+msgid "Windows MIDI"
+msgstr "Windows MIDI"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:57
+msgid "ScummVM Main Menu"
+msgstr "ScummVM Főmenü"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:63
+msgid "~L~eft handed mode"
+msgstr "Balkezes mód:"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:64
+msgid "~I~ndy fight controls"
+msgstr "~I~ndy fight controls"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:65
+msgid "Show mouse cursor"
+msgstr "Egérkurzor látszik"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:66
+msgid "Snap to edges"
+msgstr "Élekre illesztés"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:68
+msgid "Touch X Offset"
+msgstr "Touch X Eltolás"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:75
+msgid "Touch Y Offset"
+msgstr "Touch Y Eltolás"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:87
+msgid "Use laptop trackpad-style cursor control"
+msgstr "Laptop trackpad stílusu kurzor vezérlő"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:88
+msgid "Tap for left click, double tap right click"
+msgstr "Érintés balkatt, duplaérintés jobbkatt"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:90
+msgid "Sensitivity"
+msgstr "Érzékenység"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:99
+msgid "Initial top screen scale:"
+msgstr "Képernyő felső kezdőpont:"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:105
+msgid "Main screen scaling:"
+msgstr "Főképernyő átméretezés:"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:107
+msgid "Hardware scale (fast, but low quality)"
+msgstr "Hardveres átméretezés (gyors, alacsony minőség)"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:108
+msgid "Software scale (good quality, but slower)"
+msgstr "Szoftveres átméretezés (jó minőség, lassú)"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:109
+msgid "Unscaled (you must scroll left and right)"
+msgstr "Eredeti (görgethetsz jobbra és balra)"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:111
+msgid "Brightness:"
+msgstr "Fényerő:"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:121
+msgid "High quality audio (slower) (reboot)"
+msgstr "Jóminőségü audió (lassabb)(újraindítás)"
+
+#: backends/platform/ds/arm9/source/dsoptions.cpp:122
+msgid "Disable power off"
+msgstr "Leállítás tiltva"
+
+#: backends/platform/iphone/osys_events.cpp:338
+msgid "Mouse-click-and-drag mode enabled."
+msgstr "Egér kattint-és-húz mód engedélyezve."
+
+#: backends/platform/iphone/osys_events.cpp:340
+msgid "Mouse-click-and-drag mode disabled."
+msgstr "Egér kattint-és-húz mód letiltva."
+
+#: backends/platform/iphone/osys_events.cpp:351
+msgid "Touchpad mode enabled."
+msgstr "Touchpad mód engedélyezve."
+
+#: backends/platform/iphone/osys_events.cpp:353
+msgid "Touchpad mode disabled."
+msgstr "Touchpad mód letiltva."
+
+#: backends/platform/sdl/macosx/appmenu_osx.mm:67
+msgid "Hide ScummVM"
+msgstr "ScummVM elrejtése"
+
+#: backends/platform/sdl/macosx/appmenu_osx.mm:70
+msgid "Hide Others"
+msgstr "Többi elrejtése"
+
+#: backends/platform/sdl/macosx/appmenu_osx.mm:74
+msgid "Show All"
+msgstr "Mutasd mind"
+
+#: backends/platform/sdl/macosx/appmenu_osx.mm:92
+#: backends/platform/sdl/macosx/appmenu_osx.mm:99
+msgid "Window"
+msgstr "Ablak"
+
+#: backends/platform/sdl/macosx/appmenu_osx.mm:95
+msgid "Minimize"
+msgstr "Kis méret"
+
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:45
+msgid "Normal (no scaling)"
+msgstr "Normál (nincs átméretezés)"
+
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:64
+msgctxt "lowres"
+msgid "Normal (no scaling)"
+msgstr "Normál (nincs átméretezés)"
+
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2146
+#: backends/graphics/openglsdl/openglsdl-graphics.cpp:533
+msgid "Enabled aspect ratio correction"
+msgstr "Méretarány korrekció engedélyezve"
+
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2152
+#: backends/graphics/openglsdl/openglsdl-graphics.cpp:538
+msgid "Disabled aspect ratio correction"
+msgstr "Méretarány korrekció letiltva"
+
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2207
+msgid "Active graphics filter:"
+msgstr "Aktív grafikus szűrők:"
+
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2249
+#: backends/graphics/openglsdl/openglsdl-graphics.cpp:477
+msgid "Windowed mode"
+msgstr "Ablakos mód"
+
+#: backends/graphics/opengl/opengl-graphics.cpp:130
+msgid "OpenGL Normal"
+msgstr "OpenGL Normál"
+
+#: backends/graphics/opengl/opengl-graphics.cpp:131
+msgid "OpenGL Conserve"
+msgstr "OpenGL Megtartott"
+
+#: backends/graphics/opengl/opengl-graphics.cpp:132
+msgid "OpenGL Original"
+msgstr "OpenGL Eredeti"
+
+#: backends/graphics/openglsdl/openglsdl-graphics.cpp:415
+msgid "Current display mode"
+msgstr "Jelenlegi videómód"
+
+#: backends/graphics/openglsdl/openglsdl-graphics.cpp:428
+msgid "Current scale"
+msgstr "Aktuális méretezés"
+
+#: backends/graphics/openglsdl/openglsdl-graphics.cpp:558
+msgid "Active filter mode: Linear"
+msgstr "Aktív filter mód: Lineáris"
+
+#: backends/graphics/openglsdl/openglsdl-graphics.cpp:560
+msgid "Active filter mode: Nearest"
+msgstr "Aktív filter mód: Közelítő"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:38
+#: backends/platform/wince/CEActionsSmartphone.cpp:39
+msgid "Up"
+msgstr "Fel"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:39
+#: backends/platform/wince/CEActionsSmartphone.cpp:40
+msgid "Down"
+msgstr "Le"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:40
+#: backends/platform/wince/CEActionsSmartphone.cpp:41
+msgid "Left"
+msgstr "Bal"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:41
+#: backends/platform/wince/CEActionsSmartphone.cpp:42
+msgid "Right"
+msgstr "Jobb"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:42
+#: backends/platform/wince/CEActionsPocket.cpp:60
+#: backends/platform/wince/CEActionsSmartphone.cpp:43
+msgid "Left Click"
+msgstr "Bal katt"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:43
+#: backends/platform/wince/CEActionsSmartphone.cpp:44
+msgid "Right Click"
+msgstr "Jobb katt"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:46
+#: backends/platform/wince/CEActionsSmartphone.cpp:47
+msgid "Zone"
+msgstr "Zóna"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:47
+#: backends/platform/wince/CEActionsPocket.cpp:54
+#: backends/platform/wince/CEActionsSmartphone.cpp:48
+msgid "Multi Function"
+msgstr "Többfunkciós"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:48
+msgid "Swap character"
+msgstr "Karakter csere"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:49
+msgid "Skip text"
+msgstr "Szöveg átugrása"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:51
+msgid "Fast mode"
+msgstr "Gyors mód"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:53
+msgid "Debugger"
+msgstr "Hibakereső"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:54
+msgid "Global menu"
+msgstr "Globális menü"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:55
+msgid "Virtual keyboard"
+msgstr "Virtuális billentyűzet"
+
+#: backends/platform/symbian/src/SymbianActions.cpp:56
+msgid "Key mapper"
+msgstr "Billentyű kiosztás"
+
+#: backends/events/symbiansdl/symbiansdl-events.cpp:184
+msgid "Do you want to quit ?"
+msgstr "Ki akarsz lépni ?"
+
+#: backends/platform/wii/options.cpp:51
+msgid "Video"
+msgstr "Videó"
+
+#: backends/platform/wii/options.cpp:54
+msgid "Current video mode:"
+msgstr "Jelenlegi videómód:"
+
+#: backends/platform/wii/options.cpp:56
+msgid "Double-strike"
+msgstr "Dupla érintés"
+
+#: backends/platform/wii/options.cpp:60
+msgid "Horizontal underscan:"
+msgstr "Vízszintes eltolás:"
+
+#: backends/platform/wii/options.cpp:66
+msgid "Vertical underscan:"
+msgstr "Függőleges eltolás:"
+
+#: backends/platform/wii/options.cpp:71
+msgid "Input"
+msgstr "Bemenet"
+
+#: backends/platform/wii/options.cpp:74
+msgid "GC Pad sensitivity:"
+msgstr "GC Pad érzékenység:"
+
+#: backends/platform/wii/options.cpp:80
+msgid "GC Pad acceleration:"
+msgstr "GC Pad felbontás:"
+
+#: backends/platform/wii/options.cpp:86
+msgid "DVD"
+msgstr "DVD"
+
+#: backends/platform/wii/options.cpp:89 backends/platform/wii/options.cpp:101
+msgid "Status:"
+msgstr "Státusz:"
+
+#: backends/platform/wii/options.cpp:90 backends/platform/wii/options.cpp:102
+msgid "Unknown"
+msgstr "Ismeretlen"
+
+#: backends/platform/wii/options.cpp:93
+msgid "Mount DVD"
+msgstr "DVD csatolás"
+
+#: backends/platform/wii/options.cpp:94
+msgid "Unmount DVD"
+msgstr "DVD kiadás"
+
+#: backends/platform/wii/options.cpp:98
+msgid "SMB"
+msgstr "SMB"
+
+#: backends/platform/wii/options.cpp:106
+msgid "Server:"
+msgstr "Szerver:"
+
+#: backends/platform/wii/options.cpp:110
+msgid "Share:"
+msgstr "Megoszt:"
+
+#: backends/platform/wii/options.cpp:114
+msgid "Username:"
+msgstr "Felhasználó:"
+
+#: backends/platform/wii/options.cpp:118
+msgid "Password:"
+msgstr "Jelszó:"
+
+#: backends/platform/wii/options.cpp:121
+msgid "Init network"
+msgstr "Hálózat inicializálás"
+
+#: backends/platform/wii/options.cpp:123
+msgid "Mount SMB"
+msgstr "SMB csatolás"
+
+#: backends/platform/wii/options.cpp:124
+msgid "Unmount SMB"
+msgstr "SMB kiadás"
+
+#: backends/platform/wii/options.cpp:143
+msgid "DVD Mounted successfully"
+msgstr "DVD csatlakoztatva"
+
+#: backends/platform/wii/options.cpp:146
+msgid "Error while mounting the DVD"
+msgstr "Hiba a DVD csatlakoztatásakor"
+
+#: backends/platform/wii/options.cpp:148
+msgid "DVD not mounted"
+msgstr "DVD nincs csatolva"
+
+#: backends/platform/wii/options.cpp:161
+msgid "Network up, share mounted"
+msgstr "Hálózat és megosztás csatlakozva"
+
+#: backends/platform/wii/options.cpp:163
+msgid "Network up"
+msgstr "Hálózat csatlakozva"
+
+#: backends/platform/wii/options.cpp:166
+msgid ", error while mounting the share"
+msgstr ", hiba a megosztás csatolásakor"
+
+#: backends/platform/wii/options.cpp:168
+msgid ", share not mounted"
+msgstr ", megosztás nincs csatolva"
+
+#: backends/platform/wii/options.cpp:174
+msgid "Network down"
+msgstr "Nincs hálózat"
+
+#: backends/platform/wii/options.cpp:178
+msgid "Initializing network"
+msgstr "Hálózat inicializálása"
+
+#: backends/platform/wii/options.cpp:182
+msgid "Timeout while initializing network"
+msgstr "Időtúllépés a hálózat inicializálásakor"
+
+#: backends/platform/wii/options.cpp:186
+#, c-format
+msgid "Network not initialized (%d)"
+msgstr "(%d) Hálózat nincs inicializálva"
+
+#: backends/platform/wince/CEActionsPocket.cpp:46
+msgid "Hide Toolbar"
+msgstr "Eszköztár rejtés"
+
+#: backends/platform/wince/CEActionsPocket.cpp:47
+msgid "Show Keyboard"
+msgstr "Billentyűzet megjelenítés"
+
+#: backends/platform/wince/CEActionsPocket.cpp:48
+msgid "Sound on/off"
+msgstr "Hang be/ki"
+
+#: backends/platform/wince/CEActionsPocket.cpp:49
+msgid "Right click"
+msgstr "Jobb katt"
+
+#: backends/platform/wince/CEActionsPocket.cpp:50
+msgid "Show/Hide Cursor"
+msgstr "Kurzor be/ki"
+
+#: backends/platform/wince/CEActionsPocket.cpp:51
+msgid "Free look"
+msgstr "Szabad nézet"
+
+#: backends/platform/wince/CEActionsPocket.cpp:52
+msgid "Zoom up"
+msgstr "Nagyítás"
+
+#: backends/platform/wince/CEActionsPocket.cpp:53
+msgid "Zoom down"
+msgstr "Kicsinyítés"
+
+#: backends/platform/wince/CEActionsPocket.cpp:55
+#: backends/platform/wince/CEActionsSmartphone.cpp:49
+msgid "Bind Keys"
+msgstr "Kapcsolódás kulcsok"
+
+#: backends/platform/wince/CEActionsPocket.cpp:56
+msgid "Cursor Up"
+msgstr "Kurzor Fel"
+
+#: backends/platform/wince/CEActionsPocket.cpp:57
+msgid "Cursor Down"
+msgstr "Kurzor Le"
+
+#: backends/platform/wince/CEActionsPocket.cpp:58
+msgid "Cursor Left"
+msgstr "Kurzor Bal"
+
+#: backends/platform/wince/CEActionsPocket.cpp:59
+msgid "Cursor Right"
+msgstr "Kurzor Jobb"
+
+#: backends/platform/wince/CEActionsPocket.cpp:267
+#: backends/platform/wince/CEActionsSmartphone.cpp:231
+msgid "Do you want to load or save the game?"
+msgstr "Játékállás betöltése vagy mentése?"
+
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+msgid " Are you sure you want to quit ? "
+msgstr " Biztos hogy ki akarsz lépni ? "
+
+#: backends/platform/wince/CEActionsSmartphone.cpp:50
+msgid "Keyboard"
+msgstr "Billentyűzet"
+
+#: backends/platform/wince/CEActionsSmartphone.cpp:51
+msgid "Rotate"
+msgstr "Forgatás"
+
+#: backends/platform/wince/CELauncherDialog.cpp:56
+msgid "Using SDL driver "
+msgstr "SDL meghajtó használata"
+
+#: backends/platform/wince/CELauncherDialog.cpp:60
+msgid "Display "
+msgstr "Kijelző"
+
+#: backends/platform/wince/CELauncherDialog.cpp:83
+msgid "Do you want to perform an automatic scan ?"
+msgstr "El akarod kezdeni az automatikus vizsgálatot ?"
+
+#: backends/platform/wince/wince-sdl.cpp:471
+msgid "Map right click action"
+msgstr "Jobbkatt művelet gomb"
+
+#: backends/platform/wince/wince-sdl.cpp:475
+msgid "You must map a key to the 'Right Click' action to play this game"
+msgstr "Válassz egy billentyűt a 'Jobbkatt' művelethez"
+
+#: backends/platform/wince/wince-sdl.cpp:484
+msgid "Map hide toolbar action"
+msgstr "Eszköztár rejtés gomb"
+
+#: backends/platform/wince/wince-sdl.cpp:488
+msgid "You must map a key to the 'Hide toolbar' action to play this game"
+msgstr "Válassz egy billentyűt az 'Eszköztár rejtés' művelethez"
+
+#: backends/platform/wince/wince-sdl.cpp:497
+msgid "Map Zoom Up action (optional)"
+msgstr "Nagyítás művelet (opcionális)"
+
+#: backends/platform/wince/wince-sdl.cpp:500
+msgid "Map Zoom Down action (optional)"
+msgstr "Kicsinyítés művelet (opcionális)"
+
+#: backends/platform/wince/wince-sdl.cpp:508
+msgid ""
+"Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory"
+msgstr ""
+"Ne felejts billentyűt társítani az 'Eszköztár rejtés' művelethez, hogy lásd "
+"a teljes listát"
+
+#: backends/events/default/default-events.cpp:222
+msgid "Do you really want to return to the Launcher?"
+msgstr "Biztos hogy visszatérsz az indítópulthoz?"
+
+#: backends/events/default/default-events.cpp:222
+msgid "Launcher"
+msgstr "Indítópult"
+
+#: backends/events/default/default-events.cpp:244
+msgid "Do you really want to quit?"
+msgstr "Biztos hogy ki akarsz lépni ?"
+
+#: backends/events/gph/gph-events.cpp:366
+#: backends/events/gph/gph-events.cpp:409
+#: backends/events/openpandora/op-events.cpp:141
+msgid "Touchscreen 'Tap Mode' - Left Click"
+msgstr "Érintőképernyő 'Tap Mód' - Bal katt"
+
+#: backends/events/gph/gph-events.cpp:368
+#: backends/events/gph/gph-events.cpp:411
+#: backends/events/openpandora/op-events.cpp:143
+msgid "Touchscreen 'Tap Mode' - Right Click"
+msgstr "Érintőképernyő 'Tap Mód' - Jobb katt"
+
+#: backends/events/gph/gph-events.cpp:370
+#: backends/events/gph/gph-events.cpp:413
+#: backends/events/openpandora/op-events.cpp:145
+msgid "Touchscreen 'Tap Mode' - Hover (No Click)"
+msgstr "Érintőképernyő 'Tap Mód' - Lebegő (Nincs katt)"
+
+#: backends/events/gph/gph-events.cpp:390
+msgid "Maximum Volume"
+msgstr "Maximum Hangerő"
+
+#: backends/events/gph/gph-events.cpp:392
+msgid "Increasing Volume"
+msgstr "Hangerő növelése"
+
+#: backends/events/gph/gph-events.cpp:398
+msgid "Minimal Volume"
+msgstr "Minimum Hangerő"
+
+#: backends/events/gph/gph-events.cpp:400
+msgid "Decreasing Volume"
+msgstr "Hangerő csökkentése"
+
+#: backends/updates/macosx/macosx-updates.mm:65
+msgid "Check for Updates..."
+msgstr "Frissítések keresése..."
+
+#~ msgctxt "lowres"
+#~ msgid "Add Game..."
+#~ msgstr "Játék hozzáadás"
+
+#~ msgid "Add Game..."
+#~ msgstr "Játék hozzáadás"
+
+#~ msgid ""
+#~ "Your game version has been detected using filename matching as a variant "
+#~ "of %s."
+#~ msgstr "A felismert játékverziód a használt fájlnévvel a %s egy változata."
+
+#~ msgid "If this is an original and unmodified version, please report any"
+#~ msgstr "Ha ez egy eredeti nem változtatott verzió, kérlek jelezd minden"
+
+#~ msgid "information previously printed by ScummVM to the team."
+#~ msgstr "előzőleg kiírt információt a ScummVM csapatnak."
+
+#~ msgid "Discovered %d new games."
+#~ msgstr "%d Új játékot találtam."
+
+#~ msgid "Command line argument not processed"
+#~ msgstr "Parancssori paraméter nem működik"
+
+#~ msgid "FM Towns Emulator"
+#~ msgstr "FM Towns Emulátor"
+
+#~ msgid "Invalid Path"
+#~ msgstr "Érvénytelen mappa"
diff --git a/ports.mk b/ports.mk
index 264a7deca5..de501c4052 100644
--- a/ports.mk
+++ b/ports.mk
@@ -160,6 +160,8 @@ osxsnap: bundle
mkdir ScummVM-snapshot/doc/fr
cp $(srcdir)/doc/fr/QuickStart_fr ./ScummVM-snapshot/doc/fr/QuickStart_fr
/Developer/Tools/SetFile -t ttro -c ttxt ./ScummVM-snapshot/*
+ xattr -w "com.apple.TextEncoding" "utf-8;134217984" ./ScummVM-snapshot/doc/de/*
+ xattr -w "com.apple.TextEncoding" "utf-8;134217984" ./ScummVM-snapshot/doc/fr/*
/Developer/Tools/CpMac -r $(bundle_name) ./ScummVM-snapshot/
cp $(srcdir)/dists/macosx/DS_Store ./ScummVM-snapshot/.DS_Store
cp $(srcdir)/dists/macosx/background.jpg ./ScummVM-snapshot/background.jpg
diff --git a/test/cxxtest_mingw.h b/test/cxxtest_mingw.h
new file mode 100644
index 0000000000..f407105bfe
--- /dev/null
+++ b/test/cxxtest_mingw.h
@@ -0,0 +1,11 @@
+
+#ifndef CXXTEST_MINGW
+#define CXXTEST_MINGW
+
+// HACK to allow building with the SDL backend on MinGW
+// see bug #1800764 "TOOLS: MinGW tools building broken"
+#ifdef main
+#undef main
+#endif // main
+
+#endif // CXXTEST_MINGW \ No newline at end of file
diff --git a/test/module.mk b/test/module.mk
index 4e5cbf62e1..11ee6bd200 100644
--- a/test/module.mk
+++ b/test/module.mk
@@ -9,7 +9,7 @@ TESTS := $(srcdir)/test/common/*.h $(srcdir)/test/audio/*.h
TEST_LIBS := audio/libaudio.a common/libcommon.a
#
-TEST_FLAGS := --runner=StdioPrinter --no-std --no-eh
+TEST_FLAGS := --runner=StdioPrinter --no-std --no-eh --include=$(srcdir)/test/cxxtest_mingw.h
TEST_CFLAGS := -I$(srcdir)/test/cxxtest
TEST_LDFLAGS := $(LIBS)
TEST_CXXFLAGS := $(filter-out -Wglobal-constructors,$(CXXFLAGS))