diff options
-rw-r--r-- | engines/sci/event.cpp | 7 | ||||
-rw-r--r-- | engines/sci/event.h | 2 | ||||
-rw-r--r-- | engines/sci/graphics/animate.cpp | 18 | ||||
-rw-r--r-- | engines/sci/graphics/animate.h | 4 | ||||
-rw-r--r-- | engines/sci/graphics/gui.cpp | 4 | ||||
-rw-r--r-- | engines/sci/graphics/gui.h | 2 | ||||
-rw-r--r-- | engines/sci/sci.cpp | 8 |
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; |