aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/sword25/detection.cpp123
-rwxr-xr-xengines/sword25/fmv/movieplayer.h154
-rwxr-xr-xengines/sword25/gfx/framecounter.h83
-rwxr-xr-xengines/sword25/gfx/graphicengine.h370
-rwxr-xr-xengines/sword25/input/inputengine.h214
-rwxr-xr-xengines/sword25/kernel/bs_stdint.h27
-rwxr-xr-xengines/sword25/kernel/common.h63
-rwxr-xr-xengines/sword25/kernel/kernel.cpp382
-rwxr-xr-xengines/sword25/kernel/kernel.h405
-rwxr-xr-xengines/sword25/kernel/log.cpp197
-rwxr-xr-xengines/sword25/kernel/log.h96
-rwxr-xr-xengines/sword25/kernel/memleaks.h46
-rwxr-xr-xengines/sword25/kernel/persistable.h50
-rwxr-xr-xengines/sword25/kernel/persistenceservice.h66
-rwxr-xr-xengines/sword25/kernel/resmanager.h203
-rwxr-xr-xengines/sword25/kernel/resservice.h121
-rwxr-xr-xengines/sword25/kernel/service.h76
-rwxr-xr-xengines/sword25/kernel/service_ids.h84
-rwxr-xr-xengines/sword25/kernel/window.h214
-rwxr-xr-xengines/sword25/package/packagemanager.h266
-rwxr-xr-xengines/sword25/script/script.h98
-rwxr-xr-xengines/sword25/sfx/soundengine.h298
-rw-r--r--engines/sword25/sword25.cpp121
-rw-r--r--engines/sword25/sword25.h76
24 files changed, 2097 insertions, 1736 deletions
diff --git a/engines/sword25/detection.cpp b/engines/sword25/detection.cpp
new file mode 100644
index 0000000000..f579fdad17
--- /dev/null
+++ b/engines/sword25/detection.cpp
@@ -0,0 +1,123 @@
+/* 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$
+ * $Id$
+ *
+ */
+
+#include "base/plugins.h"
+
+#include "engines/advancedDetector.h"
+
+#include "sword25/sword25.h"
+
+namespace Sword25 {
+
+struct Sword25GameDescription {
+ ADGameDescription desc;
+
+ uint32 features;
+};
+
+uint32 Sword25Engine::getFeatures() const { return _gameDescription->features; }
+Common::Language Sword25Engine::getLanguage() const { return _gameDescription->desc.language; }
+Common::Platform Sword25Engine::getPlatform() const { return _gameDescription->desc.platform; }
+
+}
+
+static const PlainGameDescriptor Sword25Game[] = {
+ {"sword25", "Broken Sword 2.5"},
+ {0, 0}
+};
+
+namespace Sword25 {
+
+// TODO: Need to decide whether we're going to implement code to detect all the various languages allowed,
+// both by the core data package, as well as the extra languages added by the patch file; also, I don't
+// think that all the languages supported by the game currently have constants in ScummVM
+static const Sword25GameDescription gameDescriptions[] = {
+ {
+ {
+ "sword25",
+ "",
+ {
+ { "data.b25c", kFileTypeHash, "f8b6e03ada2d2f6cf27fbc11ad1572e9", 654310588},
+ { NULL, 0, NULL, 0}
+ },
+ Common::EN_ANY,
+ Common::kPlatformWindows,
+ ADGF_NO_FLAGS
+ },
+ 0
+ },
+ { { NULL, NULL, { { NULL, 0, NULL, 0 } }, Common::UNK_LANG, Common::kPlatformUnknown, ADGF_NO_FLAGS }, 0 }
+};
+
+} // end of namespace Sword25
+
+static const ADParams detectionParams = {
+ // Pointer to ADGameDescription or its superset structure
+ (const byte *)Sword25::gameDescriptions,
+ // Size of that superset structure
+ sizeof(Sword25::Sword25GameDescription),
+ // Number of bytes to compute MD5 sum for
+ 5000,
+ // List of all engine targets
+ Sword25Game,
+ // Structure for autoupgrading obsolete targets
+ 0,
+ // Name of single gameid (optional)
+ NULL,
+ // List of files for file-based fallback detection (optional)
+ 0,
+ // Flags
+ 0
+};
+
+class Sword25MetaEngine : public AdvancedMetaEngine {
+public:
+ Sword25MetaEngine() : AdvancedMetaEngine(detectionParams) {}
+
+ virtual const char *getName() const {
+ return "The Broken Sword 2.5 Engine";
+ }
+
+ virtual const char *getOriginalCopyright() const {
+ return "Broken Sword 2.5 (C) Malte Thiesen, Daniel Queteschiner and Michael Elsdorfer";
+ }
+
+ virtual bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const;
+};
+
+bool Sword25MetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const {
+ const Sword25::Sword25GameDescription *gd = (const Sword25::Sword25GameDescription *)desc;
+ if (gd) {
+ *engine = new Sword25::Sword25Engine(syst, gd);
+ }
+ return gd != 0;
+}
+
+#if PLUGIN_ENABLED_DYNAMIC(SWORD25)
+ REGISTER_PLUGIN_DYNAMIC(SWORD25, PLUGIN_TYPE_ENGINE, Sword25MetaEngine);
+#else
+ REGISTER_PLUGIN_STATIC(SWORD25, PLUGIN_TYPE_ENGINE, Sword25MetaEngine);
+#endif
+
diff --git a/engines/sword25/fmv/movieplayer.h b/engines/sword25/fmv/movieplayer.h
index c08969a5a2..5255e0b8e5 100755
--- a/engines/sword25/fmv/movieplayer.h
+++ b/engines/sword25/fmv/movieplayer.h
@@ -1,21 +1,27 @@
-// -----------------------------------------------------------------------------
-// This file is part of Broken Sword 2.5
-// Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdörfer
-//
-// Broken Sword 2.5 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.
-//
-// Broken Sword 2.5 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 Broken Sword 2.5; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-// -----------------------------------------------------------------------------
+/* 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$
+ * $Id$
+ *
+ */
#ifndef SWORD25_MOVIEPLAYER_H
#define SWORD25_MOVIEPLAYER_H
@@ -27,112 +33,106 @@
#include "sword25/kernel/common.h"
#include "sword25/kernel/service.h"
-#include "sword25/kernel/memlog_off.h"
-#include <string>
-#include "sword25/kernel/memlog_on.h"
+namespace Sword25 {
// -----------------------------------------------------------------------------
-// Klassendefinition
+// Class definitions
// -----------------------------------------------------------------------------
-class BS_MoviePlayer : public BS_Service
-{
+class BS_MoviePlayer : public BS_Service {
public:
// -----------------------------------------------------------------------------
- // Konstruktion / Destruktion
+ // Constructor / Destructor
// -----------------------------------------------------------------------------
- BS_MoviePlayer(BS_Kernel * pKernel);
+ BS_MoviePlayer(BS_Kernel *pKernel);
virtual ~BS_MoviePlayer() {};
// -----------------------------------------------------------------------------
- // Abstraktes Interface, muss von jedem MoviePlayer implementiert werden
+ // Abstract interface must be implemented by each Movie Player
// -----------------------------------------------------------------------------
/**
- @brief Lädt eine Filmdatei
-
- Diese Methode lädt eine Filmdatei und bereitet sie zur Wiedergabe vor.
- Es kann immer nur eine Filmdatei zur Zeit geladen sein. Falls bereits eine Filmdatei geladen
- ist, wird diese entladen und nötigenfalls die Wiedergabe gestoppt.
-
- @param Filename der Dateiname der zu ladenden Filmdatei
- @param Z gibt die Z Position des Films auf dem Graphik-Hauptlayer an
- @return Gibt false zurück, wenn beim Laden ein Fehler aufgetreten ist, ansonsten true.
+ * Loads a movie file
+ *
+ * This method loads a movie file and prepares it for playback.
+ * There can be oly one movie file loaded at a time. If you already have loaded a
+ * movie file, it will be unloaded and, if necessary, stopped playing.
+ * @param Filename The filename of the movie file to be loaded
+ * @param Z Z indicates the position of the film on the main graphics layer
+ * @return Returns false if an error occured while loading, otherwise true.
*/
virtual bool LoadMovie(const std::string & Filename, unsigned int Z) = 0;
/**
- @brief Entlädt die gerade geladene Filmdatei
-
- @return Gibt false zurück, wenn beim Entladen ein Fehler aufgetreten ist, ansonsten true.
- @remark Diese Methode darf nur aufgerufen werden, wenn IsMovieLoaded() true zurückgibt.
- */
+ * Unloads the currently loaded movie file.
+ * @return Returns false if an error occurred while unloading, otherwise true.
+ * @remark This method can only be called when IsMovieLoaded() returns true.
+ */
virtual bool UnloadMovie() = 0;
/**
- @brief Spielt den Film ab.
-
- Der Film wird unter Beibehaltung der Seitenverhältnisse auf Bildschirmgröße skaliert.<br>
- Falls der Film mit einem Aufruf von Pause() pausiert wurde, fährt der Film an dieser Stelle fort.
-
- @return Gibt false zurück, wenn ein Fehler aufgetreten ist, ansonsten true.
- @remark Diese Methode darf nur aufgerufen werden, wenn IsMovieLoaded() true zurückgibt.
- */
+ * Plays the loaded movie.
+ *
+ * The film will be keeping the aspect ratio of the screen.
+ * If the film was previously paused with Pause(), then the film will resume playing.
+ * @return Returns false if an error occurred while starting, otherwise true.
+ * @remark This method can only be called when IsMovieLoaded() returns true.
+ */
virtual bool Play() = 0;
/**
- @brief Pausiert die Filmwiedergabe.
-
- Bei einem späteren Aufruf von Play() fährt die Wiedergabe an der Stelle fort an der der Film Pausiert wurde.
-
- @return Gibt false zurück, wenn ein Fehler aufgetreten ist, ansonsten true.
- @remark Diese Methode darf nur aufgerufen werden, wenn IsMovieLoaded() true zurückgibt.
- */
+ * Pauses movie playback.
+ *
+ * A paused movie can later be resumed by calling the Play() method again.
+ * @return Returns false if an error occurred while pausing, otherwise true.
+ * @remark This method can only be called when IsMovieLoaded() returns true.
+ */
virtual bool Pause() = 0;
/**
- @brief Diese Funktion muss ein mal pro Frame aufgerufen werden.
- */
+ * This function must be called once per frame.
+ */
virtual void Update() = 0;
/**
- @brief Gibt zurück, ob ein Film zur Wiedergabe geladen wurde.
- */
+ * Returns whether a film is loaded for playback.
+ */
virtual bool IsMovieLoaded() = 0;
/**
- @brief Gibt zurück, ob die Filmwiedergabe pausiert wurde.
- @remark Diese Methode darf nur aufgerufen werden, wenn IsMovieLoaded() true zurückgibt.
+ * Returns whether the movie playback is paused.
+ * @remark This method can only be called when IsMovieLoaded() returns true.
*/
virtual bool IsPaused() = 0;
/**
- @brief Gibt den Faktor zurück um den der geladene Film skaliert wird.
-
- Beim Laden wird der Skalierungsfaktor automatisch so gewählt, dass der Film die maximal mögliche Bildschirmfläche einnimmt, ohne dass der
- Film verzerrt wird.
-
- @return Gibt den Skalierungsfaktor des Filmes zurück.
- @remark Diese Methode darf nur aufgerufen werden, wenn IsMovieLoaded() true zurückgibt.
- */
+ * Returns the scaling factor for the loaded film.
+ *
+ * When a movie is loaded, the scaling factor is automatically selected so that the film
+ * takes the maximum screen space, without the film being distorted.
+ * @return Returns the scaling factor of the film.
+ * @remark This method can only be called when IsMovieLoaded() returns true.
+ */
virtual float GetScaleFactor() = 0;
/**
- @brief Legt den Faktor fest um den der geladene Film skaliert werden soll.
- @param ScaleFactor der gewünschte Skalierungsfaktor.
- @remark Diese Methode darf nur aufgerufen werden, wenn IsMovieLoaded() true zurückgibt.
- */
+ * Sets the factor by which the loaded film is to be scaled.
+ * @param ScaleFactor The desired scale factor.
+ * @remark This method can only be called when IsMovieLoaded() returns true.
+ */
virtual void SetScaleFactor(float ScaleFactor) = 0;
/**
- @brief Gibt die aktuelle Abspielposition in Sekunden zurück.
- @remark Diese Methode darf nur aufgerufen werden, wenn IsMovieLoaded() true zurückgibt.
- */
+ * Returns the current playing position in seconds.
+ * @remark This method can only be called when IsMovieLoaded() returns true.
+ */
virtual double GetTime() = 0;
private:
bool _RegisterScriptBindings();
};
+} // End of namespace Sword25
+
#endif
diff --git a/engines/sword25/gfx/framecounter.h b/engines/sword25/gfx/framecounter.h
index 650a2e9068..e91b3b0cda 100755
--- a/engines/sword25/gfx/framecounter.h
+++ b/engines/sword25/gfx/framecounter.h
@@ -1,21 +1,27 @@
-// -----------------------------------------------------------------------------
-// This file is part of Broken Sword 2.5
-// Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdörfer
-//
-// Broken Sword 2.5 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.
-//
-// Broken Sword 2.5 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 Broken Sword 2.5; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-// -----------------------------------------------------------------------------
+/* 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$
+ * $Id$
+ *
+ */
#ifndef SWORD25_FRAMECOUNTER_H
#define SWORD25_FRAMECOUNTER_H
@@ -24,39 +30,39 @@
#include "sword25/kernel/common.h"
#include "sword25/kernel/bs_stdint.h"
+namespace Sword25 {
+
/**
- @brief Eine einfache Klasse die einen Framecounter implementiert.
-*/
-class BS_Framecounter
-{
+ * A simple class that implements a frame counter
+ */
+class BS_Framecounter {
private:
- enum
- {
+ enum {
DEFAULT_UPDATE_FREQUENCY = 10
};
public:
/**
- @brief Erzeugt ein neues BS_Framecounter Objekt.
- @param UpdateFrequency gibt an wie oft der Framecounter in einer Sekunde aktualisiert werden soll.<br>
- Der Standardwert ist 10.
- */
+ * Creates a new BS_Framecounter object
+ * @param UpdateFrequency Specifies how often the frame counter should be updated in a sceond.
+ * The default value is 10.
+ */
BS_Framecounter(int UpdateFrequency = DEFAULT_UPDATE_FREQUENCY);
/**
- @brief Bestimmt wie oft der Framecounter in einer Sekunde aktualisiert werden soll.
- @param UpdateFrequency gibt an wie oft der Framecounter in einer Sekunde aktualisiert werden soll.
- */
+ * Determines how often the frame counter should be updated in a second.
+ * @param UpdateFrequency Specifies how often the frame counter should be updated in a second.
+ */
inline void SetUpdateFrequency(int UpdateFrequency);
/**
- @brief Diese Methode muss einmal pro Frame aufgerufen werden.
- */
+ * This method must be called once per frame.
+ */
void Update();
/**
- @brief Gibt den aktuellen FPS-Wert zurück.
- */
+ * Returns the current FPS value.
+ */
int GetFPS() const { return m_FPS; }
private:
@@ -67,10 +73,11 @@ private:
};
// Inlines
-void BS_Framecounter::SetUpdateFrequency(int UpdateFrequency)
-{
- // Frequenz in Laufzeit (in Microsekunden) umrechnen.
+void BS_Framecounter::SetUpdateFrequency(int UpdateFrequency) {
+ // Frequency in time (converted to microseconds)
m_UpdateDelay = 1000000 / UpdateFrequency;
}
+} // End of namespace Sword25
+
#endif
diff --git a/engines/sword25/gfx/graphicengine.h b/engines/sword25/gfx/graphicengine.h
index b6cd758a9e..836eacdba6 100755
--- a/engines/sword25/gfx/graphicengine.h
+++ b/engines/sword25/gfx/graphicengine.h
@@ -1,39 +1,37 @@
-// -----------------------------------------------------------------------------
-// This file is part of Broken Sword 2.5
-// Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdörfer
-//
-// Broken Sword 2.5 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.
-//
-// Broken Sword 2.5 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 Broken Sword 2.5; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-// -----------------------------------------------------------------------------
-
-/*
- BS_GraphicEngine
- ----------------
- Dies ist das Graphik-Engine Interface, dass alle Methoden und Klassen enthält, die eine
- Graphik-Engine implementieren muss.
-
- Autor: Malte Thiesen
-*/
+/* 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$
+ * $Id$
+ *
+ * BS_GraphicEngine
+ * ----------------
+ * This the graphics engine interface.
+ *
+ * Autor: Malte Thiesen
+ */
#ifndef SWORD25_GRAPHICENGINE_H
#define SWORD25_GRAPHICENGINE_H
// Includes
-#include "sword25/kernel/memlog_off.h"
-#include <vector>
-#include "sword25/kernel/memlog_on.h"
-
#include "sword25/kernel/common.h"
#include "sword25/kernel/bs_stdint.h"
#include "sword25/kernel/resservice.h"
@@ -42,6 +40,8 @@
#include "sword25/gfx/framecounter.h"
#include "sword25/gfx/renderobjectptr.h"
+namespace Sword25 {
+
class BS_Kernel;
class BS_Image;
class BS_Panel;
@@ -62,54 +62,55 @@ typedef unsigned int BS_COLOR;
Die bisher einzige Implementation ist BS_DDrawGfx.
*/
-class BS_GraphicEngine : public BS_ResourceService, public BS_Persistable
-{
+class BS_GraphicEngine : public BS_ResourceService, public BS_Persistable {
public:
// Enums
// -----
- // Farbformate
+ // Colour formats
+ //
/**
- @brief Die von der Engine benutzten Farbformate
- */
- enum COLOR_FORMATS
- {
- /// Undefiniertes/unbekanntes Farbformat
+ * The colour format used by the engine
+ */
+ enum COLOR_FORMATS {
+ /// Undefined/unknown colour format
CF_UNKNOWN = 0,
- /// 16 Bit Farbformat (5 Bit Rot, 5 Bit Grün, 5 Bit Blau)
+ /// 16-bit colour format (R5G5B5)
CF_RGB15,
- /// 16 Bit Farbformat (5 Bit Rot, 6 Bit Grün, 5 Bit Blau)
+ /// 16-bit colour format (R5G6R5)
CF_RGB16,
/**
- Spezielles Alpha-Farbformat der Engine, welches besonders schnelles Darstellen unter Benutzung von MMX-Befehlen unterstützt.<br>
- Die Pixel sind 16 Bit breit und haben das selbe Format wie #CF_RGB15. Zusätzlich besitzt jeder Pixel noch einen 8 Bit Alphawert.<br>
- Es werden jeweils 4 Pixel und 4 Alphawerte zu einem 12 Byte großen Datenblock zusammengefasst.<br>
- Dabei werden die Daten in folgender Reihenfolge abgelegt:
- Alpha0 Alpha1 Alpha2 Alpha3 Pixel0 Pixel1 Pixel2 Pixel3
- Falls die Pixelanzahl einer Zeile nicht durch 4 teilbar ist, wird der letzte Pixelblock trotzdem komplett abgespeichert, die
- nicht verwendeten Pixel- und Alphawerte können beliebige Werte haben.
- */
+ * Special alpha colour format of the engine, which supports very quick display using MMX instructions.
+ * The pixels are 16-bits wide and have the same format as #CF_RGB15. In addition, each pixel has an 8-bit
+ * alpha value.
+ * It summarises groupings of pixels pixels and four alpha values in a 12-byte data block.
+ * The data is stored in the following order:
+ * Alpha0 Alpha1 Alpha2 Alpha3 Pixel0 Pixel1 Pixel2 Pixel3
+ * If the number of pixels in a line is not divisible by 4, then unused pixels and alpha values can have
+ * arbitrary values.
+ */
CF_RGB15_INTERLEAVED,
/**
- Spezielles Alpha-Farbformat der Engine, welches besonders schnelles Darstellen unter Benutzung von MMX-Befehlen unterstützt.<br>
- Die Pixel sind 16 Bit breit und haben das selbe Format wie #CF_RGB16. Zusätzlich besitzt jeder Pixel noch einen 8 Bit Alphawert.<br>
- Es werden jeweils 4 Pixel und 4 Alphawerte zu einem 12 Byte großen Datenblock zusammengefasst.<br>
- Dabei werden die Daten in folgender Reihenfolge abgelegt:
- Alpha0 Alpha1 Alpha2 Alpha3 Pixel0 Pixel1 Pixel2 Pixel3
- Falls die Pixelanzahl einer Zeile nicht durch 4 teilbar ist, wird der letzte Pixelblock trotzdem komplett abgespeichert, die
- nicht verwendeten Pixel- und Alphawerte können beliebige Werte haben.
- */
+ * Special alpha colour format of the engine, which supports very quick display using MMX instructions.
+ * The pixels are 16-bits wide and have the same format as #CF_RGB16. In addition, each pixel has an 8-bit
+ * alpha value.
+ * It summarises groupings of pixels pixels and four alpha values in a 12-byte data block.
+ * The data is stored in the following order:
+ * Alpha0 Alpha1 Alpha2 Alpha3 Pixel0 Pixel1 Pixel2 Pixel3
+ * If the number of pixels in a line is not divisible by 4, then unused pixels and alpha values can have
+ * arbitrary values.
+ */
CF_RGB16_INTERLEAVED,
/**
- 24 Bit Farbformat (8 Bit Rot, 8 Bit Grün, 8 Bit Blau)
- */
+ * 24-bit colour format (R8G8B8)
+ */
CF_RGB24,
/**
- 32 Bit Farbformat (8 Bit Alpha, 8 Bit Rot, 8 Bit Grün, 8 Bit Blau) (little endian)
+ * 32-bit colour format (A8R8G8B8) (little endian)
*/
CF_ARGB32,
/**
- 32 Bit Farbformat (8 Bit Alpha, 8 Bit Blau, 8 Bit Grün, 8 Bit Rot) (little endian)
+ 32-bit colour format (A8B8G8R8) (little endian)
*/
CF_ABGR32
};
@@ -118,109 +119,84 @@ public:
// ---------
/**
- @brief Initialisiert die Graphikengine und setzt den Bildschirmmodus.
- @param Width die Breite des Ausgabepuffers in Pixeln.<br>Der Standardwert ist 800.
- @param Height die Höhe des Ausgabepuffers in Pixeln.<br>Der Standardwert ist 600.
- @param BitDepth die Bittiefe des gewünschten Ausgabepuffers in Bit.<br>Der Standardwert ist 16.
- @param BackbufferCount die Anzahl an Backbuffern die erzeugt werden soll.<br>Der Standardwert ist 2.
- @param Windowed gibt an, ob die Engine im Fenstermodus laufen soll. Falls true angegeben wird, wird ein Fenster geöffnet in das
- die Ausgaben gerendert werden. Ansonsten wird ein Vollbildmodus gesetzt der den Parametern das Ausgabepuffers
- entspricht.
- @return Gibt false zurück, falls die Initialisierung fehlgeschlagen ist.
- @remark Der Fenstermodus sollte nur zu Debuggingzwecken benutzt werden und ist nicht dafür gedacht im endgültigen Produkt benutzt
- zu werden.
- @remark Diese Methode sollte direkt nach der Initialisierung aller Services aufgerufen werden.
- */
+ * Initialises the graphics engine and sets the screen mode. Returns true if initialisation failed.
+ * Notes: This method should be called immediately after the initialisation of all services.
+ *
+ * @param Height The height of the output buffer in pixels. The default value is 600
+ * @param BitDepth The bit depth of the desired output buffer in bits. The default value is 16
+ * @param BackbufferCount The number of back buffers to be created. The default value is 2
+ * @param Windowed Indicates whether the engine is to run in windowed mode.
+ */
virtual bool Init(int Width = 800, int Height = 600, int BitDepth = 16, int BackbufferCount = 2, bool Windowed = false) = 0;
- //@{
- /** @name Frame-Methoden */
/**
- @brief Beginnt das Rendern eines neuen Frames.
- @param UpdateAll gibt an, ob der Renderer im nächsten Frame alles neu zeichnen soll.<br>
- Diese Funktion kann nützlich sein, wenn der Renderer mit Dirty-Rectangles arbeitet, der Benutzer aber gelegentlich
- darauf angewiesen ist, dass der gesamte Bildschirminhalt neu gezeichnet werden soll.<br>
- Der Standardwert ist false.
- Diese Methode muss am Anfang das Main-Loops aufgerufen werden und vor dem Aufruf jeglicher Rendermethoden.
- @return Gibt false zurück, falls ein Fehler aufgetreten ist.
- @remark Implementationen dieser Methode müssen _UpdateLastFrameDuration() aufrufen.
+ * Begins rendering a new frame.
+ * Notes: This method must be called at the beginning of the main loop, before any rendering methods are used.
+ * Notes: Implementations of this method must call _UpdateLastFrameDuration()
+ * @param UpdateAll Specifies whether the renderer should redraw everything on the next frame.
+ * This feature can be useful if the renderer with Dirty Rectangles works, but sometimes the client may
*/
virtual bool StartFrame(bool UpdateAll = false) = 0;
/**
- @brief Beendet das Rendern des Frames und stellt diesen auf dem Bildschirm dar.
-
- Diese Methode muss am Ende des Main-Loops aufgerufen werden. Nach dem Aufruf dürfen keine weiteren Rendermethoden mehr aufgerufen
- werden. Dafür muss erst wieder ein Aufruf von #StartFrame erfolgen.
- @return Gibt false zurück, falls ein Fehler aufgetreten ist:
+ * Ends the rendering of a frame and draws it on the screen.
+ *
+ * This method must be at the end of the main loop. After this call, no further Render method may be called.
+ * This should only be called once for a given previous call to #StartFrame.
*/
virtual bool EndFrame() = 0;
- //@}
-
- //@{
- /** @name Debug-Methoden */
+ // Debug methods
/**
- @brief Zeichnet eine Line in den Framebuffer.
-
- Diese Methode muss zwischen StartFrame() und EndFrame() aufgerufen werden und ist nur für Debugzwecke gedacht.
- Die Linie erscheint nur für einen Frame. Wenn die Linie dauerhaft zu sehen sein soll, muss sie jeden Frame neu
- gezeichnet werden.
-
- @param Start der Startpunkt der Linie
- @param End der Endpunkt der Linie
- @param Color die Farbe der Linie. Der Standardwert ist BS_RGB(255, 255, 255) (Weiß).
+ * Draws a line in the frame buffer
+ *
+ * This method must be called between calls to StartFrame() and EndFrame(), and is intended only for debugging
+ * purposes. The line will only appear for a single frame. If the line is to be shown permanently, it must be
+ * called for every frame.
+ * @param Start The starting point of the line
+ * @param End The ending point of the line
+ * @param Color The colour of the line. The default is BS_RGB (255,255,255) (White)
*/
- virtual void DrawDebugLine(const BS_Vertex & Start, const BS_Vertex & End, unsigned int Color = BS_RGB(255, 255, 255)) = 0;
+ virtual void DrawDebugLine(const BS_Vertex &Start, const BS_Vertex &End, unsigned int Color = BS_RGB(255, 255, 255)) = 0;
/**
- @brief Erstellt einen Screenshot.
-
- Erstellt einen Screenshot vom aktuellen Framebuffer und schreibt ihn in eine Grafikdatei.<br>
- Das verwendete Dateiformat ist PNG.
-
- @param Der Dateiname des Screenshots.
- @return Gibt true zurück, wenn der Screenshot gespeichert werden konnte, ansonsten false.
- @remark Diese Methode darf erst nach einem Aufruf von EndFrame() und vor dem nächsten Aufruf von StartFrame() aufgerufen werden.
- */
+ * Creates a screenshot of the current frame buffer and writes it to a graphic file in PNG format.
+ * Returns true if the screenshot was saved successfully.
+ * Notes: This method should only be called after a call to EndFrame(), and before the next call to StartFrame().
+ * @param Filename The filename for the screenshot
+ */
bool SaveScreenshot(const std::string & Filename);
/**
- @Brief Erstellt einen kleinen Screenshot.
-
- Erstellt einen Screenshot mit den Maßen 200x125. Hierfür werden am oberen und unteren Bildschirmrand die Interfaceleisten abgeschnitten und
- das Bild auf ein 16tel seiner Ursprungsgröße verkleinert.
-
- @param Der Dateiname des Screenshots.
- @return Gibt true zurück, wenn der Screenshot gespeichert werden konnte, ansonsten false.
- @remark Diese Methode darf erst nach einem Aufruf von EndFrame() und vor dem nächsten Aufruf von StartFrame() aufgerufen werden.
- @remark Der Framebuffer muss eine Auflösung von 800x600 haben.
- */
+ * Creates a thumbnail with the dimensions of 200x125. This will not include the top and bottom of the screen..
+ * the interface boards the the image as a 16th of it's original size.
+ * Notes: This method should only be called after a call to EndFrame(), and before the next call to StartFrame().
+ * The frame buffer must have a resolution of 800x600.
+ * @param Filename The filename for the screenshot
+ */
bool SaveThumbnailScreenshot(const std::string & Filename);
/**
- @brief Liest den aktuellen Inhalt des Framebuffer aus.
- @param Width enthält nach einem erfolgreichen Aufruf die Breite des Framebuffers.
- @param Height enthält nach einem erfolgreichen Aufruf die Höhe des Framebuffers.
- @param Data enthält nach einem erfolgreichen Aufruf den Inhalt des Framebuffers als 32-Bit Farbwerte.
- @return Gibt true zurück, wenn der Aufruf erfolgreich war, ansonsten false.
- @remark Diese Methode ist für das Erstellen von Screenshots gedacht. Sie muss also nicht sehr effizient sein.
- @remark Diese Methode darf erst nach einem Aufruf von EndFrame() und vor dem nächsten Aufruf von StartFrame() aufgerufen werden.
+ * Reads the current contents of the frame buffer
+ * Notes: This method is for creating screenshots. It is not very optimised. It should only be called
+ * after a call to EndFrame(), and before the next call to StartFrame().
+ * @param Width Returns the width of the frame buffer
+ * @param Height Returns the height of the frame buffer
+ * @param Data Returns the raw data of the frame buffer as an array of 32-bit colour values.
*/
virtual bool GetScreenshot(unsigned int & Width, unsigned int & Height, std::vector<unsigned int> & Data) = 0;
- //@}
virtual BS_RenderObjectPtr<BS_Panel> GetMainPanel() = 0;
/**
- @brief Gibt die Zeit (in Microsekunden) zurück die seit dem letzten Frame vergangen ist.
- */
+ * Specifies the time (in microseconds) since the last frame has passed
+ */
int GetLastFrameDurationMicro() { if (m_TimerActive) return m_LastFrameDuration; else return 0; }
/**
- @brief Gibt die Zeit (in Sekunden) zurück die seit dem letzten Frame vergangen ist.
+ * Specifies the time (in microseconds) the previous frame took
*/
float GetLastFrameDuration() { if (m_TimerActive) return static_cast<float>(m_LastFrameDuration) / 1000000.0f; else return 0; }
@@ -228,85 +204,71 @@ public:
void ResumeMainTimer() { m_TimerActive = true; }
float GetSecondaryFrameDuration() { return static_cast<float>(m_LastFrameDuration) / 1000000.0f; }
- //@{
- /** @name Accessor-Methoden */
+ // Accessor methods
/**
- @brief Gibt die Breite des Ausgabepuffers in Pixeln zurück.
- */
+ * Returns the width of the output buffer in pixels
+ */
int GetDisplayWidth() { return m_Width; }
/**
- @brief Gibt die Höhe des Ausgabepuffers in Pixeln zurück.
- */
+ * Returns the height of the output buffer in pixels
+ */
int GetDisplayHeight() { return m_Height; }
/**
- @brief Gibt die Bounding-Box des Ausgabepuffers zurück. (0, 0, Width, Height)
- */
+ * Returns the bounding box of the output buffer: (0, 0, Width, Height)
+ */
BS_Rect& GetDisplayRect() { return m_ScreenRect; }
/**
- @brief Gibt die Bittiefe des Ausgabepuffers zurück.
- */
+ * Returns the bit depth of the output buffer
+ */
int GetBitDepth() { return m_BitDepth; }
/**
- @brief Legt fest ob der Framebufferwechsel mit dem vertikalen Strahlenrücklauf synchronisiert werden soll.<br>
- Vsync ist standardmäßig eingeschaltet.
- @param Vsync gibt an, ob der Framebufferwechsel mit dem vertikalen Strahlenrücklauf synchronisiert werden soll.
- @remark Im Fenstermodus hat diese Einstellung keine Auswirkung.
- */
+ * Determines whether the frame buffer change is to be synchronised with Vsync. This is turned on by default.
+ * Notes: In windowed mode, this setting has no effect.
+ * @param Vsync Indicates whether the frame buffer changes are to be synchronised with Vsync.
+ */
virtual void SetVsync(bool Vsync) = 0;
/**
- @brief Gibt true zurück, wenn V-Sync an ist.
- @remark Im Fenstermodus hat diese Einstellung keine Auswirkung.
- */
+ * Returns true if V-Sync is on.
+ * Notes: In windowed mode, this setting has no effect.
+ */
virtual bool GetVsync() const = 0;
/**
- @brief Gibt true zurück, falls die Engine im Fenstermodus läuft.
- */
+ * Returns true if the engine is running in Windowed mode.
+ */
bool IsWindowed() { return m_Windowed; }
/**
- @brief Füllt einen Rechteckigen Bereich des Framebuffers mit einer Farbe.
- @param FillRectPtr Pointer auf ein BS_Rect, welches den Ausschnitt des Framebuffers spezifiziert, der gefüllt
- werden soll oder 0, falls das gesamte Bild gefüllt werden soll.<br>
- Der Standardwert ist 0.
- @param Color der 32 Bit Farbwert mit dem der Bildbereich gefüllt werden soll.<br>
- Der Standardwert ist BS_RGB(0, 0, 0) (Schwarz).
- @return Gibt true zurück, wenn der Aufruf erfolgreich war, ansonsten false.
- @remark Es ist möglich über die Methode transparente Rechtecke darzustellen, indem man eine Farbe mit einem
- Alphawert ungleich 255 angibt.
+ * Fills a rectangular area of the frame buffer with a colour.
+ * Notes: It is possible to create transparent rectangles by passing a colour with an Alpha value of 255.
+ * @param FillRectPtr Pointer to a BS_Rect, which specifies the section of the frame buffer to be filled.
+ * If the rectangle falls partly off-screen, then it is automatically trimmed.
+ * If a NULL value is passed, then the entire image is to be filled.
+ * @param Color The 32-bit colour with which the area is to be filled. The default is BS_RGB(0, 0, 0) (black)
@remark Falls das Rechteck nicht völlig innerhalb des Bildschirms ist, wird es automatisch zurechtgestutzt.
- */
+ */
virtual bool Fill(const BS_Rect * FillRectPtr = 0, unsigned int Color = BS_RGB(0, 0, 0)) = 0;
- //@}
-
- //@{
- /** @name Debugging-Methoden */
+ // Debugging Methods
int GetFPSCount() const { return m_FPSCounter.GetFPS(); }
int GetRepaintedPixels() const { return m_RepaintedPixels; }
- //@}
-
- //@{
- /** @name Auskunfts-Methoden */
+ // Access methods
/**
- @brief Gibt die Größe eines Pixeleintrages in Byte für ein bestimmtes Farbformat zurück
- @param ColorFormat das gewünschte Farbformat. Der Parameter muss vom Typ COLOR_FORMATS sein.
- @return Gibt die Größe eines Pixeleintrages in Byte des Farbsformates ColorFormat zurück.<br>
- Falls das Farbformat unbekannt ist, wird -1 zurückgegeben.
- */
- static int GetPixelSize(BS_GraphicEngine::COLOR_FORMATS ColorFormat)
- {
- switch (ColorFormat)
- {
+ * Returns the size of a pixel entry in bytes for a particular colour format
+ * @param ColorFormat The desired colour format. The parameter must be of type COLOR_FORMATS
+ * @return Returns the size of a pixel in bytes. If the colour format is unknown, -1 is returned.
+ */
+ static int GetPixelSize(BS_GraphicEngine::COLOR_FORMATS ColorFormat) {
+ switch (ColorFormat) {
case BS_GraphicEngine::CF_RGB16:
case BS_GraphicEngine::CF_RGB15:
return 2;
@@ -323,16 +285,14 @@ public:
}
/**
- @brief Berechnet die Länge einer Bildzeile eines Bilder in Byte, abhängig vom Farbformat.
- @param ColorFormat das Farbformat des Bildes.
- @param Width die Länge einer Bildzeile in Pixel.
- @return Gibt die Länge einer Bildzeile in Byte wieder.<br>
- Falls das Farbformat unbekannt ist, wird -1 zurückgegeben.
- */
- static int CalcPitch(BS_GraphicEngine::COLOR_FORMATS ColorFormat, int Width)
- {
- switch (ColorFormat)
- {
+ * Calculates the length of an image line in bytes, depending on a given colour format.
+ * @param ColorFormat The colour format
+ * @param Width The width of the line in pixels
+ * @return Reflects the length of the line in bytes. If the colour format is
+ * unknown, -1 is returned
+ */
+ static int CalcPitch(BS_GraphicEngine::COLOR_FORMATS ColorFormat, int Width) {
+ switch (ColorFormat){
case BS_GraphicEngine::CF_RGB16:
case BS_GraphicEngine::CF_RGB15:
return Width * 2;
@@ -352,22 +312,20 @@ public:
return -1;
}
- //@}
-
- // Persistenz Methoden
+ // Persistence Methods
// -------------------
- virtual bool Persist(BS_OutputPersistenceBlock & Writer);
- virtual bool Unpersist(BS_InputPersistenceBlock & Reader);
+ virtual bool Persist(BS_OutputPersistenceBlock &Writer);
+ virtual bool Unpersist(BS_InputPersistenceBlock &Reader);
- static void ARGBColorToLuaColor(lua_State * L, unsigned int Color);
- static unsigned int LuaColorToARGBColor(lua_State * L, int StackIndex);
+ static void ARGBColorToLuaColor(lua_State *L, unsigned int Color);
+ static unsigned int LuaColorToARGBColor(lua_State *L, int StackIndex);
protected:
- // Konstruktor
+ // Constructor
// -----------
BS_GraphicEngine(BS_Kernel* pKernel);
- // Display Variablen
+ // Display Variables
// -----------------
int m_Width;
int m_Height;
@@ -375,27 +333,29 @@ protected:
int m_BitDepth;
bool m_Windowed;
- // Debugging-Variablen
+ // Debugging Variables
// -------------------
BS_Framecounter m_FPSCounter;
unsigned int m_RepaintedPixels;
/**
- @brief Berechnet die Zeit die seit dem letzten Framebeginn vergangen ist.
- */
+ * Calculates the time since the last frame beginning has passed.
+ */
void UpdateLastFrameDuration();
private:
bool RegisterScriptBindings();
- // LastFrameDuration-Variablen
+ // LastFrameDuration Variables
// ---------------------------
- uint64_t m_LastTimeStamp;
+ uint64 m_LastTimeStamp;
unsigned int m_LastFrameDuration;
bool m_TimerActive;
- std::vector<unsigned int> m_FrameTimeSamples;
+ Common::Array<unsigned int> m_FrameTimeSamples;
unsigned int m_FrameTimeSampleSlot;
};
+} // End of namespace Sword25
+
#endif
diff --git a/engines/sword25/input/inputengine.h b/engines/sword25/input/inputengine.h
index c5a27fcdf9..58ab7a9359 100755
--- a/engines/sword25/input/inputengine.h
+++ b/engines/sword25/input/inputengine.h
@@ -1,30 +1,34 @@
-// -----------------------------------------------------------------------------
-// This file is part of Broken Sword 2.5
-// Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdörfer
-//
-// Broken Sword 2.5 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.
-//
-// Broken Sword 2.5 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 Broken Sword 2.5; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-// -----------------------------------------------------------------------------
-
-/**
- BS_InputEngine
- -------------
- Dies ist das Inputengine Interface, dass alle Methoden enthält, die eine Inputengine implementieren muss.
- Implementationen der Inputengine müssen von dieser Klasse abgeleitet werden.
-
- Autor: Alex Arnst
-**/
+/* 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$
+ * $Id$
+ *
+ * BS_InputEngine
+ * -------------
+ * This is the input interface engine that contains all the methods that an
+ * input source must implement.
+ * All input engines must be derived from this class.
+ *
+ * Autor: Alex Arnst
+ */
#ifndef SWORD25_INPUTENGINE_H
#define SWORD25_INPUTENGINE_H
@@ -34,17 +38,18 @@
#include "sword25/kernel/service.h"
#include "sword25/kernel/persistable.h"
-/// Klassendefinition
-class BS_InputEngine : public BS_Service, public BS_Persistable
-{
+namespace Sword25 {
+
+/// Class definitions
+
+class BS_InputEngine : public BS_Service, public BS_Persistable {
public:
BS_InputEngine(BS_Kernel* pKernel);
virtual ~BS_InputEngine(){};
- // ACHTUNG: Diese Codes werden in inputengine_script.cpp beim Skript-Service registriert. Bei Änderungen an diesem Enum muss auch diese
- // Datei angepasst werden.
- enum KEY_CODES
- {
+ // NOTE: These codes are registered in inputengine_script.cpp
+ // Any changes to these enums must also adjust the above file.
+ enum KEY_CODES {
KEY_BACKSPACE = 0x08,
KEY_TAB = 0x09,
KEY_CLEAR = 0x0C,
@@ -136,10 +141,9 @@ public:
KEY_RCONTROL = 0xA3
};
- // ACHTUNG: Diese Codes werden in inputengine_script.cpp beim Skript-Service registriert. Bei Änderungen an diesem Enum muss auch diese
- // Datei angepasst werden.
- enum KEY_COMMANDS
- {
+ // NOTE: These codes are registered in inputengine_script.cpp.
+ // Any changes to these enums must also adjust the above file.
+ enum KEY_COMMANDS {
KEY_COMMAND_ENTER = 1,
KEY_COMMAND_LEFT = 2,
KEY_COMMAND_RIGHT = 3,
@@ -152,133 +156,131 @@ public:
};
/// --------------------------------------------------------------
- /// DIESE METHODEN MÜSSEN VON DER INPUTENGINE IMPLEMENTIERT WERDEN
+ /// THESE METHODS MUST BE IMPLEMENTED BY THE INPUT ENGINE
/// --------------------------------------------------------------
/**
- @brief Initialisiert die Inputengine
- @return Gibt bei Erfolg true zurück, ansonsten false.
- */
+ * Initialises the input engine
+ * @return Returns a true on success, otherwise false.
+ */
virtual bool Init() = 0;
/**
- @brief Führt einen "Tick" der Input-Engine aus
-
- Diese Methode sollte mindestens ein mal pro Frame aufgerufen werden. Sie dient dazu Implementationen der
- Input-Engine zu ermöglichen, die nicht in einem eigenen Thread laufen oder zusätzliche Verwaltungsaufgaben
- durchführen müssen.
- */
+ * Performs a "tick" of the input engine.
+ *
+ * This method should be called once per frame. It can be used by implementations
+ * of the input engine that are not running in their own thread, or to perform
+ * additional administrative tasks that are needed.
+ */
virtual void Update() = 0;
/**
- @brief Gibt true zurück, wenn die linke Maustaste gedrückt ist.
- */
+ * Returns true if the left mouse button is pressed
+ */
virtual bool IsLeftMouseDown() = 0;
/**
- @brief Gibt true zurück, wenn die rechte Maustaste gedrückt ist.
+ * Returns true if the right mouse button is pressed.
*/
virtual bool IsRightMouseDown() = 0;
/**
- @brief Gibt true zurück, wenn die linke Maustaste gedrückt und losgelassen wurde.
-
- Der Unterschied zu IsLeftMouseDown() besteht darin, dass erst true zurückgegegen wird, wenn der Tastendruck beendet ist, die Taste also
- wieder losgelassen wurde.
+ * Returns true if the left mouse button was pressed and released.
+ *
+ * The difference between this and IsLeftMouseDown() is that this only returns
+ * true when the left mouse button is released.
*/
virtual bool WasLeftMouseDown() = 0;
/**
- @brief Gibt true zurück, wenn die linke Maustaste gedrückt und losgelassen wurde.
-
- Der Unterschied zu IsRightMouseDown() besteht darin, dass erst true zurückgegegen wird, wenn der Tastendruck beendet ist, die Taste also
- wieder losgelassen wurde.
+ * Returns true if the right mouse button was pressed and released.
+ *
+ * The difference between this and IsRightMouseDown() is that this only returns
+ * true when the right mouse button is released.
*/
virtual bool WasRightMouseDown() = 0;
/**
- @brief Gibt true zurück wenn mit der linken Maustaste ein Doppelklick ausgelöst wurde.
- */
+ * Returns true if the left mouse button double click was done
+ */
virtual bool IsLeftDoubleClick() = 0;
/**
- @brief Gibt die Position des Mauszeigers auf der X-Achse in Pixeln zurück.
+ * Returns the X position of the cursor in pixels
*/
virtual int GetMouseX() = 0;
/**
- @brief Gibt die Position des Mauszeigers auf der Y-Achse in Pixeln zurück.
- */
+ * Returns the Y position of the cursor in pixels
+ */
virtual int GetMouseY() = 0;
/**
- @brief Setzt die Position des Mauszeigers auf der X-Achse in Pixeln.
- */
+ * Sets the X position of the cursor in pixels
+ */
virtual void SetMouseX(int PosX) = 0;
/**
- @brief Setzt die Position des Mauszeigers auf der Y-Achse in Pixeln.
- */
+ * Sets the Y position of the cursor in pixels
+ */
virtual void SetMouseY(int PosY) = 0;
/**
- @brief Gibt true zurück wenn eine bestimmte Taste gedrückt ist.
- @param KeyCode der Key-Code der zu testenden Taste
- @return Gibt true zurück, wenn die Taste mit dem übergebenen Key-Code gedrückt ist, ansonsten false.
- */
+ * Returns true if a given key was pressed
+ * @param KeyCode The key code to be checked
+ * @return Returns true if the given key is done, otherwise false.
+ */
virtual bool IsKeyDown(unsigned int KeyCode) = 0;
/**
- @brief Gibt true zurück wenn eine bestimmte Taste gerückt und losgelassen wurde.
-
- Der Unterschied zu IsKeyDown() besteht darin, dass erst true zurückgegegen wird, wenn der Tastendruck beendet ist, die Taste also
- wieder losgelassen wurde. Diese Methode erleichtert das Abfragen von Funktionstasten und das Einlesen von Zeichenketten, die vom
- Benutzer getippt werden.
-
- @param KeyCode der Key-Code der zu testenden Taste
- */
+ * Returns true if a certain key was pushed and released.
+ *
+ * The difference between IsKeyDown() is that this only returns true after the key
+ * has been released. This method facilitates the retrieval of keys, and reading
+ * strings that users type.
+ * @param KeyCode The key code to be checked
+ */
virtual bool WasKeyDown(unsigned int KeyCode) = 0;
typedef void (*CharacterCallback)(unsigned char Character);
/**
- @brief Registriert eine Callbackfunktion für die Eingabe von Buchstaben.
-
- Die Callbacks, die mit dieser Funktion registriert werden, werden immer dann aufgerufen, wenn der Input-Service eine Buchstabeneingabe
- feststellt. Eine Buchstabeneingabe unterscheidet sich von der Abfrage mittels der Methoden IsKeyDown() und WasKeyDown() in der Hinsicht,
- dass statt Scan-Coded tatsächliche Buchstaben behandelt werden. Dabei wurden unter anderem Berücksichtigt:des Tastaturlayout, der Zustand
- der Shift und Caps Lock Tasten und die Wiederholung durch längeres Halten der Taste.<br>
- Die Eingabe von Zeichenketten durch den Benutzer sollte durch Benutzung dieses Callbacks realisiert werden.
-
- @return Gibt true zurück, wenn die Funktion registriert werden konnte, ansonsten false.
+ * Registers a callback function for keyboard input.
+ *
+ * The callbacks that are registered with this function will be called whenever an
+ * input key is pressed. A letter entry is different from the query using the
+ * methods IsKeyDown () and WasKeyDown () in the sense that are treated instead
+ * of actual scan-coded letters. These were taken into account, among other things:
+ * the keyboard layout, the condition the Shift and Caps Lock keys and the repetition
+ * of longer holding the key.
+ * The input of strings by the user through use of callbacks should be implemented.
+ * @return Returns true if the function was registered, otherwise false.
*/
virtual bool RegisterCharacterCallback(CharacterCallback Callback) = 0;
/**
- @brief Deregistriert eine Callbackfunktion für die Eingabe von Buchstaben.
-
- @return Gibt true zurück, wenn die Funktion deregistriert werden konnte, ansonsten false.
- */
+ * De-registeres a previously registered callback function.
+ * @return Returns true if the function could be de-registered, otherwise false.
+ */
virtual bool UnregisterCharacterCallback(CharacterCallback Callback) = 0;
typedef void (*CommandCallback)(KEY_COMMANDS Command);
/**
- @brief Registriert eine Callbackfunktion für die Eingabe von Kommandos, die auf die Zeichenketteneingabe Einfluss haben können.
-
- Die Callbacks, die mit dieser Funktion registriert werden , werden immer dann aufgerufen, wenn der Input-Service einen Tastendruck
- feststellt, der die Zeichenketteneingabe beeinflussen kann. Dies könnten folgende Tasten sein: Enter, Pos 1, Ende, Links, Rechts, ...<br>
- Die Eingabe von Zeichenketten durch den Benutzer sollte durch Benutzung dieses Callbacks realisiert werden.
-
- @return Gibt true zurück, wenn die Funktion registriert werden konnte, ansonsten false.
- */
+ * Registers a callback function for the input of commands that can have influence on the string input
+ *
+ * The callbacks that are registered with this function will be called whenever the input service
+ * has a key that affects the character string input. This could be the following keys:
+ * Enter, End, Left, Right, ...
+ * The input of strings by the user through the use of callbacks should be implemented.
+ * @return Returns true if the function was registered, otherwise false.
+ */
virtual bool RegisterCommandCallback(CommandCallback Callback) = 0;
/**
- @brief Deregistriert eine Callbackfunktion für die Eingabe von Kommandos, die auf die Zeichenketteneingabe Einfluss haben können.
-
- @return Gibt true zurück, wenn die Funktion deregistriert werden konnte, ansonsten false.
- */
+ * Un-register a callback function for the input of commands that can have an influence on the string input.
+ * @return Returns true if the function could be de-registered, otherwise false.
+ */
virtual bool UnregisterCommandCallback(CommandCallback Callback) = 0;
virtual void ReportCharacter(unsigned char Character) = 0;
@@ -288,4 +290,6 @@ private:
bool _RegisterScriptBindings();
};
+} // End of namespace Sword25
+
#endif
diff --git a/engines/sword25/kernel/bs_stdint.h b/engines/sword25/kernel/bs_stdint.h
index aded9f0e04..7bdcf4c949 100755
--- a/engines/sword25/kernel/bs_stdint.h
+++ b/engines/sword25/kernel/bs_stdint.h
@@ -1,17 +1,20 @@
+// TODO: Properly replace all game occurances that use these types with proper ScummVM types, and remove this file
+
#ifndef SWORD25_STDINT_H
#define SWORD25_STDINT_H
-#ifdef _MSC_VER
- typedef unsigned __int8 uint8_t;
- typedef unsigned __int16 uint16_t;
- typedef unsigned __int32 uint32_t;
- typedef unsigned __int64 uint64_t;
- typedef signed __int8 int8_t;
- typedef signed __int16 int16_t;
- typedef signed __int32 int32_t;
- typedef signed __int64 int64_t;
-#else
- #include <stdint.h>
-#endif
+#include "common/scummsys.h"
+
+typedef uint8 uint8_t;
+typedef uint16 uint16_t;
+typedef uint32 uint32_t;
+typedef int8 int8_t;
+typedef int16 int16_t;
+typedef int32 int32_t;
+
+typedef unsigned long long uint64_t;
+typedef signed long long int64_t;
+typedef unsigned long long uint64;
+typedef signed long long int64;
#endif
diff --git a/engines/sword25/kernel/common.h b/engines/sword25/kernel/common.h
index 8f212524fe..dab3810939 100755
--- a/engines/sword25/kernel/common.h
+++ b/engines/sword25/kernel/common.h
@@ -1,41 +1,44 @@
-// -----------------------------------------------------------------------------
-// This file is part of Broken Sword 2.5
-// Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdörfer
-//
-// Broken Sword 2.5 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.
-//
-// Broken Sword 2.5 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 Broken Sword 2.5; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-// -----------------------------------------------------------------------------
-
-/*
- common.h
- -----------
- Diese Datei enthält Funktionen und Makros, die im gesamten Projekt bekannt sein müssen.
- Daher ist es äußerst wichtig, dass diese Headerdatei in jede andere Headerdatei des Projektes
- eingefügt wird.
-
- Autor: Malte Thiesen
-*/
+/* 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$
+ * $Id$
+ *
+ * common.h
+ * -----------
+ * This file contains functions or macros that are used across the entire project.
+ * It is therefore extremely important that this header file be referenced in all
+ * the other header files in the project.
+ *
+ * Autor: Malte Thiesen
+ */
#ifndef SWORD25_COMMON_H
#define SWORD25_COMMON_H
-// Globale Konstanten
+// Global constants
#if _DEBUG && !DEBUG
#define DEBUG
#endif
-#define BS_ACTIVATE_LOGGING // Wenn definiert, wird Logging aktiviert
+#define BS_ACTIVATE_LOGGING // When defined, logging is activated
// Engine Includes
#include "sword25/kernel/memleaks.h"
diff --git a/engines/sword25/kernel/kernel.cpp b/engines/sword25/kernel/kernel.cpp
index 9a0580324f..a12f206a99 100755
--- a/engines/sword25/kernel/kernel.cpp
+++ b/engines/sword25/kernel/kernel.cpp
@@ -1,112 +1,89 @@
-// -----------------------------------------------------------------------------
-// This file is part of Broken Sword 2.5
-// Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdörfer
-//
-// Broken Sword 2.5 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.
-//
-// Broken Sword 2.5 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 Broken Sword 2.5; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-// -----------------------------------------------------------------------------
-
-#define WIN32_LEAN_AND_MEAN
-#define NOMINMAX
-#include <windows.h>
-#include <psapi.h>
-#pragma comment(lib, "psapi.lib")
-
-#include <math.h>
-#include <algorithm>
-
-#include "sword25/kernel/kernel.h"
-#include "sword25/kernel/timer.h"
-#include "sword25/kernel/service_ids.h"
-
+/* 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$
+ * $Id$
+ *
+ */
+
+#include "common/system.h"
#include "sword25/gfx/graphicengine.h"
-#include "sword25/sfx/soundengine.h"
+#include "sword25/fmv/movieplayer.h"
#include "sword25/input/inputengine.h"
+#include "sword25/kernel/kernel.h"
+#include "sword25/kernel/persistenceservice.h"
+#include "sword25/kernel/service_ids.h"
#include "sword25/package/packagemanager.h"
#include "sword25/script/script.h"
-#include "sword25/fmv/movieplayer.h"
-#include "sword25/kernel/persistenceservice.h"
+#include "sword25/sfx/soundengine.h"
+
+namespace Sword25 {
#define BS_LOG_PREFIX "KERNEL"
-BS_Kernel * BS_Kernel::_Instance = 0;
+BS_Kernel *BS_Kernel::_Instance = 0;
-// Konstruktion / Destruktion
-// --------------------------
BS_Kernel::BS_Kernel() :
_pWindow(NULL),
_Running(false),
_pResourceManager(NULL),
- _InitSuccess(false)
-{
- // TODO:
- // Messagebox ausgeben wenn nicht gelogged werden kann -> log.txt schreibgeschützt
+ _InitSuccess(false) {
+
+ // Log that the kernel is beign created
BS_LOGLN("created.");
- // Feststellen, ob der Timer unterstützt wird.
- if (!BS_Timer::IsTimerAvaliable())
- {
- BS_LOG_ERRORLN("This machine doesn't support a performance counter.");
- return;
- }
-
- // Die BS_SERVICE_TABLE auslesen und kernelinterne Strukturen vorbereiten
- for (unsigned int i = 0; i < BS_SERVICE_COUNT; i++)
- {
- // Ist die Superclass schon registriert?
- Superclass* pCurSuperclass = NULL;
- std::vector<Superclass*>::iterator Iter;
+ // Read the BS_SERVICE_TABLE and prepare kernel structures
+ for (uint i = 0; i < BS_SERVICE_COUNT; i++) {
+ // Is the superclass already registered?
+ Superclass *pCurSuperclass = NULL;
+ Common::Array<Superclass *>::iterator Iter;
for (Iter = _SuperclassList.begin(); Iter != _SuperclassList.end(); ++Iter)
- if ((*Iter)->GetIdentifier() == BS_SERVICE_TABLE[i].SuperclassIdentifier)
- {
+ if ((*Iter)->GetIdentifier() == BS_SERVICE_TABLE[i].SuperclassIdentifier) {
pCurSuperclass = *Iter;
break;
}
- // Falls die Superclass noch nicht registriert war, wird dies jetzt gemacht
+ // If the superclass isn't already registered, then add it in
if (!pCurSuperclass)
_SuperclassList.push_back(new Superclass(this, BS_SERVICE_TABLE[i].SuperclassIdentifier));
}
- // Fensterobjekt erstellen
- _pWindow = BS_Window::CreateBSWindow(0,0,0,0,false);
- if (!_pWindow)
- {
+ // Create window object
+ _pWindow = BS_Window::CreateBSWindow(0, 0, 0, 0, false);
+ if (!_pWindow) {
BS_LOG_ERRORLN("Failed to create the window.");
- }
- else
+ } else
BS_LOGLN("Window created.");
- // Resource-Manager erstellen
+ // Create the resource manager
_pResourceManager = new BS_ResourceManager(this);
- // Random-Number-Generator initialisieren
- srand(GetMilliTicks());
-
- // Die Skriptengine initialisieren
- // Die Skriptengine muss bereits von Kernel und nicht vom Benutzer gestartet werden, damit der Kernel seine Funktionen bei seiner Erzeugung
- // registrieren kann.
- BS_ScriptEngine * pScript = static_cast<BS_ScriptEngine *>(NewService("script", "lua"));
- if (!pScript || !pScript->Init())
- {
+ // Initialise the script engine
+ BS_ScriptEngine *pScript = static_cast<BS_ScriptEngine *>(NewService("script", "lua"));
+ if (!pScript || !pScript->Init()) {
_InitSuccess = false;
return;
}
- // Scriptbindings des Kernels registrieren
- if (!_RegisterScriptBindings())
- {
+ // Register kernel script bindings
+ if (!_RegisterScriptBindings()) {
BS_LOG_ERRORLN("Script bindings could not be registered.");
_InitSuccess = false;
return;
@@ -116,24 +93,21 @@ BS_Kernel::BS_Kernel() :
_InitSuccess = true;
}
-BS_Kernel::~BS_Kernel()
-{
- // Services in umgekehrter Reihenfolge der Erstellung endladen.
- while (!_ServiceCreationOrder.empty())
- {
- Superclass * superclass = GetSuperclassByIdentifier(_ServiceCreationOrder.top());
+BS_Kernel::~BS_Kernel() {
+ // Services are de-registered in reverse order of creation
+ while (!_ServiceCreationOrder.empty()) {
+ Superclass *superclass = GetSuperclassByIdentifier(_ServiceCreationOrder.top());
if (superclass) superclass->DisconnectService();
_ServiceCreationOrder.pop();
}
- // Superclasslist leeren
- while (_SuperclassList.size())
- {
+ // Empty the Superclass list
+ while (_SuperclassList.size()) {
delete _SuperclassList.back();
_SuperclassList.pop_back();
}
- // Fensterobjekt freigeben
+ // Release the window object
delete _pWindow;
BS_LOGLN("Window destroyed.");
@@ -145,7 +119,8 @@ BS_Kernel::~BS_Kernel()
// Service Methoden
// ----------------
-BS_Kernel::Superclass::Superclass (BS_Kernel* pKernel, const std::string& Identifier) :
+
+BS_Kernel::Superclass::Superclass (BS_Kernel* pKernel, const Common::String& Identifier) :
_pKernel(pKernel),
_Identifier(Identifier),
_ServiceCount(0),
@@ -156,18 +131,24 @@ BS_Kernel::Superclass::Superclass (BS_Kernel* pKernel, const std::string& Identi
_ServiceCount++;
}
-BS_Kernel::Superclass::~Superclass()
-{
+BS_Kernel::Superclass::~Superclass() {
DisconnectService();
}
-std::string BS_Kernel::Superclass::GetServiceIdentifier(unsigned int Number)
-{
+/**
+ * Gets the identifier of a service with a given superclass.
+ * The number of services in a superclass can be learned with GetServiceCount().
+ * @param SuperclassIdentifier The name of the superclass
+ * z.B: "sfx", "gfx", "package" ...
+ * @param Number die Nummer des Services, dessen Bezeichner man erfahren will.<br>
+ * Hierbei ist zu beachten, dass der erste Service die Nummer 0 erhält. Number muss also eine Zahl zwischen
+ * 0 und GetServiceCount() - 1 sein.
+ */
+Common::String BS_Kernel::Superclass::GetServiceIdentifier(unsigned int Number) {
if (Number > _ServiceCount) return NULL;
unsigned int CurServiceOrd = 0;
- for (unsigned int i = 0; i < BS_SERVICE_COUNT; i++)
- {
+ for (unsigned int i = 0; i < BS_SERVICE_COUNT; i++) {
if (BS_SERVICE_TABLE[i].SuperclassIdentifier == _Identifier)
if (Number == CurServiceOrd)
return BS_SERVICE_TABLE[i].ServiceIdentifier;
@@ -175,11 +156,19 @@ std::string BS_Kernel::Superclass::GetServiceIdentifier(unsigned int Number)
CurServiceOrd++;
}
- return std::string("");
+ return Common::String("");
}
-BS_Service* BS_Kernel::Superclass::NewService(const std::string& ServiceIdentifier)
-{
+/**
+ * Creates a new service with the given identifier. Returns a pointer to the service, or null if the
+ * service could not be created
+ * Note: All services must be registered in service_ids.h, otherwise they cannot be created here
+ * @param SuperclassIdentifier The name of the superclass of the service
+ * z.B: "sfx", "gfx", "package" ...
+ * @param ServiceIdentifier The name of the service
+ * For the superclass "sfx" an example could be "Fmod" or "directsound"
+ */
+BS_Service *BS_Kernel::Superclass::NewService(const Common::String &ServiceIdentifier) {
for (unsigned int i = 0; i < BS_SERVICE_COUNT; i++)
if (BS_SERVICE_TABLE[i].SuperclassIdentifier == _Identifier &&
BS_SERVICE_TABLE[i].ServiceIdentifier == ServiceIdentifier)
@@ -205,10 +194,14 @@ BS_Service* BS_Kernel::Superclass::NewService(const std::string& ServiceIdentifi
return NULL;
}
-bool BS_Kernel::Superclass::DisconnectService()
-{
- if (_ActiveService)
- {
+/**
+ * Ends the current service of a superclass. Returns true on success, and false if the superclass
+ * does not exist or if not service was active
+ * @param SuperclassIdentfier The name of the superclass which is to be disconnected
+ * z.B: "sfx", "gfx", "package" ...
+ */
+bool BS_Kernel::Superclass::DisconnectService() {
+ if (_ActiveService) {
delete _ActiveService;
_ActiveService = 0;
BS_LOGLN("Active service '%s' disconnected from superclass '%s'.", _ActiveServiceName.c_str(), _Identifier.c_str());
@@ -218,11 +211,9 @@ bool BS_Kernel::Superclass::DisconnectService()
return false;
}
-BS_Kernel::Superclass* BS_Kernel::GetSuperclassByIdentifier(const std::string & Identifier)
-{
- std::vector<Superclass*>::iterator Iter;
- for (Iter = _SuperclassList.begin(); Iter != _SuperclassList.end(); ++Iter)
- {
+BS_Kernel::Superclass *BS_Kernel::GetSuperclassByIdentifier(const Common::String &Identifier) {
+ Common::Array<Superclass*>::iterator Iter;
+ for (Iter = _SuperclassList.begin(); Iter != _SuperclassList.end(); ++Iter) {
if ((*Iter)->GetIdentifier() == Identifier)
return *Iter;
}
@@ -231,48 +222,75 @@ BS_Kernel::Superclass* BS_Kernel::GetSuperclassByIdentifier(const std::string &
return NULL;
}
-unsigned int BS_Kernel::GetSuperclassCount()
-{
+/**
+ * Returns the number of register superclasses
+ */
+unsigned int BS_Kernel::GetSuperclassCount() {
return _SuperclassList.size();
}
-std::string BS_Kernel::GetSuperclassIdentifier(unsigned int Number)
-{
+/**
+ * Returns the name of a superclass with the specified index.
+ * Note: The number of superclasses can be retrieved using GetSuperclassCount
+ * @param Number The number of the superclass to return the identifier for.
+ * It should be noted that the number should be between 0 und GetSuperclassCount() - 1.
+ */
+Common::String BS_Kernel::GetSuperclassIdentifier(unsigned int Number) {
if (Number > _SuperclassList.size()) return NULL;
unsigned int CurSuperclassOrd = 0;
- std::vector<Superclass*>::iterator Iter;
- for (Iter = _SuperclassList.begin(); Iter != _SuperclassList.end(); ++Iter)
- {
+ Common::Array<Superclass*>::iterator Iter;
+ for (Iter = _SuperclassList.begin(); Iter != _SuperclassList.end(); ++Iter) {
if (CurSuperclassOrd == Number)
return ((*Iter)->GetIdentifier());
CurSuperclassOrd++;
}
- return std::string("");
+ return Common::String("");
}
-unsigned int BS_Kernel::GetServiceCount(const std::string & SuperclassIdentifier)
-{
- Superclass* pSuperclass;
- if (!(pSuperclass = GetSuperclassByIdentifier(SuperclassIdentifier))) return 0;
+/**
+ * Returns the number of services registered with a given superclass
+ * @param SuperclassIdentifier The name of the superclass
+ * z.B: "sfx", "gfx", "package" ...
+ */
+unsigned int BS_Kernel::GetServiceCount(const Common::String & SuperclassIdentifier) {
+ Superclass *pSuperclass;
+ if (!(pSuperclass = GetSuperclassByIdentifier(SuperclassIdentifier)))
+ return 0;
return pSuperclass->GetServiceCount();
}
-std::string BS_Kernel::GetServiceIdentifier(const std::string & SuperclassIdentifier, unsigned int Number)
-{
+/**
+ * Gets the identifier of a service with a given superclass.
+ * The number of services in a superclass can be learned with GetServiceCount().
+ * @param SuperclassIdentifier The name of the superclass
+ * z.B: "sfx", "gfx", "package" ...
+ * @param Number die Nummer des Services, dessen Bezeichner man erfahren will.<br>
+ * Hierbei ist zu beachten, dass der erste Service die Nummer 0 erhält. Number muss also eine Zahl zwischen
+ * 0 und GetServiceCount() - 1 sein.
+ */
+Common::String BS_Kernel::GetServiceIdentifier(const Common::String & SuperclassIdentifier, unsigned int Number) {
Superclass* pSuperclass;
if (!(pSuperclass = GetSuperclassByIdentifier(SuperclassIdentifier))) return NULL;
return (pSuperclass->GetServiceIdentifier(Number));
}
-BS_Service* BS_Kernel::NewService(const std::string& SuperclassIdentifier, const std::string& ServiceIdentifier)
-{
- Superclass* pSuperclass;
+/**
+ * Creates a new service with the given identifier. Returns a pointer to the service, or null if the
+ * service could not be created
+ * Note: All services must be registered in service_ids.h, otherwise they cannot be created here
+ * @param SuperclassIdentifier The name of the superclass of the service
+ * z.B: "sfx", "gfx", "package" ...
+ * @param ServiceIdentifier The name of the service
+ * For the superclass "sfx" an example could be "Fmod" or "directsound"
+ */
+BS_Service *BS_Kernel::NewService(const Common::String& SuperclassIdentifier, const Common::String& ServiceIdentifier) {
+ Superclass *pSuperclass;
if (!(pSuperclass = GetSuperclassByIdentifier(SuperclassIdentifier))) return NULL;
// Die Reihenfolge merken, in der Services erstellt werden, damit sie später in umgekehrter Reihenfolge entladen werden können.
@@ -281,56 +299,82 @@ BS_Service* BS_Kernel::NewService(const std::string& SuperclassIdentifier, const
return pSuperclass->NewService(ServiceIdentifier);
}
-bool BS_Kernel::DisconnectService(const std::string& SuperclassIdentifier)
-{
- Superclass* pSuperclass;
+/**
+ * Ends the current service of a superclass. Returns true on success, and false if the superclass
+ * does not exist or if not service was active
+ * @param SuperclassIdentfier The name of the superclass which is to be disconnected
+ * z.B: "sfx", "gfx", "package" ...
+ */
+bool BS_Kernel::DisconnectService(const Common::String& SuperclassIdentifier) {
+ Superclass *pSuperclass;
if (!(pSuperclass = GetSuperclassByIdentifier(SuperclassIdentifier))) return false;
return pSuperclass->DisconnectService();
}
-BS_Service* BS_Kernel::GetService(const std::string& SuperclassIdentifier)
-{
- Superclass* pSuperclass;
+/**
+ * Returns a pointer to the currently active service object of a superclass
+ * @param SuperclassIdentfier The name of the superclass
+ * z.B: "sfx", "gfx", "package" ...
+ */
+BS_Service *BS_Kernel::GetService(const Common::String& SuperclassIdentifier) {
+ Superclass *pSuperclass;
if (!(pSuperclass = GetSuperclassByIdentifier(SuperclassIdentifier))) return NULL;
return (pSuperclass->GetActiveService());
}
-std::string BS_Kernel::GetActiveServiceIdentifier(const std::string& SuperclassIdentifier)
-{
+/**
+ * Returns the name of the currentl active service object of a superclass.
+ * If an error occurs, then an empty string is returned
+ * @param SuperclassIdentfier The name of the superclass
+ * z.B: "sfx", "gfx", "package" ...
+ */
+Common::String BS_Kernel::GetActiveServiceIdentifier(const Common::String& SuperclassIdentifier) {
Superclass * pSuperclass = GetSuperclassByIdentifier(SuperclassIdentifier);
- if (!pSuperclass) return std::string("");
+ if (!pSuperclass) return Common::String("");
return (pSuperclass->GetActiveServiceName());
}
// -----------------------------------------------------------------------------
-int BS_Kernel::GetRandomNumber(int Min, int Max)
-{
+/**
+ * Returns a random number
+ * @param Min The minimum allowed value
+ * @param Max The maximum allowed value
+ */
+int BS_Kernel::GetRandomNumber(int Min, int Max) {
BS_ASSERT(Min <= Max);
- unsigned int MaxInternal = (Min - Max + 1) < 0 ? - (Min - Max + 1) : (Min - Max + 1);
- return (rand() % MaxInternal) + Min;
+
+ return Min + _rnd.getRandomNumber(Max - Min + 1);
}
-// Timer Methoden
-// --------------
-unsigned int BS_Kernel::GetMilliTicks()
-{
- return BS_Timer::GetMilliTicks();
+/**
+ * Returns the elapsed time since startup in milliseconds
+ */
+unsigned int BS_Kernel::GetMilliTicks() {
+ return g_system->getMillis();
}
-uint64_t BS_Kernel::GetMicroTicks()
-{
- return BS_Timer::GetMicroTicks();
+/**
+ * Returns the elapsed time since the system start in microseconds.
+ * This method should be used only if GetMilliTick() for the desired application is inaccurate.
+ */
+uint64 BS_Kernel::GetMicroTicks() {
+ return g_system->getMillis() * 1000;
}
-// Sonstige Methoden
+// Other methods
// -----------------
-size_t BS_Kernel::GetUsedMemory()
-{
+/**
+ * Returns how much memory is being used
+ */
+size_t BS_Kernel::GetUsedMemory() {
+ return 0;
+
+#ifdef SCUMMVM_DISABLED_CODE
PROCESS_MEMORY_COUNTERS pmc;
pmc.cb = sizeof(pmc);
if (GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc)))
@@ -342,53 +386,67 @@ size_t BS_Kernel::GetUsedMemory()
BS_LOG_ERRORLN("Call to GetProcessMemoryInfo() failed. Error code: %d", GetLastError());
return 0;
}
+#endif
}
// -----------------------------------------------------------------------------
-BS_GraphicEngine * BS_Kernel::GetGfx()
-{
+/**
+ * Returns a pointer to the active Gfx Service, or NULL if no Gfx service is active
+ */
+BS_GraphicEngine * BS_Kernel::GetGfx() {
return static_cast<BS_GraphicEngine *>(GetService("gfx"));
}
// -----------------------------------------------------------------------------
-BS_SoundEngine * BS_Kernel::GetSfx()
-{
+/**
+ * Returns a pointer to the active Sfx Service, or NULL if no Sfx service is active
+ */
+BS_SoundEngine * BS_Kernel::GetSfx() {
return static_cast<BS_SoundEngine *>(GetService("sfx"));
}
// -----------------------------------------------------------------------------
-BS_InputEngine * BS_Kernel::GetInput()
-{
+/**
+ * Returns a pointer to the active input service, or NULL if no input service is active
+ */
+BS_InputEngine * BS_Kernel::GetInput() {
return static_cast<BS_InputEngine *>(GetService("input"));
}
// -----------------------------------------------------------------------------
-BS_PackageManager * BS_Kernel::GetPackage()
-{
+/**
+ * Returns a pointer to the active package manager, or NULL if no manager is active
+ */
+BS_PackageManager * BS_Kernel::GetPackage() {
return static_cast<BS_PackageManager *>(GetService("package"));
}
// -----------------------------------------------------------------------------
-BS_ScriptEngine * BS_Kernel::GetScript()
-{
+/**
+ * Returns a pointer to the script engine, or NULL if it is not active
+ */
+BS_ScriptEngine * BS_Kernel::GetScript() {
return static_cast<BS_ScriptEngine *>(GetService("script"));
}
// -----------------------------------------------------------------------------
-BS_MoviePlayer * BS_Kernel::GetFMV()
-{
+/**
+ * Returns a pointer to the movie player, or NULL if it is not active
+ */
+BS_MoviePlayer * BS_Kernel::GetFMV() {
return static_cast<BS_MoviePlayer *>(GetService("fmv"));
}
// -----------------------------------------------------------------------------
-void BS_Kernel::Sleep(unsigned int Msecs) const
-{
- ::Sleep(Msecs);
+void BS_Kernel::Sleep(unsigned int Msecs) const {
+ g_system->delayMillis(Msecs);
}
+
+} // End of namespace Sword25
diff --git a/engines/sword25/kernel/kernel.h b/engines/sword25/kernel/kernel.h
index 0e488eb38b..787eda4200 100755
--- a/engines/sword25/kernel/kernel.h
+++ b/engines/sword25/kernel/kernel.h
@@ -1,52 +1,53 @@
-// -----------------------------------------------------------------------------
-// This file is part of Broken Sword 2.5
-// Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdörfer
-//
-// Broken Sword 2.5 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.
-//
-// Broken Sword 2.5 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 Broken Sword 2.5; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-// -----------------------------------------------------------------------------
-
-/*
- BS_Kernel
- ---------
- Dies ist die Hauptklasse der Engine.
- Diese Klasse erzeugt und verwaltet alle anderen Enginelemente, wie Soundengine, Graphikengine...
- Es ist nicht notwendig alle Enginenelemente einzeln freizugeben, dieses wird von der Kernelklasse übernommen.
-
- Autor: Malte Thiesen
-*/
+/* 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$
+ * $Id$
+ *
+ * BS_Kernel
+ * ---------
+ * This is the main class of the engine.
+ * This class creates and manages all other Engine elements: the sound engine, graphics engine ...
+ * It is not necessary to release all the items individually, this is performed by the Kernel class.
+ *
+ * Autor: Malte Thiesen
+ */
#ifndef SWORD25_KERNEL_H
#define SWORD25_KERNEL_H
+// Includes
+#include "common/scummsys.h"
+#include "common/random.h"
+#include "common/stack.h"
#include "common/util.h"
#include "engines/engine.h"
-// Includes
-#include "sword25/kernel/memlog_off.h"
-#include <vector>
-#include <stack>
-#include <string>
-#include "sword25/kernel/memlog_on.h"
-
#include "sword25/kernel/common.h"
#include "sword25/kernel/bs_stdint.h"
#include "sword25/kernel/window.h"
#include "sword25/kernel/resmanager.h"
+namespace Sword25 {
-// Klassendefinition
+// Class definitions
class BS_Service;
class BS_GraphicEngine;
class BS_ScriptEngine;
@@ -56,244 +57,230 @@ class BS_PackageManager;
class BS_MoviePlayer;
/**
- @brief Dies ist die Hauptklasse der Engine.
-
- Diese Klasse erzeugt und verwaltet alle anderen Engineelemente, wie Soundengine, Graphikengine...<br>
- Es ist nicht notwendig alle Enginenelemente einzeln freizugeben, dieses wird von der Kernelklasse übernommen.
+ * This is the main engine class
+ *
+ * This class creates and manages all other engine components such as sound engine, graphics engine ...
+ * It is not necessary to release all the items individually, this is performed by the Kernel class.
*/
-class BS_Kernel
-{
+class BS_Kernel {
public:
- // Fenster Methoden
+ // Window methods
// ----------------
+
/**
- @brief Gibt einen Pointer auf das Fensterobjekt zurück.
- @return Gibt einen Pointer auf das Fensterobjekt zurück.
- */
- BS_Window* GetWindow() {return _pWindow; }
+ * Returns a pointer to the window object
+ */
+ BS_Window *GetWindow() { return _pWindow; }
- // Service Methoden
- // ----------------
+ // Service Methods
+ // ---------------
/**
- @brief Erzeugt einen neuen Service der angegebenen Superclass mit dem übergebenen Identifier.
- @param SuperclassIdentifier der Name der Superclass des Services<br>
- z.B: "sfx", "gfx", "package" ...
- @param ServiceIdentifier der Name des Services<br>
- Für die Superclass "sfx" könnten das z.B. "fmod" oder "directsound" sein.
- @return Gibt einen Pointer auf den Service zurück, oder NULL wenn der Service nicht erstellt werden konnte.
- @remark Alle Services müssen in service_ids.h eingetragen sein, sonst können sie hier nicht erstellt werden.
- */
- BS_Service* NewService(const std::string & SuperclassIdentifier, const std::string & ServiceIdentifier);
+ * Creates a new service with the given identifier. Returns a pointer to the service, or null if the
+ * service could not be created
+ * Note: All services must be registered in service_ids.h, otherwise they cannot be created here
+ * @param SuperclassIdentifier The name of the superclass of the service
+ * z.B: "sfx", "gfx", "package" ...
+ * @param ServiceIdentifier The name of the service
+ * For the superclass "sfx" an example could be "Fmod" or "directsound"
+ */
+ BS_Service *NewService(const Common::String &SuperclassIdentifier, const Common::String &ServiceIdentifier);
+
/**
- @brief Beendet den aktuellen Service einer Superclass.
- @param SuperclassIdentfier der Name der Superclass dessen aktiver Service beendet werden soll<br>
- z.B: "sfx", "gfx", "package" ...
- @return Gibt bei Erfolg true zurück und false wenn die Superclass nicht existiert oder wenn kein Service aktiv war.
- */
- bool DisconnectService(const std::string & SuperclassIdentifier);
+ * Ends the current service of a superclass. Returns true on success, and false if the superclass
+ * does not exist or if not service was active
+ * @param SuperclassIdentfier The name of the superclass which is to be disconnected
+ * z.B: "sfx", "gfx", "package" ...
+ */
+ bool DisconnectService(const Common::String &SuperclassIdentifier);
/**
- @brief Gibt einen Pointer auf das momentan aktive Serviceobjekt einer Superclass zurück.
- @param SuperclassIdentfier der Name der Superclass<br>
- z.B: "sfx", "gfx", "package" ...
- @return Gibt einen Pointer auf den Service zurück, oder NULL wenn kein Service aktiv war.
- */
- BS_Service* GetService(const std::string& SuperclassIdentifier);
+ * Returns a pointer to the currently active service object of a superclass
+ * @param SuperclassIdentfier The name of the superclass
+ * z.B: "sfx", "gfx", "package" ...
+ */
+ BS_Service *GetService(const Common::String &SuperclassIdentifier);
/**
- @brief Gibt den Namen des aktuell aktiven Serviceobjektes einer Superclass zurück.
- @param SuperclassIdentfier der Name der Superclass<br>
- z.B: "sfx", "gfx", "package" ...
- @return Gibt den Namen des Serviceobjektes zurück, oder einen leeren String, wenn ein Fehler aufgetreten ist.
- */
- std::string GetActiveServiceIdentifier(const std::string& SuperclassIdentifier);
+ * Returns the name of the currentl active service object of a superclass.
+ * If an error occurs, then an empty string is returned
+ * @param SuperclassIdentfier The name of the superclass
+ * z.B: "sfx", "gfx", "package" ...
+ */
+ Common::String GetActiveServiceIdentifier(const Common::String &SuperclassIdentifier);
/**
- @brief Gibt die Anzahl der Registrierten Superclasses zurück.
- @return Gibt die Anzahl der Registrierten Superclasses zurück.
- */
+ * Returns the number of register superclasses
+ */
unsigned int GetSuperclassCount();
- // Gibt den Identifier der mit Number bezeichneten Superclass zurück
/**
- @brief Gibt den Identifier einer Superclass zurück.
- @param Number die Nummer der Superclass, dessen Bezeichner man erfahren möchte<br>
- Hierbei ist zu beachten, dass die erste Superclass die Nummer 0 erhält. Number muss also eine Zahl zwischen
- 0 und GetSuperclassCount() - 1 sein.
- @return Gibt den Identifier der Superclass zurück.
- @remark Die Anzahl der Superclasses kann man mit GetSuperclassCount() erfahren.
- */
- std::string GetSuperclassIdentifier(unsigned int Number);
+ * Returns the name of a superclass with the specified index.
+ * Note: The number of superclasses can be retrieved using GetSuperclassCount
+ * @param Number The number of the superclass to return the identifier for.
+ * It should be noted that the number should be between 0 und GetSuperclassCount() - 1.
+ */
+ Common::String GetSuperclassIdentifier(unsigned int Number);
- // Gibt die Anzahl der für die mit SuperclassIdentifier bezeichneten Superclass vorhandenen
- // Services zurück
/**
- @brief Gibt die Anzahl an Services zurück, die in einer Superclass registriert sind.
- @param SuperclassIdentifier der Name der Superclass<br>
- z.B: "sfx", "gfx", "package" ...
- @return Gibt die Anzahl an Services zurück, die in der Superclass registriert sind.
- */
- unsigned int GetServiceCount(const std::string & SuperclassIdentifier);
+ * Returns the number of services registered with a given superclass
+ * @param SuperclassIdentifier The name of the superclass
+ * z.B: "sfx", "gfx", "package" ...
+ */
+ unsigned int GetServiceCount(const Common::String & SuperclassIdentifier);
/**
- @brief Gibt den Identifier eines Services in einer Superclass zurück.
- @param SuperclassIdentifier der Name der Superclass<br>
- z.B: "sfx", "gfx", "package" ...
- @param Number die Nummer des Services, dessen Bezeichner man erfahren will.<br>
- Hierbei ist zu beachten, dass der erste Service die Nummer 0 erhält. Number muss also eine Zahl zwischen
- 0 und GetServiceCount() - 1 sein.
- @return Gibt den Identifier des Services zurück
- @remark Die Anzahl der Services in einer Superclass kann man mit GetServiceCount() erfahren.
- */
- std::string GetServiceIdentifier(const std::string & SuperclassIdentifier, unsigned int Number);
+ * Gets the identifier of a service with a given superclass.
+ * The number of services in a superclass can be learned with GetServiceCount().
+ * @param SuperclassIdentifier The name of the superclass
+ * z.B: "sfx", "gfx", "package" ...
+ * @param Number die Nummer des Services, dessen Bezeichner man erfahren will.<br>
+ * Hierbei ist zu beachten, dass der erste Service die Nummer 0 erhält. Number muss also eine Zahl zwischen
+ * 0 und GetServiceCount() - 1 sein.
+ */
+ Common::String GetServiceIdentifier(const Common::String &SuperclassIdentifier, unsigned int Number);
+
/**
- @brief Gibt die vergangene Zeit seit dem Systemstart in Millisekunden zurück.
+ * Returns the elapsed time since startup in milliseconds
*/
unsigned int GetMilliTicks();
+
/**
- @brief Gibt die vergangene Zeit seit dem Systemstart in Microsekunden zurück.
- @remark Diese Methode sollte nur verwendet werden, falls GetMilliTick() für den gewünschten Einsatz zu ungenau ist.
- */
- uint64_t GetMicroTicks();
+ * Returns the elapsed time since the system start in microseconds.
+ * This method should be used only if GetMilliTick() for the desired application is inaccurate.
+ */
+ uint64 GetMicroTicks();
+
/**
- @brief Gibt an, ob die Konstruktion erfolgreich war.
- @return Gibt true zurück, wenn die Konstruktion erfolgreich war.
+ * Specifies whether the kernel was successfully initialised
*/
bool GetInitSuccess() { return _InitSuccess; }
/**
- @brief Gibt einen Pointer auf den BS_ResourceManager zurück.
- */
- BS_ResourceManager* GetResourceManager() { return _pResourceManager; }
+ * Returns a pointer to the BS_ResourceManager
+ */
+ BS_ResourceManager *GetResourceManager() { return _pResourceManager; }
/**
- @brief Gibt zurück wie viel Speicher von diesem Prozess belegt ist.
- */
+ * Returns how much memory is being used
+ */
size_t GetUsedMemory();
/**
- @brief Gibt eine Zufallszahl zurück.
- @param Min der minimale Wert, den die Zufallszahl haben darf
- @param Max der maximale Wert, den die Zufallszahl haben darf
- @return Gibt eine Zufallszahl zurück, die zwischen Min und Max liegt.
- */
+ * Returns a random number
+ * @param Min The minimum allowed value
+ * @param Max The maximum allowed value
+ */
int GetRandomNumber(int Min, int Max);
/**
- @brief Gibt einen Pointer auf den aktiven Gfx-Service zurück oder NULL wenn kein Gfx-Service aktiv.
- */
- BS_GraphicEngine * GetGfx();
+ * Returns a pointer to the active Gfx Service, or NULL if no Gfx service is active
+ */
+ BS_GraphicEngine *GetGfx();
/**
- @brief Gibt einen Pointer auf den aktiven Sfx-Service zurück oder NULL wenn kein Sfx-Service aktiv.
- */
- BS_SoundEngine * GetSfx();
+ * Returns a pointer to the active Sfx Service, or NULL if no Sfx service is active
+ */
+ BS_SoundEngine *GetSfx();
/**
- @brief Gibt einen Pointer auf den aktiven Input-Service zurück oder NULL wenn kein Input-Service aktiv.
- */
- BS_InputEngine * GetInput();
+ * Returns a pointer to the active input service, or NULL if no input service is active
+ */
+ BS_InputEngine *GetInput();
/**
- @brief Gibt einen Pointer auf den aktiven Package-Service zurück oder NULL wenn kein Package-Service aktiv.
- */
- BS_PackageManager * GetPackage();
+ * Returns a pointer to the active package manager, or NULL if no manager is active
+ */
+ BS_PackageManager *GetPackage();
/**
- @brief Gibt einen Pointer auf den aktiven Script-Service zurück oder NULL wenn kein Script-Service aktiv.
- */
- BS_ScriptEngine * GetScript();
+ * Returns a pointer to the script engine, or NULL if it is not active
+ */
+ BS_ScriptEngine *GetScript();
/**
- @brief Gibt einen Pointer auf den aktiven FMV-Service zurück oder NULL wenn kein FMV-Service aktiv.
- */
- BS_MoviePlayer * GetFMV();
+ * Returns a pointer to the movie player, or NULL if it is not active
+ */
+ BS_MoviePlayer *GetFMV();
/**
- @brief Stoppt den Prozess für eine gewisse Zeit.
- @param Msecs Zeit in Millisekunden, die der Prozess gestoppt werden soll.
- @remark Es wird nicht garantiert, dass der Prozess genau nach der angegebenen Zeit wieder aktiv wird.
- */
+ * Pauses for the specified amount of time
+ * @param Msecs The amount of time in milliseconds
+ */
void Sleep(unsigned int Msecs) const;
/**
- @brief Gibt das einzige Exemplar des Kernels zurück (Singleton).
- */
-
- static BS_Kernel * GetInstance()
- {
+ * Returns the singleton instance for the kernel
+ */
+ static BS_Kernel *GetInstance() {
if (!_Instance) _Instance = new BS_Kernel();
return _Instance;
}
/**
- @brief Zerstört das einzige Exemplar des Kernels.
- @remark Diese Methode darf nur zum Beenden des System aufgerufen werden. Nachfolgende Aufrufe sämtlicher Kernelmethoden liefern
- undefinierte Ergebnisse.
- */
-
- static void DeleteInstance()
- {
- if (_Instance)
- {
- delete(_Instance);
- _Instance = 0;
+ * Destroys the kernel instance
+ * This method should only be called when the game is ended. No subsequent calls to any kernel
+ * methods should be done after calling this method.
+ */
+ static void DeleteInstance() {
+ if (_Instance) {
+ delete _Instance;
+ _Instance = NULL;
}
}
/**
- @brief Löst eine Schutzverletzung aus.
- @remark Diese Methode dient zum Testen des Crash-Handlings.
- */
- void Crash() const
- {
- error(0);
+ * Raises an error. This method is used in crashing testing.
+ */
+ void Crash() const {
+ error("BS_Kernel::Crash");
}
private:
-
// -----------------------------------------------------------------------------
- // Konstruktion / Destruktion
- // Private da Singleton
+ // Constructor / destructor
+ // Private singleton methods
// -----------------------------------------------------------------------------
BS_Kernel();
virtual ~BS_Kernel();
// -----------------------------------------------------------------------------
- // Singleton-Exemplar
+ // Singleton instance
// -----------------------------------------------------------------------------
- static BS_Kernel * _Instance;
+ static BS_Kernel *_Instance;
- // Service Daten
- // -------------
- class Superclass
- {
+ // Superclass class
+ // ----------------
+ class Superclass {
private:
- BS_Kernel* _pKernel;
- unsigned int _ServiceCount;
- std::string _Identifier;
- BS_Service* _ActiveService;
- std::string _ActiveServiceName;
+ BS_Kernel *_pKernel;
+ unsigned int _ServiceCount;
+ Common::String _Identifier;
+ BS_Service *_ActiveService;
+ Common::String _ActiveServiceName;
public:
- Superclass (BS_Kernel* pKernel, const std::string& Identifier);
+ Superclass (BS_Kernel *pKernel, const Common::String &Identifier);
~Superclass();
unsigned int GetServiceCount() const { return _ServiceCount; }
- std::string GetIdentifier() const { return _Identifier; }
- BS_Service* GetActiveService() const { return _ActiveService; }
- std::string GetActiveServiceName() const { return _ActiveServiceName; }
- std::string GetServiceIdentifier(unsigned int Number);
- BS_Service* NewService(const std::string& ServiceIdentifier);
+ Common::String GetIdentifier() const { return _Identifier; }
+ BS_Service *GetActiveService() const { return _ActiveService; }
+ Common::String GetActiveServiceName() const { return _ActiveServiceName; }
+ Common::String GetServiceIdentifier(unsigned int Number);
+ BS_Service *NewService(const Common::String &ServiceIdentifier);
bool DisconnectService();
};
- std::vector<Superclass*> _SuperclassList;
- std::stack<std::string> _ServiceCreationOrder;
- Superclass* GetSuperclassByIdentifier(const std::string& Identifier);
+ Common::Array<Superclass*> _SuperclassList;
+ Common::Stack<Common::String> _ServiceCreationOrder;
+ Superclass *GetSuperclassByIdentifier(const Common::String &Identifier);
- bool _InitSuccess; // Gibt an, ob die Konstruktion erfolgreich war
- bool _Running; // Gibt an, ob die Applikation im nächsten Durchlauf des Main-Loops noch weiterlaufen soll
+ bool _InitSuccess; // Specifies whether the engine was set up correctly
+ bool _Running; // Specifies whether the application should keep running on the next main loop iteration
- // Fenster Variablen
- // -----------------
- BS_Window* _pWindow;
+ // Active window
+ // -------------
+ BS_Window *_pWindow;
+
+ // Random number generator
+ // -----------------------
+ Common::RandomSource _rnd;
/*
- // CPU-Feature Variablen und Methoden
+ // Features variables and methods
// ----------------------------------
enum _CPU_FEATURES_BITMASKS
{
@@ -312,32 +299,34 @@ private:
bool _3DNowPresent;
bool _3DNowExtPresent;
CPU_TYPES _CPUType;
- std::string _CPUVendorID;
+ Common::String _CPUVendorID;
*/
// Resourcemanager
// ---------------
- BS_ResourceManager* _pResourceManager;
+ BS_ResourceManager *_pResourceManager;
bool _RegisterScriptBindings();
};
-// Dies ist nur eine kleine Klasse, die die Daten eines Services verwaltet.
-// Ist ein wenig unschön, ich weiss, aber mit std::string ließ sich dass nicht mit einer
-// einfachen struct bewerkstelligen.
-class BS_ServiceInfo
-{
+/**
+ * This is only a small class that manages the data of a service. It is a little ugly, I know,
+ * but with Common::String a simple struct could not be used.
+ */
+class BS_ServiceInfo {
public:
- BS_ServiceInfo(const std::string& SuperclassIdentifier_, const std::string& ServiceIdentifier_, BS_Service* (*CreateMethod_)(BS_Kernel*))
- {
+ BS_ServiceInfo(const Common::String &SuperclassIdentifier_, const Common::String& ServiceIdentifier_,
+ BS_Service* (*CreateMethod_)(BS_Kernel*)) {
this->SuperclassIdentifier = SuperclassIdentifier_;
this->ServiceIdentifier = ServiceIdentifier_;
this->CreateMethod = CreateMethod_;
};
- std::string SuperclassIdentifier;
- std::string ServiceIdentifier;
- BS_Service* (*CreateMethod)(BS_Kernel*);
+ Common::String SuperclassIdentifier;
+ Common::String ServiceIdentifier;
+ BS_Service* (*CreateMethod)(BS_Kernel *);
};
+}
+
#endif
diff --git a/engines/sword25/kernel/log.cpp b/engines/sword25/kernel/log.cpp
index f5b9ba7e7c..33939483ed 100755
--- a/engines/sword25/kernel/log.cpp
+++ b/engines/sword25/kernel/log.cpp
@@ -1,112 +1,107 @@
-// -----------------------------------------------------------------------------
-// This file is part of Broken Sword 2.5
-// Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdörfer
-//
-// Broken Sword 2.5 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.
-//
-// Broken Sword 2.5 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 Broken Sword 2.5; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-// -----------------------------------------------------------------------------
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <string>
-
-#include "sword25/kernel/filesystemutil.h"
+/* 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$
+ * $Id$
+ *
+ */
+
#include "sword25/kernel/log.h"
-#include "sword25/kernel/debug/debugtools.h"
+#include "base/version.h"
+#include "common/config-manager.h"
+#include "common/fs.h"
+
+namespace Sword25 {
-// Konstanten
-static const char* BF_LOG_FILENAME = "log.txt";
+// Constants
+static const char *BF_LOG_FILENAME = "log.txt";
static const size_t LOG_BUFFERSIZE = 1024 * 16;
-// Logging soll nur stattfinden wenn es aktiviert ist
+// Logging will take place only when it's activated
#ifdef BS_ACTIVATE_LOGGING
-FILE* BS_Log::_LogFile = NULL;
-bool BS_Log::_LineBegin = true;
-const char* BS_Log::_Prefix = NULL;
-const char* BS_Log::_File = NULL;
-int BS_Log::_Line = 0;
-bool BS_Log::_AutoNewline = false;
-std::vector<BS_Log::LOG_LISTENER_CALLBACK> BS_Log::_LogListener;
-
-bool BS_Log::_CreateLog()
-{
- // Logfile öffnen
- BS_FileSystemUtil::GetInstance().CreateDirectory(BS_FileSystemUtil::GetInstance().GetUserdataDirectory());
- _LogFile = fopen((BS_FileSystemUtil::GetInstance().GetUserdataDirectory() + "\\" + BF_LOG_FILENAME).c_str(), "w");
-
- if (_LogFile)
- {
- // Sicherstellen, dass es beim Beenden geschlossen wird
- atexit(_CloseLog);
-
- // Titelzeile in das Logfile schreiben
- Log("Broken Sword 2.5 Engine - Build: %s - %s - VersionID: %s\n", __DATE__, __TIME__, BS_Debugtools::GetVersionID());
+Common::WriteStream* BS_Log::_LogFile = NULL;
+bool BS_Log::_LineBegin = true;
+const char * BS_Log::_Prefix = NULL;
+const char * BS_Log::_File = NULL;
+int BS_Log::_Line = 0;
+bool BS_Log::_AutoNewline = false;
+Common::Array<BS_Log::LOG_LISTENER_CALLBACK> BS_Log::_LogListener;
+
+bool BS_Log::_CreateLog() {
+ // Open the log file
+ Common::FSNode dataDir(ConfMan.get("path"));
+ Common::FSNode file = dataDir.getChild(BF_LOG_FILENAME);
+
+ // Open the file for saving
+ _LogFile = file.createWriteStream();
+
+ if (_LogFile) {
+ // Add a title into the log file
+ Log("Broken Sword 2.5 Engine - Build: %s - %s - VersionID: %s\n", __DATE__, __TIME__, gScummVMFullVersion);
Log("-----------------------------------------------------------------------------------------------------\n");
return true;
}
- // Log-File konnte nicht erstellt werden
+ // Log file could not be created
return false;
}
-void BS_Log::_CloseLog()
-{
- if (_LogFile) fclose(_LogFile);
+void BS_Log::_CloseLog() {
+ delete _LogFile;
+ _LogFile = NULL;
}
-void BS_Log::Log(const char* Format, ...)
-{
+void BS_Log::Log(const char *Format, ...) {
char Message[LOG_BUFFERSIZE];
- // Nachricht erzeugen
+ // Create the message
va_list ArgList;
va_start(ArgList, Format);
_vsnprintf(Message, sizeof(Message), Format, ArgList);
- // Nachricht loggen
+ // Log the message
_WriteLog(Message);
_FlushLog();
}
-void BS_Log::LogPrefix(const char* Prefix, const char* Format, ...)
-{
+void BS_Log::LogPrefix(const char *Prefix, const char *Format, ...) {
char Message[LOG_BUFFERSIZE];
char ExtFormat[LOG_BUFFERSIZE];
- // Falls die Ausgabe am Anfang einer neuen Zeile aufgehört hat, muss die neue Ausgabe mit dem Präfix
- // beginnen
+ // If the issue has ceased at the beginning of a new line, the new issue to begin with the prefix
ExtFormat[0] = 0;
- if (_LineBegin)
- {
+ if (_LineBegin) {
_snprintf(ExtFormat, sizeof(ExtFormat), "%s%s: ", ExtFormat, Prefix);
_LineBegin = false;
}
- // Formatstring zeilenweise durchgehen und an jeden Zeilenanfang das Präfix setzen
- for (;;)
- {
- const char* NextLine = strstr(Format, "\n");
- if (!NextLine || *(NextLine + strlen("\n")) == 0)
- {
+ // Format String pass line by line and each line with the initial prefix
+ for (;;) {
+ const char *NextLine = strstr(Format, "\n");
+ if (!NextLine || *(NextLine + strlen("\n")) == 0) {
_snprintf(ExtFormat, sizeof(ExtFormat), "%s%s", ExtFormat, Format);
if (NextLine) _LineBegin = true;
break;
- }
- else
- {
+ } else {
strncat(ExtFormat, Format, (NextLine - Format) + strlen("\n"));
_snprintf(ExtFormat, sizeof(ExtFormat), "%s%s: ", ExtFormat, Prefix);
}
@@ -114,19 +109,18 @@ void BS_Log::LogPrefix(const char* Prefix, const char* Format, ...)
Format = NextLine + strlen("\n");
}
- // Nachricht erzeugen
+ // Create message
va_list ArgList;
va_start(ArgList, Format);
_vsnprintf(Message, sizeof(Message), ExtFormat, ArgList);
- // Nachricht schreiben
+ // Log the message
_WriteLog(Message);
_FlushLog();
}
-void BS_Log::LogDecorated(const char* Format, ...)
-{
+void BS_Log::LogDecorated(const char *Format, ...) {
// Nachricht erzeugen
char Message[LOG_BUFFERSIZE];
va_list ArgList;
@@ -139,15 +133,12 @@ void BS_Log::LogDecorated(const char* Format, ...)
_snprintf(SecondaryPrefix, sizeof(SecondaryPrefix), "(file: %s, line: %d) - ", _File, _Line);
// Nachricht zeilenweise ausgeben und an jeden Zeilenanfang das Präfix setzen
- char* MessageWalker = Message;
- for (;;)
- {
- char* NextLine = strstr(MessageWalker, "\n");
- if (NextLine)
- {
+ char *MessageWalker = Message;
+ for (;;) {
+ char *NextLine = strstr(MessageWalker, "\n");
+ if (NextLine) {
*NextLine = 0;
- if (_LineBegin)
- {
+ if (_LineBegin) {
_WriteLog(_Prefix);
if (_File && _Line)
_WriteLog(SecondaryPrefix);
@@ -156,11 +147,8 @@ void BS_Log::LogDecorated(const char* Format, ...)
_WriteLog("\n");
MessageWalker = NextLine + sizeof("\n") - 1;
_LineBegin = true;
- }
- else
- {
- if (_LineBegin)
- {
+ } else {
+ if (_LineBegin) {
_WriteLog(_Prefix);
if (_File && _Line)
_WriteLog(SecondaryPrefix);
@@ -172,8 +160,7 @@ void BS_Log::LogDecorated(const char* Format, ...)
}
// Falls gewünscht, wird ans Ende der Nachricht automatisch ein Newline angehängt.
- if (_AutoNewline)
- {
+ if (_AutoNewline) {
_WriteLog("\n");
_LineBegin = true;
}
@@ -187,38 +174,32 @@ void BS_Log::LogDecorated(const char* Format, ...)
_FlushLog();
}
-int BS_Log::_WriteLog(const char* Message)
-{
+int BS_Log::_WriteLog(const char * Message) {
if (!_LogFile) if (!_CreateLog()) return false;
- std::vector<LOG_LISTENER_CALLBACK>::iterator Iter = _LogListener.begin();
+ Common::Array<LOG_LISTENER_CALLBACK>::iterator Iter = _LogListener.begin();
for (; Iter != _LogListener.end(); ++Iter)
(*Iter)(Message);
- fprintf(_LogFile, Message);
+ _LogFile->writeString(Message);
return true;
}
-void BS_Log::_FlushLog()
-{
- fflush(_LogFile);
+void BS_Log::_FlushLog() {
+ _LogFile->flush();
}
void (*BS_LogPtr)(const char *, ...) = BS_Log::Log;
-extern "C"
-{
- void BS_Log_C(const char* Message)
- {
- BS_LogPtr(Message);
- }
+
+void BS_Log_C(const char *Message) {
+ BS_LogPtr(Message);
}
#else
-extern "C"
-{
- void BS_Log_C(const char* Message) {};
-}
+void BS_Log_C(const char* Message) {};
#endif
+
+} // End of namespace Sword25
diff --git a/engines/sword25/kernel/log.h b/engines/sword25/kernel/log.h
index 8e89ccc823..597b379748 100755
--- a/engines/sword25/kernel/log.h
+++ b/engines/sword25/kernel/log.h
@@ -1,35 +1,38 @@
-// -----------------------------------------------------------------------------
-// This file is part of Broken Sword 2.5
-// Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdörfer
-//
-// Broken Sword 2.5 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.
-//
-// Broken Sword 2.5 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 Broken Sword 2.5; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-// -----------------------------------------------------------------------------
+/* 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$
+ * $Id$
+ *
+ */
#ifndef SWORD25_LOG_H
#define SWORD25_LOG_H
// Includes
-#include "sword25/kernel/memlog_off.h"
-#include <stdio.h>
-#include <vector>
-#include <string>
-#include <algorithm>
-#include "sword25/kernel/memlog_on.h"
-
+#include "common/array.h"
+#include "common/file.h"
#include "sword25/kernel/common.h"
+namespace Sword25 {
+
// Logging soll nur stattfinden wenn es aktiviert ist
#ifdef BS_ACTIVATE_LOGGING
@@ -59,33 +62,38 @@ public:
typedef void (*LOG_LISTENER_CALLBACK)(const char *);
static void RegisterLogListener(LOG_LISTENER_CALLBACK Callback) { _LogListener.push_back(Callback); }
- static bool IsListenerRegistered(LOG_LISTENER_CALLBACK Callback) { return std::find(_LogListener.begin(), _LogListener.end(), Callback) != _LogListener.end(); }
+ static bool IsListenerRegistered(LOG_LISTENER_CALLBACK Callback) {
+ Common::Array<LOG_LISTENER_CALLBACK>::iterator i;
+ for (i = _LogListener.begin(); i != _LogListener.end(); ++i) {
+ if (**i == Callback)
+ return true;
+ }
+ return false;
+ }
+ static void _CloseLog();
private:
- static FILE* _LogFile;
+ static Common::WriteStream * _LogFile;
static bool _LineBegin;
- static const char* _Prefix;
- static const char* _File;
+ static const char * _Prefix;
+ static const char * _File;
static int _Line;
static bool _AutoNewline;
- static std::vector<LOG_LISTENER_CALLBACK> _LogListener;
+ static Common::Array<LOG_LISTENER_CALLBACK> _LogListener;
static bool _CreateLog();
- static void _CloseLog();
static int _WriteLog(const char* Message);
static void _FlushLog();
};
-// Hilfsfunktion, die es C-Funktionen ermöglicht zu loggen (wird für Lua gebraucht).
-extern "C"
-{
- void BS_Log_C(const char* Message);
-}
+// Auxiliary function that allows to log C functions (needed for Lua).
+#define BS_Log_C error
+
#else
-// Logging-Makros
+// Logging-Macros
#define BS_LOG
#define BS_LOGLN
#define BS_LOG_WARNING
@@ -95,11 +103,10 @@ extern "C"
#define BS_LOG_EXTERROR
#define BS_LOG_EXTERRORLN
-// Die Version der Logging-Klasse mit deaktiviertem Logging
-class BS_Log
-{
+// The version of the logging class with logging disabled
+class BS_Log {
public:
- // Die Log Funktionen werden zu do-nothing Funktionen und wird daher vom Compiler (hoffentlich) rausoptimiert
+ // This version implements all the various methods as empty stubs
static void Log(const char* Text, ...) {};
static void LogPrefix(const char* Prefix, const char* Format, ...) {};
static void LogDecorated(const char* Format, ...) {};
@@ -113,11 +120,10 @@ public:
static void RegisterLogListener(LOG_LISTENER_CALLBACK Callback) {};
};
-extern "C"
-{
- void BS_Log_C(const char* Message);
-}
+#define BS_Log_C error
#endif
+} // End of namespace Sword25
+
#endif
diff --git a/engines/sword25/kernel/memleaks.h b/engines/sword25/kernel/memleaks.h
index 91d4822e51..e0c239cd62 100755
--- a/engines/sword25/kernel/memleaks.h
+++ b/engines/sword25/kernel/memleaks.h
@@ -1,21 +1,27 @@
-// -----------------------------------------------------------------------------
-// This file is part of Broken Sword 2.5
-// Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdörfer
-//
-// Broken Sword 2.5 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.
-//
-// Broken Sword 2.5 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 Broken Sword 2.5; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-// -----------------------------------------------------------------------------
+/* 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$
+ * $Id$
+ *
+ */
#ifndef SWORD25_MEMLEAKS_H
#define SWORD25_MEMLEAKS_H
@@ -26,8 +32,6 @@
#pragma warning(disable : 4291)
#endif
-#include "sword25/kernel/memlog_off.h"
-
#include <malloc.h>
void DumpUnfreed(const char * OutputFilename);
@@ -55,6 +59,4 @@ inline void __cdecl operator delete[](void *p)
#endif
-#include "memlog_on.h"
-
#endif
diff --git a/engines/sword25/kernel/persistable.h b/engines/sword25/kernel/persistable.h
index 5f126446d0..e56f14f39b 100755
--- a/engines/sword25/kernel/persistable.h
+++ b/engines/sword25/kernel/persistable.h
@@ -1,36 +1,44 @@
-// -----------------------------------------------------------------------------
-// This file is part of Broken Sword 2.5
-// Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdörfer
-//
-// Broken Sword 2.5 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.
-//
-// Broken Sword 2.5 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 Broken Sword 2.5; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-// -----------------------------------------------------------------------------
+/* 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$
+ * $Id$
+ *
+ */
#ifndef SWORD25_PERSISTABLE_H
#define SWORD25_PERSISTABLE_H
+namespace Sword25 {
+
class BS_OutputPersistenceBlock;
class BS_InputPersistenceBlock;
-class BS_Persistable
-{
+class BS_Persistable {
public:
virtual ~BS_Persistable() {};
virtual bool Persist(BS_OutputPersistenceBlock & Writer) = 0;
virtual bool Unpersist(BS_InputPersistenceBlock & Reader) = 0;
-
};
+} // End of namespace Sword25
+
#endif
diff --git a/engines/sword25/kernel/persistenceservice.h b/engines/sword25/kernel/persistenceservice.h
index e707d91f94..2ab1747688 100755
--- a/engines/sword25/kernel/persistenceservice.h
+++ b/engines/sword25/kernel/persistenceservice.h
@@ -1,21 +1,27 @@
-// -----------------------------------------------------------------------------
-// This file is part of Broken Sword 2.5
-// Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdörfer
-//
-// Broken Sword 2.5 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.
-//
-// Broken Sword 2.5 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 Broken Sword 2.5; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-// -----------------------------------------------------------------------------
+/* 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$
+ * $Id$
+ *
+ */
#ifndef SWORD25_PERSISTENCESERVICE_H
#define SWORD25_PERSISTENCESERVICE_H
@@ -25,42 +31,38 @@
// -----------------------------------------------------------------------------
#include "sword25/kernel/common.h"
-#include "sword25/kernel/memlog_off.h"
-#include <string>
-#include <vector>
-#include "sword25/kernel/memlog_on.h"
+
+namespace Sword25 {
// -----------------------------------------------------------------------------
// Class declaration
// -----------------------------------------------------------------------------
-class BS_PersistenceService
-{
+class BS_PersistenceService {
public:
BS_PersistenceService();
virtual ~BS_PersistenceService();
// -----------------------------------------------------------------------------
- // Singleton-Methode
+ // Singleton Method
// -----------------------------------------------------------------------------
- static BS_PersistenceService & GetInstance();
-
+ static BS_PersistenceService &GetInstance();
// -----------------------------------------------------------------------------
// Interface
// -----------------------------------------------------------------------------
static unsigned int GetSlotCount();
- static std::string GetSavegameDirectory();
+ static Common::String GetSavegameDirectory();
void ReloadSlots();
bool IsSlotOccupied(unsigned int SlotID);
bool IsSavegameCompatible(unsigned int SlotID);
- std::string & GetSavegameDescription(unsigned int SlotID);
- std::string & GetSavegameFilename(unsigned int SlotID);
+ Common::String &GetSavegameDescription(unsigned int SlotID);
+ Common::String &GetSavegameFilename(unsigned int SlotID);
- bool SaveGame(unsigned int SlotID, const std::string & ScreenshotFilename);
+ bool SaveGame(unsigned int SlotID, const Common::String & ScreenshotFilename);
bool LoadGame(unsigned int SlotID);
private:
@@ -68,4 +70,6 @@ private:
Impl * m_impl;
};
+} // End of namespace Sword25
+
#endif
diff --git a/engines/sword25/kernel/resmanager.h b/engines/sword25/kernel/resmanager.h
index 0544950245..265b5339ee 100755
--- a/engines/sword25/kernel/resmanager.h
+++ b/engines/sword25/kernel/resmanager.h
@@ -1,123 +1,119 @@
-// -----------------------------------------------------------------------------
-// This file is part of Broken Sword 2.5
-// Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdörfer
-//
-// Broken Sword 2.5 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.
-//
-// Broken Sword 2.5 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 Broken Sword 2.5; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-// -----------------------------------------------------------------------------
+/* 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$
+ * $Id$
+ */
#ifndef SWORD25_RESOURCEMANAGER_H
#define SWORD25_RESOURCEMANAGER_H
// Includes
-#include "sword25/kernel/memlog_off.h"
-#include <vector>
-#include <list>
-#include "sword25/kernel/memlog_on.h"
+#include "common/list.h"
#include "sword25/kernel/common.h"
-// Klassendefinition
+namespace Sword25 {
+
+// Class definitions
class BS_ResourceService;
class BS_Resource;
class BS_Kernel;
-class BS_ResourceManager
-{
+class BS_ResourceManager {
friend class BS_Kernel;
public:
/**
- @brief Fordert eine Resource an.
- @param FileName Dateiname
- @return Gibt die Resource zurück, falls erfolgreich, sonst NULL
- */
- BS_Resource* RequestResource(const std::string& FileName);
+ * Returns a requested resource. If any error occurs, returns NULL
+ * @param FileName Filename of resource
+ */
+ BS_Resource *RequestResource(const Common::String &FileName);
/**
- @brief Lädt eine Resource in den Cache.
- @param FileName der Dateiname der zu cachenden Resource
- @param ForceReload gibt an, ob die Datei auch neu geladen werden soll, wenn sie bereits geladen wurde.
- Dies ist nützlich bei Dateien, die sich in der Zwischenzeit verändert haben.
- @return Gibt true zurück, wenn das Caching durchgeführt werden konnte, ansonsten false.
- */
- bool PrecacheResource(const std::string& FileName, bool ForceReload = false);
+ * Loads a resource into the cache
+ * @param FileName The filename of the resource to be cached
+ * @param ForceReload Indicates whether the file should be reloaded if it's already in the cache.
+ * This is useful for files that may have changed in the interim
+ */
+ bool PrecacheResource(const Common::String& FileName, bool ForceReload = false);
/**
- @brief Gibt die Anzahl der geladenen Resourcen zurück.
- */
+ * Returns the number of loaded resources
+ */
int GetResourceCount() const { return static_cast<int>(m_Resources.size()); }
/**
- @brief Gibt einen Pointer auf eine Resource anhand deren laufender Nummer zurück.
- @param Ord laufende Nummer der Resource. Dieser Wert muss zwischen 0 und GetResourceCount() - 1 liegen.
- @return Gibt einen Pointer auf die Resource zurück wenn erfolgreich, ansonsten NULL.
- @remark Diese Methode ist nicht auf Geschwindigkeit optimiert und sollte nur für Debugzwecke eingesetzt werden.
+ * Returns a resource by it's ordinal index. Returns NULL if any error occurs
+ * Note: This method is not optimised for speed and should be used only for debugging purposes
+ * @param Ord Ordinal number of the resource. Must be between 0 and GetResourceCount() - 1.
*/
- BS_Resource* GetResourceByOrdinal(int Ord) const;
+ BS_Resource *GetResourceByOrdinal(int Ord) const;
/**
- @brief RegisterResourceService Diese Methode wird vom Konstruktor von
- BS_ResourceService aufgerufen und trägt somit alle
- Resource-Services in einen Liste des
- Resource-Managers ein.
- @param pService welches Service
- @return gibt true zurück, falls erfolgreich
- */
+ * Registers a RegisterResourceService. This method is the constructor of
+ * BS_ResourceService, and thus helps all resource services in the ResourceManager list
+ * @param pService Which service
+ */
bool RegisterResourceService(BS_ResourceService* pService);
/**
- * @brief gibt alle Resourcen frei, die nicht gelocked sind.
+ * Releases all resources that are not locked.
**/
void EmptyCache();
/**
- @brief Gibt zurück wie viel Speicher die Engine maximal belegen soll.
- */
+ * Returns the maximum memory the kernel has used
+ */
int GetMaxMemoryUsage() const { return m_MaxMemoryUsage; }
/**
- @brief Legt fest wie viel Speicher die Engine maximal belegen soll.
-
- Wenn dieser Wert überschritten wird, werden Resourcen entladen um Platz zu schaffen. Dieser Wert ist als Richtgröße zu verstehen und nicht als feste Grenze.
- Es ist unter KEINEN Umständen garantiert, dass die Engine tatsächlich nur so viel Speicher benutzt.
- */
+ * Specifies the maximum amount of memory the engine is allowed to use.
+ * If this value is exceeded, resources will be unloaded to make room. This value is meant
+ * as a guideline, and not as a fixed boundary. It is not guaranteed not to be exceeded;
+ * the whole game engine may still use more memory than any amount specified.
+ */
void SetMaxMemoryUsage(unsigned int MaxMemoryUsage);
/**
- @brief Gibt an, ob eine Warnung ins Log geschrieben wird, wenn ein Cache-Miss auftritt.
- Der Standardwert ist "false".
- */
+ * Specifies whether a warning is written to the log when a cache miss occurs.
+ * THe default value is "false".
+ */
bool IsLogCacheMiss() const { return m_LogCacheMiss; }
/**
- @brief Legt fest, ob eine Warnung ins Log geschrieben wird, wenn in Cache-Miss auftritt.
- @param Flag wenn "true" wird die Warnung in Zukunft ausgegeben, ansonsten nicht.
- */
+ * Sets whether warnings are written to the log if a cache miss occurs.
+ * @param Flag If "true", then future warnings will be logged
+ */
void SetLogCacheMiss(bool Flag) { m_LogCacheMiss = Flag; }
/**
- @brief Schreibt die Namen aller gelockten Resourcen in die Log-Datei.
- */
+ * Writes the names of all currently locked resources to the log file
+ */
void DumpLockedResources();
private:
/**
- @brief Erzeugt einen neuen Resource-Manager.
- @param pKernel ein Pointer auf den Kernel.
- @remark Nur der BS_Kernel darf Exemplare dieser Klasse erzeugen. Daher ist der Konstruktor private.
- */
+ * Creates a new resource manager
+ * Only the BS_Kernel class can generate copies this class. Thus, the constructor is private
+ */
BS_ResourceManager(BS_Kernel* pKernel) :
m_KernelPtr(pKernel),
m_MaxMemoryUsage(100000000),
@@ -131,55 +127,52 @@ private:
};
/**
- @brief Verschiebt eine Resource an die Spitze der Resourcenliste.
- @param pResource die Resource
- */
- void MoveToFront(BS_Resource* pResource);
+ * Moves a resource to the top of the resource list
+ * @param pResource The resource
+ */
+ void MoveToFront(BS_Resource *pResource);
/**
- @brief Lädt eine Resource und aktualisiert m_UsedMemory.
-
- Die Resource darf nicht bereits geladen sein.
-
- @param FileName der absolute und eindeutige Dateiname der zu ladenen Resource
- @return Gibt einen Pointer auf die geladene Resource zurück wenn das Laden erfolgreich war, ansonsten NULL.
- */
- BS_Resource* LoadResource(const std::string& FileName);
+ * Loads a resource and updates the m_UsedMemory total
+ *
+ * The resource must not already be loaded
+ *
+ * @param FileName The unique filename of the resource to be loaded
+ *
+ */
+ BS_Resource *LoadResource(const Common::String &FileName);
/**
- @brief Gibt zu einer Datei ihren absoluten, eindeutigen Pfad zurück.
- @param FileName der Dateiname
- @return Der absolute, eindeutige Pfad zur Datei inklusive des Dateinamens.<br>
- Gibt einen leeren std::string zurück, wenn der Pfad nicht erzeugt werden konnte.
+ * Returns the full path of a given resource filename.
+ * It will return an empty string if a path could not be created.
*/
- std::string GetUniqueFileName(const std::string& FileName) const;
+ Common::String GetUniqueFileName(const Common::String &FileName) const;
/**
- @brief Löscht eine Resource entfernt sie aus den Listen und aktualisiert m_UsedMemory.
- @param pResource die zu löschende Resource
- @return Gibt einen Iterator zurück, der auf die nächste Resource in der Resourcenliste zeigt.
- */
- std::list<BS_Resource*>::iterator DeleteResource(BS_Resource* pResource);
+ * Deletes a resource, removes it from the lists, and updates m_UsedMemory
+ */
+ Common::List<BS_Resource*>::iterator DeleteResource(BS_Resource *pResource);
/**
- @brief Holt einen Pointer zu einer geladenen Resource.
- @param UniqueFileName der absolute, eindeutige Pfad zur Datei inklusive des Dateinamens.
- @return Gibt einen Pointer auf die angeforderte Resource zurück, oder NULL, wenn die Resourcen nicht geladen ist.
- */
- BS_Resource* GetResource(const std::string& UniqueFileName) const;
+ * Returns a pointer to a loaded resource. If any error occurs, NULL will be returned.
+ * @param UniqueFileName The absolute path and filename
+ * Gibt einen Pointer auf die angeforderte Resource zurück, oder NULL, wenn die Resourcen nicht geladen ist.
+ */
+ BS_Resource *GetResource(const Common::String &UniqueFileName) const;
/**
- @brief Löscht solange Resourcen, bis der Prozess unter das angegebene Maximun an Speicherbelegung kommt.
- */
+ * Deletes resources as necessary until the specified memory limit is not being exceeded.
+ */
void DeleteResourcesIfNecessary();
- BS_Kernel* m_KernelPtr;
+ BS_Kernel * m_KernelPtr;
unsigned int m_MaxMemoryUsage;
- std::vector<BS_ResourceService*> m_ResourceServices;
- std::list<BS_Resource*> m_Resources;
- std::list<BS_Resource*> m_ResourceHashTable[HASH_TABLE_BUCKETS];
+ Common::Array<BS_ResourceService *> m_ResourceServices;
+ Common::List<BS_Resource *> m_Resources;
+ Common::List<BS_Resource *> m_ResourceHashTable[HASH_TABLE_BUCKETS];
bool m_LogCacheMiss;
};
-#endif
+} // End of namespace Sword25
+#endif
diff --git a/engines/sword25/kernel/resservice.h b/engines/sword25/kernel/resservice.h
index ef95cfdce9..86c55ed6b9 100755
--- a/engines/sword25/kernel/resservice.h
+++ b/engines/sword25/kernel/resservice.h
@@ -1,21 +1,27 @@
-// -----------------------------------------------------------------------------
-// This file is part of Broken Sword 2.5
-// Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdörfer
-//
-// Broken Sword 2.5 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.
-//
-// Broken Sword 2.5 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 Broken Sword 2.5; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-// -----------------------------------------------------------------------------
+/* 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$
+ * $Id$
+ *
+ */
#ifndef SWORD25_RESOURCESERVICE_H
#define SWORD25_RESOURCESERVICE_H
@@ -26,10 +32,11 @@
#include "sword25/kernel/kernel.h"
#include "sword25/kernel/resmanager.h"
+namespace Sword25 {
+
class BS_Resource;
-class BS_ResourceService : public BS_Service
-{
+class BS_ResourceService : public BS_Service {
public:
BS_ResourceService(BS_Kernel* pKernel) : BS_Service(pKernel)
{
@@ -41,70 +48,66 @@ public:
/**
- @brief Lädt eine Resource.
- @param FileName Dateiname
- @return gibt die Resource zurück, falls erfolgreich, ansonsten NULL
- */
- virtual BS_Resource* LoadResource(const std::string& FileName) = 0;
+ * Loads a resource
+ * @return Returns the resource if successful, otherwise NULL
+ */
+ virtual BS_Resource *LoadResource(const Common::String &FileName) = 0;
/**
- @brief CanLoadResource prüft, ob Resource vom Service geladen werden kann.
- @param FileName Dateiname
- @return true, falls Service Resource laden kann
- @remark Überprüfung basiert auf dem Dateinamen, wenn das Dateiformat nicht passt, gibts Ärger.
- */
- virtual bool CanLoadResource(const std::string& FileName) = 0;
+ * Checks whether the given name can be loaded by the resource service
+ * @param FileName Dateiname
+ * @return Returns true if the resource can be loaded.
+ */
+ virtual bool CanLoadResource(const Common::String& FileName) = 0;
protected:
- // Hilfsmethoden für BS_ResourceService Klassen
+ // Alternative methods for classes BS_ResourceService
/**
- @brief Vergleicht zwei Strings, wobei der zweite String die Wildcards * und ? enthalten darf
- @param String der erste Vergleichsstring. Dieser darf keine Wildcards enthalten.
- @param Pattern der zweite Vergleichsstring. Dieser darf die Wildcards * und ? enthalten.
- @return Gibt true zurück, wenn der String auf das Pattern passt, ansonsten false.
- */
- bool _WildCardStringMatch(const std::string& String, const std::string& Pattern)
- {
+ * Compares two strings, with the second string allowed to contain '*' and '?' wildcards
+ * @param String The first comparison string. This must not contain wildcards
+ * @param Pattern The sceond comaprison string. Wildcards of '*' and '?' are allowed.
+ * @return Returns true if the string matches the pattern, otherwise false.
+ */
+ bool _WildCardStringMatch(const Common::String &String, const Common::String &Pattern) {
return _WildCardStringMatchRecursion(String.c_str(), Pattern.c_str());
}
private:
- bool _WildCardStringMatchRecursion(const char* String, const char* Pattern)
- {
- // Rekursionsabschlüsse:
- // 1. Der Pattern-String enthält nur noch * -> TRUE
- if (*Pattern == '*')
- {
- // Es muss mit einer Kopie von Pattern gearbeitet werden um den aktuellen Zustand nicht zu zerstören
- char* PatternCopy = (char*) Pattern;
+ bool _WildCardStringMatchRecursion(const char *String, const char *Pattern) {
+ // Checks:
+ // 1. The pattern starts with '*' -> TRUE
+ if (*Pattern == '*') {
+ // Use a copy of the pattern pointer so as not to destroy the current state
+ char *PatternCopy = (char *)Pattern;
while (*PatternCopy == '*') { PatternCopy++; }
if (!*PatternCopy) return true;
}
- // 2. Der String ist zuende, das Pattern aber noch nicht -> FALSE
+ // 2. The string is over, but the patern is not -> FALSE
if (!*String && *Pattern) return false;
- // 3. Der String ist zuende, also ist auch das Pattern zuende (s.o.) -> TRUE
+ // 3. The string is over, and the pattern is finished -> TRUE
if (!*String) return true;
- // Rekursionsaufruf 1:
- // Falls die beiden aktuellen Zeichen gleich sind, oder Pattern '?' ist wird das Ergebnis von restlichen String zurückgegeben
+ // Recursive check 1:
+ // If the two current characters are the same, or pattern '?', then keep scanning
if (*String == *Pattern || *Pattern == '?') return _WildCardStringMatchRecursion(String + 1, Pattern + 1);
// Falls nicht, wird untersucht ob ein '*' vorliegt
- if (*Pattern == '*')
- {
- // Rekursionsaufruf 2:
- // Zunächst wird das Ergebnis von String und Pattern + 1 untersucht...
+ if (*Pattern == '*') {
+ // Recursive check 2:
+ // First the result of strign and pattern + 1 is examined..
if (_WildCardStringMatchRecursion(String, Pattern + 1)) return true;
- // Falls das fehlschlägt, wird das Ergebnis von String + 1 Pattern zurückgegeben
+ // If this fails, the result of string + 1 pattern is returned
else return _WildCardStringMatchRecursion(String + 1, Pattern);
- // Die Rekursion kehrt also immer wieder an diese Stelle zurück, bis das Zeichen in String,
- // dem nach dem '*' in Pattern entspricht
+ // The recursion ends, therefore, keep returning to this place until a character
+ // in the string which corresponds to the '*' in pattern
}
- // Wenn kein '*' in Pattern vorliegt, schlägt der Vergleich fehl
+ // The match has failed
return false;
}
};
+} // End of namespace Sword25
+
#endif
diff --git a/engines/sword25/kernel/service.h b/engines/sword25/kernel/service.h
index c5ca98f747..3fe5b06a79 100755
--- a/engines/sword25/kernel/service.h
+++ b/engines/sword25/kernel/service.h
@@ -1,34 +1,35 @@
-// -----------------------------------------------------------------------------
-// This file is part of Broken Sword 2.5
-// Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdörfer
-//
-// Broken Sword 2.5 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.
-//
-// Broken Sword 2.5 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 Broken Sword 2.5; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-// -----------------------------------------------------------------------------
-
-/*
- BS_Service
- -------------
- Dies ist die Basisklasse für alle Services der Engine.
- Ein Service ist ein wesentlicher Bestandteil des Engine, z.B. die Graphiksystem.
- Das Servicesystem macht es möglich mehrere verschiedene Services für ein System zu haben,
- und je nach Betriebssystem einen passenden auszuwählen.
- Denkbar wären z.B. zwei Graphiksysteme von denen eines hardwarebeschleunigt ist und ein
- anderes nicht.
- Die Services werden zur Laufzeit über die Kernelmethode NewService und NIEMALS mit new erzeugt.
-
- Autor: Malte Thiesen
+/* 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$
+ * $Id$
+ *
+ * BS_Service
+ * -------------
+ * This is the base class for all engine services.
+ * A serivce is an essential part of the engine, ex. the graphics system.
+ * This was intended to allow, for example, different plug in modules for
+ * different kinds of hardware and/or systems.
+ * The services are created at runtime via the kernel method NewService and NEVER with new.
+ *
+ * Autor: Malte Thiesen
*/
#ifndef SWORD25_SERVICE_H
@@ -37,21 +38,24 @@
// Includes
#include "sword25/kernel/common.h"
+namespace Sword25 {
+
// Klassendefinition
class BS_Kernel;
-class BS_Service
-{
+class BS_Service {
private:
- BS_Kernel* _pKernel;
+ BS_Kernel * _pKernel;
protected:
- BS_Service(BS_Kernel* pKernel) : _pKernel(pKernel) {};
+ BS_Service(BS_Kernel *pKernel) : _pKernel(pKernel) {};
BS_Kernel* GetKernel() const { return _pKernel; }
public:
- virtual ~BS_Service(){};
+ virtual ~BS_Service() {};
};
+} // End of namespace Sword25
+
#endif
diff --git a/engines/sword25/kernel/service_ids.h b/engines/sword25/kernel/service_ids.h
index 77df745236..7b6e19bf5a 100755
--- a/engines/sword25/kernel/service_ids.h
+++ b/engines/sword25/kernel/service_ids.h
@@ -1,43 +1,51 @@
-// -----------------------------------------------------------------------------
-// This file is part of Broken Sword 2.5
-// Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdörfer
-//
-// Broken Sword 2.5 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.
-//
-// Broken Sword 2.5 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 Broken Sword 2.5; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-// -----------------------------------------------------------------------------
-
-/*
- service_ids.h
- -------------
- In dieser Datei sind alle Services verzeichnet.
- JEDER neuer Service muss hier eingetragen werden, ansonsten kann er nicht mit
- pKernel->NewService(..) instanziiert werden.
-
- Autor: Malte Thiesen
-*/
+/* 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$
+ * $Id$
+ *
+ * service_ids.h
+ * -------------
+ * This file lists all the services.
+ * EVERY new service needs to be entered here, otherwise it cannot be instantiated
+ * by pKernel->NewService(..)
+ *
+ * Autor: Malte Thiesen
+ */
+
+#ifndef SWORD25_SERVICE_IDS
+#define SWORD25_SERVICE_IDS
#include "sword25/kernel/common.h"
-BS_Service * BS_OpenGLGfx_CreateObject(BS_Kernel* pKernel);
-BS_Service * BS_PhysfsPackageManager_CreateObject(BS_Kernel* pKernel);
-BS_Service * BS_StdWinInput_CreateObject(BS_Kernel* pKernel);
-BS_Service * BS_FMODExSound_CreateObject(BS_Kernel* pKernel);
-BS_Service * BS_LuaScriptEngine_CreateObject(BS_Kernel* pKernel);
-BS_Service * BS_Geometry_CreateObject(BS_Kernel* pKernel);
-BS_Service * BS_OggTheora_CreateObject(BS_Kernel* pKernel);
+namespace Sword25 {
-// Services müssen in dieser Tabelle eingetragen werden
+BS_Service *BS_OpenGLGfx_CreateObject(BS_Kernel* pKernel);
+BS_Service *BS_PhysfsPackageManager_CreateObject(BS_Kernel* pKernel);
+BS_Service *BS_StdWinInput_CreateObject(BS_Kernel* pKernel);
+BS_Service *BS_FMODExSound_CreateObject(BS_Kernel* pKernel);
+BS_Service *BS_LuaScriptEngine_CreateObject(BS_Kernel* pKernel);
+BS_Service *BS_Geometry_CreateObject(BS_Kernel* pKernel);
+BS_Service *BS_OggTheora_CreateObject(BS_Kernel* pKernel);
+
+// Services are recorded in this table
const BS_ServiceInfo BS_SERVICE_TABLE[] =
{
// Die ersten beiden Parameter sind die Namen der Superclass und des Services.
@@ -54,3 +62,7 @@ const BS_ServiceInfo BS_SERVICE_TABLE[] =
};
const unsigned int BS_SERVICE_COUNT = sizeof(BS_SERVICE_TABLE) / sizeof(BS_ServiceInfo);
+
+} // End of namespace Sword25
+
+#endif
diff --git a/engines/sword25/kernel/window.h b/engines/sword25/kernel/window.h
index a89d8972c1..780bd98b37 100755
--- a/engines/sword25/kernel/window.h
+++ b/engines/sword25/kernel/window.h
@@ -1,31 +1,33 @@
-// -----------------------------------------------------------------------------
-// This file is part of Broken Sword 2.5
-// Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdörfer
-//
-// Broken Sword 2.5 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.
-//
-// Broken Sword 2.5 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 Broken Sword 2.5; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-// -----------------------------------------------------------------------------
+/* 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.
-/*
- BS_Window
- ---------
- Simples Fensterklasseninterface.
- Ist nur aus Gründen der Portabilität in einer Klasse gekapselt.
- TODO: Für andere Betriebssysteme implementieren
+ * 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.
- Autor: Malte Thiesen
-*/
+ * 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$
+ * $Id$
+ *
+ * BS_Window
+ * ---------
+ * Simple window class interface. This is being encapsulated in a class for
+ * reasons of portability.
+ *
+ * Autor: Malte Thiesen
+ */
#ifndef SWORD25_WINDOW_H
#define SWORD25_WINDOW_H
@@ -33,15 +35,17 @@
// Includes
#include "sword25/kernel/common.h"
-// Klassendefinition
+namespace Sword25 {
+
+// Class definitions
+
/**
- @brief Ein Simples Fensterklasseninterface.
-
- Fenster werden ausschließlich mit BS_Window::CreateBSWindow() erstellt. BS_Window wählt
- dann selbständig die richtige Klasse für das Betriebssystem aus.
-*/
-class BS_Window
-{
+ * A simple window class interface
+ *
+ * Windows are exclusively created by BS_Window::CreateBSWindow().
+ * BS_Windows selects the correct class for the environment.
+ */
+class BS_Window {
protected:
bool _InitSuccess;
bool _CloseWanted;
@@ -50,127 +54,111 @@ public:
virtual ~BS_Window(){};
/**
- @brief Gibt den Sichtbarkeitsstatus des Fensters zurück
- @return Gibt true zurück wenn das Fenster sichtbar ist, andernfalls false
- */
+ * Returns the visibility of the window.
+ */
virtual bool IsVisible() = 0;
+
/**
- @brief Setzt den Sichtbarkeitsstatus des Fensters
- @param Visible gibt an, ob das Fenster sichtbar oder versteckt sein soll
- */
+ * Sets the visibility of the window
+ * @param Visible Specifies whether the window should be visible or hidden
+ */
virtual void SetVisible(bool Visible) = 0;
/**
- @brief Gibt die Position des Fensters auf der X-Achse zurück
- @return Gibt die Position des Fensters auf der X-Achse zurück
- */
+ * Returns the X position of the window
+ */
virtual int GetX() = 0;
/**
- @brief Setzt die Position des Fensters auf der X-Achse
- @param X die X-Position des Fensters oder -1 für zentrierte Ausrichtung auf der X-Achse
- */
+ * Sets the X position of the window
+ * @paramX The new X position for the window, or -1 for centre aligned
+ */
virtual void SetX(int X) = 0;
/**
- @brief Gibt die Position des Fensters auf der Y-Achse zurück
- @return Gibt die Position des Fensters auf der Y-Achse zurück
- */
+ * Gets the Y position of the window
+ */
virtual int GetY() = 0;
/**
- @brief Setzt die Position des Fensters auf der Y-Achse
- @param Y die Y-Position des Fensters oder -1 für zentrierte Ausrichtung auf der Y-Achse
- */
+ * Sets the Y position of the window
+ * @param Y The new Y position for the window, or -1 for centre aligned
+ */
virtual void SetY(int X) = 0;
/**
- @brief Gibt die Position des Fensterinhaltes auf der X-Achse zurück
- @return Gibt die Position des Fensterinhaltes auf der X-Achse zurück
- */
+ * Returns the X position of the window's client area
+ */
virtual int GetClientX() = 0;
- /**
- @brief Gibt die Position des Fensterinhaltes auf der Y-Achse zurück
- @return Gibt die Position des Fensterinhaltes auf der Y-Achse zurück
- */
+ /**
+ * Returns the Y position of the window's client area
+ */
virtual int GetClientY() = 0;
/**
- @brief Gibt die Breite des Fensters ohne Rahmen zurück
- @return Gibt die Breite des Fensters ohne Rahmen zurück
- */
+ * Returns the width of the window without the frame
+ */
virtual int GetWidth() = 0;
/**
- @brief Setzt die Breite des Fensters ohne Rahmen
- @param Width die Breite des Fensters ohne Rahmen
- */
+ * Sets the width of the window without the frame
+ */
virtual void SetWidth(int Width) = 0;
/**
- @brief Gibt die Höhe des Fensters ohne Rahmen und Kopfzeile zurück
- @return Gibt die Höhe des Fensters ohne Rahmen und Kopfzeile zurück
- */
+ * Gets the height of the window without the frame
+ */
virtual int GetHeight() = 0;
/**
- @brief Setzt die Höhe des Fensters ohne Rahmen und Kopfzeile
- @param Height die Höhe des Fensters ohne Rahmen und Kopfzeile
- */
+ * Sets the height of the window without the frame
+ */
virtual void SetHeight(int Height) = 0;
/**
- @brief Gibt den Titel der Fensters zurück
- @return Gibt den Titel des Fenster zurück
- */
- virtual std::string GetTitle() = 0;
+ * Returns the title of the window
+ */
+ virtual Common::String GetTitle() = 0;
/**
- @brief Setzt den Titel des Fensters
- @param Title der neue Titel des Fensters
+ * Sets the title of the window
+ * @param Title The new window title
*/
- virtual void SetTitle(std::string Title) = 0;
+ virtual void SetTitle(const Common::String &Title) = 0;
/**
- @brief Arbeitet die Windowmessages des Fensters ab.
- Diese Methode sollte während des Main-Loops aufgerufen werden.
- @return Gibt false zurück, falls das Fenster geschlossen wurde.
- */
+ * Handle the processing of any pending window messages. This method should be called
+ * during the main loop.
+ */
virtual bool ProcessMessages() = 0;
/**
- @brief Pausiert die Applikation bis das Fenster wieder den Focus hat oder geschlossen wurde.
- @return Gibt false zurück, falls das Fenster geschlossen wurde.
- */
+ * Pauses the applicaiton until the window has focus, or has been closed.
+ * Returns false if the window was closed.
+ */
virtual bool WaitForFocus() = 0;
/**
- @brief Gibt zurück, ob das Fenster den Focus hat.
- @return Gibt true zurück, wenn das Fenster den Focus hat, ansonsten false
- */
+ * Returns true if the window has focus, false otherwise.
+ */
virtual bool HasFocus() = 0;
/**
- @brief Gibt das Windowhandle, des Systems zurück.
- @return Das Windowhandle des Fensters
- @remark Wenn das Windowshandle benutzt wird, sind die entsprechenden Codeteile
- natürlich nicht mehr portable.
- */
+ * Returns the system handle that represents the window. Note that any use of the handle
+ * will not be portable code.
+ */
virtual unsigned int GetWindowHandle() = 0;
/**
- @brief Setzt den Rückgabewert für den nächsten Aufruf von CloseWanted. Sollte vom
- Fenster selbst verwendet werden, wenn es geschlossen werden möchte. Dieser
- Mechanismus erlaubt den Scripten abzufragen, wann das Hauptfenster geschlossen
- werden soll, und sich entsprechend zu beenden, bzw. beim Nutzer nachzufragen.
- **/
+ * Specifies whether the window is wanted to be closed. This is used together with CloseWanted()
+ * to allow scripts to query when the main window should be closed, or the user is asking it to close
+ **/
void SetCloseWanted(bool Wanted);
/**
- @brief Gibt einmal den Wert des letztes Aufrufs von SetCloseWanted zurück,
- und danach sofort wieder false, solange bis mit SetCloseWanted wieder
- ein neuer Wert gesetzt wird.
+ * Returns the previous value set in a call to SetCloseWanted.
+ * Note that calling this also resets the value back to false, until such time as the SetCloseWanted()
+ * method is called again.
**/
bool CloseWanted();
-
/**
- @brief Erstellt eine neue Fensterinstanz.
- @param X die X-Position des Fensters oder -1 für zentrierte Ausrichtung auf der X-Achse
- @param Y des Y-Position des Fensters oder -1 für zentrierte Ausrichtung auf der Y-Achsen
- @param Width die Breite des Fensters ohne Rahmen
- @param Height die Höhe des Fensters ohne Rahmen und Kopfzeile
- @param Visible gibt an, ob das Fenster dargestellt werden soll
- @return Gibt einen Pointer auf ein Fensterobjekt zurück, oder NULL wenn das Erstellen
- fehlgeschlagen ist.
- @remark Das Fenster muss nach Benutzung mit delete freigegeben werden!
- */
- static BS_Window* CreateBSWindow(int X, int Y, int Width, int Height, bool Visible);
+ * Creates a new window instance. Returns a pointer to the window, or NULL if the creation failed.
+ * Note: It is the responsibility of the client to free the pointer when done with it.
+ * @param X The X position of the window, or -1 for centre horizontal alignment
+ * @param Y The Y position of the window, or -1 for centre vertical alignment
+ * @param Width The width of the window without the frame
+ * @param Height The height of the window without the frame
+ * @param Visible Specifies whether window should be visible
+ */
+ static BS_Window *CreateBSWindow(int X, int Y, int Width, int Height, bool Visible);
};
+} // End of namespace Sword25
+
#endif
diff --git a/engines/sword25/package/packagemanager.h b/engines/sword25/package/packagemanager.h
index b6f7f1270f..77aaab257b 100755
--- a/engines/sword25/package/packagemanager.h
+++ b/engines/sword25/package/packagemanager.h
@@ -1,36 +1,39 @@
-// -----------------------------------------------------------------------------
-// This file is part of Broken Sword 2.5
-// Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdörfer
-//
-// Broken Sword 2.5 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.
-//
-// Broken Sword 2.5 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 Broken Sword 2.5; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-// -----------------------------------------------------------------------------
-
-/*
- BS_PackageManager
- -------------
- Dies ist das Package Manager Interface, dass alle Methoden enthält, die ein Package Manager
- implementieren muss.
- Beim Package Manager ist folgendes zu beachten:
- 1. es wird ein komplett neuer (virtueller) Verzeichnisbaum erstellt,
- in den Packages und Verzeichnisse gemounted werden können.
- 2. zum Trennen von Elementen eines Verzeichnisspfades wird '/' statt '\' verwendet.
- 3. LoadDirectoryAsPackage sollte nur zum Testen benutzt werden. Im Final Release sollen sich
- alle Dateien in echten Packages befinden.
-
- Autor: Malte Thiesen, $author$
-*/
+/* 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$
+ * $Id$
+ *
+ * BS_PackageManager
+ * -----------------
+ * This is the package manager interface, that contains all the methods that a package manager
+ * must implement.
+ * In the package manager, note the following:
+ * 1. It creates a completely new (virtual) directory tree in the packages and directories
+ * can be mounted.
+ * 2. To seperate elements of a directory path '/' must be used rather than '\'
+ * 3. LoadDirectoryAsPackage should only be used for testing. The final release will be
+ * have all files in packages.
+ *
+ * Autor: Malte Thiesen, $author$
+ */
#ifndef SWORD25_PACKAGE_MANAGER_H
#define SWORD25_PACKAGE_MANAGER_H
@@ -40,149 +43,148 @@
#include "sword25/kernel/kernel.h"
#include "sword25/kernel/service.h"
-// Klassendefinition
+namespace Sword25 {
+
+// Class definitions
+
/**
- @brief Das Package Manager Interface
-
- Beim Package Manager ist folgendes zu beachten:<br>
- 1. es wird ein komplett neuer (virtueller) Verzeichnisbaum erstellt,
- in den Packages und Verzeichnisse gemounted werden können.<br>
- 2. zum Trennen von Elementen eines Verzeichnisspfades wird '/' statt '\' verwendet.<br>
- 3. LoadDirectoryAsPackage sollte nur zum Testen benutzt werden. Im Final Release sollen sich
- alle Dateien in echten Packages befinden.
-*/
-class BS_PackageManager : public BS_Service
-{
+ * The Package Manager interface
+ *
+ * 1. It creates a completely new (virtual) directory tree in the packages and directories
+ * can be mounted.
+ * 2. To seperate elements of a directory path '/' must be used rather than '\'
+ * 3. LoadDirectoryAsPackage should only be used for testing. The final release will be
+ * have all files in packages.
+ */
+class BS_PackageManager : public BS_Service {
public:
BS_PackageManager(BS_Kernel* pKernel);
virtual ~BS_PackageManager() {};
- enum FILE_TYPES
- {
+ enum FILE_TYPES {
FT_DIRECTORY = (1<<0),
FT_FILE = (1<<1)
};
/**
- @brief Mit Instanzen dieses Objektes wird nach Dateien gesucht.
-
- Objekte diesen Types wird mit BS_PackageManager::CreateSearch erzeugt.
- */
- class FileSearch
- {
+ * File search class
+ *
+ * These objects are created with BS_PackageManager::CreateSearch
+ */
+ class FileSearch {
public:
virtual ~FileSearch(){};
/**
- @brief Gibt den Dateinamen der aktuellen Datei zurück.
- @return Gibt den Dateinamen der aktuellen Datei zurück.
- */
- virtual std::string GetCurFileName() = 0;
+ * Returns the filename of the current file
+ * @return Returns the filename of the current file
+ */
+ virtual Common::String GetCurFileName() = 0;
/**
- @brief Gibt den Typ der aktuellen Datei zurück.
- @return Gibt den Typ der aktuellen Datei zurück.<br>
- Dieses ist entweder BS_PackageManager::FT_FILE oder BS_PackageManager::FT_DIRECTORY.
- */
+ * Returns the type of the current file
+ * @return Returns the type of the current file
+ * This is either BS_PackageManager::FT_FILE or BS_PackageManager::FT_DIRECTORY.
+ */
virtual unsigned int GetCurFileType() = 0;
/**
- @brief Gibt die Größe der aktuellen Datei zurück.
- @return Gibt die Größe der aktuellen Datei zurück.<br>
- Bei Verzeichnissen ist dieser Wert immer 0.
- */
+ * Returns the size of the current file
+ * @return Returns the size of the current file
+ * For directories, this value is always 0
+ */
virtual unsigned int GetCurFileSize() = 0;
- // Sucht die nächste Datei
- // Gibt false zurück, falls keine weitere Datei gefunden wurde
+ // Finds the next file
+ // Returns false if no more files are found.
/**
- @brief Sucht die nächste Datei.
- @return Gibt false zurück, falls keine weitere Datei die Suchkriterien erfüllte.
+ * Finds the next file.
+ * @return Returns false if no other file fulfills the search criteria
*/
virtual bool NextFile() = 0;
};
/**
- @brief Mounted den Inhalt eines Packages in das angegebene Verzeichnis im virtuellen Verzeichnisbaum.
- @param FileName der Dateiname des zu mountenden Packages
- @param MountPosition der Verzeichnisname, unter dem das Package gemounted werden soll
- @return Gibt true zurück falls das mounten erfolgreich war, andernfalls false.
+ * Mounts the contents of a package in the directory specified in the virtual directory tree.
+ * @param FileName The filename of the package to mount
+ * @param MountPosition The directory name under which the package should be mounted
+ * @return Returns true if the mount was successful, otherwise false.
*/
- virtual bool LoadPackage(const std::string& FileName, const std::string& MountPosition) = 0;
+ virtual bool LoadPackage(const Common::String &FileName, const Common::String &MountPosition) = 0;
/**
- @brief Mounted den Inhalt eines Verzeichnisses in das angegebene Verzeichnis im virtuellen Verzeichnisbaum.
- @param DirectoryName der Name des zu mountenden Verzeichnisses
- @param MountPosition der Verzeichnisname, unter dem das Verzeichnis gemounted werden soll
- @return Gibt true zurück falls das mounten erfolgreich war, andernfalls false.
+ * Mounts the contents of a directory in the specified directory in the virtual directory tree.
+ * @param The name of the directory to mount
+ * @param MountPosition The directory name under which the package should be mounted
+ * @return Returns true if the mount was successful, otherwise false.
*/
- virtual bool LoadDirectoryAsPackage(const std::string& DirectoryName, const std::string& MountPosition) = 0;
+ virtual bool LoadDirectoryAsPackage(const Common::String &DirectoryName, const Common::String &MountPosition) = 0;
/**
- @brief Lädt eine Datei aus dem virtuellen Verzeichnisbaum.
- @param FileName der Dateiname der zu ladenden Datei
- @param pFileSize Pointer auf die Variable, die die Größe der geladenen Datei enthalten soll<br>
- Der Standardwert ist NULL.
- @return Gibt einen Pointer auf die Dateidaten zürück, oder NULL, wenn die Datei nicht geladen werden konnte.
- @remark Es darf nicht vergessen werden, die Dateidaten nach Benutzung mit BE_DELETE_A freizugeben.
- */
- virtual void* GetFile(const std::string& FileName, unsigned int* pFileSize = NULL) = 0;
+ * Downloads a file from the virtual directory tree
+ * @param FileName The filename of the file to load
+ * @param pFileSize Pointer to the variable that will contain the size of the loaded file. The deafult is NULL.
+ * @return Specifies a pointer to the loaded data of the file
+ * @remark The client must not forget to release the data of the file using BE_DELETE_A.
+ */
+ virtual void *GetFile(const Common::String &FileName, unsigned int *pFileSize = NULL) = 0;
/**
- @brief Gibt den Pfad zum aktuellen Verzeichnis zurück.
- @return Gibt einen String zurück, der den Pfad zum aktuellen Verzeichnis enthält.<br>
- Falls der Pfad nicht bestimmt werden konnte wird ein leerer String zurückgegeben.
- @remark Zum Trennen von Pfadelementen wird "/" und nicht "\" verwendet.
- */
- virtual std::string GetCurrentDirectory() = 0;
+ * Returns the path to the current directory.
+ * @return Returns a string containing the path to the current directory.
+ * If the path could not be determined, an empty string is returned.
+ * @remark For cutting path elements '\' is used rather than '/' elements.
+ */
+ virtual Common::String GetCurrentDirectory() = 0;
/**
- @brief Wechselt das aktuelle Verzeichnis.
- @param Directory ein String der das Verzeichnis bezeichnet, in dass gewechselt werden soll.<br>
- Die Pfadangabe darf relativ sein.
- @return Gibt true zurück, falls der Vorgang erfolgreich war, ansonsten false.
- @remark Zum Trennen von Pfadelementen wird "/" und nicht "\" verwendet.
- */
- virtual bool ChangeDirectory(const std::string& Directory) = 0;
+ * Changes the current directory.
+ * @param Directory The path to the new directory. The path can be relative.
+ * @return Returns true if the operation was successful, otherwise false.
+ * @remark For cutting path elements '\' is used rather than '/' elements.
+ */
+ virtual bool ChangeDirectory(const Common::String& Directory) = 0;
/**
- @brief Gibt den absoluten Pfad zu einer Datei im virtuellen Verzeichnisbaum zurück.
- @param FileName der Dateiname der Datei, deren absoluter Pfad bestimmt werden soll.<br>
- Diese Parameter kann sowohl relative als auch absolute Pfadangaben beinhalten.
- @return Gibt einen String zurück, der den absoluten Pfad zur übergebenen Datei enthält.<br>
- Falls der absolute Pfad nicht bestimmt werden konnte, wird ein leerer String zurückgegeben.
- @remark Zum Trennen von Pfadelementen wird "/" und nicht "\" verwendet.
- */
- virtual std::string GetAbsolutePath(const std::string& FileName) = 0;
+ * Returns the absolute path to a file in the virtual directory tree.
+ * @param FileName The filename of the file whose absolute path is to be determined.
+ * These parameters may include both relative and absolute paths.
+ * @return Returns an absolute path to the given file.
+ * @remark For cutting path elements '\' is used rather than '/' elements.
+ */
+ virtual Common::String GetAbsolutePath(const Common::String& FileName) = 0;
/**
- @brief Erstellt ein BS_PackageManager::FileSearch Objekt mit dem Nach Dateien gesucht werden kann.
- @param Filter gibt den Suchstring an. Dieser darf die Wildcards '*' und '?' enthalten.
- @param Path gibt das Verzeichnis an, welches durchsucht werden soll.
- @param TypeFilter ist eine Kombination der Flags BS_PackageManager::FT_DIRECTORY und BS_PackageManager::FT_FILE.<br>
- Diese Flags geben an, ob nach Dateien oder Verzeichnissen oder beiden gesucht werden soll.<br>
- Der Standardwert ist BS_PackageManager::FT_DIRECTORY | BS_PackageManager::FT_FILE.
- @return Gibt einen Pointer auf ein BS_PackageManager::FileSearch Objekt zurück, oder NULL wenn keine Datei gefunden wurde.
- @remark Nicht vergessen, das Objekt nach Benutzung mit delete freizugeben.
+ * Creates a BS_PackageManager::FileSearch object to search for files
+ * @param Filter Specifies the search string. Wildcards of '*' and '?' are allowed
+ * @param Path Specifies the directory that should be searched.
+ * @param TypeFilter A combination of flags BS_PackageManager::FT_DIRECTORY and BS_PackageManager::FT_FILE.
+ * These flags indicate whether to search for files, directories, or both.
+ * The default is BS_PackageManager::FT_DIRECTORY | BS_PackageManager::FT_FILE
+ * @return Specifies a pointer to a BS_PackageManager::FileSearch object, or NULL if no file was found.
+ * @remark Do not forget to delete the object after use.
*/
- virtual FileSearch* CreateSearch(const std::string& Filter, const std::string& Path, unsigned int TypeFilter = FT_DIRECTORY | FT_FILE) = 0;
+ virtual FileSearch *CreateSearch(const Common::String &Filter, const Common::String &Path, unsigned int TypeFilter = FT_DIRECTORY | FT_FILE) = 0;
/**
- * @brief Gibt die Dateigröße zurück.
- * @param FileName die Datei.
- * @return die Dateigröße. Im Falle eines Fehlers wird 0xffffffff zurückgegeben.
- * @remarks Bei komprimierten Containern wird die unkomprimierte Größe zurückgegeben.
+ * Returns a file's size
+ * @param FileName The filename
+ * @return The file size. If an error occurs, then 0xffffffff is returned.
+ * @remarks For files in packages, then uncompressed size is returned.
**/
- virtual unsigned int GetFileSize(const std::string& FileName) = 0;
+ virtual unsigned int GetFileSize(const Common::String &FileName) = 0;
/**
- @brief Gibt den Typ einer Datei zurück.
- @param FileName der Dateiname
- @return Gibt den Dateityp zurück (BS_PackageManager::FT_DIRECTORY oder BS_PackageManager::FT_FILE).<br>
- Falls die Datei nicht gefunden wurde wird 0 zurückgegeben.
- */
- virtual unsigned int GetFileType(const std::string & FileName) = 0;
+ * Returns the type of a file.
+ * @param FileName The filename
+ * @return Returns the file type, either (BS_PackageManager::FT_DIRECTORY
+ * or BS_PackageManager::FT_FILE).
+ * If the file was not found, then 0 is returned.
+ */
+ virtual unsigned int GetFileType(const Common::String &FileName) = 0;
/**
- @brief Bestimmt, ob eine Datei existiert.
- @param FileName der Dateiname
- @return Gibt true zurück, wenn die Datei existiert, ansonsten false.
+ * Determines whether a file exists
+ * @param FileName The filename
+ * @return Returns true if the file exists, otherwise false.
*/
- virtual bool FileExists(const std::string & FileName) = 0;
+ virtual bool FileExists(const Common::String & FileName) = 0;
private:
bool _RegisterScriptBindings();
};
+} // ENd of namespace Sword25
+
#endif
diff --git a/engines/sword25/script/script.h b/engines/sword25/script/script.h
index c00ccdd808..e33e884607 100755
--- a/engines/sword25/script/script.h
+++ b/engines/sword25/script/script.h
@@ -1,21 +1,27 @@
-// -----------------------------------------------------------------------------
-// This file is part of Broken Sword 2.5
-// Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdörfer
-//
-// Broken Sword 2.5 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.
-//
-// Broken Sword 2.5 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 Broken Sword 2.5; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-// -----------------------------------------------------------------------------
+/* 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$
+ * $Id$
+ *
+ */
#ifndef SWORD25_SCRIPT_H
#define SWORD25_SCRIPT_H
@@ -24,14 +30,13 @@
// Includes
// -----------------------------------------------------------------------------
+#include "common/array.h"
+#include "common/str.h"
#include "sword25/kernel/common.h"
#include "sword25/kernel/service.h"
#include "sword25/kernel/persistable.h"
-#include "sword25/kernel/memlog_off.h"
-#include <vector>
-#include <string>
-#include "sword25/kernel/memlog_on.h"
+namespace Sword25 {
// -----------------------------------------------------------------------------
// Forward declarations
@@ -45,55 +50,54 @@ class BS_InputPersistenceBlock;
// Class declaration
// -----------------------------------------------------------------------------
-class BS_ScriptEngine : public BS_Service, public BS_Persistable
-{
+class BS_ScriptEngine : public BS_Service, public BS_Persistable {
public:
// -----------------------------------------------------------------------------
- // Konstruktion / Destruktion
+ // Constructor / destructor
// -----------------------------------------------------------------------------
BS_ScriptEngine(BS_Kernel * KernelPtr) : BS_Service(KernelPtr) {};
virtual ~BS_ScriptEngine() {};
// -----------------------------------------------------------------------------
- // DIESE METHODEN MÜSSEN VON DER SCRIPTENGINE IMPLEMENTIERT WERDEN
+ // This method must be implemented by the script engine
// -----------------------------------------------------------------------------
/**
- @brief Initialisiert die Scriptengine.
- @return Gibt true bei Erfolg zurück, ansonsten false.
- */
+ * Initialises the scrip tengine. Returns true if successful, false otherwise.
+ */
virtual bool Init() = 0;
/**
- @brief Lädt eine Skriptdatei und führt diese aus.
- @param FileName der Dateiname der Skriptdatei
- @return Gibt true bei Erfolg zurück, ansonsten false.
+ * Loads a script file and executes it.
+ * @param FileName The script filename
*/
- virtual bool ExecuteFile(const std::string & FileName) = 0;
+ virtual bool ExecuteFile(const Common::String &FileName) = 0;
/**
- @brief Führt einen String mit Skriptcode aus.
- @param Code ein String der Skriptcode enthält.
- @return Gibt true bei Erfolg zurück, ansonsten false.
- */
- virtual bool ExecuteString(const std::string & Code) = 0;
+ * Executes a specified script fragment
+ * @param Code String of script code
+ */
+ virtual bool ExecuteString(const Common::String &Code) = 0;
/**
- @brief Gibt einen Pointer auf das Hauptobjekt der Skriptsprache zurück.
- @remark Durch die Benutzung dieser Methode wird die Kapselung der Sprache vom Rest der Engine aufgehoben.
- */
+ * Returns a pointer to the main object of the script engine
+ * Note: Using this method breaks the encapsulation of the language from the rest of the engine.
+ */
virtual void * GetScriptObject() = 0;
/**
- @brief Macht die Kommandozeilen-Parameter für die Skriptumgebung zugänglich.
- @param CommandLineParameters ein string vector der alle Kommandozeilenparameter enthält.
- @remark Auf welche Weise die Kommandozeilen-Parameter durch Skripte zugegriffen werden können hängt von der jeweiligen Implementierung ab.
+ * Makes the command line parameters for the script environment available
+ * Note: How the command line parameters will be used by scripts is dependant on the
+ * particular implementation.
+ * @param CommandLineParameters List containing the command line parameters
*/
- virtual void SetCommandLine(const std::vector<std::string> & CommandLineParameters) = 0;
+ virtual void SetCommandLine(const Common::Array<Common::String> &CommandLineParameters) = 0;
- virtual bool Persist(BS_OutputPersistenceBlock & Writer) = 0;
- virtual bool Unpersist(BS_InputPersistenceBlock & Reader) = 0;
+ virtual bool Persist(BS_OutputPersistenceBlock &Writer) = 0;
+ virtual bool Unpersist(BS_InputPersistenceBlock &Reader) = 0;
};
+} // End of namespace Sword25
+
#endif
diff --git a/engines/sword25/sfx/soundengine.h b/engines/sword25/sfx/soundengine.h
index 8258508047..095e35ee9e 100755
--- a/engines/sword25/sfx/soundengine.h
+++ b/engines/sword25/sfx/soundengine.h
@@ -1,33 +1,37 @@
-// -----------------------------------------------------------------------------
-// This file is part of Broken Sword 2.5
-// Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdörfer
-//
-// Broken Sword 2.5 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.
-//
-// Broken Sword 2.5 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 Broken Sword 2.5; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-// -----------------------------------------------------------------------------
-
-/*
- BS_SoundEngine
- -------------
- Dies ist das Soundengine Interface, dass alle Methoden enthält, die eine Soundengine
- implementieren muss.
- Implementationen der Soundengine müssen von dieser Klasse abgeleitet werden.
- Es gilt zu beachten, dass eine Soundengine eine Liste mit ALLEN geladenen Samplen enthalten
- muss, und dass diese Samples beim Aufruf des Destruktors freigegeben werden.
-
- Autor: Malte Thiesen
-*/
+/* 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$
+ * $Id$
+ *
+ * BS_SoundEngine
+ * -------------
+ * This is the sound engine interface that contains all the methods a sound
+ * engine must implement.
+ * Implementations of the sound engine have to be derived from this class.
+ * It should be noted that a sound engine must maintain a list of all the
+ * samples it uses, and that these samples should be released when the
+ * destructor is called.
+ *
+ * Autor: Malte Thiesen
+ */
#ifndef SWORD25_SOUNDENGINE_H
#define SWORD25_SOUNDENGINE_H
@@ -40,214 +44,220 @@
#include "sword25/kernel/resservice.h"
#include "sword25/kernel/persistable.h"
+namespace Sword25 {
+
// -----------------------------------------------------------------------------
-// Klassendefinition
+// Class definitions
// -----------------------------------------------------------------------------
-class BS_SoundEngine : public BS_ResourceService, public BS_Persistable
-{
+class BS_SoundEngine : public BS_ResourceService, public BS_Persistable {
public:
// -----------------------------------------------------------------------------
- // Enums und Typen
+ // Enums and Types
// -----------------------------------------------------------------------------
- enum SOUND_TYPES
- {
+ enum SOUND_TYPES {
MUSIC = 0,
SPEECH = 1,
SFX = 2
};
/**
- @brief Die Callbackfunktion von PlayDynamicSoundEx
- @param UserData Benutzerspezifizierter Pointer
- @param Data Pointer auf den zu beschreibenden Puffer
- @param DataLength Länge der zu schreibenden Daten in Byte
+ * The callback function of PlayDynamicSoundEx
+ * @param UserData User-specified pointer
+ * @param Data Pointer to the data buffer
+ * @param DataLength Length of the data to be written in bytes
*/
- typedef void (*DynamicSoundReadCallback)(void * UserData, void * Data, unsigned int DataLength);
+ typedef void (*DynamicSoundReadCallback)(void *UserData, void *Data, unsigned int DataLength);
// -----------------------------------------------------------------------------
- // Konstruktion / Destruktion
+ // Constructor / destructor
// -----------------------------------------------------------------------------
BS_SoundEngine(BS_Kernel* pKernel);
virtual ~BS_SoundEngine() {};
// --------------------------------------------------------------
- // DIESE METHODEN MÜSSEN VON DER SOUNDENGINE IMPLEMENTIERT WERDEN
+ // THIS METHOD MUST BE IMPLEMENTED BY THE SOUND ENGINE
// --------------------------------------------------------------
/**
- @brief Initialisiert die Sound-Engine
- @param SampleRate Gibt die zu nutzende SampleRate an
- @param Channels die maximale Anzahl der Kanäle.<br>
- Der Standardwert ist 32.
- @return Gibt bei Erfolg TRUE, ansonsten FALSE zurück
- @remark Aufrufe an allen anderen Methoden dürfen erst erfolgen, wenn diese Methode erfolgreich aufgerufen wurde.
- */
+ * Initialises the sound engine
+ * @param SampleRate Specifies the sample rate to use.
+ * @param Channels The maximum number of channels. The default is 32.
+ * @return Returns true on success, otherwise false.
+ * @remark Calls to other methods may take place only if this
+ * method was called successfully.
+ */
virtual bool Init(unsigned int SampleRate, unsigned int Channels = 32) = 0;
/**
- @brief Führt einen "Tick" der Sound-Engine aus
-
- Diese Methode sollte ein mal pro Frame aufgerufen werden. Sie dient dazu Implementationen der Sound-Engine zu ermöglichen,
- die nicht in einem eigenen Thread laufen oder zusätzliche Verwaltungsaufgaben durchführen müssen.
- */
+ * Performs a "tick" of the sound engine
+ *
+ * This method should be called once per frame. It can be used by implementations
+ * of the sound engine that are not running in their own thread, or to perform
+ * additional administrative tasks that are needed.
+ */
virtual void Update() = 0;
/**
- @brief Setzt die Standardlautstärke für die verschiedenen Soundtypen
- @param Volume die Standardlautstärke (0 = aus, 1 = volle Lautstärke)
- @param Type der Soundtyp dessen Lautstärke geändert werden soll
- */
+ * Sets the default volume for the different sound types
+ * @param Volume The default volume level (0 = off, 1 = full volume)
+ * @param Type The SoundType whose volume is to be changed
+ */
virtual void SetVolume(float Volume, SOUND_TYPES Type) = 0;
/**
- @brief Gibt die Standardlautstärke der verschiedenen Soundtypen
- @param Type der Soundtyp
- @return Gibt die Standardlautstärke des übergebenen Soundtyps zurück (0 = aus, 1 = volle Laustärke)
+ * Specifies the default volume of different sound types
+ * @param Type The SoundType
+ * @return Returns the standard sound volume for the given type
+ * (0 = off, 1 = full volume).
*/
virtual float GetVolume(SOUND_TYPES Type) = 0;
/**
- @brief Pausiert alle Sounds die gerade spielen
- */
+ * Pauses all the sounds that are playing.
+ */
virtual void PauseAll() = 0;
/**
- @brief Setzt alle gestoppten Sounds fort
- */
+ * Resumes all currently stopped sounds
+ */
virtual void ResumeAll() = 0;
/**
- @brief Pausiert alle Sounds eines bestimmten Sound-Layers
- @param Layer ein Soundlayer
+ * Pauses all sounds of a given layer.
+ * @param Layer The Sound Layer
*/
virtual void PauseLayer(unsigned int Layer) = 0;
/**
- @brief Setzt alle Sounds eines Layers fort, die mit PauseLayer() zuvor gestoppt wurden
- @param Layer ein Soundlayer
+ * Resumes all the sounds in a layer that was previously stopped with PauseLayer()
+ * @param Layer The Sound Layer
*/
virtual void ResumeLayer(unsigned int Layer) = 0;
/**
- @brief Spielt einen Sound ab
- @param FileName der Dateiname des abzuspielenden Sounds
- @param Type der Typ des Sounds
- @param Volume die Lautstärke mit der der Soundabgespielt werden soll (0 = aus, 1 = volle Lautstärke)
- @param Pan das Panning (-1 = ganz links, 1 = ganz rechts)
- @param Loop gibt an ob der Sound geloopt werden soll
- @param LoopStart gibt den Start-Looppoint an. Wenn ein Wert kleiner als 0 übergeben wird, wird der Start des Sounds benutzt.
- @param LoopEnd gibt den End-Looppoint an. Wenn ein Wert kleiner als 0 übergeben wird, wird das Ende des Sounds benutzt.
- @param Layer der Soundlayer
- @return Gibt true zurück, wenn das Abspielen des Sounds eingeleitet werden konnte.
- @remark Falls eine erweiterte Kontrolle über das Abspielen benötigt wird, z.B. das Ändern der Soundparameter
- Volume und Panning während des Abspielvorgangens, sollte PlaySoundEx benutzt werden.
+ * Plays a sound
+ * @param FileName The filename of the sound to be played
+ * @param Type The type of sound
+ * @param Volume The volume of the sound (0 = off, 1 = full volume)
+ * @param Pan Panning (-1 = full left, 1 = right)
+ * @param Loop Indicates whether the sound should be looped
+ * @param LoopStart Indicates the starting loop point. If a value less than 0 is passed, the start
+ * of the sound is used.
+ * @param LoopEnd Indicates the ending loop point. If a avlue is passed less than 0, the end of
+ * the sound is used.
+ * @param Layer The sound layer
+ * @return Returns true if the playback of the sound was started successfully.
+ * @remark If more control is needed over the playing, eg. changing the sound parameters
+ * for Volume and Panning, then PlaySoundEx should be used.
*/
virtual bool PlaySound(const std::string& FileName, SOUND_TYPES Type, float Volume = 1.0f, float Pan = 0.0f, bool Loop = false, int LoopStart = -1, int LoopEnd = -1, unsigned int Layer = 0) = 0;
/**
- @brief Spielt einen Sound ab
- @param FileName der Dateiname des abzuspielenden Sounds
- @param Type der Typ des Sounds
- @param Volume die Lautstärke mit der der Soundabgespielt werden soll (0 = aus, 1 = volle Lautstärke)
- @param Pan das Panning (-1 = ganz links, 1 = ganz rechts)
- @param Loop gibt an ob der Sound geloopt werden soll
- @param LoopStart gibt den Start-Looppoint an. Wenn ein Wert kleiner als 0 übergeben wird, wird der Start des Sounds benutzt.
- @param LoopEnd gibt den End-Looppoint an. Wenn ein Wert kleiner als 0 übergeben wird, wird das Ende des Sounds benutzt.
- @param Layer der Soundlayer
- @return Gibt ein Handle auf den Sounds zurück. Mit diesem Handle kann der Sound während des Abspielens manipuliert werden.
- @remark Falls eine erweiterte Kontrolle über das Abspielen benötigt wird, z.B. das Ändern der Soundparameter
- Volume und Panning während des Abspielvorgangens, sollte PlaySoundEx benutzt werden.
- */
+ * Plays a sound
+ * @param Type The type of sound
+ * @param Volume The volume of the sound (0 = off, 1 = full volume)
+ * @param Pan Panning (-1 = full left, 1 = right)
+ * @param Loop Indicates whether the sound should be looped
+ * @param LoopStart Indicates the starting loop point. If a value less than 0 is passed, the start
+ * of the sound is used.
+ * @param LoopEnd Indicates the ending loop point. If a avlue is passed less than 0, the end of
+ * the sound is used.
+ * @param Layer The sound layer
+ * @return Returns a handle to the sound. With this handle, the sound can be manipulated during playback.
+ * @remark If more control is needed over the playing, eg. changing the sound parameters
+ * for Volume and Panning, then PlaySoundEx should be used.
+ */
virtual unsigned int PlaySoundEx(const std::string& FileName, SOUND_TYPES Type, float Volume = 1.0f, float Pan = 0.0f, bool Loop = false, int LoopStart = -1, int LoopEnd = -1, unsigned int Layer = 0) = 0;
/**
- @brief Spielt einen zur Laufzeit generierten Sound ab
- @param ReadCallback ein Pointer auf eine Callbackfunktion, die aufgerufen wird, wenn Sounddaten benötigt werden.<br>
- Nähere Details zu dieser Funktion gibt es bei der Dokumentation von DynamicSoundReadCallback.
- @param UserData ein Pointer auf benutzerdefinierte Daten. Diese werden der Callback-Funktion bei jedem Aufruf übergeben.<br>
- Falls keine solche Daten benötigt werden, kann dieser Parameter auf 0 gesetzt werden.
- @param Type der Typ des Sounds
- @param SampleRate die Sample-Rate des Sounds
- @param BitsPerSample die Größe eines Samples in Bits. Hiermit sind tatsächlich nur einzelne Sample gemeint, diese Angabe ist unabhängig von der Anzahl der Kanäle.<br>
- Erlaubte Werte sind 8, 16, 24 und 32.
- @param Channels die Anzahl der Kanäle.<br>
- Erlaubte Werte sind 1 und 2.
- @param Volume die Lautstärke mit der der Soundabgespielt werden soll (0 = aus, 1 = volle Lautstärke)
- @param Pan das Panning (-1 = ganz links, 1 = ganz rechts)
- @param Layer der Soundlayer
- @return Gibt ein Handle auf den Sounds zurück. Mit diesem Handle kann der Sound während des Abspielens manipuliert werden.
- @remark Dynamische Sounds können nicht persistiert werden.
- */
- virtual unsigned int PlayDynamicSoundEx(DynamicSoundReadCallback ReadCallback, void * UserData, SOUND_TYPES Type, unsigned int SampleRate, unsigned int BitsPerSample, unsigned int Channels, float Volume = 1.0f, float Pan = 0.0f, unsigned int Layer = 0) = 0;
+ * Plays a sound generated at runtime
+ * @param ReadCallback A pointer to a callback function that is called when sound data is needed.
+ * See the documentation for DynamicSoundReadCallback for more information.
+ * @param UserData A pointer to the data. These are passed to the callback function each time.
+ * If no such data is needed, this parameter can be set to NULL.
+ * @param Type The type of sound
+ * @param SampleRate The sample rate for the sound
+ * @param BitsPerSample The size of the sample in bits. This statement is independant of the number of
+ * channels. Allowed values are 8, 16, 24, and 32.
+ * @param Channels The number of channels. Allowed values are 1 and 2.
+ * @param Volume The volume of the sound (0 = off, 1 = full volume)
+ * @param Pan Panning (-1 = full left, 1 = right)
+ * @param Layer The sound layer
+ * @return Returns a handle to the sound. With this handle, the sound can be manipulated during playback.
+ * @remark Dynamic sounds cannot be persisted.
+ */
+ virtual unsigned int PlayDynamicSoundEx(DynamicSoundReadCallback ReadCallback, void *UserData, SOUND_TYPES Type, unsigned int SampleRate, unsigned int BitsPerSample, unsigned int Channels, float Volume = 1.0f, float Pan = 0.0f, unsigned int Layer = 0) = 0;
/**
- @brief Setzt die Lautstärke eines spielenden Sounds
- @param Handle das Handle des Sounds
- @param Volume die Lautstärke mit der der Soundabgespielt werden soll (0 = aus, 1 = volle Lautstärke)
- */
+ * Sets the volume of a playing sound
+ * @param Handle The sound handle
+ * @param Volume The volume of the sound (0 = off, 1 = full volume)
+ */
virtual void SetSoundVolume(unsigned int Handle, float Volume) = 0;
/**
- @brief Setzt das Panning eines spielenden Sounds
- @param Handle das Handle des Sounds
- @param Pan das Panning (-1 = ganz links, 1 = ganz rechts)
- */
+ * Sets the panning of a playing sound
+ * @param Handle The sound handle
+ * @param Pan Panning (-1 = full left, 1 = right)
+ */
virtual void SetSoundPanning(unsigned int Handle, float Pan) = 0;
/**
- @brief Pausiert einen Sound
- @param Handle das Handle des Sounds
- */
+ * Pauses a playing sound
+ * @param Handle The sound handle
+ */
virtual void PauseSound(unsigned int Handle) = 0;
/**
- @brief Setzt einen Sound fort
- @param Handle das Handle des Sounds
- */
+ * Resumes a paused sound
+ * @param Handle The sound handle
+ */
virtual void ResumeSound(unsigned int Handle) = 0;
/**
- @brief Stoppt einen Sound
- @param Handle das Handle des Sounds
- @remark Nach einem Aufruf dieser Methode ist das Handle ungültig und darf nicht mehr benutzt werden.
- */
+ * Stops a playing sound
+ * @param Handle The sound handle
+ * @remark Calling this method invalidates the passed handle; it can no longer be used.
+ */
virtual void StopSound(unsigned int Handle) = 0;
/**
- @brief Gibt zurück, ob ein Sound pausiert ist
- @param Handle das Handle des Sounds
- @return Gibt true zurück, wenn der Sound pausiert ist, ansonsten false.
- */
+ * Returns whether a sound is paused
+ * @param Handle The sound handle
+ * @return Returns true if the sound is paused, false otherwise.
+ */
virtual bool IsSoundPaused(unsigned int Handle) = 0;
/**
- @brief Gibt zurück, ob ein Sound noch spielt
- @param Handle das Handle des Sounds
- @return Gibt true zurück, wenn der Sound noch spielt, ansonsten false.
+ * Returns whether a sound is still playing.
+ * @param Handle The sound handle
+ * @return Returns true if the sound is playing, false otherwise.
*/
virtual bool IsSoundPlaying(unsigned int Handle) = 0;
/**
- @brief Gibt die Lautstärke eines spielenden Sounds zurück (0 = aus, 1 = volle Lautstärke)
- */
+ * Returns the volume of a playing sound (0 = off, 1 = full volume)
+ */
virtual float GetSoundVolume(unsigned int Handle) = 0;
/**
- @brief Gibt das Panning eines spielenden Sounds zurück (-1 = ganz links, 1 = ganz rechts)
- */
+ * Returns the panning of a playing sound (-1 = full left, 1 = right)
+ */
virtual float GetSoundPanning(unsigned int Handle) = 0;
/**
- @brief Gibt die Position innerhalb des abgespielten Sounds in Sekunden zurück
- */
+ * Returns the position within a playing sound in seconds
+ */
virtual float GetSoundTime(unsigned int Handle) = 0;
private:
bool _RegisterScriptBindings();
};
+} // End of namespace Sword25
+
#endif
diff --git a/engines/sword25/sword25.cpp b/engines/sword25/sword25.cpp
index e69de29bb2..305cbc402f 100644
--- a/engines/sword25/sword25.cpp
+++ b/engines/sword25/sword25.cpp
@@ -0,0 +1,121 @@
+/* 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$
+ * $Id$
+ *
+ */
+
+#include "common/config-manager.h"
+#include "engines/util.h"
+
+#include "sword25/sword25.h"
+#include "kernel/kernel.h"
+
+namespace Sword25 {
+
+#define BS_LOG_PREFIX "MAIN"
+
+void LogToStdout(const char *Message) {
+ warning(Message);
+}
+
+Sword25Engine::Sword25Engine(OSystem *syst, const Sword25GameDescription *gameDesc):
+ Engine(syst),
+ _gameDescription(gameDesc) {
+}
+
+Sword25Engine::~Sword25Engine() {
+}
+
+Common::Error Sword25Engine::run() {
+ // Engine initialisation
+ Common::StringArray commandParameters;
+ if (!AppStart(commandParameters)) {
+ AppEnd();
+ error("A fatal error occured during engine startup");
+ }
+
+ // Run the game
+ bool RunSuccess = AppMain();
+
+ // Engine de-initialisation
+ bool DeinitSuccess = AppEnd();
+
+ return (RunSuccess && DeinitSuccess) ? Common::kNoError : Common::kUnknownError;
+}
+
+bool Sword25Engine::AppStart(const Common::StringArray &CommandParameters) {
+ // Alle Lognachrichten werden auch auf die Standardausgabe ausgegeben.
+ BS_Log::RegisterLogListener(LogToStdout);
+
+ // Kernel initialisieren.
+ if (!BS_Kernel::GetInstance()->GetInitSuccess())
+ {
+ BS_LOG_ERRORLN("Kernel initialization failed.");
+ return false;
+ }
+/*
+ // Package-Manager starten, damit die Packfiles geladen werden können.
+ BS_PackageManager * PackageManagerPtr = static_cast<BS_PackageManager *>(BS_Kernel::GetInstance()->NewService("package", PACKAGE_MANAGER));
+ if (!PackageManagerPtr)
+ {
+ BS_LOG_ERRORLN("Packagemanager initialization failed.");
+ return false;
+ }
+
+ // Packages laden oder das aktuelle Verzeichnis mounten, wenn das über Kommandozeile angefordert wurde.
+ if (find(CommandLineParameters.begin(), CommandLineParameters.end(), MOUNT_DIR_PARAMETER) != CommandLineParameters.end())
+ {
+ if (!PackageManagerPtr->LoadDirectoryAsPackage(".", "/")) return false;
+ }
+ else
+ {
+ if (!LoadPackages()) return false;
+ }
+
+ // Einen Pointer auf den Skript-Engine holen.
+ BS_ScriptEngine * ScriptPtr = static_cast<BS_ScriptEngine *>(BS_Kernel::GetInstance()->GetService("script"));
+ if (!ScriptPtr)
+ {
+ BS_LOG_ERRORLN("Skript intialization failed.");
+ return false;
+ }
+
+ // Die Kommandozeilen-Parameter der Skriptumgebung zugänglich machen.
+ ScriptPtr->SetCommandLine(CommandLineParameters);
+*/
+
+ return true;
+}
+
+bool Sword25Engine::AppMain() {
+ return false;
+}
+
+bool Sword25Engine::AppEnd() {
+
+ // Free the log file if it was used
+ BS_Log::_CloseLog();
+
+ return false;
+}
+
+} // End of namespace Sword25
diff --git a/engines/sword25/sword25.h b/engines/sword25/sword25.h
new file mode 100644
index 0000000000..c440a5f58f
--- /dev/null
+++ b/engines/sword25/sword25.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.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#ifndef SWORD25_H
+#define SWORD25_H
+
+#include "common/scummsys.h"
+#include "common/str-array.h"
+#include "common/util.h"
+#include "engines/engine.h"
+
+#include "sword25/kernel/log.h"
+
+namespace Sword25 {
+
+enum {
+ kFileTypeHash = 0
+};
+
+enum {
+ kDebugScript = 1 << 0
+};
+
+#define MESSAGE_BASIC 1
+#define MESSAGE_INTERMEDIATE 2
+#define MESSAGE_DETAILED 3
+
+struct Sword25GameDescription;
+
+class Sword25Engine : public Engine {
+private:
+ bool AppStart(const Common::StringArray &CommandParameters);
+ bool AppMain();
+ bool AppEnd();
+
+protected:
+ virtual Common::Error run();
+ void shutdown();
+
+public:
+ Sword25Engine(OSystem *syst, const Sword25GameDescription *gameDesc);
+ virtual ~Sword25Engine();
+
+ int getGameType() const;
+ uint32 getFeatures() const;
+ Common::Language getLanguage() const;
+ Common::Platform getPlatform() const;
+
+ const Sword25GameDescription *_gameDescription;
+};
+
+} // End of namespace Sword25
+
+#endif