aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorMartin Kiewitz2010-04-24 20:41:26 +0000
committerMartin Kiewitz2010-04-24 20:41:26 +0000
commitcbd8faa82ed129615fcaffaa86ac2d862ffcae58 (patch)
treeb15403f58b6d41800f5ba6dbd8f556c44bf7f36f /engines
parent0422560c5c1523f1854c44c42bf74a242e4df5f4 (diff)
downloadscummvm-rg350-cbd8faa82ed129615fcaffaa86ac2d862ffcae58.tar.gz
scummvm-rg350-cbd8faa82ed129615fcaffaa86ac2d862ffcae58.tar.bz2
scummvm-rg350-cbd8faa82ed129615fcaffaa86ac2d862ffcae58.zip
SCI: r48786 port updates were actually introduced during SCI01, qfg2 and xmas90ega only. We enable port updates only for non-multilingual SCI01 games now - fixes percentage bar for qfg1 japanese as well
svn-id: r48787
Diffstat (limited to 'engines')
-rw-r--r--engines/sci/event.cpp7
-rw-r--r--engines/sci/event.h2
-rw-r--r--engines/sci/graphics/animate.cpp18
-rw-r--r--engines/sci/graphics/animate.h4
-rw-r--r--engines/sci/graphics/gui.cpp4
-rw-r--r--engines/sci/graphics/gui.h2
-rw-r--r--engines/sci/sci.cpp8
7 files changed, 28 insertions, 17 deletions
diff --git a/engines/sci/event.cpp b/engines/sci/event.cpp
index 314427a547..5017dc6a63 100644
--- a/engines/sci/event.cpp
+++ b/engines/sci/event.cpp
@@ -36,11 +36,8 @@ namespace Sci {
#define SCANCODE_ROWS_NR 3
-SciEvent::SciEvent(ResourceManager *resMan)
- : _resMan(resMan) {
-
- // Check, if font of current game includes extended chars
- _fontIsExtended = _resMan->detectFontExtended();
+SciEvent::SciEvent(bool fontIsExtended)
+ : _fontIsExtended(fontIsExtended) {
}
SciEvent::~SciEvent() {
diff --git a/engines/sci/event.h b/engines/sci/event.h
index 86d622affb..4b40834eb6 100644
--- a/engines/sci/event.h
+++ b/engines/sci/event.h
@@ -113,7 +113,7 @@ struct sciEvent {
class SciEvent {
public:
- SciEvent(ResourceManager *resMan);
+ SciEvent(bool fontIsExtended);
~SciEvent();
sciEvent get(unsigned int mask);
diff --git a/engines/sci/graphics/animate.cpp b/engines/sci/graphics/animate.cpp
index b0b4fed427..8c355acb08 100644
--- a/engines/sci/graphics/animate.cpp
+++ b/engines/sci/graphics/animate.cpp
@@ -42,8 +42,8 @@
namespace Sci {
-GfxAnimate::GfxAnimate(EngineState *state, GfxCache *cache, GfxPorts *ports, GfxPaint16 *paint16, GfxScreen *screen, GfxPalette *palette, GfxCursor *cursor, GfxTransitions *transitions)
- : _s(state), _cache(cache), _ports(ports), _paint16(paint16), _screen(screen), _palette(palette), _cursor(cursor), _transitions(transitions) {
+GfxAnimate::GfxAnimate(EngineState *state, GfxCache *cache, GfxPorts *ports, GfxPaint16 *paint16, GfxScreen *screen, GfxPalette *palette, GfxCursor *cursor, GfxTransitions *transitions, bool fontIsExtended)
+ : _s(state), _cache(cache), _ports(ports), _paint16(paint16), _screen(screen), _palette(palette), _cursor(cursor), _transitions(transitions), _fontIsExtended(fontIsExtended) {
init();
}
@@ -66,6 +66,14 @@ void GfxAnimate::init() {
// (found in larry 1)
if (!_s->_segMan->findObjectByName("fastCast").isNull())
_ignoreFastCast = true;
+
+ // SCI01 introduced port-update calls, although only the non multilingual games qfg2 and xmas90ega
+ // So we enable those for SCI1+ games all the time and for SCI01 games that don't have extended fonts
+ _doPortUpdate = false;
+ if ((getSciVersion() == SCI_VERSION_01) && (!_fontIsExtended))
+ _doPortUpdate = true;
+ if (getSciVersion() > SCI_VERSION_01)
+ _doPortUpdate = true;
}
void GfxAnimate::disposeLastCast() {
@@ -631,13 +639,13 @@ void GfxAnimate::kernelAnimate(reg_t listReference, bool cycle, int argc, reg_t
fill(old_picNotValid);
if (old_picNotValid) {
- // beginUpdate()/endUpdate() were introduced SCI01
+ // beginUpdate()/endUpdate() were introduced SCI01 (xmas90ega and qfg2 only), in SCI1+ all the time
// calling those for SCI0 will work most of the time but breaks minor stuff like percentage bar of qfg1ega
// at the character skill screen
- if (getSciVersion() >= SCI_VERSION_01)
+ if (_doPortUpdate)
_ports->beginUpdate(_ports->_picWind);
update();
- if (getSciVersion() >= SCI_VERSION_01)
+ if (_doPortUpdate)
_ports->endUpdate(_ports->_picWind);
}
diff --git a/engines/sci/graphics/animate.h b/engines/sci/graphics/animate.h
index 2cc59b1767..5b349c969b 100644
--- a/engines/sci/graphics/animate.h
+++ b/engines/sci/graphics/animate.h
@@ -86,7 +86,7 @@ class GfxTransitions;
*/
class GfxAnimate {
public:
- GfxAnimate(EngineState *state, GfxCache *cache, GfxPorts *ports, GfxPaint16 *paint16, GfxScreen *screen, GfxPalette *palette, GfxCursor *cursor, GfxTransitions *transitions);
+ GfxAnimate(EngineState *state, GfxCache *cache, GfxPorts *ports, GfxPaint16 *paint16, GfxScreen *screen, GfxPalette *palette, GfxCursor *cursor, GfxTransitions *transitions, bool fontIsExtended);
virtual ~GfxAnimate();
// FIXME: Don't store EngineState
@@ -133,6 +133,8 @@ private:
AnimateEntry *_lastCastData;
bool _ignoreFastCast;
+ bool _fontIsExtended;
+ bool _doPortUpdate;
};
} // End of namespace Sci
diff --git a/engines/sci/graphics/gui.cpp b/engines/sci/graphics/gui.cpp
index 3316fadb56..02b1101ec2 100644
--- a/engines/sci/graphics/gui.cpp
+++ b/engines/sci/graphics/gui.cpp
@@ -51,7 +51,7 @@
namespace Sci {
-SciGui::SciGui(EngineState *state, GfxScreen *screen, GfxPalette *palette, GfxCache *cache, GfxCursor *cursor, GfxPorts *ports, AudioPlayer *audio)
+SciGui::SciGui(EngineState *state, GfxScreen *screen, GfxPalette *palette, GfxCache *cache, GfxCursor *cursor, GfxPorts *ports, AudioPlayer *audio, bool fontIsExtended)
: _s(state), _screen(screen), _palette(palette), _cache(cache), _cursor(cursor), _ports(ports), _audio(audio) {
// FIXME/TODO: If SciGui inits all the stuff below, then it should *own* it,
@@ -66,7 +66,7 @@ SciGui::SciGui(EngineState *state, GfxScreen *screen, GfxPalette *palette, GfxCa
_paint16 = new GfxPaint16(g_sci->getResMan(), _s->_segMan, g_sci->getKernel(), this, _cache, _ports, _coordAdjuster, _screen, _palette, _transitions);
g_sci->_gfxPaint = _paint16;
g_sci->_gfxPaint16 = _paint16;
- _animate = new GfxAnimate(_s, _cache, _ports, _paint16, _screen, _palette, _cursor, _transitions);
+ _animate = new GfxAnimate(_s, _cache, _ports, _paint16, _screen, _palette, _cursor, _transitions, fontIsExtended);
g_sci->_gfxAnimate = _animate;
_text16 = new GfxText16(g_sci->getResMan(), _cache, _ports, _paint16, _screen);
_controls = new GfxControls(_s->_segMan, _ports, _paint16, _text16, _screen);
diff --git a/engines/sci/graphics/gui.h b/engines/sci/graphics/gui.h
index 732e195026..acab798415 100644
--- a/engines/sci/graphics/gui.h
+++ b/engines/sci/graphics/gui.h
@@ -46,7 +46,7 @@ class GfxTransitions;
class SciGui {
public:
- SciGui(EngineState *s, GfxScreen *screen, GfxPalette *palette, GfxCache *cache, GfxCursor *cursor, GfxPorts *ports, AudioPlayer *audio);
+ SciGui(EngineState *s, GfxScreen *screen, GfxPalette *palette, GfxCache *cache, GfxCursor *cursor, GfxPorts *ports, AudioPlayer *audio, bool fontIsExtended);
virtual ~SciGui();
virtual void init(bool usesOldGfxFunctions);
diff --git a/engines/sci/sci.cpp b/engines/sci/sci.cpp
index 05752dac03..64c721cdb8 100644
--- a/engines/sci/sci.cpp
+++ b/engines/sci/sci.cpp
@@ -181,7 +181,11 @@ Common::Error SciEngine::run() {
_features = new GameFeatures(segMan, _kernel);
_gamestate = new EngineState(_vocabulary, segMan);
- _gamestate->_event = new SciEvent(_resMan);
+
+ // Detect extended font used in multilingual games
+ bool fontIsExtended = _resMan->detectFontExtended();
+
+ _gamestate->_event = new SciEvent(fontIsExtended);
if (script_init_engine(_gamestate))
return Common::kUnknownError;
@@ -198,7 +202,7 @@ Common::Error SciEngine::run() {
} else {
#endif
_gfxPorts = new GfxPorts(segMan, screen);
- _gui = new SciGui(_gamestate, screen, palette, cache, cursor, _gfxPorts, _audio);
+ _gui = new SciGui(_gamestate, screen, palette, cache, cursor, _gfxPorts, _audio, fontIsExtended);
#ifdef ENABLE_SCI32
_gui32 = 0;
_gfxFrameout = 0;