diff options
145 files changed, 1289 insertions, 855 deletions
@@ -3655,7 +3655,8 @@ if test "$_opengl" = auto ; then # Test the current header for OpenGL cat > $TMPC << EOF #include <$i> -int main(void) { return GL_VERSION_1_1; } +#include <stdio.h> +int main(void) { printf("ANTIVIRUS FALSE POSITIVE WORKAROUND"); return GL_VERSION_1_1; } EOF cc_check $DEFINES $OPENGL_CFLAGS $OPENGL_LIBS && _opengl=yes && break diff --git a/engines/agi/op_test.cpp b/engines/agi/op_test.cpp index 4d5e6fffe1..124a1cfcb7 100644 --- a/engines/agi/op_test.cpp +++ b/engines/agi/op_test.cpp @@ -82,7 +82,7 @@ void condIsSet(AgiGame *state, uint8 *p) { } void condIsSetV(AgiGame *state, uint8 *p) { - state->testResult = testIsSet(getvar(p[1])); + state->testResult = testIsSet(getvar(p[0])); } void condIsSetV1(AgiGame *state, uint8 *p) { diff --git a/engines/cge/text.cpp b/engines/cge/text.cpp index a8ce8777c5..27bb0608fd 100644 --- a/engines/cge/text.cpp +++ b/engines/cge/text.cpp @@ -68,7 +68,7 @@ int16 Text::count() { for (line = tf.readLine(); !tf.eos(); line = tf.readLine()) { char *s; - + assert(line.size() <= 513); strcpy(tmpStr, line.c_str()); if ((s = strtok(tmpStr, " =,;/\t\n")) == NULL) continue; @@ -101,7 +101,7 @@ void Text::load() { for (idx = 0, line = tf.readLine(); !tf.eos(); line = tf.readLine()) { int n = line.size(); char *s; - + assert(n <= 513); strcpy(tmpStr, line.c_str()); if ((s = strtok(tmpStr, " =,;/\t\n")) == NULL) continue; diff --git a/engines/cge/vga13h.cpp b/engines/cge/vga13h.cpp index e178795b7c..56a0754527 100644 --- a/engines/cge/vga13h.cpp +++ b/engines/cge/vga13h.cpp @@ -214,6 +214,7 @@ Sprite *Sprite::expand() { for (line = sprf.readLine(); !sprf.eos(); line = sprf.readLine()) { len = line.size(); + assert(len <= 513); strcpy(tmpStr, line.c_str()); lcnt++; if (len == 0 || *tmpStr == '.') diff --git a/engines/dreamweb/newplace.cpp b/engines/dreamweb/newplace.cpp index 5b4b0260f5..6b1f9d097b 100644 --- a/engines/dreamweb/newplace.cpp +++ b/engines/dreamweb/newplace.cpp @@ -140,7 +140,7 @@ void DreamWebEngine::putUnderCentre() { } void DreamWebEngine::locationPic() { - const int roomPics[] = { 5, 0, 3, 2, 4, 1, 10, 9, 8, 6, 11, 4, 7, 7, 0 }; + const int roomPics[] = { 5, 0, 3, 2, 4, 1, 10, 9, 8, 6, 11, 4, 7, 7, 0, 0 }; byte picture = roomPics[_destPos]; if (picture >= 6) diff --git a/engines/hopkins/graphics.cpp b/engines/hopkins/graphics.cpp index 15788338db..f978a5803f 100644 --- a/engines/hopkins/graphics.cpp +++ b/engines/hopkins/graphics.cpp @@ -644,13 +644,13 @@ void GraphicsManager::setColorPercentage2(int palIndex, int r, int g, int b) { _palette[palOffset + 1] = gv; _palette[palOffset + 2] = bv; - WRITE_LE_UINT16(&_paletteBuffer[2 * palIndex], mapRGB(rv, gv, bv)); + WRITE_UINT16(&_paletteBuffer[2 * palIndex], mapRGB(rv, gv, bv)); } void GraphicsManager::changePalette(const byte *palette) { const byte *srcP = &palette[0]; for (int idx = 0; idx < PALETTE_SIZE; ++idx, srcP += 3) { - WRITE_LE_UINT16(&_paletteBuffer[2 * idx], mapRGB(srcP[0], srcP[1], srcP[2])); + WRITE_UINT16(&_paletteBuffer[2 * idx], mapRGB(srcP[0], srcP[1], srcP[2])); } } diff --git a/engines/hopkins/saveload.cpp b/engines/hopkins/saveload.cpp index 0576b851cd..af0b043641 100644 --- a/engines/hopkins/saveload.cpp +++ b/engines/hopkins/saveload.cpp @@ -292,7 +292,7 @@ void SaveLoadManager::convertThumb16To8(Graphics::Surface *thumb16, Graphics::Su byte paletteG[PALETTE_SIZE]; byte paletteB[PALETTE_SIZE]; for (int palIndex = 0; palIndex < PALETTE_SIZE; ++palIndex) { - uint16 p = READ_LE_UINT16(&_vm->_graphicsMan->_palettePixels[palIndex * 2]); + uint16 p = READ_UINT16(&_vm->_graphicsMan->_palettePixels[palIndex * 2]); pixelFormat16.colorToRGB(p, paletteR[palIndex], paletteG[palIndex], paletteB[palIndex]); } diff --git a/engines/kyra/gui_eob.cpp b/engines/kyra/gui_eob.cpp index ed3aaefbd9..9b4c09d7f4 100644 --- a/engines/kyra/gui_eob.cpp +++ b/engines/kyra/gui_eob.cpp @@ -1300,24 +1300,24 @@ void EoBCoreEngine::gui_processWeaponSlotClickRight(int charIndex, int slotIndex case 14: // Potion - usePotion(charIndex, wslot); + usePotion(charIndex, slotIndex); break; case 18: - useWand(charIndex, wslot); + useWand(charIndex, slotIndex); break; case 19: // eob2 horn - useHorn(charIndex, wslot); + useHorn(charIndex, slotIndex); break; case 20: if (vl == 1) inflictCharacterDamage(charIndex, 200); else - useMagicScroll(charIndex, 55, wslot); - deleteInventoryItem(charIndex, wslot); + useMagicScroll(charIndex, 55, slotIndex); + deleteInventoryItem(charIndex, slotIndex); break; default: @@ -2056,9 +2056,8 @@ void GUI_EoB::runCampMenu() { if (inputFlag == _vm->_keyMap[Common::KEYCODE_ESCAPE]) inputFlag = 0x8007; - else if (inputFlag == _vm->_keyMap[Common::KEYCODE_KP5] || inputFlag == _vm->_keyMap[Common::KEYCODE_SPACE] || inputFlag == _vm->_keyMap[Common::KEYCODE_RETURN]) { + else if (prevHighlightButton && (inputFlag == _vm->_keyMap[Common::KEYCODE_KP5] || inputFlag == _vm->_keyMap[Common::KEYCODE_SPACE] || inputFlag == _vm->_keyMap[Common::KEYCODE_RETURN])) inputFlag = 0x8000 + prevHighlightButton->index; - } Button *clickedButton = _vm->gui_getButton(buttonList, inputFlag & 0x7FFF); diff --git a/engines/kyra/gui_lol.cpp b/engines/kyra/gui_lol.cpp index f7a5386574..b73eddbaf3 100644 --- a/engines/kyra/gui_lol.cpp +++ b/engines/kyra/gui_lol.cpp @@ -697,7 +697,7 @@ void LoLEngine::gui_toggleButtonDisplayMode(int shapeIndex, int mode) { t = _system->getMillis(); if (_buttonPressTimer > t) delay(_buttonPressTimer - t); - + // fall through case 2: mode = 0; _lastButtonShape = 0; diff --git a/engines/kyra/items_lol.cpp b/engines/kyra/items_lol.cpp index f7fd04bab8..f4024471d2 100644 --- a/engines/kyra/items_lol.cpp +++ b/engines/kyra/items_lol.cpp @@ -265,6 +265,7 @@ bool LoLEngine::addItemToInventory(Item itemIndex) { gui_drawInventory(); } + assert(pos > 0 && pos < 48); _inventory[pos] = itemIndex; gui_drawInventory(); diff --git a/engines/kyra/lol.cpp b/engines/kyra/lol.cpp index f7696d45b5..3af65d9b7a 100644 --- a/engines/kyra/lol.cpp +++ b/engines/kyra/lol.cpp @@ -1363,7 +1363,7 @@ void LoLEngine::setCharacterMagicOrHitPoints(int charNum, int type, int points, { 0x21, 0xAA, 0x99, 0x00, 0x4253 } }; - if (charNum > 3) + if (charNum > 2) return; LoLCharacter *c = &_characters[charNum]; @@ -1851,7 +1851,7 @@ int LoLEngine::playCharacterScriptChat(int charId, int mode, int restorePortrait } else if (charId > 0) { int i = 0; - for (; i < 4; i++) { + for (; i < 3; i++) { if (_characters[i].id != charId || !(_characters[i].flags & 1)) continue; if (charId == ch) diff --git a/engines/kyra/scene_eob.cpp b/engines/kyra/scene_eob.cpp index 84cf4a3809..45de232cb6 100644 --- a/engines/kyra/scene_eob.cpp +++ b/engines/kyra/scene_eob.cpp @@ -259,7 +259,7 @@ Common::String EoBCoreEngine::initLevelData(int sub) { } if (_flags.gameID == GI_EOB2) - pos = initScriptTimers(pos); + initScriptTimers(pos); return _curGfxFile; } diff --git a/engines/kyra/scene_lol.cpp b/engines/kyra/scene_lol.cpp index f1045d2ddf..c8618bc3bb 100644 --- a/engines/kyra/scene_lol.cpp +++ b/engines/kyra/scene_lol.cpp @@ -315,7 +315,7 @@ void LoLEngine::loadLevelGraphics(const char *file, int specialColor, int weight if (_lastSpecialColor == 1) _lastSpecialColor = 0x44; else if (_lastSpecialColor == 0x66) - _lastSpecialColor = scumm_stricmp(file, "YVEL2") ? 0xCC : 0x44; + _lastSpecialColor = file ? (scumm_stricmp(file, "YVEL2") ? 0xCC : 0x44) : 0x44; else if (_lastSpecialColor == 0x6B) _lastSpecialColor = 0xCC; else diff --git a/engines/kyra/screen_eob.cpp b/engines/kyra/screen_eob.cpp index b1b26357f8..ae62e522e7 100644 --- a/engines/kyra/screen_eob.cpp +++ b/engines/kyra/screen_eob.cpp @@ -456,8 +456,6 @@ uint8 *Screen_EoB::encodeShape(uint16 x, uint16 y, uint16 w, uint16 h, bool enco if (col < 0x10) { *pal++ = s; c = colorMap[s] = col++; - if (!col) - c = 0; } else { c = 0; } diff --git a/engines/kyra/sequences_hof.cpp b/engines/kyra/sequences_hof.cpp index e70bbca88b..306f504b9e 100644 --- a/engines/kyra/sequences_hof.cpp +++ b/engines/kyra/sequences_hof.cpp @@ -942,8 +942,8 @@ void SeqPlayer_HOF::playAnimation(WSAMovie_v2 *wsaObj, int startFrame, int lastF bool finished = false; uint32 startTime = _system->getMillis(); - int origW = wsaObj->width(); - int origH = wsaObj->width(); + int origW = wsaObj ? wsaObj->width() : 0; + int origH = wsaObj ? wsaObj->height() : 0; int drwX = x; int drwY = y; int drwW = origW; @@ -1041,7 +1041,8 @@ void SeqPlayer_HOF::playDialogueAnimation(uint16 strID, uint16 soundID, int text int dur = int(strlen(_sequenceStrings[strID])) * (_vm->gameFlags().isTalkie ? 7 : 15); if (_vm->textEnabled()) { int slot = displaySubTitle(strID, textPosX, textPosY, dur, textWidth); - _textSlots[slot].textcolor = textColor; + if (slot >= 0) + _textSlots[slot].textcolor = textColor; } _specialAnimTimeOutTotal = _system->getMillis() + dur * _vm->tickLength(); int curframe = animStartFrame; diff --git a/engines/kyra/sprites_eob.cpp b/engines/kyra/sprites_eob.cpp index 962efe6a4e..1d4c143185 100644 --- a/engines/kyra/sprites_eob.cpp +++ b/engines/kyra/sprites_eob.cpp @@ -247,6 +247,9 @@ void EoBCoreEngine::updateAttackingMonsterFlags() { m2 = m; } + if (!m2) + return; + if (m2->type == 7) setScriptFlags(4); @@ -551,8 +554,6 @@ void EoBCoreEngine::drawMonsters(int index) { SpriteDecoration *dcr = &_monsterDecorations[(p->decorations[ii] - 1) * 6 + subFrame + shpIndex - 1]; - if (!dcr) - continue; if (!dcr->shp) continue; @@ -652,6 +653,8 @@ void EoBCoreEngine::drawFlyingObjects(int index) { } } + assert(shp); + shp = _screen->scaleShape(shp, sclValue); if (rstFade) { diff --git a/engines/kyra/sprites_lol.cpp b/engines/kyra/sprites_lol.cpp index 88b24e1367..4d4d596bac 100644 --- a/engines/kyra/sprites_lol.cpp +++ b/engines/kyra/sprites_lol.cpp @@ -503,7 +503,6 @@ int LoLEngine::checkBlockOccupiedByParty(int x, int y, int testFlag) { void LoLEngine::drawBlockObjects(int blockArrayIndex) { LevelBlockProperty *l = _visibleBlocks[blockArrayIndex]; uint16 s = l->assignedObjects; - LoLObject *obj = findObject(s); if (l->direction != _currentDirection) { l->drawObjects = 0; @@ -511,8 +510,7 @@ void LoLEngine::drawBlockObjects(int blockArrayIndex) { while (s) { reassignDrawObjects(_currentDirection, s, l, true); - obj = findObject(s); - s = obj->nextAssignedObject; + s = findObject(s)->nextAssignedObject; } } @@ -567,6 +565,7 @@ void LoLEngine::drawBlockObjects(int blockArrayIndex) { case 2: case 6: flg |= 0x10; + // fall through case 0: case 4: shpIndex = _flyingItemShapes[shpIndex].shapeLeft; diff --git a/engines/kyra/timer_eob.cpp b/engines/kyra/timer_eob.cpp index effda22ac9..f7a4e23006 100644 --- a/engines/kyra/timer_eob.cpp +++ b/engines/kyra/timer_eob.cpp @@ -249,6 +249,7 @@ void EoBCoreEngine::timerSpecialCharacterUpdate(int timerNum) { case 2: case 3: setCharEventTimer(charIndex, (c->effectFlags & 0x10000) ? 9 : 36, evt + 2, 1); + // fall through case 0: case 1: case 4: diff --git a/engines/parallaction/dialogue.cpp b/engines/parallaction/dialogue.cpp index 78cc23311f..06ffd0b89b 100644 --- a/engines/parallaction/dialogue.cpp +++ b/engines/parallaction/dialogue.cpp @@ -238,7 +238,7 @@ int16 DialogueManager::selectAnswerN() { _selection = _balloonMan->hitTestDialogueBalloon(_mousePos.x, _mousePos.y); - VisibleAnswer *oldAnswer = &_visAnswers[_oldSelection]; + VisibleAnswer *oldAnswer = (_oldSelection == NO_ANSWER_SELECTED) ? NULL : &_visAnswers[_oldSelection]; VisibleAnswer *answer = &_visAnswers[_selection]; if (_selection != _oldSelection) { diff --git a/engines/parallaction/disk_ns.cpp b/engines/parallaction/disk_ns.cpp index f03f16ca37..4c4893ec61 100644 --- a/engines/parallaction/disk_ns.cpp +++ b/engines/parallaction/disk_ns.cpp @@ -394,7 +394,7 @@ Frames* DosDisk_ns::loadFrames(const char* name) { - path data [bit 8] (walkable areas) */ void DosDisk_ns::unpackBackground(Common::ReadStream *stream, byte *screen, byte *mask, byte *path) { - byte storage[127]; + byte storage[128]; uint32 storageLen = 0, len = 0; uint32 j = 0; diff --git a/engines/parallaction/input.cpp b/engines/parallaction/input.cpp index 4fbd9b99cc..484e210893 100644 --- a/engines/parallaction/input.cpp +++ b/engines/parallaction/input.cpp @@ -551,8 +551,12 @@ void Input::setInventoryCursor(ItemName name) { case GType_BRA: { byte *src = _mouseArrow->getData(0); byte *dst = _comboArrow->getData(0); - memcpy(dst, src, _comboArrow->getSize(0)); // FIXME: destination offseting is not clear + Common::Rect srcRect, dstRect; + _mouseArrow->getRect(0, srcRect); + _comboArrow->getRect(0, dstRect); + for (uint y = 0; y < (uint)srcRect.height(); y++) + memcpy(dst + y * dstRect.width(), src + y * srcRect.width(), srcRect.width()); _vm->_inventoryRenderer->drawItem(name, dst + _mouseComboProps_BR._yOffset * _mouseComboProps_BR._width + _mouseComboProps_BR._xOffset, _mouseComboProps_BR._width); CursorMan.replaceCursor(dst, _mouseComboProps_BR._width, _mouseComboProps_BR._height, 0, 0, 0); break; diff --git a/engines/parallaction/parser_ns.cpp b/engines/parallaction/parser_ns.cpp index 41ff74f0b4..ac5e7c7135 100644 --- a/engines/parallaction/parser_ns.cpp +++ b/engines/parallaction/parser_ns.cpp @@ -292,7 +292,7 @@ void LocationParser_ns::parseAnimation(AnimationList &list, char *name) { AnimationPtr a(new Animation); _zoneProg++; - strncpy(a->_name, name, ZONENAME_LENGTH); + Common::strlcpy(a->_name, name, ZONENAME_LENGTH); a->_flags |= kFlagsIsAnimation; list.push_front(AnimationPtr(a)); @@ -1312,7 +1312,7 @@ void LocationParser_ns::parseZone(ZoneList &list, char *name) { ZonePtr z(new Zone); _zoneProg++; - strncpy(z->_name, name, ZONENAME_LENGTH); + Common::strlcpy(z->_name, name, ZONENAME_LENGTH); ctxt.z = z; diff --git a/engines/parallaction/sound_br.cpp b/engines/parallaction/sound_br.cpp index ad510eb1f1..4a643aaf1d 100644 --- a/engines/parallaction/sound_br.cpp +++ b/engines/parallaction/sound_br.cpp @@ -507,10 +507,14 @@ void SoundMan_br::execute(int command, const char *parm) { stopMusic(); break; case SC_SETMUSICFILE: + if (!parm) + error("no parameter passed to SC_SETMUSICFILE"); setMusicFile(parm); break; case SC_PLAYSFX: + if (!parm) + error("no parameter passed to SC_PLAYSFX"); playSfx(parm, _sfxChannel, _sfxLooping, _sfxVolume); break; case SC_STOPSFX: diff --git a/engines/sci/console.cpp b/engines/sci/console.cpp index c5ff6b454b..50fae61de0 100644 --- a/engines/sci/console.cpp +++ b/engines/sci/console.cpp @@ -2227,6 +2227,7 @@ bool Console::cmdIsSample(int argc, const char **argv) { DebugPrintf("Sample size: %d, sample rate: %d, channels: %d, digital channel number: %d\n", track->digitalSampleSize, track->digitalSampleRate, track->channelCount, track->digitalChannelNr); + delete soundRes; return true; } diff --git a/engines/sci/parser/vocabulary.cpp b/engines/sci/parser/vocabulary.cpp index e56158ecc1..f5b79d6c5e 100644 --- a/engines/sci/parser/vocabulary.cpp +++ b/engines/sci/parser/vocabulary.cpp @@ -494,8 +494,6 @@ void Vocabulary::debugDecipherSaidBlock(const byte *addr) { case 0xf9: debugN(">"); break; - case 0xff: - break; } } } while (nextItem != 0xff); diff --git a/engines/sci/resource.cpp b/engines/sci/resource.cpp index c9c0d25bc6..1da0c5dccc 100644 --- a/engines/sci/resource.cpp +++ b/engines/sci/resource.cpp @@ -1152,7 +1152,6 @@ ResVersion ResourceManager::detectMapVersion() { } break; } else if (rsrc->getSourceType() == kSourceMacResourceFork) { - delete fileStream; return kResVersionSci11Mac; } } diff --git a/engines/sci/sound/drivers/midi.cpp b/engines/sci/sound/drivers/midi.cpp index a3d01753ff..a31d5f9a81 100644 --- a/engines/sci/sound/drivers/midi.cpp +++ b/engines/sci/sound/drivers/midi.cpp @@ -913,7 +913,8 @@ int MidiPlayer_Midi::open(ResourceManager *resMan) { if (res) { if (isMt32GmPatch(res->data, res->size)) { readMt32GmPatch(res->data, res->size); - strncpy((char *)_goodbyeMsg, " ScummVM ", 20); + // Note that _goodbyeMsg is not zero-terminated + memcpy(_goodbyeMsg, " ScummVM ", 20); } else { readMt32Patch(res->data, res->size); } diff --git a/engines/sword25/util/lua/ldo.cpp b/engines/sword25/util/lua/ldo.cpp index c162a62e98..a230097f2a 100644 --- a/engines/sword25/util/lua/ldo.cpp +++ b/engines/sword25/util/lua/ldo.cpp @@ -98,6 +98,16 @@ static void resetstack (lua_State *L, int status) { } +// Added in ScummVM. Refer to http://www.lua.org/manual/5.1/manual.html +static const char* luaErrorDescription[] = { + "No error", + "Coroutine yield", // not an actual error, see lua_resume + "Runtime error", + "Syntax error during pre-compilation", // refer to lua_load + "Memory allocation error", + "Error while running the error handler function" +}; + void luaD_throw (lua_State *L, int errcode) { if (L->errorJmp) { L->errorJmp->status = errcode; diff --git a/engines/sword25/util/lua/lua.h b/engines/sword25/util/lua/lua.h index 768ec1ad74..a3b7573ca5 100644 --- a/engines/sword25/util/lua/lua.h +++ b/engines/sword25/util/lua/lua.h @@ -48,16 +48,6 @@ #define LUA_ERRMEM 4 #define LUA_ERRERR 5 -// Added in ScummVM. Refer to http://www.lua.org/manual/5.1/manual.html -static const char* luaErrorDescription[] = { - "No error", - "Coroutine yield", // not an actual error, see lua_resume - "Runtime error", - "Syntax error during pre-compilation", // refer to lua_load - "Memory allocation error", - "Error while running the error handler function" -}; - typedef struct lua_State lua_State; typedef int (*lua_CFunction) (lua_State *L); diff --git a/engines/wintermute/ad/ad_actor.cpp b/engines/wintermute/ad/ad_actor.cpp index 1346a090f6..9879cc9f40 100644 --- a/engines/wintermute/ad/ad_actor.cpp +++ b/engines/wintermute/ad/ad_actor.cpp @@ -752,7 +752,7 @@ bool AdActor::update() { _tempSprite2 = _sentence->_currentSprite; } - bool timeIsUp = (_sentence->_sound && _sentence->_soundStarted && (!_sentence->_sound->isPlaying() && !_sentence->_sound->isPaused())) || (!_sentence->_sound && _sentence->_duration <= _gameRef->_timer - _sentence->_startTime); + bool timeIsUp = (_sentence->_sound && _sentence->_soundStarted && (!_sentence->_sound->isPlaying() && !_sentence->_sound->isPaused())) || (!_sentence->_sound && _sentence->_duration <= _gameRef->getTimer()->getTime() - _sentence->_startTime); if (_tempSprite2 == nullptr || _tempSprite2->isFinished() || (/*_tempSprite2->_looping &&*/ timeIsUp)) { if (timeIsUp) { _sentence->finish(); @@ -915,7 +915,7 @@ void AdActor::getNextStep() { ////////////////////////////////////////////////////////////////////////// -void AdActor::initLine(BasePoint startPt, BasePoint endPt) { +void AdActor::initLine(const BasePoint &startPt, const BasePoint &endPt) { _pFCount = MAX((abs(endPt.x - startPt.x)) , (abs(endPt.y - startPt.y))); _pFStepX = (double)(endPt.x - startPt.x) / _pFCount; diff --git a/engines/wintermute/ad/ad_actor.h b/engines/wintermute/ad/ad_actor.h index bcec9db319..3630c6665b 100644 --- a/engines/wintermute/ad/ad_actor.h +++ b/engines/wintermute/ad/ad_actor.h @@ -83,24 +83,24 @@ private: AdSpriteSet *getAnimByName(const Common::String &animName); // scripting interface - virtual ScValue *scGetProperty(const Common::String &name); - virtual bool scSetProperty(const char *name, ScValue *value); - virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name); - virtual const char *scToString(); + virtual ScValue *scGetProperty(const Common::String &name) override; + virtual bool scSetProperty(const char *name, ScValue *value) override; + virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override; + virtual const char *scToString() override; bool setDefaultAnimNames(); BaseSprite *getTalkStanceOld(const char *stance); bool mergeAnims(const char *animsFilename); BaseSprite *_animSprite2; - void initLine(BasePoint startPt, BasePoint endPt); + void initLine(const BasePoint &startPt, const BasePoint &endPt); void getNextStep(); void followPath(); double _pFStepX; double _pFStepY; double _pFX; double _pFY; - int _pFCount; + int32 _pFCount; }; } // end of namespace Wintermute diff --git a/engines/wintermute/ad/ad_entity.cpp b/engines/wintermute/ad/ad_entity.cpp index 259b68f291..6e47d0f072 100644 --- a/engines/wintermute/ad/ad_entity.cpp +++ b/engines/wintermute/ad/ad_entity.cpp @@ -627,7 +627,7 @@ bool AdEntity::update() { _tempSprite2 = _sentence->_currentSprite; } - bool timeIsUp = (_sentence->_sound && _sentence->_soundStarted && (!_sentence->_sound->isPlaying() && !_sentence->_sound->isPaused())) || (!_sentence->_sound && _sentence->_duration <= _gameRef->_timer - _sentence->_startTime); + bool timeIsUp = (_sentence->_sound && _sentence->_soundStarted && (!_sentence->_sound->isPlaying() && !_sentence->_sound->isPaused())) || (!_sentence->_sound && _sentence->_duration <= _gameRef->getTimer()->getTime() - _sentence->_startTime); if (_tempSprite2 == nullptr || _tempSprite2->isFinished() || (/*_tempSprite2->_looping &&*/ timeIsUp)) { if (timeIsUp) { _sentence->finish(); diff --git a/engines/wintermute/ad/ad_entity.h b/engines/wintermute/ad/ad_entity.h index 94921aaa27..c23b37366d 100644 --- a/engines/wintermute/ad/ad_entity.h +++ b/engines/wintermute/ad/ad_entity.h @@ -42,7 +42,7 @@ public: void updatePosition(); virtual int getHeight(); BaseRegion *_region; - virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent); + virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override; virtual bool update(); virtual bool display(); AdEntity(BaseGame *inGame); @@ -56,10 +56,10 @@ public: const char* getItemName() const; // scripting interface - virtual ScValue *scGetProperty(const Common::String &name); - virtual bool scSetProperty(const char *name, ScValue *value); - virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name); - virtual const char *scToString(); + virtual ScValue *scGetProperty(const Common::String &name) override; + virtual bool scSetProperty(const char *name, ScValue *value) override; + virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override; + virtual const char *scToString() override; private: int32 _walkToX; int32 _walkToY; diff --git a/engines/wintermute/ad/ad_game.cpp b/engines/wintermute/ad/ad_game.cpp index b9775ba7d1..fac59dc473 100644 --- a/engines/wintermute/ad/ad_game.cpp +++ b/engines/wintermute/ad/ad_game.cpp @@ -43,7 +43,6 @@ #include "engines/wintermute/base/base_object.h" #include "engines/wintermute/base/base_parser.h" #include "engines/wintermute/base/sound/base_sound.h" -#include "engines/wintermute/base/base_string_table.h" #include "engines/wintermute/base/base_surface_storage.h" #include "engines/wintermute/base/base_transition_manager.h" #include "engines/wintermute/base/base_sprite.h" @@ -520,9 +519,14 @@ bool AdGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, if (_responseBox) { AdResponse *res = new AdResponse(_gameRef); if (res) { - res->_iD = id; - res->setText(text); - _stringTable->expand(&res->_text); + res->setID(id); + + char *expandedText = new char[strlen(text) + 1]; + Common::strlcpy(expandedText, text, strlen(text) + 1); + expandStringByStringTable(&expandedText); + res->setText(expandedText); + delete[] expandedText; + if (!val1->isNULL()) { res->setIcon(val1->getString()); } @@ -850,10 +854,10 @@ bool AdGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, int height = stack->pop()->getInt(); if (width <= 0) { - width = _renderer->_width; + width = _renderer->getWidth(); } if (height <= 0) { - height = _renderer->_height; + height = _renderer->getHeight(); } if (!_sceneViewport) { @@ -1498,7 +1502,7 @@ bool AdGame::scheduleChangeScene(const char *filename, bool fadeIn) { ////////////////////////////////////////////////////////////////////////// -bool AdGame::getVersion(byte *verMajor, byte *verMinor, byte *extMajor, byte *extMinor) { +bool AdGame::getVersion(byte *verMajor, byte *verMinor, byte *extMajor, byte *extMinor) const { BaseGame::getVersion(verMajor, verMinor, nullptr, nullptr); if (extMajor) { @@ -1743,7 +1747,7 @@ bool AdGame::endDlgBranch(const char *branchName, const char *scriptName, const ////////////////////////////////////////////////////////////////////////// bool AdGame::clearBranchResponses(char *name) { for (uint32 i = 0; i < _responsesBranch.size(); i++) { - if (scumm_stricmp(name, _responsesBranch[i]->_context) == 0) { + if (scumm_stricmp(name, _responsesBranch[i]->getContext()) == 0) { delete _responsesBranch[i]; _responsesBranch.remove_at(i); i--; @@ -1767,11 +1771,11 @@ bool AdGame::addBranchResponse(int id) { ////////////////////////////////////////////////////////////////////////// -bool AdGame::branchResponseUsed(int id) { +bool AdGame::branchResponseUsed(int id) const { char *context = _dlgPendingBranches.size() > 0 ? _dlgPendingBranches[_dlgPendingBranches.size() - 1] : nullptr; for (uint32 i = 0; i < _responsesBranch.size(); i++) { if (_responsesBranch[i]->_id == id) { - if ((context == nullptr && _responsesBranch[i]->_context == nullptr) || scumm_stricmp(context, _responsesBranch[i]->_context) == 0) { + if ((context == nullptr && _responsesBranch[i]->getContext() == nullptr) || scumm_stricmp(context, _responsesBranch[i]->getContext()) == 0) { return true; } } @@ -1794,12 +1798,12 @@ bool AdGame::addGameResponse(int id) { ////////////////////////////////////////////////////////////////////////// -bool AdGame::gameResponseUsed(int id) { +bool AdGame::gameResponseUsed(int id) const { char *context = _dlgPendingBranches.size() > 0 ? _dlgPendingBranches[_dlgPendingBranches.size() - 1] : nullptr; for (uint32 i = 0; i < _responsesGame.size(); i++) { - AdResponseContext *respContext = _responsesGame[i]; + const AdResponseContext *respContext = _responsesGame[i]; if (respContext->_id == id) { - if ((context == nullptr && respContext->_context == nullptr) || ((context != nullptr && respContext->_context != nullptr) && scumm_stricmp(context, respContext->_context) == 0)) { + if ((context == nullptr && respContext->getContext() == nullptr) || ((context != nullptr && respContext->getContext() != nullptr) && scumm_stricmp(context, respContext->getContext()) == 0)) { return true; } } @@ -1814,7 +1818,7 @@ bool AdGame::resetResponse(int id) { for (uint32 i = 0; i < _responsesGame.size(); i++) { if (_responsesGame[i]->_id == id) { - if ((context == nullptr && _responsesGame[i]->_context == nullptr) || scumm_stricmp(context, _responsesGame[i]->_context) == 0) { + if ((context == nullptr && _responsesGame[i]->getContext() == nullptr) || scumm_stricmp(context, _responsesGame[i]->getContext()) == 0) { delete _responsesGame[i]; _responsesGame.remove_at(i); break; @@ -1824,7 +1828,7 @@ bool AdGame::resetResponse(int id) { for (uint32 i = 0; i < _responsesBranch.size(); i++) { if (_responsesBranch[i]->_id == id) { - if ((context == nullptr && _responsesBranch[i]->_context == nullptr) || scumm_stricmp(context, _responsesBranch[i]->_context) == 0) { + if ((context == nullptr && _responsesBranch[i]->getContext() == nullptr) || scumm_stricmp(context, _responsesBranch[i]->getContext()) == 0) { delete _responsesBranch[i]; _responsesBranch.remove_at(i); break; @@ -1959,7 +1963,7 @@ bool AdGame::isItemTaken(char *itemName) { } ////////////////////////////////////////////////////////////////////////// -AdItem *AdGame::getItemByName(const char *name) { +AdItem *AdGame::getItemByName(const char *name) const { for (uint32 i = 0; i < _items.size(); i++) { if (scumm_stricmp(_items[i]->getName(), name) == 0) { return _items[i]; @@ -2260,10 +2264,10 @@ bool AdGame::displayDebugInfo() { char str[100]; if (_gameRef->_debugDebugMode) { sprintf(str, "Mouse: %d, %d (scene: %d, %d)", _mousePos.x, _mousePos.y, _mousePos.x + _scene->getOffsetLeft(), _mousePos.y + _scene->getOffsetTop()); - _systemFont->drawText((byte *)str, 0, 90, _renderer->_width, TAL_RIGHT); + _systemFont->drawText((byte *)str, 0, 90, _renderer->getWidth(), TAL_RIGHT); sprintf(str, "Scene: %s (prev: %s)", (_scene && _scene->getName()) ? _scene->getName() : "???", _prevSceneName ? _prevSceneName : "???"); - _systemFont->drawText((byte *)str, 0, 110, _renderer->_width, TAL_RIGHT); + _systemFont->drawText((byte *)str, 0, 110, _renderer->getWidth(), TAL_RIGHT); } return BaseGame::displayDebugInfo(); } diff --git a/engines/wintermute/ad/ad_game.h b/engines/wintermute/ad/ad_game.h index 81c79a3da8..2032a1723f 100644 --- a/engines/wintermute/ad/ad_game.h +++ b/engines/wintermute/ad/ad_game.h @@ -44,15 +44,15 @@ class AdResponseContext; class AdResponseBox; class AdGame : public BaseGame { public: - virtual bool onScriptShutdown(ScScript *script); + virtual bool onScriptShutdown(ScScript *script) override; - virtual bool onMouseLeftDown(); - virtual bool onMouseLeftUp(); - virtual bool onMouseLeftDblClick(); - virtual bool onMouseRightDown(); - virtual bool onMouseRightUp(); + virtual bool onMouseLeftDown() override; + virtual bool onMouseLeftUp() override; + virtual bool onMouseLeftDblClick() override; + virtual bool onMouseRightDown() override; + virtual bool onMouseRightUp() override; - virtual bool displayDebugInfo(); + virtual bool displayDebugInfo() override; bool addSpeechDir(const char *dir); bool removeSpeechDir(const char *dir); @@ -63,37 +63,37 @@ public: bool _tempDisableSaveState; virtual bool resetContent(); bool addItem(AdItem *item); - AdItem *getItemByName(const char *name); + AdItem *getItemByName(const char *name) const; AdObject *_inventoryOwner; bool isItemTaken(char *itemName); bool registerInventory(AdInventory *inv); bool unregisterInventory(AdInventory *inv); - virtual bool displayContent(bool update = true, bool displayAll = false); + virtual bool displayContent(bool update = true, bool displayAll = false) override; - bool gameResponseUsed(int ID); + bool gameResponseUsed(int ID) const; bool addGameResponse(int ID); bool resetResponse(int ID); - bool branchResponseUsed(int ID); + bool branchResponseUsed(int ID) const; bool addBranchResponse(int ID); bool clearBranchResponses(char *name); bool startDlgBranch(const char *branchName, const char *scriptName, const char *eventName); bool endDlgBranch(const char *branchName, const char *scriptName, const char *eventName); - virtual bool windowLoadHook(UIWindow *win, char **buf, char **params); - virtual bool windowScriptMethodHook(UIWindow *win, ScScript *script, ScStack *stack, const char *name); + virtual bool windowLoadHook(UIWindow *win, char **buf, char **params) override; + virtual bool windowScriptMethodHook(UIWindow *win, ScScript *script, ScStack *stack, const char *name) override; AdSceneState *getSceneState(const char *filename, bool saving); BaseViewport *_sceneViewport; - int _texItemLifeTime; - int _texWalkLifeTime; - int _texStandLifeTime; - int _texTalkLifeTime; + int32 _texItemLifeTime; + int32 _texWalkLifeTime; + int32 _texStandLifeTime; + int32 _texTalkLifeTime; TTalkSkipButton _talkSkipButton; - virtual bool getVersion(byte *verMajor, byte *verMinor, byte *extMajor, byte *extMinor); + virtual bool getVersion(byte *verMajor, byte *verMinor, byte *extMajor, byte *extMinor) const override; bool scheduleChangeScene(const char *filename, bool fadeIn); void setPrevSceneName(const char *name); void setPrevSceneFilename(const char *name); @@ -126,12 +126,12 @@ public: bool loadItemsBuffer(byte *buffer, bool merge = false); // scripting interface - virtual ScValue *scGetProperty(const Common::String &name); - virtual bool scSetProperty(const char *name, ScValue *value); - virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name); + virtual ScValue *scGetProperty(const Common::String &name) override; + virtual bool scSetProperty(const char *name, ScValue *value) override; + virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override; bool validMouse(); private: - virtual bool externalCall(ScScript *script, ScStack *stack, ScStack *thisStack, char *name); + virtual bool externalCall(ScScript *script, ScStack *stack, ScStack *thisStack, char *name) override; AdObject *_invObject; BaseArray<AdInventory *> _inventories; @@ -151,8 +151,8 @@ private: BaseArray<AdSceneState *> _sceneStates; BaseArray<char *> _dlgPendingBranches; - BaseArray<AdResponseContext *> _responsesBranch; - BaseArray<AdResponseContext *> _responsesGame; + BaseArray<const AdResponseContext *> _responsesBranch; + BaseArray<const AdResponseContext *> _responsesGame; AdResponseBox *_responseBox; AdInventoryBox *_inventoryBox; diff --git a/engines/wintermute/ad/ad_inventory.h b/engines/wintermute/ad/ad_inventory.h index f226a65612..999200b465 100644 --- a/engines/wintermute/ad/ad_inventory.h +++ b/engines/wintermute/ad/ad_inventory.h @@ -44,7 +44,7 @@ public: AdInventory(BaseGame *inGame); virtual ~AdInventory(); BaseArray<AdItem *> _takenItems; - int _scrollOffset; + int32 _scrollOffset; }; } // end of namespace Wintermute diff --git a/engines/wintermute/ad/ad_inventory_box.cpp b/engines/wintermute/ad/ad_inventory_box.cpp index 194d975155..4bb0905688 100644 --- a/engines/wintermute/ad/ad_inventory_box.cpp +++ b/engines/wintermute/ad/ad_inventory_box.cpp @@ -120,8 +120,8 @@ bool AdInventoryBox::display() { if (_closeButton) { _closeButton->_posX = _closeButton->_posY = 0; - _closeButton->_width = _gameRef->_renderer->_width; - _closeButton->_height = _gameRef->_renderer->_height; + _closeButton->_width = _gameRef->_renderer->getWidth(); + _closeButton->_height = _gameRef->_renderer->getHeight(); _closeButton->display(); } diff --git a/engines/wintermute/ad/ad_inventory_box.h b/engines/wintermute/ad/ad_inventory_box.h index cb6d084562..9792b1ea66 100644 --- a/engines/wintermute/ad/ad_inventory_box.h +++ b/engines/wintermute/ad/ad_inventory_box.h @@ -43,8 +43,8 @@ public: bool _visible; virtual bool display(); UIButton *_closeButton; - int _spacing; - int _scrollOffset; + int32 _spacing; + int32 _scrollOffset; Rect32 _itemsArea; bool listen(BaseScriptHolder *param1, uint32 param2); UIWindow *_window; @@ -52,12 +52,12 @@ public: virtual ~AdInventoryBox(); bool loadFile(const char *filename); bool loadBuffer(byte *buffer, bool complete = true); - virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent); + virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override; private: bool _exclusive; - int _scrollBy; - int _itemHeight; - int _itemWidth; + int32 _scrollBy; + int32 _itemHeight; + int32 _itemWidth; }; } // end of namespace Wintermute diff --git a/engines/wintermute/ad/ad_item.cpp b/engines/wintermute/ad/ad_item.cpp index 8534956120..578105105c 100644 --- a/engines/wintermute/ad/ad_item.cpp +++ b/engines/wintermute/ad/ad_item.cpp @@ -378,7 +378,7 @@ bool AdItem::update() { _tempSprite2 = _sentence->_currentSprite; } - bool timeIsUp = (_sentence->_sound && _sentence->_soundStarted && (!_sentence->_sound->isPlaying() && !_sentence->_sound->isPaused())) || (!_sentence->_sound && _sentence->_duration <= _gameRef->_timer - _sentence->_startTime); + bool timeIsUp = (_sentence->_sound && _sentence->_soundStarted && (!_sentence->_sound->isPlaying() && !_sentence->_sound->isPaused())) || (!_sentence->_sound && _sentence->_duration <= _gameRef->getTimer()->getTime() - _sentence->_startTime); if (_tempSprite2 == nullptr || _tempSprite2->isFinished() || (/*_tempSprite2->_looping &&*/ timeIsUp)) { if (timeIsUp) { _sentence->finish(); diff --git a/engines/wintermute/ad/ad_item.h b/engines/wintermute/ad/ad_item.h index 79978f9f72..b8351448a7 100644 --- a/engines/wintermute/ad/ad_item.h +++ b/engines/wintermute/ad/ad_item.h @@ -51,15 +51,15 @@ public: bool loadBuffer(byte *buffer, bool complete = true); // scripting interface - virtual ScValue *scGetProperty(const Common::String &name); - virtual bool scSetProperty(const char *name, ScValue *value); - virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name); - virtual const char *scToString(); + virtual ScValue *scGetProperty(const Common::String &name) override; + virtual bool scSetProperty(const char *name, ScValue *value) override; + virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override; + virtual const char *scToString() override; private: bool _displayAmount; - int _amount; - int _amountOffsetX; - int _amountOffsetY; + int32 _amount; + int32 _amountOffsetX; + int32 _amountOffsetY; TTextAlign _amountAlign; char *_amountString; }; diff --git a/engines/wintermute/ad/ad_layer.h b/engines/wintermute/ad/ad_layer.h index de65e2822f..8fe4d4f91e 100644 --- a/engines/wintermute/ad/ad_layer.h +++ b/engines/wintermute/ad/ad_layer.h @@ -36,21 +36,21 @@ public: bool _closeUp; DECLARE_PERSISTENT(AdLayer, BaseObject) bool _active; - int _height; - int _width; + int32 _height; + int32 _width; bool _main; AdLayer(BaseGame *inGame); virtual ~AdLayer(); BaseArray<AdSceneNode *> _nodes; bool loadFile(const char *filename); bool loadBuffer(byte *buffer, bool complete = true); - virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent); + virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override; // scripting interface - virtual ScValue *scGetProperty(const Common::String &name); - virtual bool scSetProperty(const char *name, ScValue *value); - virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name); - virtual const char *scToString(); + virtual ScValue *scGetProperty(const Common::String &name) override; + virtual bool scSetProperty(const char *name, ScValue *value) override; + virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override; + virtual const char *scToString() override; }; } // end of namespace Wintermute diff --git a/engines/wintermute/ad/ad_node_state.cpp b/engines/wintermute/ad/ad_node_state.cpp index 34e220569f..c741dec54f 100644 --- a/engines/wintermute/ad/ad_node_state.cpp +++ b/engines/wintermute/ad/ad_node_state.cpp @@ -29,7 +29,6 @@ #include "engines/wintermute/base/base_game.h" #include "engines/wintermute/ad/ad_node_state.h" #include "engines/wintermute/ad/ad_entity.h" -#include "engines/wintermute/base/base_string_table.h" #include "engines/wintermute/base/base_sprite.h" #include "engines/wintermute/utils/utils.h" #include "engines/wintermute/platform_osystem.h" @@ -122,7 +121,7 @@ void AdNodeState::setCaption(const char *caption, int caseVal) { _caption[caseVal - 1] = new char[strlen(caption) + 1]; if (_caption[caseVal - 1]) { strcpy(_caption[caseVal - 1], caption); - _gameRef->_stringTable->expand(&_caption[caseVal - 1]); + _gameRef->expandStringByStringTable(&_caption[caseVal - 1]); } } diff --git a/engines/wintermute/ad/ad_object.cpp b/engines/wintermute/ad/ad_object.cpp index a41ed9fbc3..9026b2849c 100644 --- a/engines/wintermute/ad/ad_object.cpp +++ b/engines/wintermute/ad/ad_object.cpp @@ -38,7 +38,6 @@ #include "engines/wintermute/base/base_game.h" #include "engines/wintermute/base/base_frame.h" #include "engines/wintermute/base/base_sprite.h" -#include "engines/wintermute/base/base_string_table.h" #include "engines/wintermute/base/base_sub_frame.h" #include "engines/wintermute/base/base_surface_storage.h" #include "engines/wintermute/base/font/base_font.h" @@ -901,11 +900,11 @@ void AdObject::talk(const char *text, const char *sound, uint32 duration, const _sentence->_sound = nullptr; _sentence->setText(text); - _gameRef->_stringTable->expand(&_sentence->_text); + _gameRef->expandStringByStringTable(&_sentence->_text); _sentence->setStances(stances); _sentence->_duration = duration; _sentence->_align = Align; - _sentence->_startTime = _gameRef->_timer; + _sentence->_startTime = _gameRef->getTimer()->getTime(); _sentence->_currentStance = -1; _sentence->_font = _font == nullptr ? _gameRef->getSystemFont() : _font; _sentence->_freezable = _freezable; @@ -913,7 +912,7 @@ void AdObject::talk(const char *text, const char *sound, uint32 duration, const // try to locate speech file automatically bool deleteSound = false; if (!sound) { - char *key = _gameRef->_stringTable->getKey(text); + char *key = _gameRef->getKeyFromStringTable(text); if (key) { sound = ((AdGame *)_gameRef)->findSpeechFile(key); delete[] key; @@ -960,10 +959,10 @@ void AdObject::talk(const char *text, const char *sound, uint32 duration, const if (_subtitlesWidth > 0) { width = _subtitlesWidth; } else { - if ((x < _gameRef->_renderer->_width / 4 || x > _gameRef->_renderer->_width * 0.75) && !_gameRef->_touchInterface) { - width = MAX(_gameRef->_renderer->_width / 4, MIN(x * 2, (_gameRef->_renderer->_width - x) * 2)); + if ((x < _gameRef->_renderer->getWidth() / 4 || x > _gameRef->_renderer->getWidth() * 0.75) && !_gameRef->_touchInterface) { + width = MAX(_gameRef->_renderer->getWidth() / 4, MIN(x * 2, (_gameRef->_renderer->getWidth() - x) * 2)); } else { - width = _gameRef->_renderer->_width / 2; + width = _gameRef->_renderer->getWidth() / 2; } } @@ -982,8 +981,8 @@ void AdObject::talk(const char *text, const char *sound, uint32 duration, const } - x = MIN(MAX(0, x), _gameRef->_renderer->_width - width); - y = MIN(MAX(0, y), _gameRef->_renderer->_height - height); + x = MIN(MAX(0, x), _gameRef->_renderer->getWidth() - width); + y = MIN(MAX(0, y), _gameRef->_renderer->getHeight() - height); _sentence->_width = width; diff --git a/engines/wintermute/ad/ad_object.h b/engines/wintermute/ad/ad_object.h index 39480e3446..c6573315da 100644 --- a/engines/wintermute/ad/ad_object.h +++ b/engines/wintermute/ad/ad_object.h @@ -55,17 +55,17 @@ public: bool updateBlockRegion(); - virtual bool getExtendedFlag(const char *flagName); - virtual bool resetSoundPan(); - virtual bool updateSounds(); + virtual bool getExtendedFlag(const char *flagName) override; + virtual bool resetSoundPan() override; + virtual bool updateSounds() override; bool reset(); DECLARE_PERSISTENT(AdObject, BaseObject) virtual void talk(const char *text, const char *sound = nullptr, uint32 duration = 0, const char *stances = nullptr, TTextAlign align = TAL_CENTER); - virtual int getHeight(); + virtual int getHeight() override; bool setFont(const char *filename); - virtual bool update(); - virtual bool display(); + virtual bool update() override; + virtual bool display() override; bool _drawn; bool _active; @@ -79,14 +79,14 @@ public: AdWaypointGroup *_currentWptGroup; AdInventory *getInventory(); - virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent); - virtual bool afterMove(); + virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override; + virtual bool afterMove() override; // scripting interface - virtual ScValue *scGetProperty(const Common::String &name); - virtual bool scSetProperty(const char *name, ScValue *value); - virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name); - virtual const char *scToString(); + virtual ScValue *scGetProperty(const Common::String &name) override; + virtual bool scSetProperty(const char *name, ScValue *value) override; + virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override; + virtual const char *scToString() override; bool updateSpriteAttachments(); bool displaySpriteAttachments(bool preDisplay); @@ -109,13 +109,13 @@ protected: bool getScale(float *scaleX, float *scaleY); private: bool _partFollowParent; - int _partOffsetX; - int _partOffsetY; + int32 _partOffsetX; + int32 _partOffsetY; bool _subtitlesModRelative; bool _subtitlesModXCenter; - int _subtitlesModX; - int _subtitlesModY; - int _subtitlesWidth; + int32 _subtitlesModX; + int32 _subtitlesModY; + int32 _subtitlesWidth; AdRegion *_currentRegions[MAX_NUM_REGIONS]; BaseArray<AdObject *> _attachmentsPre; BaseArray<AdObject *> _attachmentsPost; diff --git a/engines/wintermute/ad/ad_path.h b/engines/wintermute/ad/ad_path.h index 6b043197aa..3f38355b94 100644 --- a/engines/wintermute/ad/ad_path.h +++ b/engines/wintermute/ad/ad_path.h @@ -47,7 +47,7 @@ public: AdPath(BaseGame *inGame); virtual ~AdPath(); BaseArray<BasePoint *> _points; - int _currIndex; + int32 _currIndex; bool _ready; }; diff --git a/engines/wintermute/ad/ad_path_point.h b/engines/wintermute/ad/ad_path_point.h index 58457976c8..04648b1733 100644 --- a/engines/wintermute/ad/ad_path_point.h +++ b/engines/wintermute/ad/ad_path_point.h @@ -42,7 +42,7 @@ public: virtual ~AdPathPoint(); AdPathPoint *_origin; bool _marked; - int _distance; + int32 _distance; }; } // end of namespace Wintermute diff --git a/engines/wintermute/ad/ad_region.h b/engines/wintermute/ad/ad_region.h index 960dde5f15..bc9eab085e 100644 --- a/engines/wintermute/ad/ad_region.h +++ b/engines/wintermute/ad/ad_region.h @@ -41,17 +41,17 @@ public: virtual ~AdRegion(); bool loadFile(const char *filename); bool loadBuffer(byte *buffer, bool complete = true); - virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent); + virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override; bool hasDecoration() const; bool isBlocked() const; uint32 getAlpha() const; float getZoom() const; // scripting interface - virtual ScValue *scGetProperty(const Common::String &name); - virtual bool scSetProperty(const char *name, ScValue *value); - virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name); - virtual const char *scToString(); + virtual ScValue *scGetProperty(const Common::String &name) override; + virtual bool scSetProperty(const char *name, ScValue *value) override; + virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override; + virtual const char *scToString() override; private: uint32 _alpha; float _zoom; diff --git a/engines/wintermute/ad/ad_response.cpp b/engines/wintermute/ad/ad_response.cpp index e4993b9ad4..0e6817ae6f 100644 --- a/engines/wintermute/ad/ad_response.cpp +++ b/engines/wintermute/ad/ad_response.cpp @@ -143,4 +143,36 @@ bool AdResponse::persist(BasePersistenceManager *persistMgr) { return STATUS_OK; } +void AdResponse::setID(int32 id) { + _iD = id; +} + +BaseSprite *AdResponse::getIcon() const { + return _icon; +} + +BaseSprite *AdResponse::getIconHover() const { + return _iconHover; +} + +BaseSprite *AdResponse::getIconPressed() const { + return _iconPressed; +} + +BaseFont *AdResponse::getFont() const { + return _font; +} + +int32 AdResponse::getID() const { + return _iD; +} + +const char *AdResponse::getText() const { + return _text; +} + +const char *AdResponse::getTextOrig() const { + return _textOrig; +} + } // end of namespace Wintermute diff --git a/engines/wintermute/ad/ad_response.h b/engines/wintermute/ad/ad_response.h index 2119067d3e..57cd302e9d 100644 --- a/engines/wintermute/ad/ad_response.h +++ b/engines/wintermute/ad/ad_response.h @@ -43,17 +43,29 @@ public: bool setIconHover(const char *filename); bool setIconPressed(const char *filename); void setText(const char *text); - int32 _iD; + void setID(int32 id); + BaseSprite *getIcon() const; + BaseSprite *getIconHover() const; + BaseSprite *getIconPressed() const; + BaseFont *getFont() const; + int32 getID() const; + + const char *getText() const; + const char *getTextOrig() const; + + AdResponse(BaseGame *inGame); + virtual ~AdResponse(); + TResponseType _responseType; +private: BaseSprite *_icon; BaseSprite *_iconHover; BaseSprite *_iconPressed; BaseFont *_font; + + int32 _iD; + char *_text; char *_textOrig; - AdResponse(BaseGame *inGame); - virtual ~AdResponse(); - TResponseType _responseType; - }; } // end of namespace Wintermute diff --git a/engines/wintermute/ad/ad_response_box.cpp b/engines/wintermute/ad/ad_response_box.cpp index c891d2a019..a4e59c6a49 100644 --- a/engines/wintermute/ad/ad_response_box.cpp +++ b/engines/wintermute/ad/ad_response_box.cpp @@ -144,16 +144,16 @@ bool AdResponseBox::createButtons() { btn->_sharedFonts = btn->_sharedImages = true; btn->_sharedCursors = true; // iconic - if (_responses[i]->_icon) { - btn->_image = _responses[i]->_icon; - if (_responses[i]->_iconHover) { - btn->_imageHover = _responses[i]->_iconHover; + if (_responses[i]->getIcon()) { + btn->_image = _responses[i]->getIcon(); + if (_responses[i]->getIconHover()) { + btn->_imageHover = _responses[i]->getIconHover(); } - if (_responses[i]->_iconPressed) { - btn->_imagePress = _responses[i]->_iconPressed; + if (_responses[i]->getIconPressed()) { + btn->_imagePress = _responses[i]->getIconPressed(); } - btn->setCaption(_responses[i]->_text); + btn->setCaption(_responses[i]->getText()); if (_cursor) { btn->_cursor = _cursor; } else if (_gameRef->_activeCursor) { @@ -162,7 +162,7 @@ bool AdResponseBox::createButtons() { } // textual else { - btn->setText(_responses[i]->_text); + btn->setText(_responses[i]->getText()); btn->_font = (_font == nullptr) ? _gameRef->getSystemFont() : _font; btn->_fontHover = (_fontHover == nullptr) ? _gameRef->getSystemFont() : _fontHover; btn->_fontPress = btn->_fontHover; @@ -173,13 +173,13 @@ bool AdResponseBox::createButtons() { } - if (_responses[i]->_font) { - btn->_font = _responses[i]->_font; + if (_responses[i]->getFont()) { + btn->_font = _responses[i]->getFont(); } btn->_width = _responseArea.right - _responseArea.left; if (btn->_width <= 0) { - btn->_width = _gameRef->_renderer->_width; + btn->_width = _gameRef->_renderer->getWidth(); } } btn->setName("response"); @@ -196,7 +196,7 @@ bool AdResponseBox::createButtons() { _respButtons.add(btn); if (_responseArea.bottom - _responseArea.top < btn->_height) { - _gameRef->LOG(0, "Warning: Response '%s' is too high to be displayed within response box. Correcting.", _responses[i]->_text); + _gameRef->LOG(0, "Warning: Response '%s' is too high to be displayed within response box. Correcting.", _responses[i]->getText()); _responseArea.bottom += (btn->_height - (_responseArea.bottom - _responseArea.top)); } } @@ -515,8 +515,8 @@ bool AdResponseBox::display() { // go exclusive if (_shieldWindow) { _shieldWindow->_posX = _shieldWindow->_posY = 0; - _shieldWindow->_width = _gameRef->_renderer->_width; - _shieldWindow->_height = _gameRef->_renderer->_height; + _shieldWindow->_width = _gameRef->_renderer->getWidth(); + _shieldWindow->_height = _gameRef->_renderer->getHeight(); _shieldWindow->display(); } @@ -548,7 +548,7 @@ bool AdResponseBox::listen(BaseScriptHolder *param1, uint32 param2) { _scrollOffset++; } else if (scumm_stricmp(obj->getName(), "response") == 0) { if (_waitingScript) { - _waitingScript->_stack->pushInt(_responses[param2]->_iD); + _waitingScript->_stack->pushInt(_responses[param2]->getID()); } handleResponse(_responses[param2]); _waitingScript = nullptr; @@ -601,7 +601,7 @@ bool AdResponseBox::weedResponses() { for (uint32 i = 0; i < _responses.size(); i++) { switch (_responses[i]->_responseType) { case RESPONSE_ONCE: - if (adGame->branchResponseUsed(_responses[i]->_iD)) { + if (adGame->branchResponseUsed(_responses[i]->getID())) { delete _responses[i]; _responses.remove_at(i); i--; @@ -609,7 +609,7 @@ bool AdResponseBox::weedResponses() { break; case RESPONSE_ONCE_GAME: - if (adGame->gameResponseUsed(_responses[i]->_iD)) { + if (adGame->gameResponseUsed(_responses[i]->getID())) { delete _responses[i]; _responses.remove_at(i); i--; @@ -642,13 +642,13 @@ UIWindow *AdResponseBox::getResponseWindow() { return _window; } -void AdResponseBox::addResponse(AdResponse *response) { +void AdResponseBox::addResponse(const AdResponse *response) { _responses.add(response); } int32 AdResponseBox::getIdForResponseNum(uint32 num) const { assert(num < _responses.size()); - return _responses[num]->_iD; + return _responses[num]->getID(); } bool AdResponseBox::handleResponseNum(uint32 num) { @@ -656,18 +656,18 @@ bool AdResponseBox::handleResponseNum(uint32 num) { } ////////////////////////////////////////////////////////////////////////// -bool AdResponseBox::handleResponse(AdResponse *response) { - setLastResponseText(response->_text, response->_textOrig); +bool AdResponseBox::handleResponse(const AdResponse *response) { + setLastResponseText(response->getText(), response->getTextOrig()); AdGame *adGame = (AdGame *)_gameRef; switch (response->_responseType) { case RESPONSE_ONCE: - adGame->addBranchResponse(response->_iD); + adGame->addBranchResponse(response->getID()); break; case RESPONSE_ONCE_GAME: - adGame->addGameResponse(response->_iD); + adGame->addGameResponse(response->getID()); break; default: debugC(kWintermuteDebugGeneral, "AdResponseBox::HandleResponse - Unhandled enum"); diff --git a/engines/wintermute/ad/ad_response_box.h b/engines/wintermute/ad/ad_response_box.h index 3b180062b6..cb57b98924 100644 --- a/engines/wintermute/ad/ad_response_box.h +++ b/engines/wintermute/ad/ad_response_box.h @@ -44,8 +44,8 @@ public: BaseObject *getPrevAccessObject(BaseObject *CurrObject); bool getObjects(BaseArray<UIObject *> &objects, bool interactiveOnly); - void addResponse(AdResponse* response); - bool handleResponse(AdResponse *response); + void addResponse(const AdResponse* response); + bool handleResponse(const AdResponse *response); bool handleResponseNum(uint32 num); int32 getIdForResponseNum(uint32 num) const; void setLastResponseText(const char *text, const char *textOrig); @@ -73,21 +73,21 @@ public: bool loadFile(const char *filename); bool loadBuffer(byte *buffer, bool complete = true); - virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent); + virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override; UIWindow *getResponseWindow(); uint32 getNumResponses() const; private: - int _spacing; - int _scrollOffset; + int32 _spacing; + int32 _scrollOffset; BaseFont *_fontHover; BaseFont *_font; bool _horizontal; Rect32 _responseArea; - int _verticalAlign; + int32 _verticalAlign; TTextAlign _align; BaseArray<UIButton *> _respButtons; - BaseArray<AdResponse *> _responses; + BaseArray<const AdResponse *> _responses; UIWindow *_shieldWindow; char *_lastResponseText; char *_lastResponseTextOrig; diff --git a/engines/wintermute/ad/ad_response_context.h b/engines/wintermute/ad/ad_response_context.h index 14bc1abd93..dd0008a728 100644 --- a/engines/wintermute/ad/ad_response_context.h +++ b/engines/wintermute/ad/ad_response_context.h @@ -37,12 +37,14 @@ namespace Wintermute { class AdResponseContext : public BaseClass { public: void setContext(const char *context); - int _id; - char *_context; + const char *getContext() const { return _context; } + int32 _id; + DECLARE_PERSISTENT(AdResponseContext, BaseClass) AdResponseContext(BaseGame *inGame); virtual ~AdResponseContext(); - +private: + char *_context; }; } // end of namespace Wintermute diff --git a/engines/wintermute/ad/ad_rot_level.h b/engines/wintermute/ad/ad_rot_level.h index d7f5f8edf0..3466e46ba5 100644 --- a/engines/wintermute/ad/ad_rot_level.h +++ b/engines/wintermute/ad/ad_rot_level.h @@ -34,12 +34,13 @@ namespace Wintermute { class AdRotLevel : public BaseObject { + float _rotation; public: DECLARE_PERSISTENT(AdRotLevel, BaseObject) AdRotLevel(BaseGame *inGame); virtual ~AdRotLevel(); - float _rotation; - virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent); + float getRotation() const { return _rotation; } + virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override; bool loadFile(const char *filename); bool loadBuffer(byte *buffer, bool complete = true); }; diff --git a/engines/wintermute/ad/ad_scale_level.h b/engines/wintermute/ad/ad_scale_level.h index 5c206423cf..516f507a5a 100644 --- a/engines/wintermute/ad/ad_scale_level.h +++ b/engines/wintermute/ad/ad_scale_level.h @@ -39,7 +39,7 @@ public: DECLARE_PERSISTENT(AdScaleLevel, BaseObject) AdScaleLevel(BaseGame *inGame); virtual ~AdScaleLevel(); - virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent); + virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override; bool loadFile(const char *filename); bool loadBuffer(byte *buffer, bool complete = true); float getScale() const; diff --git a/engines/wintermute/ad/ad_scene.cpp b/engines/wintermute/ad/ad_scene.cpp index f305c2f60e..699ef0685d 100644 --- a/engines/wintermute/ad/ad_scene.cpp +++ b/engines/wintermute/ad/ad_scene.cpp @@ -189,7 +189,7 @@ void AdScene::cleanup() { ////////////////////////////////////////////////////////////////////////// -bool AdScene::getPath(BasePoint source, BasePoint target, AdPath *path, BaseObject *requester) { +bool AdScene::getPath(const BasePoint &source, const BasePoint &target, AdPath *path, BaseObject *requester) { if (!_pfReady) { return false; } else { @@ -420,7 +420,7 @@ bool AdScene::isWalkableAt(int x, int y, bool checkFreeObjects, BaseObject *requ ////////////////////////////////////////////////////////////////////////// -int AdScene::getPointsDist(BasePoint p1, BasePoint p2, BaseObject *requester) { +int AdScene::getPointsDist(const BasePoint &p1, const BasePoint &p2, BaseObject *requester) { double xStep, yStep, x, y; int xLength, yLength, xCount, yCount; int x1, y1, x2, y2; @@ -755,7 +755,7 @@ bool AdScene::loadBuffer(byte *buffer, bool complete) { break; case TOKEN_CAMERA: - strcpy(camera, (char *)params); + Common::strlcpy(camera, (char *)params, MAX_PATH_LENGTH); break; case TOKEN_EDITOR_MARGIN_H: @@ -931,13 +931,13 @@ bool AdScene::traverseNodes(bool doUpdate) { if (_autoScroll) { // adjust horizontal scroll - if (_gameRef->_timer - _lastTimeH >= _scrollTimeH) { - int timesMissed = (_gameRef->_timer - _lastTimeH) / _scrollTimeH; + if (_gameRef->getTimer()->getTime() - _lastTimeH >= _scrollTimeH) { + int timesMissed = (_gameRef->getTimer()->getTime() - _lastTimeH) / _scrollTimeH; // Cap the amount of catch-up to avoid jittery characters. if (timesMissed > 2) { timesMissed = 2; } - _lastTimeH = _gameRef->_timer; + _lastTimeH = _gameRef->getTimer()->getTime(); if (_offsetLeft < _targetOffsetLeft) { _offsetLeft += _scrollPixelsH * timesMissed; _offsetLeft = MIN(_offsetLeft, _targetOffsetLeft); @@ -948,13 +948,13 @@ bool AdScene::traverseNodes(bool doUpdate) { } // adjust vertical scroll - if (_gameRef->_timer - _lastTimeV >= _scrollTimeV) { - int timesMissed = (_gameRef->_timer - _lastTimeV) / _scrollTimeV; + if (_gameRef->getTimer()->getTime() - _lastTimeV >= _scrollTimeV) { + int timesMissed = (_gameRef->getTimer()->getTime() - _lastTimeV) / _scrollTimeV; // Cap the amount of catch-up to avoid jittery characters. if (timesMissed > 2) { timesMissed = 2; } - _lastTimeV = _gameRef->_timer; + _lastTimeV = _gameRef->getTimer()->getTime(); if (_offsetTop < _targetOffsetTop) { _offsetTop += _scrollPixelsV * timesMissed; _offsetTop = MIN(_offsetTop, _targetOffsetTop); @@ -1014,8 +1014,8 @@ bool AdScene::traverseNodes(bool doUpdate) { } if (_shieldWindow) { _shieldWindow->_posX = _shieldWindow->_posY = 0; - _shieldWindow->_width = _gameRef->_renderer->_width; - _shieldWindow->_height = _gameRef->_renderer->_height; + _shieldWindow->_width = _gameRef->_renderer->getWidth(); + _shieldWindow->_height = _gameRef->_renderer->getHeight(); _shieldWindow->display(); } } @@ -1694,10 +1694,10 @@ bool AdScene::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, int height = stack->pop()->getInt(); if (width <= 0) { - width = _gameRef->_renderer->_width; + width = _gameRef->_renderer->getWidth(); } if (height <= 0) { - height = _gameRef->_renderer->_height; + height = _gameRef->_renderer->getHeight(); } if (!_viewport) { @@ -2569,10 +2569,10 @@ bool AdScene::getViewportSize(int *width, int *height) { } } else { if (width) { - *width = _gameRef->_renderer->_width; + *width = _gameRef->_renderer->getWidth(); } if (height) { - *height = _gameRef->_renderer->_height; + *height = _gameRef->_renderer->getHeight(); } } return STATUS_OK; @@ -2774,11 +2774,11 @@ float AdScene::getRotationAt(int x, int y) { } int delta_x = next->_posX - prev->_posX; - float delta_rot = next->_rotation - prev->_rotation; + float delta_rot = next->getRotation() - prev->getRotation(); x -= prev->_posX; float percent = (float)x / ((float)delta_x / 100.0f); - return prev->_rotation + delta_rot / 100 * percent; + return prev->getRotation() + delta_rot / 100 * percent; } diff --git a/engines/wintermute/ad/ad_scene.h b/engines/wintermute/ad/ad_scene.h index 9cc8135889..9ddef73b65 100644 --- a/engines/wintermute/ad/ad_scene.h +++ b/engines/wintermute/ad/ad_scene.h @@ -87,7 +87,7 @@ public: float getScaleAt(int y); bool sortScaleLevels(); bool sortRotLevels(); - virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent); + virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override; uint32 getAlphaAt(int x, int y, bool colorCheck = false); bool _paralaxScrolling; void skipTo(int offsetX, int offsetY); @@ -96,7 +96,7 @@ public: void skipToObject(BaseObject *object); void scrollToObject(BaseObject *object); void scrollTo(int offsetX, int offsetY); - virtual bool update(); + virtual bool update() override; bool _autoScroll; int _targetOffsetTop; int _targetOffsetLeft; @@ -117,7 +117,7 @@ public: bool isWalkableAt(int x, int y, bool checkFreeObjects = false, BaseObject *requester = nullptr); AdLayer *_mainLayer; float getZoomAt(int x, int y); - bool getPath(BasePoint source, BasePoint target, AdPath *path, BaseObject *requester = nullptr); + bool getPath(const BasePoint &source, const BasePoint &target, AdPath *path, BaseObject *requester = nullptr); AdScene(BaseGame *inGame); virtual ~AdScene(); BaseArray<AdLayer *> _layers; @@ -125,12 +125,12 @@ public: BaseArray<AdWaypointGroup *> _waypointGroups; bool loadFile(const char *filename); bool loadBuffer(byte *buffer, bool complete = true); - int _width; - int _height; + int32 _width; + int32 _height; bool addObject(AdObject *Object); bool removeObject(AdObject *Object); - int _editorMarginH; - int _editorMarginV; + int32 _editorMarginH; + int32 _editorMarginV; uint32 _editorColFrame; uint32 _editorColEntity; uint32 _editorColRegion; @@ -153,13 +153,13 @@ public: BaseArray<AdRotLevel *> _rotLevels; virtual bool restoreDeviceObjects(); - int getPointsDist(BasePoint p1, BasePoint p2, BaseObject *requester = nullptr); + int getPointsDist(const BasePoint &p1, const BasePoint &p2, BaseObject *requester = nullptr); // scripting interface - virtual ScValue *scGetProperty(const Common::String &name); - virtual bool scSetProperty(const char *name, ScValue *value); - virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name); - virtual const char *scToString(); + virtual ScValue *scGetProperty(const Common::String &name) override; + virtual bool scSetProperty(const char *name, ScValue *value) override; + virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override; + virtual const char *scToString() override; private: diff --git a/engines/wintermute/ad/ad_sentence.cpp b/engines/wintermute/ad/ad_sentence.cpp index 47b22a1ab3..9192b74c4e 100644 --- a/engines/wintermute/ad/ad_sentence.cpp +++ b/engines/wintermute/ad/ad_sentence.cpp @@ -56,7 +56,7 @@ AdSentence::AdSentence(BaseGame *inGame) : BaseClass(inGame) { _font = nullptr; _pos.x = _pos.y = 0; - _width = _gameRef->_renderer->_width; + _width = _gameRef->_renderer->getWidth(); _align = (TTextAlign)TAL_CENTER; @@ -214,7 +214,7 @@ bool AdSentence::display() { x = MAX(x, 0); - x = MIN(x, _gameRef->_renderer->_width - _width); + x = MIN(x, _gameRef->_renderer->getWidth() - _width); y = MAX(y, 0); _font->drawText((byte *)_text, x, y, _width, _align); @@ -314,9 +314,9 @@ bool AdSentence::update(TDirection dir) { /* if (_sound) CurrentTime = _sound->GetPositionTime(); - else CurrentTime = _gameRef->_timer - _startTime; + else CurrentTime = _gameRef->getTimer()->getTime() - _startTime; */ - currentTime = _gameRef->_timer - _startTime; + currentTime = _gameRef->getTimer()->getTime() - _startTime; bool talkNodeFound = false; for (uint32 i = 0; i < _talkDef->_nodes.size(); i++) { @@ -355,7 +355,7 @@ bool AdSentence::update(TDirection dir) { ////////////////////////////////////////////////////////////////////////// bool AdSentence::canSkip() { // prevent accidental sentence skipping (TODO make configurable) - return (_gameRef->_timer - _startTime) > 300; + return (_gameRef->getTimer()->getTime() - _startTime) > 300; } } // end of namespace Wintermute diff --git a/engines/wintermute/ad/ad_sentence.h b/engines/wintermute/ad/ad_sentence.h index e7c94030b9..6f255578f7 100644 --- a/engines/wintermute/ad/ad_sentence.h +++ b/engines/wintermute/ad/ad_sentence.h @@ -56,14 +56,14 @@ public: BaseSound *_sound; TTextAlign _align; bool display(); - int _width; + int32 _width; Point32 _pos; BaseFont *_font; char *getNextStance(); char *getCurrentStance(); void setStances(const char *stances); void setText(const char *text); - int _currentStance; + int32 _currentStance; uint32 _startTime; char *_stances; char *_text; diff --git a/engines/wintermute/ad/ad_sprite_set.h b/engines/wintermute/ad/ad_sprite_set.h index 3960b5dcc7..61043aa3d6 100644 --- a/engines/wintermute/ad/ad_sprite_set.h +++ b/engines/wintermute/ad/ad_sprite_set.h @@ -37,7 +37,7 @@ class BaseSprite; class AdSpriteSet : public BaseObject { public: bool containsSprite(BaseSprite *sprite); - virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent = 0); + virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent = 0) override; BaseSprite *getSprite(TDirection direction); DECLARE_PERSISTENT(AdSpriteSet, BaseObject) BaseObject *_owner; diff --git a/engines/wintermute/ad/ad_talk_def.h b/engines/wintermute/ad/ad_talk_def.h index d147212775..2375360d89 100644 --- a/engines/wintermute/ad/ad_talk_def.h +++ b/engines/wintermute/ad/ad_talk_def.h @@ -50,7 +50,7 @@ public: BaseArray<AdTalkNode *> _nodes; char *_defaultSpriteFilename; BaseSprite *_defaultSprite; - virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent = 0); + virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent = 0) override; }; } // end of namespace Wintermute diff --git a/engines/wintermute/ad/ad_talk_holder.h b/engines/wintermute/ad/ad_talk_holder.h index d52ebf63c0..501acbc885 100644 --- a/engines/wintermute/ad/ad_talk_holder.h +++ b/engines/wintermute/ad/ad_talk_holder.h @@ -37,7 +37,7 @@ class AdTalkHolder : public AdObject { public: DECLARE_PERSISTENT(AdTalkHolder, AdObject) virtual BaseSprite *getTalkStance(const char *stance); - virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent); + virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override; BaseSprite *_sprite; BaseArray<BaseSprite *> _talkSprites; BaseArray<BaseSprite *> _talkSpritesEx; @@ -45,10 +45,10 @@ public: virtual ~AdTalkHolder(); // scripting interface - virtual ScValue *scGetProperty(const Common::String &name); - virtual bool scSetProperty(const char *name, ScValue *value); - virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name); - virtual const char *scToString(); + virtual ScValue *scGetProperty(const Common::String &name) override; + virtual bool scSetProperty(const char *name, ScValue *value) override; + virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override; + virtual const char *scToString() override; }; diff --git a/engines/wintermute/ad/ad_talk_node.h b/engines/wintermute/ad/ad_talk_node.h index 7dfd861f85..012fa2133e 100644 --- a/engines/wintermute/ad/ad_talk_node.h +++ b/engines/wintermute/ad/ad_talk_node.h @@ -47,7 +47,7 @@ public: AdTalkNode(BaseGame *inGame); virtual ~AdTalkNode(); bool loadBuffer(byte *buffer, bool complete = true); - virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent = 0); + virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent = 0) override; char *_spriteFilename; BaseSprite *_sprite; uint32 _startTime; diff --git a/engines/wintermute/ad/ad_waypoint_group.h b/engines/wintermute/ad/ad_waypoint_group.h index 7e427313e6..79b28e0d22 100644 --- a/engines/wintermute/ad/ad_waypoint_group.h +++ b/engines/wintermute/ad/ad_waypoint_group.h @@ -38,7 +38,7 @@ public: void cleanup(); bool mimic(AdWaypointGroup *wpt, float scale = 100.0f, int x = 0, int y = 0); DECLARE_PERSISTENT(AdWaypointGroup, BaseObject) - virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent); + virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override; AdWaypointGroup(BaseGame *inGame); bool loadFile(const char *filename); bool loadBuffer(byte *buffer, bool complete = true); @@ -50,10 +50,10 @@ public: virtual ScValue *scGetProperty(const Common::String &name); virtual bool scSetProperty(const char *name, ScValue *value); private: - int _editorSelectedPoint; + int32 _editorSelectedPoint; float _lastMimicScale; - int _lastMimicX; - int _lastMimicY; + int32 _lastMimicX; + int32 _lastMimicY; }; } // end of namespace Wintermute diff --git a/engines/wintermute/base/base.cpp b/engines/wintermute/base/base.cpp index c0459b0ce5..d01972b82f 100644 --- a/engines/wintermute/base/base.cpp +++ b/engines/wintermute/base/base.cpp @@ -28,6 +28,7 @@ #include "engines/wintermute/base/base.h" #include "engines/wintermute/base/base_game.h" +#include "engines/wintermute/base/base_engine.h" #include "engines/wintermute/base/base_parser.h" #include "engines/wintermute/base/base_dynamic_buffer.h" @@ -105,7 +106,7 @@ bool BaseClass::parseEditorProperty(byte *buffer, bool complete) { if (complete) { if (parser.getCommand((char **)&buffer, commands, (char **)¶ms) != TOKEN_EDITOR_PROPERTY) { - _gameRef->LOG(0, "'EDITOR_PROPERTY' keyword expected."); + BaseEngine::LOG(0, "'EDITOR_PROPERTY' keyword expected."); return STATUS_FAILED; } buffer = params; @@ -143,7 +144,7 @@ bool BaseClass::parseEditorProperty(byte *buffer, bool complete) { delete[] propValue; propName = nullptr; propValue = nullptr; - _gameRef->LOG(0, "Syntax error in EDITOR_PROPERTY definition"); + BaseEngine::LOG(0, "Syntax error in EDITOR_PROPERTY definition"); return STATUS_FAILED; } if (cmd == PARSERR_GENERIC || propName == nullptr || propValue == nullptr) { @@ -151,7 +152,7 @@ bool BaseClass::parseEditorProperty(byte *buffer, bool complete) { delete[] propValue; propName = nullptr; propValue = nullptr; - _gameRef->LOG(0, "Error loading EDITOR_PROPERTY definition"); + BaseEngine::LOG(0, "Error loading EDITOR_PROPERTY definition"); return STATUS_FAILED; } diff --git a/engines/wintermute/base/base_active_rect.cpp b/engines/wintermute/base/base_active_rect.cpp index 4c62cf9561..7a91854c57 100644 --- a/engines/wintermute/base/base_active_rect.cpp +++ b/engines/wintermute/base/base_active_rect.cpp @@ -28,6 +28,7 @@ #include "engines/wintermute/base/base_active_rect.h" #include "engines/wintermute/base/base_game.h" +#include "engines/wintermute/base/base_engine.h" #include "engines/wintermute/base/base_region.h" #include "engines/wintermute/base/gfx/base_renderer.h" #include "engines/wintermute/platform_osystem.h" @@ -89,7 +90,7 @@ void BaseActiveRect::clipRect() { Rect32 rc; bool customViewport; _gameRef->getCurrentViewportRect(&rc, &customViewport); - BaseRenderer *Rend = _gameRef->_renderer; + BaseRenderer *Rend = BaseEngine::getRenderer(); if (!customViewport) { rc.left -= Rend->_drawOffsetX; diff --git a/engines/wintermute/base/base_active_rect.h b/engines/wintermute/base/base_active_rect.h index 7ef8374814..982a0902d0 100644 --- a/engines/wintermute/base/base_active_rect.h +++ b/engines/wintermute/base/base_active_rect.h @@ -45,8 +45,8 @@ public: BaseSubFrame *_frame; BaseObject *_owner; BaseRegion *_region; - int _offsetX; - int _offsetY; + int32 _offsetX; + int32 _offsetY; Rect32 _rect; BaseActiveRect(BaseGame *inGameOwner = nullptr); BaseActiveRect(BaseGame *inGameOwner, BaseObject *owner, BaseSubFrame *frame, int x, int y, int width, int height, float zoomX = 100, float zoomY = 100, bool precise = true); diff --git a/engines/wintermute/base/base_engine.cpp b/engines/wintermute/base/base_engine.cpp index a13ca4d919..d4b17a0a64 100644 --- a/engines/wintermute/base/base_engine.cpp +++ b/engines/wintermute/base/base_engine.cpp @@ -90,4 +90,36 @@ uint32 BaseEngine::randInt(int from, int to) { return _rnd->getRandomNumberRng(from, to); } +BaseSoundMgr *BaseEngine::getSoundMgr() { + if (instance()._gameRef) { + return _gameRef->_soundMgr; + } else { + return nullptr; + } +} + +BaseRenderer *BaseEngine::getRenderer() { + if (instance()._gameRef) { + return instance()._gameRef->_renderer; + } else { + return nullptr; + } +} + +const Timer *BaseEngine::getTimer() { + if (instance()._gameRef) { + return instance()._gameRef->getTimer(); + } else { + return nullptr; + } +} + +const Timer *BaseEngine::getLiveTimer() { + if (instance()._gameRef) { + return instance()._gameRef->getLiveTimer(); + } else { + return nullptr; + } +} + } // end of namespace Wintermute diff --git a/engines/wintermute/base/base_engine.h b/engines/wintermute/base/base_engine.h index f04c594699..d972e6ebbc 100644 --- a/engines/wintermute/base/base_engine.h +++ b/engines/wintermute/base/base_engine.h @@ -39,7 +39,10 @@ namespace Wintermute { class BaseFileManager; class BaseRegistry; class BaseGame; +class BaseSoundMgr; +class BaseRenderer; class SystemClassRegistry; +class Timer; class BaseEngine : public Common::Singleton<Wintermute::BaseEngine> { void init(Common::Language lang); BaseFileManager *_fileManager; @@ -60,6 +63,10 @@ public: SystemClassRegistry *getClassRegistry() { return _classReg; } BaseGame *getGameRef() { return _gameRef; } BaseFileManager *getFileManager() { return _fileManager; } + BaseSoundMgr *getSoundMgr(); + static BaseRenderer *getRenderer(); + static const Timer *getTimer(); + static const Timer *getLiveTimer(); static void LOG(bool res, const char *fmt, ...); const char *getGameId() { return _gameId.c_str(); } }; diff --git a/engines/wintermute/base/base_fader.cpp b/engines/wintermute/base/base_fader.cpp index 8f74d71caf..0d17b07a9d 100644 --- a/engines/wintermute/base/base_fader.cpp +++ b/engines/wintermute/base/base_fader.cpp @@ -27,7 +27,8 @@ */ #include "engines/wintermute/base/base_fader.h" -#include "engines/wintermute/base/base_game.h" +#include "engines/wintermute/base/base_engine.h" +#include "engines/wintermute/base/timer.h" #include "engines/wintermute/base/gfx/base_renderer.h" #include "common/util.h" @@ -71,7 +72,7 @@ bool BaseFader::update() { if (_system) { time = g_system->getMillis() - _startTime; } else { - time = _gameRef->_timer - _startTime; + time = BaseEngine::getTimer()->getTime() - _startTime; } if (time >= _duration) { @@ -97,7 +98,7 @@ bool BaseFader::display() { } if (_currentAlpha > 0x00) { - _gameRef->_renderer->fadeToColor(_red, _green, _blue, _currentAlpha); + BaseEngine::getRenderer()->fadeToColor(_red, _green, _blue, _currentAlpha); } return STATUS_OK; } @@ -129,7 +130,7 @@ bool BaseFader::fadeIn(uint32 sourceColor, uint32 duration, bool system) { if (_system) { _startTime = g_system->getMillis(); } else { - _startTime = _gameRef->_timer; + _startTime = BaseEngine::getTimer()->getTime(); } return STATUS_OK; @@ -155,7 +156,7 @@ bool BaseFader::fadeOut(uint32 targetColor, uint32 duration, bool system) { if (_system) { _startTime = g_system->getMillis(); } else { - _startTime = _gameRef->_timer; + _startTime = BaseEngine::getTimer()->getTime(); } diff --git a/engines/wintermute/base/base_file_manager.cpp b/engines/wintermute/base/base_file_manager.cpp index 28e0b3af6e..4c7c31562d 100644 --- a/engines/wintermute/base/base_file_manager.cpp +++ b/engines/wintermute/base/base_file_manager.cpp @@ -192,7 +192,9 @@ bool BaseFileManager::registerPackages() { Common::FSList files; for (Common::FSList::iterator it = _packagePaths.begin(); it != _packagePaths.end(); ++it) { debugC(kWintermuteDebugFileAccess, "Should register folder: %s %s", (*it).getPath().c_str(), (*it).getName().c_str()); - (*it).getChildren(files, Common::FSNode::kListFilesOnly); + if ((*it).getChildren(files, Common::FSNode::kListFilesOnly)) { + warning("getChildren() failed for path: %s", (*it).getDisplayName().c_str()); + } for (Common::FSList::iterator fileIt = files.begin(); fileIt != files.end(); ++fileIt) { if (!fileIt->getName().hasSuffix(".dcp")) { continue; @@ -249,7 +251,7 @@ Common::SeekableReadStream *BaseFileManager::openPkgFile(const Common::String &f upcName.toUppercase(); Common::SeekableReadStream *file = nullptr; char fileName[MAX_PATH_LENGTH]; - strcpy(fileName, upcName.c_str()); + Common::strlcpy(fileName, upcName.c_str(), MAX_PATH_LENGTH); // correct slashes for (uint32 i = 0; i < upcName.size(); i++) { diff --git a/engines/wintermute/base/base_frame.cpp b/engines/wintermute/base/base_frame.cpp index 8a190c729b..382e8acbe0 100644 --- a/engines/wintermute/base/base_frame.cpp +++ b/engines/wintermute/base/base_frame.cpp @@ -27,8 +27,9 @@ */ #include "engines/wintermute/base/base_parser.h" +#include "engines/wintermute/base/base_engine.h" #include "engines/wintermute/base/base_frame.h" -#include "engines/wintermute/base/base_game.h" +#include "engines/wintermute/base/base_object.h" #include "engines/wintermute/base/base_dynamic_buffer.h" #include "engines/wintermute/base/sound/base_sound_manager.h" #include "engines/wintermute/base/sound/base_sound.h" @@ -264,8 +265,8 @@ bool BaseFrame::loadBuffer(byte *buffer, int lifeTime, bool keepLoaded) { } _sound = new BaseSound(_gameRef); if (!_sound || DID_FAIL(_sound->setSound(params, Audio::Mixer::kSFXSoundType, false))) { - if (_gameRef->_soundMgr->_soundAvailable) { - _gameRef->LOG(0, "Error loading sound '%s'.", params); + if (BaseEngine::instance().getSoundMgr()->_soundAvailable) { + BaseEngine::LOG(0, "Error loading sound '%s'.", params); } delete _sound; _sound = nullptr; @@ -294,12 +295,12 @@ bool BaseFrame::loadBuffer(byte *buffer, int lifeTime, bool keepLoaded) { } } if (cmd == PARSERR_TOKENNOTFOUND) { - _gameRef->LOG(0, "Syntax error in FRAME definition"); + BaseEngine::LOG(0, "Syntax error in FRAME definition"); return STATUS_FAILED; } if (cmd == PARSERR_GENERIC) { - _gameRef->LOG(0, "Error loading FRAME definition"); + BaseEngine::LOG(0, "Error loading FRAME definition"); return STATUS_FAILED; } @@ -314,7 +315,7 @@ bool BaseFrame::loadBuffer(byte *buffer, int lifeTime, bool keepLoaded) { if (!sub->_surface) { delete sub; - _gameRef->LOG(0, "Error loading SUBFRAME"); + BaseEngine::LOG(0, "Error loading SUBFRAME"); return STATUS_FAILED; } diff --git a/engines/wintermute/base/base_frame.h b/engines/wintermute/base/base_frame.h index 5ed0b92bba..954851c77f 100644 --- a/engines/wintermute/base/base_frame.h +++ b/engines/wintermute/base/base_frame.h @@ -47,8 +47,8 @@ public: bool getBoundingRect(Rect32 *rect, int x, int y, float scaleX = 100, float scaleY = 100); bool saveAsText(BaseDynamicBuffer *buffer, int indent); - int _moveY; - int _moveX; + int32 _moveY; + int32 _moveX; uint32 _delay; BaseArray<BaseSubFrame *> _subframes; bool draw(int x, int y, BaseObject *registerOwner = nullptr, float zoomX = 100, float zoomY = 100, bool precise = true, uint32 alpha = 0xFFFFFFFF, bool allFrames = false, float rotate = 0.0f, TSpriteBlendMode blendMode = BLEND_NORMAL); @@ -60,10 +60,10 @@ public: BaseArray<const char *> _applyEvent; // scripting interface - virtual ScValue *scGetProperty(const Common::String &name); - virtual bool scSetProperty(const char *name, ScValue *value); - virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name); - virtual const char *scToString(); + virtual ScValue *scGetProperty(const Common::String &name) override; + virtual bool scSetProperty(const char *name, ScValue *value) override; + virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override; + virtual const char *scToString() override; private: bool _keyframe; bool _editorExpanded; diff --git a/engines/wintermute/base/base_game.cpp b/engines/wintermute/base/base_game.cpp index 94ea36cd06..0f2a3d1260 100644 --- a/engines/wintermute/base/base_game.cpp +++ b/engines/wintermute/base/base_game.cpp @@ -30,6 +30,7 @@ #include "engines/wintermute/base/base_engine.h" #include "engines/wintermute/base/base_game.h" #include "engines/wintermute/base/base_game_music.h" +#include "engines/wintermute/base/base_game_settings.h" #include "engines/wintermute/base/base_fader.h" #include "engines/wintermute/base/base_file_manager.h" #include "engines/wintermute/base/font/base_font.h" @@ -43,11 +44,10 @@ #include "engines/wintermute/base/base_sub_frame.h" #include "engines/wintermute/base/base_transition_manager.h" #include "engines/wintermute/base/base_viewport.h" -#include "engines/wintermute/base/base_string_table.h" #include "engines/wintermute/base/base_region.h" -#include "engines/wintermute/base/base_save_thumb_helper.h" #include "engines/wintermute/base/base_surface_storage.h" #include "engines/wintermute/base/saveload.h" +#include "engines/wintermute/base/save_thumb_helper.h" #include "engines/wintermute/base/scriptables/script_value.h" #include "engines/wintermute/base/scriptables/script_engine.h" #include "engines/wintermute/base/scriptables/script_stack.h" @@ -81,7 +81,7 @@ IMPLEMENT_PERSISTENT(BaseGame, true) ////////////////////////////////////////////////////////////////////// -BaseGame::BaseGame(const Common::String &gameId) : BaseObject(this), _gameId(gameId) { +BaseGame::BaseGame(const Common::String &gameId) : BaseObject(this), _gameId(gameId), _timerNormal(), _timerLive() { _shuttingDown = false; _state = GAME_RUNNING; @@ -122,14 +122,6 @@ BaseGame::BaseGame(const Common::String &gameId) : BaseObject(this), _gameId(gam _subtitles = true; _videoSubtitles = true; - _timer = 0; - _timerDelta = 0; - _timerLast = 0; - - _liveTimer = 0; - _liveTimerDelta = 0; - _liveTimerLast = 0; - _sequence = 0; _mousePos.x = _mousePos.y = 0; @@ -143,22 +135,8 @@ BaseGame::BaseGame(const Common::String &gameId) : BaseObject(this), _gameId(gam _useD3D = false; - _stringTable = new BaseStringTable(this); - _musicSystem = new BaseGameMusic(this); - _settingsResWidth = 800; - _settingsResHeight = 600; - _settingsRequireAcceleration = false; - _settingsRequireSound = false; - _settingsTLMode = 0; - _settingsAllowWindowed = true; - _settingsGameFile = nullptr; - _settingsAllowAdvanced = false; - _settingsAllowAccessTab = true; - _settingsAllowAboutTab = true; - _settingsAllowDesktopRes = false; - _editorForceScripts = false; _editorAlwaysRegister = false; @@ -171,7 +149,6 @@ BaseGame::BaseGame(const Common::String &gameId) : BaseObject(this), _gameId(gam _scheduledLoadSlot = -1; _personalizedSave = false; - _compressedSavegames = true; _editorMode = false; //_doNotExpandStrings = false; @@ -192,8 +169,6 @@ BaseGame::BaseGame(const Common::String &gameId) : BaseObject(this), _gameId(gam _thumbnailWidth = _thumbnailHeight = 0; - _richSavedGames = false; - _savedGameExt = "dsv"; _localSaveDir = "saves"; _saveDirChecked = false; @@ -237,6 +212,8 @@ BaseGame::BaseGame(const Common::String &gameId) : BaseObject(this), _gameId(gam #else*/ _touchInterface = false; _constrainedMemory = false; + + _settings = new BaseGameSettings(this); //#endif } @@ -253,8 +230,6 @@ BaseGame::~BaseGame() { cleanup(); - delete[] _settingsGameFile; - delete _cachedThumbnail; delete _mathClass; @@ -269,10 +244,8 @@ BaseGame::~BaseGame() { //SAFE_DELETE(_keyboardState); delete _renderer; - delete _stringTable; delete _musicSystem; - - _settingsGameFile = nullptr; + delete _settings; _cachedThumbnail = nullptr; @@ -287,8 +260,8 @@ BaseGame::~BaseGame() { _soundMgr = nullptr; _renderer = nullptr; - _stringTable = nullptr; _musicSystem = nullptr; + _settings = nullptr; DEBUG_DebugDisable(); debugC(kWintermuteDebugLog, "--- shutting down normally ---\n"); @@ -364,6 +337,42 @@ bool BaseGame::cleanup() { return STATUS_OK; } +////////////////////////////////////////////////////////////////////// +bool BaseGame::initConfManSettings() { + if (ConfMan.hasKey("debug_mode")) { + if (ConfMan.getBool("debug_mode")) { + DEBUG_DebugEnable("./wme.log"); + } + } + + if (ConfMan.hasKey("show_fps")) { + _debugShowFPS = ConfMan.getBool("show_fps"); + } else { + _debugShowFPS = false; + } + + if (ConfMan.hasKey("disable_smartcache")) { + _smartCache = ConfMan.getBool("disable_smartcache"); + } else { + _smartCache = true; + } + + if (!_smartCache) { + LOG(0, "Smart cache is DISABLED"); + } + return STATUS_OK; +} + +////////////////////////////////////////////////////////////////////// +bool BaseGame::initRenderer() { + bool windowedMode = !ConfMan.getBool("fullscreen"); + return _renderer->initRenderer(_settings->getResWidth(), _settings->getResHeight(), windowedMode); +} + +////////////////////////////////////////////////////////////////////// +bool BaseGame::loadGameSettingsFile() { + return loadFile(_settings->getGameFile()); +} ////////////////////////////////////////////////////////////////////// bool BaseGame::initialize1() { @@ -446,8 +455,8 @@ bool BaseGame::initialize2() { // we know whether we are going to be accelerated ////////////////////////////////////////////////////////////////////// bool BaseGame::initialize3() { // renderer is initialized - _posX = _renderer->_width / 2; - _posY = _renderer->_height / 2; + _posX = _renderer->getWidth() / 2; + _posY = _renderer->getHeight() / 2; _renderer->initIndicator(); return STATUS_OK; } @@ -544,16 +553,12 @@ bool BaseGame::initLoop() { _lastTime = _currentTime; _fpsTime += _deltaTime; - _liveTimerDelta = _liveTimer - _liveTimerLast; - _liveTimerLast = _liveTimer; - _liveTimer += MIN((uint32)1000, _deltaTime); + _timerLive.updateTime(_deltaTime, 1000); if (_state != GAME_FROZEN) { - _timerDelta = _timer - _timerLast; - _timerLast = _timer; - _timer += MIN((uint32)1000, _deltaTime); + _timerNormal.updateTime(_deltaTime, 1000); } else { - _timerDelta = 0; + _timerNormal.setTimeDelta(0); } _framesRendered++; @@ -603,7 +608,7 @@ void BaseGame::setOffset(int offsetX, int offsetY) { } ////////////////////////////////////////////////////////////////////////// -void BaseGame::getOffset(int *offsetX, int *offsetY) { +void BaseGame::getOffset(int *offsetX, int *offsetY) const { if (offsetX != nullptr) { *offsetX = _offsetX; } @@ -992,7 +997,7 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack clearOld = val->getBool(); } - if (DID_FAIL(_stringTable->loadFile(filename, clearOld))) { + if (DID_FAIL(_settings->loadStringTable(filename, clearOld))) { stack->pushBool(false); } else { stack->pushBool(true); @@ -1070,7 +1075,7 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack ScValue *val = stack->pop(); char *str = new char[strlen(val->getString()) + 1]; strcpy(str, val->getString()); - _stringTable->expand(&str); + expandStringByStringTable(&str); stack->pushString(str); delete[] str; return STATUS_OK; @@ -1088,9 +1093,9 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack int x = stack->pop()->getInt(); int y = stack->pop()->getInt(); x = MAX(x, 0); - x = MIN(x, _renderer->_width); + x = MIN(x, _renderer->getWidth()); y = MAX(y, 0); - y = MIN(y, _renderer->_height); + y = MIN(y, _renderer->getHeight()); Point32 p; p.x = x + _renderer->_drawOffsetX; p.y = y + _renderer->_drawOffsetY; @@ -1588,8 +1593,8 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack else if (strcmp(name, "ScreenshotEx") == 0) { stack->correctParams(3); const char *filename = stack->pop()->getString(); - int sizeX = stack->pop()->getInt(_renderer->_width); - int sizeY = stack->pop()->getInt(_renderer->_height); + int sizeX = stack->pop()->getInt(_renderer->getWidth()); + int sizeY = stack->pop()->getInt(_renderer->getHeight()); bool ret = _gameRef->_renderer->saveScreenShot(filename, sizeX, sizeY); @@ -1819,7 +1824,7 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack else if (strcmp(name, "StoreSaveThumbnail") == 0) { stack->correctParams(0); delete _cachedThumbnail; - _cachedThumbnail = new BaseSaveThumbHelper(this); + _cachedThumbnail = new SaveThumbHelper(this); if (DID_FAIL(_cachedThumbnail->storeThumbnail())) { delete _cachedThumbnail; _cachedThumbnail = nullptr; @@ -1968,7 +1973,7 @@ ScValue *BaseGame::scGetProperty(const Common::String &name) { // CurrentTime (RO) ////////////////////////////////////////////////////////////////////////// else if (name == "CurrentTime") { - _scValue->setInt((int)_timer); + _scValue->setInt((int)getTimer()->getTime()); return _scValue; } @@ -1984,7 +1989,7 @@ ScValue *BaseGame::scGetProperty(const Common::String &name) { // WindowedMode (RO) ////////////////////////////////////////////////////////////////////////// else if (name == "WindowedMode") { - _scValue->setBool(_renderer->_windowed); + _scValue->setBool(_renderer->isWindowed()); return _scValue; } @@ -2024,7 +2029,7 @@ ScValue *BaseGame::scGetProperty(const Common::String &name) { // ScreenWidth (RO) ////////////////////////////////////////////////////////////////////////// else if (name == "ScreenWidth") { - _scValue->setInt(_renderer->_width); + _scValue->setInt(_renderer->getWidth()); return _scValue; } @@ -2032,7 +2037,7 @@ ScValue *BaseGame::scGetProperty(const Common::String &name) { // ScreenHeight (RO) ////////////////////////////////////////////////////////////////////////// else if (name == "ScreenHeight") { - _scValue->setInt(_renderer->_height); + _scValue->setInt(_renderer->getHeight()); return _scValue; } @@ -2564,8 +2569,8 @@ bool BaseGame::displayQuickMsg() { // display for (uint32 i = 0; i < _quickMessages.size(); i++) { - _systemFont->drawText((const byte *)_quickMessages[i]->getText(), 0, posY, _renderer->_width); - posY += _systemFont->getTextHeight((const byte *)_quickMessages[i]->getText(), _renderer->_width); + _systemFont->drawText((const byte *)_quickMessages[i]->getText(), 0, posY, _renderer->getWidth()); + posY += _systemFont->getTextHeight((const byte *)_quickMessages[i]->getText(), _renderer->getWidth()); } return STATUS_OK; } @@ -2996,7 +3001,7 @@ bool BaseGame::saveGame(int slot, const char *desc, bool quickSave) { ////////////////////////////////////////////////////////////////////////// -bool BaseGame::loadGame(int slot) { +bool BaseGame::loadGame(uint32 slot) { //_gameRef->LOG(0, "Load start %d", BaseUtils::GetUsedMemMB()); _loading = false; @@ -3043,132 +3048,6 @@ bool BaseGame::displayWindows(bool inGame) { } ////////////////////////////////////////////////////////////////////////// -bool BaseGame::loadSettings(const char *filename) { - TOKEN_TABLE_START(commands) - TOKEN_TABLE(SETTINGS) - TOKEN_TABLE(GAME) - TOKEN_TABLE(STRING_TABLE) - TOKEN_TABLE(RESOLUTION) - TOKEN_TABLE(REQUIRE_3D_ACCELERATION) - TOKEN_TABLE(REQUIRE_SOUND) - TOKEN_TABLE(HWTL_MODE) - TOKEN_TABLE(ALLOW_WINDOWED_MODE) - TOKEN_TABLE(ALLOW_ACCESSIBILITY_TAB) - TOKEN_TABLE(ALLOW_ABOUT_TAB) - TOKEN_TABLE(ALLOW_ADVANCED) - TOKEN_TABLE(ALLOW_DESKTOP_RES) - TOKEN_TABLE(REGISTRY_PATH) - TOKEN_TABLE(RICH_SAVED_GAMES) - TOKEN_TABLE(SAVED_GAME_EXT) - TOKEN_TABLE(GUID) - TOKEN_TABLE_END - - - byte *origBuffer = BaseFileManager::getEngineInstance()->readWholeFile(filename); - if (origBuffer == nullptr) { - _gameRef->LOG(0, "BaseGame::LoadSettings failed for file '%s'", filename); - return STATUS_FAILED; - } - - bool ret = STATUS_OK; - - byte *buffer = origBuffer; - byte *params; - int cmd; - BaseParser parser; - - if (parser.getCommand((char **)&buffer, commands, (char **)¶ms) != TOKEN_SETTINGS) { - _gameRef->LOG(0, "'SETTINGS' keyword expected in game settings file."); - return STATUS_FAILED; - } - buffer = params; - while ((cmd = parser.getCommand((char **)&buffer, commands, (char **)¶ms)) > 0) { - switch (cmd) { - case TOKEN_GAME: - delete[] _settingsGameFile; - _settingsGameFile = new char[strlen((char *)params) + 1]; - if (_settingsGameFile) { - strcpy(_settingsGameFile, (char *)params); - } - break; - - case TOKEN_STRING_TABLE: - if (DID_FAIL(_stringTable->loadFile((char *)params))) { - cmd = PARSERR_GENERIC; - } - break; - - case TOKEN_RESOLUTION: - parser.scanStr((char *)params, "%d,%d", &_settingsResWidth, &_settingsResHeight); - break; - - case TOKEN_REQUIRE_3D_ACCELERATION: - parser.scanStr((char *)params, "%b", &_settingsRequireAcceleration); - break; - - case TOKEN_REQUIRE_SOUND: - parser.scanStr((char *)params, "%b", &_settingsRequireSound); - break; - - case TOKEN_HWTL_MODE: - parser.scanStr((char *)params, "%d", &_settingsTLMode); - break; - - case TOKEN_ALLOW_WINDOWED_MODE: - parser.scanStr((char *)params, "%b", &_settingsAllowWindowed); - break; - - case TOKEN_ALLOW_DESKTOP_RES: - parser.scanStr((char *)params, "%b", &_settingsAllowDesktopRes); - break; - - case TOKEN_ALLOW_ADVANCED: - parser.scanStr((char *)params, "%b", &_settingsAllowAdvanced); - break; - - case TOKEN_ALLOW_ACCESSIBILITY_TAB: - parser.scanStr((char *)params, "%b", &_settingsAllowAccessTab); - break; - - case TOKEN_ALLOW_ABOUT_TAB: - parser.scanStr((char *)params, "%b", &_settingsAllowAboutTab); - break; - - case TOKEN_REGISTRY_PATH: - //BaseEngine::instance().getRegistry()->setBasePath((char *)params); - break; - - case TOKEN_RICH_SAVED_GAMES: - parser.scanStr((char *)params, "%b", &_richSavedGames); - break; - - case TOKEN_SAVED_GAME_EXT: - _savedGameExt = (char *)params; - break; - - case TOKEN_GUID: - break; - } - } - if (cmd == PARSERR_TOKENNOTFOUND) { - _gameRef->LOG(0, "Syntax error in game settings '%s'", filename); - ret = STATUS_FAILED; - } - if (cmd == PARSERR_GENERIC) { - _gameRef->LOG(0, "Error loading game settings '%s'", filename); - ret = STATUS_FAILED; - } - - _settingsAllowWindowed = true; // TODO: These two settings should probably be cleaned out altogether. - _compressedSavegames = true; - - delete[] origBuffer; - - return ret; -} - - -////////////////////////////////////////////////////////////////////////// bool BaseGame::persist(BasePersistenceManager *persistMgr) { if (!persistMgr->getIsSaving()) { cleanup(); @@ -3213,13 +3092,8 @@ bool BaseGame::persist(BasePersistenceManager *persistMgr) { persistMgr->transfer(TMEMBER(_videoFont)); persistMgr->transfer(TMEMBER(_videoSubtitles)); - persistMgr->transfer(TMEMBER(_timer)); - persistMgr->transfer(TMEMBER(_timerDelta)); - persistMgr->transfer(TMEMBER(_timerLast)); - - persistMgr->transfer(TMEMBER(_liveTimer)); - persistMgr->transfer(TMEMBER(_liveTimerDelta)); - persistMgr->transfer(TMEMBER(_liveTimerLast)); + _timerNormal.persist(persistMgr); + _timerLive.persist(persistMgr); _renderer->persistSaveLoadImages(persistMgr); @@ -3349,7 +3223,7 @@ void BaseGame::handleKeyRelease(Common::Event *event) { ////////////////////////////////////////////////////////////////////////// -bool BaseGame::handleMouseWheel(int delta) { +bool BaseGame::handleMouseWheel(int32 delta) { bool handled = false; if (_focusedWindow) { handled = _gameRef->_focusedWindow->handleMouseWheel(delta); @@ -3379,7 +3253,7 @@ bool BaseGame::handleMouseWheel(int delta) { ////////////////////////////////////////////////////////////////////////// -bool BaseGame::getVersion(byte *verMajor, byte *verMinor, byte *extMajor, byte *extMinor) { +bool BaseGame::getVersion(byte *verMajor, byte *verMinor, byte *extMajor, byte *extMinor) const { if (verMajor) { *verMajor = DCGF_VER_MAJOR; } @@ -3402,11 +3276,11 @@ bool BaseGame::getVersion(byte *verMajor, byte *verMinor, byte *extMajor, byte * void BaseGame::setWindowTitle() { if (_renderer) { char title[512]; - strcpy(title, _caption[0]); + Common::strlcpy(title, _caption[0], 512); if (title[0] != '\0') { - strcat(title, " - "); + Common::strlcat(title, " - ", 512); } - strcat(title, "WME Lite"); + Common::strlcat(title, "WME Lite", 512); Utf8String utf8Title; @@ -3473,15 +3347,15 @@ bool BaseGame::popViewport() { _renderer->setViewport(_viewportStack[_viewportSP]->getRect()); } else _renderer->setViewport(_renderer->_drawOffsetX, _renderer->_drawOffsetY, - _renderer->_width + _renderer->_drawOffsetX, - _renderer->_height + _renderer->_drawOffsetY); + _renderer->getWidth() + _renderer->_drawOffsetX, + _renderer->getHeight() + _renderer->_drawOffsetY); return STATUS_OK; } ////////////////////////////////////////////////////////////////////////// -bool BaseGame::getCurrentViewportRect(Rect32 *rect, bool *custom) { +bool BaseGame::getCurrentViewportRect(Rect32 *rect, bool *custom) const { if (rect == nullptr) { return STATUS_FAILED; } else { @@ -3493,8 +3367,8 @@ bool BaseGame::getCurrentViewportRect(Rect32 *rect, bool *custom) { } else { BasePlatform::setRect(rect, _renderer->_drawOffsetX, _renderer->_drawOffsetY, - _renderer->_width + _renderer->_drawOffsetX, - _renderer->_height + _renderer->_drawOffsetY); + _renderer->getWidth() + _renderer->_drawOffsetX, + _renderer->getHeight() + _renderer->_drawOffsetY); if (custom) { *custom = false; } @@ -3506,7 +3380,7 @@ bool BaseGame::getCurrentViewportRect(Rect32 *rect, bool *custom) { ////////////////////////////////////////////////////////////////////////// -bool BaseGame::getCurrentViewportOffset(int *offsetX, int *offsetY) { +bool BaseGame::getCurrentViewportOffset(int *offsetX, int *offsetY) const { if (_viewportSP >= 0) { if (offsetX) { *offsetX = _viewportStack[_viewportSP]->_offsetX; @@ -3835,7 +3709,7 @@ bool BaseGame::onMouseMiddleUp() { ////////////////////////////////////////////////////////////////////////// bool BaseGame::onPaint() { - if (_renderer && _renderer->_windowed && _renderer->_ready) { + if (_renderer && _renderer->isWindowed() && _renderer->isReady()) { _renderer->initLoop(); displayContent(false, true); displayDebugInfo(); @@ -3858,42 +3732,43 @@ bool BaseGame::onWindowClose() { ////////////////////////////////////////////////////////////////////////// bool BaseGame::displayDebugInfo() { - char str[100]; - + const uint32 strLength = 100; + char str[strLength]; + if (_debugShowFPS) { sprintf(str, "FPS: %d", _gameRef->_fps); _systemFont->drawText((byte *)str, 0, 0, 100, TAL_LEFT); } if (_gameRef->_debugDebugMode) { - if (!_gameRef->_renderer->_windowed) { - sprintf(str, "Mode: %dx%dx%d", _renderer->_width, _renderer->_height, _renderer->_bPP); + if (!_gameRef->_renderer->isWindowed()) { + sprintf(str, "Mode: %dx%dx%d", _renderer->getWidth(), _renderer->getHeight(), _renderer->getBPP()); } else { - sprintf(str, "Mode: %dx%d windowed", _renderer->_width, _renderer->_height); + sprintf(str, "Mode: %dx%d windowed", _renderer->getWidth(), _renderer->getHeight()); } - strcat(str, " ("); - strcat(str, _renderer->getName().c_str()); - strcat(str, ")"); - _systemFont->drawText((byte *)str, 0, 0, _renderer->_width, TAL_RIGHT); + Common::strlcat(str, " (", strLength); + Common::strlcat(str, _renderer->getName().c_str(), strLength); + Common::strlcat(str, ")", strLength); + _systemFont->drawText((byte *)str, 0, 0, _renderer->getWidth(), TAL_RIGHT); _renderer->displayDebugInfo(); int scrTotal, scrRunning, scrWaiting, scrPersistent; scrTotal = _scEngine->getNumScripts(&scrRunning, &scrWaiting, &scrPersistent); sprintf(str, "Running scripts: %d (r:%d w:%d p:%d)", scrTotal, scrRunning, scrWaiting, scrPersistent); - _systemFont->drawText((byte *)str, 0, 70, _renderer->_width, TAL_RIGHT); + _systemFont->drawText((byte *)str, 0, 70, _renderer->getWidth(), TAL_RIGHT); - sprintf(str, "Timer: %d", _timer); - _gameRef->_systemFont->drawText((byte *)str, 0, 130, _renderer->_width, TAL_RIGHT); + sprintf(str, "Timer: %d", getTimer()->getTime()); + _gameRef->_systemFont->drawText((byte *)str, 0, 130, _renderer->getWidth(), TAL_RIGHT); if (_activeObject != nullptr) { - _systemFont->drawText((const byte *)_activeObject->getName(), 0, 150, _renderer->_width, TAL_RIGHT); + _systemFont->drawText((const byte *)_activeObject->getName(), 0, 150, _renderer->getWidth(), TAL_RIGHT); } sprintf(str, "GfxMem: %dMB", _usedMem / (1024 * 1024)); - _systemFont->drawText((byte *)str, 0, 170, _renderer->_width, TAL_RIGHT); + _systemFont->drawText((byte *)str, 0, 170, _renderer->getWidth(), TAL_RIGHT); } @@ -4004,7 +3879,7 @@ void BaseGame::autoSaveOnExit() { } ////////////////////////////////////////////////////////////////////////// -void BaseGame::addMem(int bytes) { +void BaseGame::addMem(int32 bytes) { _usedMem += bytes; } @@ -4013,4 +3888,18 @@ AnsiString BaseGame::getDeviceType() const { return "computer"; } +////////////////////////////////////////////////////////////////////////// +bool BaseGame::loadSettings(const char *filename) { + return _settings->loadSettings(filename); +} + +////////////////////////////////////////////////////////////////////////// +void BaseGame::expandStringByStringTable(char **str) const { + _settings->expandStringByStringTable(str); +} + +char *BaseGame::getKeyFromStringTable(const char *str) const { + return _settings->getKeyFromStringTable(str); +} + } // end of namespace Wintermute diff --git a/engines/wintermute/base/base_game.h b/engines/wintermute/base/base_game.h index 5666fb818c..d51255d013 100644 --- a/engines/wintermute/base/base_game.h +++ b/engines/wintermute/base/base_game.h @@ -30,6 +30,7 @@ #define WINTERMUTE_BASE_GAME_H #include "engines/wintermute/base/base_object.h" +#include "engines/wintermute/base/timer.h" #include "engines/wintermute/persistent.h" #include "engines/wintermute/coll_templ.h" #include "engines/wintermute/math/rect32.h" @@ -44,21 +45,21 @@ class BaseFader; class BaseFont; class BaseFileManager; class BaseTransitionMgr; -class ScEngine; class BaseFontStorage; class BaseGameMusic; -class BaseStringTable; class BaseQuickMsg; -class UIWindow; class BaseViewport; class BaseRenderer; class BaseRegistry; -class BaseSaveThumbHelper; class BaseSurfaceStorage; -class SXMath; class BaseKeyboardState; +class BaseGameSettings; +class ScEngine; +class SXMath; +class UIWindow; class VideoPlayer; class VideoTheoraPlayer; +class SaveThumbHelper; class BaseGame: public BaseObject { public: @@ -94,10 +95,10 @@ public: bool _shuttingDown; virtual bool displayDebugInfo(); - bool _debugShowFPS; - bool _suspendedRendering; - int _soundBufferSizeSec; + void setShowFPS(bool enabled) { _debugShowFPS = enabled; } + + bool getSuspendedRendering() const { return _suspendedRendering; } TTextEncoding _textEncoding; bool _textRTL; @@ -107,16 +108,16 @@ public: void DEBUG_DumpClassRegistry(); bool setWaitCursor(const char *filename); - int _thumbnailWidth; - int _thumbnailHeight; + uint32 getSaveThumbWidth() const { return _thumbnailWidth; } + uint32 getSaveThumbHeight() const { return _thumbnailHeight; } bool _editorMode; - void getOffset(int *offsetX, int *offsetY); - void setOffset(int offsetX, int offsetY); + void getOffset(int *offsetX, int *offsetY) const; + void setOffset(int32 offsetX, int32 offsetY); int getSequence(); - int _offsetY; - int _offsetX; + int32 _offsetY; + int32 _offsetX; float _offsetPercentX; float _offsetPercentY; @@ -128,10 +129,18 @@ public: uint32 _currentTime; uint32 _deltaTime; + // Init-functions: + bool initConfManSettings(); + bool initRenderer(); + bool loadGameSettingsFile(); bool initialize1(); bool initialize2(); bool initialize3(); BaseTransitionMgr *_transMgr; + + // String Table + void expandStringByStringTable(char **str) const; + char *getKeyFromStringTable(const char *str) const; void LOG(bool res, const char *fmt, ...); @@ -144,45 +153,39 @@ public: BaseGame(const Common::String &gameId); virtual ~BaseGame(); - void DEBUG_DebugDisable(); - void DEBUG_DebugEnable(const char *filename = nullptr); bool _debugDebugMode; - void *_debugLogFile; - int _sequence; + int32 _sequence; virtual bool loadFile(const char *filename); virtual bool loadBuffer(byte *buffer, bool complete = true); - int _viewportSP; + int32 _viewportSP; - BaseStringTable *_stringTable; - int _settingsResWidth; - int _settingsResHeight; - char *_settingsGameFile; bool _suppressScriptErrors; bool _mouseLeftDown; // TODO: Hide virtual bool externalCall(ScScript *script, ScStack *stack, ScStack *thisStack, char *name); // scripting interface - virtual ScValue *scGetProperty(const Common::String &name); - virtual bool scSetProperty(const char *name, ScValue *value); - virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name); - virtual const char *scToString(); + virtual ScValue *scGetProperty(const Common::String &name) override; + virtual bool scSetProperty(const char *name, ScValue *value) override; + virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override; + virtual const char *scToString() override; // compatibility bits bool _compatKillMethodThreads; - const char* getGameId() { return _gameId.c_str(); } + const char* getGameId() const { return _gameId.c_str(); } void setGameId(const Common::String& gameId) { _gameId = gameId; } uint32 _surfaceGCCycleTime; bool _smartCache; // RO bool _subtitles; // RO - int _scheduledLoadSlot; - bool _loading; + int32 _scheduledLoadSlot; + + bool getIsLoading() const { return _loading; } - virtual bool handleMouseWheel(int delta); + virtual bool handleMouseWheel(int32 delta); bool _quitting; - virtual bool getVersion(byte *verMajor, byte *verMinor, byte *extMajor, byte *extMinor); + virtual bool getVersion(byte *verMajor, byte *verMinor, byte *extMajor, byte *extMinor) const; virtual bool handleKeypress(Common::Event *event, bool printable = false); virtual void handleKeyRelease(Common::Event *event); @@ -201,9 +204,9 @@ public: bool displayWindows(bool inGame = false); bool _useD3D; virtual bool cleanup(); - bool loadGame(int slot); + bool loadGame(uint32 slot); bool loadGame(const char *filename); - bool saveGame(int slot, const char *desc, bool quickSave = false); + bool saveGame(int32 slot, const char *desc, bool quickSave = false); virtual bool showCursor(); BaseObject *_activeObject; @@ -212,14 +215,13 @@ public: TGameState _state; TGameState _origState; bool _origInteractive; - uint32 _timer; - uint32 _timerDelta; - uint32 _timerLast; - - uint32 _liveTimer; - uint32 _liveTimerDelta; - uint32 _liveTimerLast; + const Timer *getTimer() const { return &_timerNormal; } + const Timer *getLiveTimer() const { return &_timerLive; } +private: + Timer _timerNormal; + Timer _timerLive; +public: BaseObject *_capturedObject; Point32 _mousePos; bool validObject(BaseObject *object); @@ -233,20 +235,20 @@ public: virtual bool displayContentSimple(); bool _forceNonStreamedSounds; void resetMousePos(); - int _subtitlesSpeed; + int32 _subtitlesSpeed; void setInteractive(bool state); virtual bool windowLoadHook(UIWindow *win, char **buf, char **params); virtual bool windowScriptMethodHook(UIWindow *win, ScScript *script, ScStack *stack, const char *name); - bool getCurrentViewportOffset(int *offsetX = nullptr, int *offsetY = nullptr); - bool getCurrentViewportRect(Rect32 *rect, bool *custom = nullptr); + bool getCurrentViewportOffset(int *offsetX = nullptr, int *offsetY = nullptr) const; + bool getCurrentViewportRect(Rect32 *rect, bool *custom = nullptr) const; bool popViewport(); bool pushViewport(BaseViewport *Viewport); bool setActiveObject(BaseObject *Obj); BaseSprite *_lastCursor; bool drawCursor(BaseSprite *Cursor); - BaseSaveThumbHelper *_cachedThumbnail; - void addMem(int bytes); + SaveThumbHelper *_cachedThumbnail; + void addMem(int32 bytes); bool _touchInterface; bool _constrainedMemory; protected: @@ -254,36 +256,38 @@ protected: BaseFont *_videoFont; BaseSprite *_loadingIcon; - int _loadingIconX; - int _loadingIconY; - int _loadingIconPersistent; + int32 _loadingIconX; + int32 _loadingIconY; + int32 _loadingIconPersistent; BaseFader *_fader; - int _freezeLevel; + int32 _freezeLevel; VideoPlayer *_videoPlayer; VideoTheoraPlayer *_theoraPlayer; private: + bool _debugShowFPS; + void *_debugLogFile; + void DEBUG_DebugDisable(); + void DEBUG_DebugEnable(const char *filename = nullptr); + BaseObject *_mainObject; bool _mouseRightDown; bool _mouseMidlleDown; - bool _settingsRequireAcceleration; - bool _settingsAllowWindowed; - bool _settingsAllowAdvanced; - bool _settingsAllowAccessTab; - bool _settingsAllowAboutTab; - bool _settingsRequireSound; - bool _settingsAllowDesktopRes; - int _settingsTLMode; + + BaseGameSettings *_settings; + + int32 _soundBufferSizeSec; + virtual bool invalidateDeviceObjects(); virtual bool restoreDeviceObjects(); // TODO: This can probably be removed completely: bool _saveDirChecked; - bool _richSavedGames; + Common::String _localSaveDir; - Common::String _savedGameExt; + bool _loading; bool _reportTextureFormat; @@ -298,12 +302,16 @@ private: void *_engineLogCallbackData; bool _videoSubtitles; - bool _compressedSavegames; bool _personalizedSave; + uint32 _thumbnailWidth; + uint32 _thumbnailHeight; + void setWindowTitle(); + bool _suspendedRendering; + BaseSprite *_cursorNoninteractive; BaseKeyboardState *_keyboardState; @@ -326,13 +334,13 @@ private: time = 0; } - int posX; - int posY; + int32 posX; + int32 posY; uint32 time; }; LastClickInfo _lastClick[2]; - bool isDoubleClick(int buttonIndex); + bool isDoubleClick(int32 buttonIndex); uint32 _usedMem; @@ -340,7 +348,7 @@ private: protected: // WME Lite specific bool _autoSaveOnExit; - int _autoSaveSlot; + uint32 _autoSaveSlot; bool _cursorHidden; public: diff --git a/engines/wintermute/base/base_game_music.cpp b/engines/wintermute/base/base_game_music.cpp index 8dff41d854..a39deb8d8d 100644 --- a/engines/wintermute/base/base_game_music.cpp +++ b/engines/wintermute/base/base_game_music.cpp @@ -177,7 +177,7 @@ bool BaseGameMusic::updateMusicCrossfade() { _music[_musicCrossfadeChannel2]->play(); } - uint32 currentTime = _gameRef->_liveTimer - _musicCrossfadeStartTime; + uint32 currentTime = _gameRef->getLiveTimer()->getTime() - _musicCrossfadeStartTime; if (currentTime >= _musicCrossfadeLength) { _musicCrossfadeRunning = false; @@ -469,7 +469,7 @@ bool BaseGameMusic::scCallMethod(ScScript *script, ScStack *stack, ScStack *this return STATUS_OK; } - _musicCrossfadeStartTime = _gameRef->_liveTimer; + _musicCrossfadeStartTime = _gameRef->getLiveTimer()->getTime(); _musicCrossfadeChannel1 = channel1; _musicCrossfadeChannel2 = channel2; _musicCrossfadeLength = fadeLength; diff --git a/engines/wintermute/base/base_game_music.h b/engines/wintermute/base/base_game_music.h index 058a8cadef..0ac904b8c1 100644 --- a/engines/wintermute/base/base_game_music.h +++ b/engines/wintermute/base/base_game_music.h @@ -64,8 +64,8 @@ private: bool _musicCrossfadeSwap; uint32 _musicCrossfadeStartTime; uint32 _musicCrossfadeLength; - int _musicCrossfadeChannel1; - int _musicCrossfadeChannel2; + int32 _musicCrossfadeChannel1; + int32 _musicCrossfadeChannel2; }; } // end of namespace Wintermute diff --git a/engines/wintermute/base/base_game_settings.cpp b/engines/wintermute/base/base_game_settings.cpp new file mode 100644 index 0000000000..55fbe39fd2 --- /dev/null +++ b/engines/wintermute/base/base_game_settings.cpp @@ -0,0 +1,222 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +/* + * This file is based on WME Lite. + * http://dead-code.org/redir.php?target=wmelite + * Copyright (c) 2011 Jan Nedoma + */ + +#include "engines/wintermute/base/base_game_settings.h" +#include "engines/wintermute/base/base_engine.h" +#include "engines/wintermute/base/base_file_manager.h" +#include "engines/wintermute/base/base_string_table.h" +#include "engines/wintermute/base/base_parser.h" +#include "engines/wintermute/wintypes.h" + +namespace Wintermute { + +BaseGameSettings::BaseGameSettings(BaseGame *gameRef) { + _resWidth = 800; + _resHeight = 600; + _requireAcceleration = false; + _requireSound = false; + _TLMode = 0; + _allowWindowed = true; + _gameFile = nullptr; + _allowAdvanced = false; + _allowAccessTab = true; + _allowAboutTab = true; + _allowDesktopRes = false; + + _compressedSavegames = true; + _richSavedGames = false; + _savedGameExt = "dsv"; + + _stringTable = new BaseStringTable(gameRef); +} + +BaseGameSettings::~BaseGameSettings() { + delete[] _gameFile; + _gameFile = nullptr; + delete _stringTable; + _stringTable = nullptr; +} + +TOKEN_DEF_START +TOKEN_DEF(GAME) +TOKEN_DEF(STRING_TABLE) +TOKEN_DEF(RESOLUTION) +TOKEN_DEF(SETTINGS) +TOKEN_DEF(REQUIRE_3D_ACCELERATION) +TOKEN_DEF(REQUIRE_SOUND) +TOKEN_DEF(HWTL_MODE) +TOKEN_DEF(ALLOW_WINDOWED_MODE) +TOKEN_DEF(ALLOW_ACCESSIBILITY_TAB) +TOKEN_DEF(ALLOW_ABOUT_TAB) +TOKEN_DEF(ALLOW_ADVANCED) +TOKEN_DEF(ALLOW_DESKTOP_RES) +TOKEN_DEF(REGISTRY_PATH) +TOKEN_DEF(RICH_SAVED_GAMES) +TOKEN_DEF(SAVED_GAME_EXT) +TOKEN_DEF(GUID) +TOKEN_DEF_END + +////////////////////////////////////////////////////////////////////////// +bool BaseGameSettings::loadSettings(const char *filename) { + TOKEN_TABLE_START(commands) + TOKEN_TABLE(SETTINGS) + TOKEN_TABLE(GAME) + TOKEN_TABLE(STRING_TABLE) + TOKEN_TABLE(RESOLUTION) + TOKEN_TABLE(REQUIRE_3D_ACCELERATION) + TOKEN_TABLE(REQUIRE_SOUND) + TOKEN_TABLE(HWTL_MODE) + TOKEN_TABLE(ALLOW_WINDOWED_MODE) + TOKEN_TABLE(ALLOW_ACCESSIBILITY_TAB) + TOKEN_TABLE(ALLOW_ABOUT_TAB) + TOKEN_TABLE(ALLOW_ADVANCED) + TOKEN_TABLE(ALLOW_DESKTOP_RES) + TOKEN_TABLE(REGISTRY_PATH) + TOKEN_TABLE(RICH_SAVED_GAMES) + TOKEN_TABLE(SAVED_GAME_EXT) + TOKEN_TABLE(GUID) + TOKEN_TABLE_END + + + byte *origBuffer = BaseFileManager::getEngineInstance()->readWholeFile(filename); + if (origBuffer == nullptr) { + BaseEngine::LOG(0, "BaseGame::LoadSettings failed for file '%s'", filename); + return STATUS_FAILED; + } + + bool ret = STATUS_OK; + + byte *buffer = origBuffer; + byte *params; + int cmd; + BaseParser parser; + + if (parser.getCommand((char **)&buffer, commands, (char **)¶ms) != TOKEN_SETTINGS) { + BaseEngine::LOG(0, "'SETTINGS' keyword expected in game settings file."); + return STATUS_FAILED; + } + buffer = params; + while ((cmd = parser.getCommand((char **)&buffer, commands, (char **)¶ms)) > 0) { + switch (cmd) { + case TOKEN_GAME: + delete[] _gameFile; + _gameFile = new char[strlen((char *)params) + 1]; + if (_gameFile) { + strcpy(_gameFile, (char *)params); + } + break; + + case TOKEN_STRING_TABLE: + if (DID_FAIL(_stringTable->loadFile((char *)params))) { + cmd = PARSERR_GENERIC; + } + break; + + case TOKEN_RESOLUTION: + parser.scanStr((char *)params, "%d,%d", &_resWidth, &_resHeight); + break; + + case TOKEN_REQUIRE_3D_ACCELERATION: + parser.scanStr((char *)params, "%b", &_requireAcceleration); + break; + + case TOKEN_REQUIRE_SOUND: + parser.scanStr((char *)params, "%b", &_requireSound); + break; + + case TOKEN_HWTL_MODE: + parser.scanStr((char *)params, "%d", &_TLMode); + break; + + case TOKEN_ALLOW_WINDOWED_MODE: + parser.scanStr((char *)params, "%b", &_allowWindowed); + break; + + case TOKEN_ALLOW_DESKTOP_RES: + parser.scanStr((char *)params, "%b", &_allowDesktopRes); + break; + + case TOKEN_ALLOW_ADVANCED: + parser.scanStr((char *)params, "%b", &_allowAdvanced); + break; + + case TOKEN_ALLOW_ACCESSIBILITY_TAB: + parser.scanStr((char *)params, "%b", &_allowAccessTab); + break; + + case TOKEN_ALLOW_ABOUT_TAB: + parser.scanStr((char *)params, "%b", &_allowAboutTab); + break; + + case TOKEN_REGISTRY_PATH: + //BaseEngine::instance().getRegistry()->setBasePath((char *)params); + break; + + case TOKEN_RICH_SAVED_GAMES: + parser.scanStr((char *)params, "%b", &_richSavedGames); + break; + + case TOKEN_SAVED_GAME_EXT: + _savedGameExt = (char *)params; + break; + + case TOKEN_GUID: + break; + } + } + if (cmd == PARSERR_TOKENNOTFOUND) { + BaseEngine::LOG(0, "Syntax error in game settings '%s'", filename); + ret = STATUS_FAILED; + } + if (cmd == PARSERR_GENERIC) { + BaseEngine::LOG(0, "Error loading game settings '%s'", filename); + ret = STATUS_FAILED; + } + + _allowWindowed = true; // TODO: These two settings should probably be cleaned out altogether. + _compressedSavegames = true; + + delete[] origBuffer; + + return ret; +} + +bool BaseGameSettings::loadStringTable(const char *filename, bool clearOld) { + return _stringTable->loadFile(filename, clearOld); +} + +////////////////////////////////////////////////////////////////////////// +void BaseGameSettings::expandStringByStringTable(char **str) const { + _stringTable->expand(str); +} + +char *BaseGameSettings::getKeyFromStringTable(const char *str) const { + return _stringTable->getKey(str); +} + +} // end of namespace Wintermute diff --git a/engines/wintermute/base/base_game_settings.h b/engines/wintermute/base/base_game_settings.h new file mode 100644 index 0000000000..1dfb0b50cc --- /dev/null +++ b/engines/wintermute/base/base_game_settings.h @@ -0,0 +1,71 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +/* + * This file is based on WME Lite. + * http://dead-code.org/redir.php?target=wmelite + * Copyright (c) 2011 Jan Nedoma + */ + +#ifndef WINTERMUTE_BASE_GAME_SETTINGS_H +#define WINTERMUTE_BASE_GAME_SETTINGS_H + +#include "common/str.h" + +namespace Wintermute { +class BaseStringTable; +class BaseGame; +class BaseGameSettings { +public: + const char *getGameFile() const { return (_gameFile ? _gameFile : "default.game"); } + int getResWidth() const { return _resWidth; } + int getResHeight() const { return _resHeight; } + + BaseGameSettings(BaseGame *gameRef); + ~BaseGameSettings(); + bool loadSettings(const char *filename); + bool loadStringTable(const char *filename, bool clearOld); + void expandStringByStringTable(char **str) const; + char *getKeyFromStringTable(const char *str) const; +private: + char *_gameFile; + int _resWidth; + int _resHeight; + BaseStringTable *_stringTable; +// Not ever used: + int _TLMode; + bool _compressedSavegames; + Common::String _savedGameExt; + bool _requireAcceleration; + bool _allowWindowed; + bool _allowAdvanced; + bool _allowAccessTab; + bool _allowAboutTab; + bool _requireSound; + bool _allowDesktopRes; +// TODO: This can probably be removed completely: + bool _richSavedGames; +}; + +} // end of namespace Wintermute + +#endif diff --git a/engines/wintermute/base/base_named_object.h b/engines/wintermute/base/base_named_object.h index 77a00cee45..d25fec4a82 100644 --- a/engines/wintermute/base/base_named_object.h +++ b/engines/wintermute/base/base_named_object.h @@ -42,7 +42,7 @@ public: virtual ~BaseNamedObject(void); BaseNamedObject(TDynamicConstructor, TDynamicConstructor); - const char *getName() { return _name; } + const char *getName() const { return _name; } void setName(const char *name); }; diff --git a/engines/wintermute/base/base_object.cpp b/engines/wintermute/base/base_object.cpp index 898c0497a2..75ba4fb50f 100644 --- a/engines/wintermute/base/base_object.cpp +++ b/engines/wintermute/base/base_object.cpp @@ -33,7 +33,6 @@ #include "engines/wintermute/base/sound/base_sound.h" #include "engines/wintermute/base/sound/base_sound_manager.h" #include "engines/wintermute/base/base_game.h" -#include "engines/wintermute/base/base_string_table.h" #include "engines/wintermute/base/base_sprite.h" #include "engines/wintermute/platform_osystem.h" @@ -150,7 +149,7 @@ void BaseObject::setCaption(const char *caption, int caseVal) { _caption[caseVal - 1] = new char[strlen(caption) + 1]; if (_caption[caseVal - 1]) { strcpy(_caption[caseVal - 1], caption); - _gameRef->_stringTable->expand(&_caption[caseVal - 1]); + _gameRef->expandStringByStringTable(&_caption[caseVal - 1]); } } diff --git a/engines/wintermute/base/base_object.h b/engines/wintermute/base/base_object.h index c8491c2cf6..7afe9cf94c 100644 --- a/engines/wintermute/base/base_object.h +++ b/engines/wintermute/base/base_object.h @@ -72,7 +72,7 @@ protected: bool _ready; Rect32 _rect; bool _rectSet; - int _iD; + int32 _iD; char *_soundEvent; public: TSpriteBlendMode _blendMode; @@ -84,7 +84,7 @@ public: virtual bool resetSoundPan(); virtual bool updateSounds(); bool updateOneSound(BaseSound *sound); - int _sFXVolume; + int32 _sFXVolume; virtual bool handleMouseWheel(int delta); virtual bool handleMouse(TMouseEvent event, TMouseButton button); @@ -136,10 +136,10 @@ public: public: // scripting interface - virtual ScValue *scGetProperty(const Common::String &name); - virtual bool scSetProperty(const char *name, ScValue *value); - virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name); - virtual const char *scToString(); + virtual ScValue *scGetProperty(const Common::String &name) override; + virtual bool scSetProperty(const char *name, ScValue *value) override; + virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override; + virtual const char *scToString() override; }; } // end of namespace Wintermute diff --git a/engines/wintermute/base/base_parser.cpp b/engines/wintermute/base/base_parser.cpp index 7f18c1f0cf..a7e3bd5efb 100644 --- a/engines/wintermute/base/base_parser.cpp +++ b/engines/wintermute/base/base_parser.cpp @@ -27,8 +27,8 @@ */ #include "engines/wintermute/base/base_parser.h" -#include "engines/wintermute/base/base_game.h" #include "engines/wintermute/base/base_engine.h" +#include "engines/wintermute/base/base_game.h" #include "engines/wintermute/platform_osystem.h" #include "common/str.h" #include "common/util.h" @@ -275,7 +275,7 @@ float BaseParser::getTokenFloat(char **buf) { ////////////////////////////////////////////////////////////////////// -int BaseParser::getTokenInt(char **buf) { +int32 BaseParser::getTokenInt(char **buf) { Common::String token = getToken(buf); const char *t = token.c_str(); if (!((*t >= '0' && *t <= '9') || *t == '-')) { @@ -298,11 +298,11 @@ void BaseParser::skipToken(char **buf, char *tok, char * /*msg*/) { ////////////////////////////////////////////////////////////////////// -int BaseParser::scanStr(const char *in, const char *format, ...) { +int32 BaseParser::scanStr(const char *in, const char *format, ...) { va_list arg; va_start(arg, format); - int num = 0; + int32 num = 0; in += strspn(in, " \t\n\f"); while (*format && *in) { diff --git a/engines/wintermute/base/base_parser.h b/engines/wintermute/base/base_parser.h index 87a936c624..4953ac3c0b 100644 --- a/engines/wintermute/base/base_parser.h +++ b/engines/wintermute/base/base_parser.h @@ -59,26 +59,26 @@ namespace Wintermute { class BaseParser { public: struct TokenDesc { - int32 id; + int32 id; const char *token; }; public: - int scanStr(const char *in, const char *format, ...); + int32 scanStr(const char *in, const char *format, ...); int32 getCommand(char **buf, const TokenDesc *tokens, char **params); BaseParser(); virtual ~BaseParser(); private: char *getLastOffender(); void skipToken(char **buf, char *tok, char *msg = nullptr); - int getTokenInt(char **buf); + int32 getTokenInt(char **buf); float getTokenFloat(char **buf); Common::String getToken(char **buf); char *getAssignmentText(char **buf); char *getSubText(char **buf, char open, char close); void skipCharacters(char **buf, const char *toSkip); int32 getObject(char **buf, const TokenDesc *tokens, char **name, char **data); - int _parserLine; + int32 _parserLine; char _lastOffender[255]; char *_whiteSpace; }; diff --git a/engines/wintermute/base/base_persistence_manager.cpp b/engines/wintermute/base/base_persistence_manager.cpp index 84a1c2ec67..12bc62d5dc 100644 --- a/engines/wintermute/base/base_persistence_manager.cpp +++ b/engines/wintermute/base/base_persistence_manager.cpp @@ -31,10 +31,10 @@ #include "engines/wintermute/base/base_game.h" #include "engines/wintermute/base/base_engine.h" #include "engines/wintermute/base/base_persistence_manager.h" -#include "engines/wintermute/base/base_save_thumb_helper.h" #include "engines/wintermute/platform_osystem.h" #include "engines/wintermute/math/vector2.h" #include "engines/wintermute/base/gfx/base_image.h" +#include "engines/wintermute/base/save_thumb_helper.h" #include "engines/wintermute/base/sound/base_sound.h" #include "engines/wintermute/graphics/transparent_surface.h" #include "engines/wintermute/wintermute.h" @@ -79,6 +79,16 @@ BasePersistenceManager::BasePersistenceManager(const char *savePrefix, bool dele _savedVerMajor = _savedVerMinor = _savedVerBuild = 0; _savedExtMajor = _savedExtMinor = 0; + _savedTimestamp.tm_sec = 0; + _savedTimestamp.tm_min = 0; + _savedTimestamp.tm_hour = 0; + _savedTimestamp.tm_mday = 0; + _savedTimestamp.tm_mon = 0; + _savedTimestamp.tm_year = 0; + _savedTimestamp.tm_wday = 0; + + _savedPlayTime = 0; + _thumbnailDataSize = 0; _thumbnailData = nullptr; if (savePrefix) { @@ -218,7 +228,7 @@ bool BasePersistenceManager::initSave(const char *desc) { if (_saveStream) { // get thumbnails if (!_gameRef->_cachedThumbnail) { - _gameRef->_cachedThumbnail = new BaseSaveThumbHelper(_gameRef); + _gameRef->_cachedThumbnail = new SaveThumbHelper(_gameRef); if (DID_FAIL(_gameRef->_cachedThumbnail->storeThumbnail(true))) { delete _gameRef->_cachedThumbnail; _gameRef->_cachedThumbnail = nullptr; diff --git a/engines/wintermute/base/base_point.h b/engines/wintermute/base/base_point.h index c0bbd3102e..26568d5d0b 100644 --- a/engines/wintermute/base/base_point.h +++ b/engines/wintermute/base/base_point.h @@ -39,8 +39,8 @@ public: DECLARE_PERSISTENT(BasePoint, BaseClass) BasePoint(); BasePoint(int initX, int initY); - int y; - int x; + int32 y; + int32 x; virtual ~BasePoint(); }; diff --git a/engines/wintermute/base/base_region.cpp b/engines/wintermute/base/base_region.cpp index a3a23f770a..51d222be4c 100644 --- a/engines/wintermute/base/base_region.cpp +++ b/engines/wintermute/base/base_region.cpp @@ -29,7 +29,7 @@ #include "engines/wintermute/base/base_region.h" #include "engines/wintermute/base/base_parser.h" #include "engines/wintermute/base/base_dynamic_buffer.h" -#include "engines/wintermute/base/base_game.h" +#include "engines/wintermute/base/base_engine.h" #include "engines/wintermute/base/scriptables/script.h" #include "engines/wintermute/base/scriptables/script_stack.h" #include "engines/wintermute/base/scriptables/script_value.h" @@ -104,7 +104,7 @@ bool BaseRegion::pointInRegion(int x, int y) { bool BaseRegion::loadFile(const char *filename) { byte *buffer = BaseFileManager::getEngineInstance()->readWholeFile(filename); if (buffer == nullptr) { - _gameRef->LOG(0, "BaseRegion::LoadFile failed for file '%s'", filename); + BaseEngine::LOG(0, "BaseRegion::LoadFile failed for file '%s'", filename); return STATUS_FAILED; } @@ -113,7 +113,7 @@ bool BaseRegion::loadFile(const char *filename) { setFilename(filename); if (DID_FAIL(ret = loadBuffer(buffer, true))) { - _gameRef->LOG(0, "Error parsing REGION file '%s'", filename); + BaseEngine::LOG(0, "Error parsing REGION file '%s'", filename); } @@ -154,7 +154,7 @@ bool BaseRegion::loadBuffer(byte *buffer, bool complete) { if (complete) { if (parser.getCommand((char **)&buffer, commands, (char **)¶ms) != TOKEN_REGION) { - _gameRef->LOG(0, "'REGION' keyword expected."); + BaseEngine::LOG(0, "'REGION' keyword expected."); return STATUS_FAILED; } buffer = params; @@ -206,7 +206,7 @@ bool BaseRegion::loadBuffer(byte *buffer, bool complete) { } } if (cmd == PARSERR_TOKENNOTFOUND) { - _gameRef->LOG(0, "Syntax error in REGION definition"); + BaseEngine::LOG(0, "Syntax error in REGION definition"); return STATUS_FAILED; } @@ -446,7 +446,7 @@ typedef struct { } dPoint; ////////////////////////////////////////////////////////////////////////// -bool BaseRegion::ptInPolygon(int x, int y) { +bool BaseRegion::ptInPolygon(int32 x, int32 y) { if (_points.size() < 3) { return false; } diff --git a/engines/wintermute/base/base_region.h b/engines/wintermute/base/base_region.h index 6b7905fe53..67ca158897 100644 --- a/engines/wintermute/base/base_region.h +++ b/engines/wintermute/base/base_region.h @@ -39,10 +39,10 @@ public: void cleanup(); bool mimic(BaseRegion *region, float scale = 100.0f, int x = 0, int y = 0); bool getBoundingRect(Rect32 *rect); - bool ptInPolygon(int x, int y); + bool ptInPolygon(int32 x, int32 y); DECLARE_PERSISTENT(BaseRegion, BaseObject) bool _active; - int _editorSelectedPoint; + int32 _editorSelectedPoint; BaseRegion(BaseGame *inGame); virtual ~BaseRegion(); bool pointInRegion(int x, int y); @@ -55,14 +55,14 @@ public: virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent, const char *nameOverride); // scripting interface - virtual ScValue *scGetProperty(const Common::String &name); - virtual bool scSetProperty(const char *name, ScValue *value); - virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name); - virtual const char *scToString(); + virtual ScValue *scGetProperty(const Common::String &name) override; + virtual bool scSetProperty(const char *name, ScValue *value) override; + virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override; + virtual const char *scToString() override; private: float _lastMimicScale; - int _lastMimicX; - int _lastMimicY; + int32 _lastMimicX; + int32 _lastMimicY; }; } // end of namespace Wintermute diff --git a/engines/wintermute/base/base_script_holder.cpp b/engines/wintermute/base/base_script_holder.cpp index d1a9d4aa46..036bac1dd8 100644 --- a/engines/wintermute/base/base_script_holder.cpp +++ b/engines/wintermute/base/base_script_holder.cpp @@ -29,6 +29,7 @@ #include "engines/wintermute/ad/ad_game.h" #include "engines/wintermute/base/base_script_holder.h" #include "engines/wintermute/base/base_parser.h" +#include "engines/wintermute/base/base_engine.h" #include "engines/wintermute/base/scriptables/script_value.h" #include "engines/wintermute/base/scriptables/script_engine.h" #include "engines/wintermute/base/scriptables/script.h" @@ -301,7 +302,7 @@ bool BaseScriptHolder::addScript(const char *filename) { for (uint32 i = 0; i < _scripts.size(); i++) { if (scumm_stricmp(_scripts[i]->_filename, filename) == 0) { if (_scripts[i]->_state != SCRIPT_FINISHED) { - _gameRef->LOG(0, "BaseScriptHolder::AddScript - trying to add script '%s' mutiple times (obj: '%s')", filename, getName()); + BaseEngine::LOG(0, "BaseScriptHolder::AddScript - trying to add script '%s' mutiple times (obj: '%s')", filename, getName()); return STATUS_OK; } } @@ -382,7 +383,7 @@ bool BaseScriptHolder::parseProperty(byte *buffer, bool complete) { if (complete) { if (parser.getCommand((char **)&buffer, commands, (char **)¶ms) != TOKEN_PROPERTY) { - _gameRef->LOG(0, "'PROPERTY' keyword expected."); + BaseEngine::LOG(0, "'PROPERTY' keyword expected."); return STATUS_FAILED; } buffer = params; @@ -420,7 +421,7 @@ bool BaseScriptHolder::parseProperty(byte *buffer, bool complete) { delete[] propValue; propName = nullptr; propValue = nullptr; - _gameRef->LOG(0, "Syntax error in PROPERTY definition"); + BaseEngine::LOG(0, "Syntax error in PROPERTY definition"); return STATUS_FAILED; } if (cmd == PARSERR_GENERIC || propName == nullptr || propValue == nullptr) { @@ -428,7 +429,7 @@ bool BaseScriptHolder::parseProperty(byte *buffer, bool complete) { delete[] propValue; propName = nullptr; propValue = nullptr; - _gameRef->LOG(0, "Error loading PROPERTY definition"); + BaseEngine::LOG(0, "Error loading PROPERTY definition"); return STATUS_FAILED; } diff --git a/engines/wintermute/base/base_script_holder.h b/engines/wintermute/base/base_script_holder.h index 320f0fb07a..38a3f935d3 100644 --- a/engines/wintermute/base/base_script_holder.h +++ b/engines/wintermute/base/base_script_holder.h @@ -59,11 +59,11 @@ public: BaseArray<ScScript *> _scripts; // scripting interface - virtual ScValue *scGetProperty(const Common::String &name); - virtual bool scSetProperty(const char *name, ScValue *value); - virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name); - virtual const char *scToString(); - virtual void scDebuggerDesc(char *buf, int bufSize); + virtual ScValue *scGetProperty(const Common::String &name) override; + virtual bool scSetProperty(const char *name, ScValue *value) override; + virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override; + virtual const char *scToString() override; + virtual void scDebuggerDesc(char *buf, int bufSize) override; // IWmeObject private: char *_filename; diff --git a/engines/wintermute/base/base_scriptable.cpp b/engines/wintermute/base/base_scriptable.cpp index 7dbcd72200..fca1df4c90 100644 --- a/engines/wintermute/base/base_scriptable.cpp +++ b/engines/wintermute/base/base_scriptable.cpp @@ -52,7 +52,7 @@ BaseScriptable::BaseScriptable(BaseGame *inGame, bool noValue, bool persistable) ////////////////////////////////////////////////////////////////////////// BaseScriptable::~BaseScriptable() { - //if (_refCount>0) _gameRef->LOG(0, "Warning: Destroying object, _refCount=%d", _refCount); + //if (_refCount>0) BaseEngine::LOG(0, "Warning: Destroying object, _refCount=%d", _refCount); delete _scValue; delete _scProp; _scValue = nullptr; diff --git a/engines/wintermute/base/base_scriptable.h b/engines/wintermute/base/base_scriptable.h index b0b4e77ed2..f23d7faa5b 100644 --- a/engines/wintermute/base/base_scriptable.h +++ b/engines/wintermute/base/base_scriptable.h @@ -63,7 +63,7 @@ public: virtual void scSetBool(bool val); virtual int scCompare(BaseScriptable *val); virtual void scDebuggerDesc(char *buf, int bufSize); - int _refCount; + int32 _refCount; ScValue *_scValue; ScValue *_scProp; }; diff --git a/engines/wintermute/base/base_sprite.cpp b/engines/wintermute/base/base_sprite.cpp index 4f55e47c05..3f809f7a46 100644 --- a/engines/wintermute/base/base_sprite.cpp +++ b/engines/wintermute/base/base_sprite.cpp @@ -32,6 +32,7 @@ #include "engines/wintermute/base/base_dynamic_buffer.h" #include "engines/wintermute/base/gfx/base_surface.h" #include "engines/wintermute/base/base_game.h" +#include "engines/wintermute/base/base_engine.h" #include "engines/wintermute/base/base_frame.h" #include "engines/wintermute/base/sound/base_sound.h" #include "engines/wintermute/base/base_sub_frame.h" @@ -133,7 +134,7 @@ bool BaseSprite::isFinished() { bool BaseSprite::loadFile(const Common::String &filename, int lifeTime, TSpriteCacheType cacheType) { Common::SeekableReadStream *file = BaseFileManager::getEngineInstance()->openFile(filename); if (!file) { - _gameRef->LOG(0, "BaseSprite::LoadFile failed for file '%s'", filename.c_str()); + BaseEngine::LOG(0, "BaseSprite::LoadFile failed for file '%s'", filename.c_str()); if (_gameRef->_debugDebugMode) { return loadFile("invalid_debug.bmp", lifeTime, cacheType); } else { @@ -155,7 +156,7 @@ bool BaseSprite::loadFile(const Common::String &filename, int lifeTime, TSpriteC BaseSubFrame *subframe = new BaseSubFrame(_gameRef); subframe->setSurface(filename, true, 0, 0, 0, lifeTime, true); if (subframe->_surface == nullptr) { - _gameRef->LOG(0, "Error loading simple sprite '%s'", filename.c_str()); + BaseEngine::LOG(0, "Error loading simple sprite '%s'", filename.c_str()); ret = STATUS_FAILED; delete frame; delete subframe; @@ -170,7 +171,7 @@ bool BaseSprite::loadFile(const Common::String &filename, int lifeTime, TSpriteC byte *buffer = BaseFileManager::getEngineInstance()->readWholeFile(filename); if (buffer) { if (DID_FAIL(ret = loadBuffer(buffer, true, lifeTime, cacheType))) { - _gameRef->LOG(0, "Error parsing SPRITE file '%s'", filename.c_str()); + BaseEngine::LOG(0, "Error parsing SPRITE file '%s'", filename.c_str()); } else { ret = STATUS_OK; } @@ -231,7 +232,7 @@ bool BaseSprite::loadBuffer(byte *buffer, bool complete, int lifeTime, TSpriteCa if (complete) { if (parser.getCommand((char **)&buffer, commands, (char **)¶ms) != TOKEN_SPRITE) { - _gameRef->LOG(0, "'SPRITE' keyword expected."); + BaseEngine::LOG(0, "'SPRITE' keyword expected."); return STATUS_FAILED; } buffer = params; @@ -311,7 +312,7 @@ bool BaseSprite::loadBuffer(byte *buffer, bool complete, int lifeTime, TSpriteCa if (DID_FAIL(frame->loadBuffer(params, frameLifeTime, _streamedKeepLoaded))) { delete frame; - _gameRef->LOG(0, "Error parsing frame %d", frameCount); + BaseEngine::LOG(0, "Error parsing frame %d", frameCount); return STATUS_FAILED; } @@ -330,7 +331,7 @@ bool BaseSprite::loadBuffer(byte *buffer, bool complete, int lifeTime, TSpriteCa } if (cmd == PARSERR_TOKENNOTFOUND) { - _gameRef->LOG(0, "Syntax error in SPRITE definition"); + BaseEngine::LOG(0, "Syntax error in SPRITE definition"); return STATUS_FAILED; } _canBreak = !_continuous; @@ -365,9 +366,9 @@ bool BaseSprite::getCurrentFrame(float zoomX, float zoomY) { uint32 timer; if (_owner && _owner->_freezable) { - timer = _gameRef->_timer; + timer = _gameRef->getTimer()->getTime(); } else { - timer = _gameRef->_liveTimer; + timer = _gameRef->getLiveTimer()->getTime(); } int lastFrame = _currentFrame; diff --git a/engines/wintermute/base/base_sprite.h b/engines/wintermute/base/base_sprite.h index ac1a0e919b..24c1f47755 100644 --- a/engines/wintermute/base/base_sprite.h +++ b/engines/wintermute/base/base_sprite.h @@ -45,8 +45,8 @@ public: DECLARE_PERSISTENT(BaseSprite, BaseScriptHolder) bool getBoundingRect(Rect32 *rect, int x, int y, float scaleX = 100, float scaleY = 100); - int _moveY; - int _moveX; + int32 _moveY; + int32 _moveX; bool display(int x, int y, BaseObject *registerOwner = nullptr, float zoomX = 100, float zoomY = 100, uint32 alpha = 0xFFFFFFFF, float rotate = 0.0f, TSpriteBlendMode blendMode = BLEND_NORMAL); bool getCurrentFrame(float zoomX = 100, float zoomY = 100); void reset(); @@ -64,19 +64,19 @@ public: bool saveAsText(BaseDynamicBuffer *buffer, int indent); // scripting interface - virtual ScValue *scGetProperty(const Common::String &name); - virtual bool scSetProperty(const char *name, ScValue *value); - virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name); - virtual const char *scToString(); + virtual ScValue *scGetProperty(const Common::String &name) override; + virtual bool scSetProperty(const char *name, ScValue *value) override; + virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override; + virtual const char *scToString() override; private: BaseObject *_owner; bool _canBreak; bool _changed; bool _editorAllFrames; char *_editorBgFile; - int _editorBgOffsetX; - int _editorBgOffsetY; - int _editorBgAlpha; + int32 _editorBgOffsetX; + int32 _editorBgOffsetY; + int32 _editorBgAlpha; bool _editorMuted; bool _finished; bool _continuous; diff --git a/engines/wintermute/base/base_string_table.cpp b/engines/wintermute/base/base_string_table.cpp index 11ec7b094f..8207c32244 100644 --- a/engines/wintermute/base/base_string_table.cpp +++ b/engines/wintermute/base/base_string_table.cpp @@ -29,6 +29,7 @@ #include "engines/wintermute/platform_osystem.h" #include "engines/wintermute/base/base_file_manager.h" #include "engines/wintermute/base/base_game.h" +#include "engines/wintermute/base/base_engine.h" #include "engines/wintermute/base/base_string_table.h" #include "common/str.h" @@ -64,7 +65,7 @@ bool BaseStringTable::addString(const char *key, const char *val, bool reportDup StringsIter it = _strings.find(finalKey); if (it != _strings.end() && reportDuplicities) { - _gameRef->LOG(0, " Warning: Duplicate definition of string '%s'.", finalKey.c_str()); + BaseEngine::LOG(0, " Warning: Duplicate definition of string '%s'.", finalKey.c_str()); } _strings[finalKey] = val; @@ -185,7 +186,7 @@ const char *BaseStringTable::expandStatic(const char *string) const { ////////////////////////////////////////////////////////////////////////// bool BaseStringTable::loadFile(const char *filename, bool clearOld) { - _gameRef->LOG(0, "Loading string table..."); + BaseEngine::LOG(0, "Loading string table..."); if (clearOld) { _strings.clear(); @@ -194,7 +195,7 @@ bool BaseStringTable::loadFile(const char *filename, bool clearOld) { uint32 size; byte *buffer = BaseFileManager::getEngineInstance()->readWholeFile(filename, &size); if (buffer == nullptr) { - _gameRef->LOG(0, "BaseStringTable::LoadFile failed for file '%s'", filename); + BaseEngine::LOG(0, "BaseStringTable::LoadFile failed for file '%s'", filename); return STATUS_FAILED; } @@ -205,7 +206,7 @@ bool BaseStringTable::loadFile(const char *filename, bool clearOld) { if (_gameRef->_textEncoding != TEXT_UTF8) { _gameRef->_textEncoding = TEXT_UTF8; //_gameRef->_textEncoding = TEXT_ANSI; - _gameRef->LOG(0, " UTF8 file detected, switching to UTF8 text encoding"); + BaseEngine::LOG(0, " UTF8 file detected, switching to UTF8 text encoding"); } } else { _gameRef->_textEncoding = TEXT_ANSI; @@ -247,7 +248,7 @@ bool BaseStringTable::loadFile(const char *filename, bool clearOld) { delete[] buffer; - _gameRef->LOG(0, " %d strings loaded", _strings.size()); + BaseEngine::LOG(0, " %d strings loaded", _strings.size()); return STATUS_OK; } diff --git a/engines/wintermute/base/base_sub_frame.cpp b/engines/wintermute/base/base_sub_frame.cpp index a06d7f50eb..d93cf667f1 100644 --- a/engines/wintermute/base/base_sub_frame.cpp +++ b/engines/wintermute/base/base_sub_frame.cpp @@ -33,6 +33,7 @@ #include "engines/wintermute/base/gfx/base_surface.h" #include "engines/wintermute/base/base_surface_storage.h" #include "engines/wintermute/base/base_game.h" +#include "engines/wintermute/base/base_engine.h" #include "engines/wintermute/platform_osystem.h" #include "engines/wintermute/base/gfx/base_renderer.h" #include "engines/wintermute/base/scriptables/script_value.h" @@ -180,7 +181,7 @@ bool BaseSubFrame::loadBuffer(byte *buffer, int lifeTime, bool keepLoaded) { } } if (cmd == PARSERR_TOKENNOTFOUND) { - _gameRef->LOG(0, "Syntax error in SUBFRAME definition"); + BaseEngine::LOG(0, "Syntax error in SUBFRAME definition"); return STATUS_FAILED; } @@ -200,7 +201,7 @@ bool BaseSubFrame::loadBuffer(byte *buffer, int lifeTime, bool keepLoaded) { /* if (_surface == nullptr) { - _gameRef->LOG(0, "Error parsing sub-frame. Image not set."); + BaseEngine::LOG(0, "Error parsing sub-frame. Image not set."); return STATUS_FAILED; } */ @@ -238,12 +239,12 @@ bool BaseSubFrame::draw(int x, int y, BaseObject *registerOwner, float zoomX, fl if (registerOwner != nullptr && !_decoration) { if (zoomX == 100 && zoomY == 100) { - _gameRef->_renderer->addRectToList(new BaseActiveRect(_gameRef, registerOwner, this, x - _hotspotX + getRect().left, y - _hotspotY + getRect().top, getRect().right - getRect().left, getRect().bottom - getRect().top, zoomX, zoomY, precise)); + BaseEngine::getRenderer()->addRectToList(new BaseActiveRect(_gameRef, registerOwner, this, x - _hotspotX + getRect().left, y - _hotspotY + getRect().top, getRect().right - getRect().left, getRect().bottom - getRect().top, zoomX, zoomY, precise)); } else { - _gameRef->_renderer->addRectToList(new BaseActiveRect(_gameRef, registerOwner, this, (int)(x - (_hotspotX + getRect().left) * (zoomX / 100)), (int)(y - (_hotspotY + getRect().top) * (zoomY / 100)), (int)((getRect().right - getRect().left) * (zoomX / 100)), (int)((getRect().bottom - getRect().top) * (zoomY / 100)), zoomX, zoomY, precise)); + BaseEngine::getRenderer()->addRectToList(new BaseActiveRect(_gameRef, registerOwner, this, (int)(x - (_hotspotX + getRect().left) * (zoomX / 100)), (int)(y - (_hotspotY + getRect().top) * (zoomY / 100)), (int)((getRect().right - getRect().left) * (zoomX / 100)), (int)((getRect().bottom - getRect().top) * (zoomY / 100)), zoomX, zoomY, precise)); } } - if (_gameRef->_suspendedRendering) { + if (_gameRef->getSuspendedRendering()) { return STATUS_OK; } diff --git a/engines/wintermute/base/base_sub_frame.h b/engines/wintermute/base/base_sub_frame.h index 2888761bb3..1ecf6c671d 100644 --- a/engines/wintermute/base/base_sub_frame.h +++ b/engines/wintermute/base/base_sub_frame.h @@ -72,7 +72,7 @@ public: byte _cKRed; byte _cKGreen; byte _cKBlue; - int _lifeTime; + int32 _lifeTime; bool _keepLoaded; bool _2DOnly; diff --git a/engines/wintermute/base/base_surface_storage.cpp b/engines/wintermute/base/base_surface_storage.cpp index 08d2d2f767..8dbd6a6d2a 100644 --- a/engines/wintermute/base/base_surface_storage.cpp +++ b/engines/wintermute/base/base_surface_storage.cpp @@ -30,6 +30,7 @@ #include "engines/wintermute/base/gfx/base_surface.h" #include "engines/wintermute/base/gfx/base_renderer.h" #include "engines/wintermute/base/base_game.h" +#include "engines/wintermute/base/base_engine.h" #include "engines/wintermute/base/base_file_manager.h" #include "engines/wintermute/platform_osystem.h" #include "common/str.h" @@ -54,7 +55,7 @@ BaseSurfaceStorage::~BaseSurfaceStorage() { bool BaseSurfaceStorage::cleanup(bool warn) { for (uint32 i = 0; i < _surfaces.size(); i++) { if (warn) { - _gameRef->LOG(0, "BaseSurfaceStorage warning: purging surface '%s', usage:%d", _surfaces[i]->getFileName(), _surfaces[i]->_referenceCount); + BaseEngine::LOG(0, "BaseSurfaceStorage warning: purging surface '%s', usage:%d", _surfaces[i]->getFileName(), _surfaces[i]->_referenceCount); } delete _surfaces[i]; } @@ -66,15 +67,15 @@ bool BaseSurfaceStorage::cleanup(bool warn) { ////////////////////////////////////////////////////////////////////////// bool BaseSurfaceStorage::initLoop() { - if (_gameRef->_smartCache && _gameRef->_liveTimer - _lastCleanupTime >= _gameRef->_surfaceGCCycleTime) { - _lastCleanupTime = _gameRef->_liveTimer; + if (_gameRef->_smartCache && _gameRef->getLiveTimer()->getTime() - _lastCleanupTime >= _gameRef->_surfaceGCCycleTime) { + _lastCleanupTime = _gameRef->getLiveTimer()->getTime(); sortSurfaces(); for (uint32 i = 0; i < _surfaces.size(); i++) { if (_surfaces[i]->_lifeTime <= 0) { break; } - if (_surfaces[i]->_lifeTime > 0 && _surfaces[i]->_valid && (int)(_gameRef->_liveTimer - _surfaces[i]->_lastUsedTime) >= _surfaces[i]->_lifeTime) { + if (_surfaces[i]->_lifeTime > 0 && _surfaces[i]->_valid && (int)(_gameRef->getLiveTimer()->getTime() - _surfaces[i]->_lastUsedTime) >= _surfaces[i]->_lifeTime) { //_gameRef->QuickMessageForm("Invalidating: %s", _surfaces[i]->_filename); _surfaces[i]->invalidate(); } @@ -111,7 +112,7 @@ BaseSurface *BaseSurfaceStorage::addSurface(const Common::String &filename, bool if (!BaseFileManager::getEngineInstance()->hasFile(filename)) { if (filename.size()) { - _gameRef->LOG(0, "Missing image: '%s'", filename.c_str()); + BaseEngine::LOG(0, "Missing image: '%s'", filename.c_str()); } if (_gameRef->_debugDebugMode) { return addSurface("invalid_debug.bmp", defaultCK, ckRed, ckGreen, ckBlue, lifeTime, keepLoaded); @@ -121,7 +122,7 @@ BaseSurface *BaseSurfaceStorage::addSurface(const Common::String &filename, bool } BaseSurface *surface; - surface = _gameRef->_renderer->createSurface(); + surface = BaseEngine::getRenderer()->createSurface(); if (!surface) { return nullptr; @@ -144,7 +145,7 @@ bool BaseSurfaceStorage::restoreAll() { for (uint32 i = 0; i < _surfaces.size(); i++) { ret = _surfaces[i]->restore(); if (ret != STATUS_OK) { - _gameRef->LOG(0, "BaseSurfaceStorage::RestoreAll failed"); + BaseEngine::LOG(0, "BaseSurfaceStorage::RestoreAll failed"); return ret; } } diff --git a/engines/wintermute/base/base_transition_manager.cpp b/engines/wintermute/base/base_transition_manager.cpp index 6ae51d8e83..1c869e6a2b 100644 --- a/engines/wintermute/base/base_transition_manager.cpp +++ b/engines/wintermute/base/base_transition_manager.cpp @@ -28,6 +28,7 @@ #include "engines/wintermute/base/base_transition_manager.h" #include "engines/wintermute/base/base_game.h" +#include "engines/wintermute/base/base_engine.h" #include "engines/wintermute/base/gfx/base_renderer.h" namespace Wintermute { @@ -103,7 +104,7 @@ bool BaseTransitionMgr::update() { uint32 time = g_system->getMillis() - _lastTime; int alpha = (int)(255 - (float)time / (float)FADE_DURATION * 255); alpha = MIN(255, MAX(alpha, 0)); - _gameRef->_renderer->fade((uint16)alpha); + BaseEngine::getRenderer()->fade((uint16)alpha); if (time > FADE_DURATION) { _state = TRANS_MGR_READY; @@ -115,7 +116,7 @@ bool BaseTransitionMgr::update() { uint32 time = g_system->getMillis() - _lastTime; int alpha = (int)((float)time / (float)FADE_DURATION * 255); alpha = MIN(255, MAX(alpha, 0)); - _gameRef->_renderer->fade((uint16)alpha); + BaseEngine::getRenderer()->fade((uint16)alpha); if (time > FADE_DURATION) { _state = TRANS_MGR_READY; diff --git a/engines/wintermute/base/base_viewport.cpp b/engines/wintermute/base/base_viewport.cpp index 5a488b707f..4f62a4f6f9 100644 --- a/engines/wintermute/base/base_viewport.cpp +++ b/engines/wintermute/base/base_viewport.cpp @@ -26,9 +26,10 @@ * Copyright (c) 2011 Jan Nedoma */ -#include "engines/wintermute/base/base_game.h" -#include "engines/wintermute/platform_osystem.h" #include "engines/wintermute/base/base_viewport.h" +#include "engines/wintermute/base/base_engine.h" +#include "engines/wintermute/base/base_persistence_manager.h" +#include "engines/wintermute/platform_osystem.h" #include "engines/wintermute/base/gfx/base_renderer.h" namespace Wintermute { @@ -68,8 +69,8 @@ bool BaseViewport::setRect(int left, int top, int right, int bottom, bool noChec if (!noCheck) { left = MAX(left, 0); top = MAX(top, 0); - right = MIN(right, _gameRef->_renderer->_width); - bottom = MIN(bottom, _gameRef->_renderer->_height); + right = MIN(right, BaseEngine::instance().getRenderer()->getWidth()); + bottom = MIN(bottom, BaseEngine::instance().getRenderer()->getHeight()); } BasePlatform::setRect(&_rect, left, top, right, bottom); diff --git a/engines/wintermute/base/base_viewport.h b/engines/wintermute/base/base_viewport.h index c69682da62..75b9989080 100644 --- a/engines/wintermute/base/base_viewport.h +++ b/engines/wintermute/base/base_viewport.h @@ -31,6 +31,8 @@ #include "engines/wintermute/base/base.h" +#include "engines/wintermute/math/rect32.h" +#include "engines/wintermute/persistent.h" namespace Wintermute { class BaseObject; @@ -41,8 +43,8 @@ public: Rect32 *getRect(); bool setRect(int left, int top, int right, int bottom, bool noCheck = false); DECLARE_PERSISTENT(BaseViewport, BaseClass) - int _offsetY; - int _offsetX; + int32 _offsetY; + int32 _offsetX; BaseObject *_mainObject; BaseViewport(BaseGame *inGame = nullptr); virtual ~BaseViewport(); diff --git a/engines/wintermute/base/file/base_package.h b/engines/wintermute/base/file/base_package.h index 2882eb03b7..bcf088aaea 100644 --- a/engines/wintermute/base/file/base_package.h +++ b/engines/wintermute/base/file/base_package.h @@ -41,7 +41,7 @@ public: bool _boundToExe; byte _priority; Common::String _name; - int _cd; + int32 _cd; BasePackage(); }; diff --git a/engines/wintermute/base/gfx/base_renderer.h b/engines/wintermute/base/gfx/base_renderer.h index 5a24e0179a..bfef29a5ed 100644 --- a/engines/wintermute/base/gfx/base_renderer.h +++ b/engines/wintermute/base/gfx/base_renderer.h @@ -166,10 +166,11 @@ public: bool pointInViewport(Point32 *P); bool _active; bool _ready; - bool _windowed; - int _bPP; - int _height; - int _width; + + bool isReady() const { return _ready; } + bool isWindowed() const { return _windowed; } + int32 getBPP() const { return _bPP; } + uint32 _window; uint32 _forceAlphaColor; @@ -186,26 +187,35 @@ public: void setSaveImage(const char *filename, int x, int y); bool displayIndicator(); + + int32 getWidth() const { return _width; } + int32 getHeight() const { return _height; } protected: + int32 _height; + int32 _width; + + bool _windowed; + int32 _bPP; + Common::String _loadImageName; Common::String _saveImageName; - int _saveImageX; - int _saveImageY; - int _loadImageX; - int _loadImageY; + int32 _saveImageX; + int32 _saveImageY; + int32 _loadImageX; + int32 _loadImageY; BaseSurface *_saveLoadImage; bool _hasDrawnSaveLoadImage; - int _indicatorWidthDrawn; + int32 _indicatorWidthDrawn; uint32 _indicatorColor; - int _indicatorX; - int _indicatorY; - int _indicatorWidth; - int _indicatorHeight; + int32 _indicatorX; + int32 _indicatorY; + int32 _indicatorWidth; + int32 _indicatorHeight; bool _loadInProgress; bool _indicatorDisplay; - int _indicatorProgress; -protected: + int32 _indicatorProgress; + uint32 _clipperWindow; Rect32 _windowRect; diff --git a/engines/wintermute/base/gfx/base_surface.cpp b/engines/wintermute/base/gfx/base_surface.cpp index d882adf5ad..2002463ea4 100644 --- a/engines/wintermute/base/gfx/base_surface.cpp +++ b/engines/wintermute/base/gfx/base_surface.cpp @@ -129,7 +129,7 @@ bool BaseSurface::invalidate() { ////////////////////////////////////////////////////////////////////////// bool BaseSurface::prepareToDraw() { - _lastUsedTime = _gameRef->_liveTimer; + _lastUsedTime = _gameRef->getLiveTimer()->getTime(); if (!_valid) { //_gameRef->LOG(0, "Reviving: %s", _filename); diff --git a/engines/wintermute/base/gfx/base_surface.h b/engines/wintermute/base/gfx/base_surface.h index 1ada900161..b83efa0bb8 100644 --- a/engines/wintermute/base/gfx/base_surface.h +++ b/engines/wintermute/base/gfx/base_surface.h @@ -41,7 +41,7 @@ public: virtual bool prepareToDraw(); uint32 _lastUsedTime; bool _valid; - int _lifeTime; + int32 _lifeTime; bool _pixelOpReady; BaseSurface(BaseGame *inGame); @@ -90,8 +90,8 @@ protected: bool _keepLoaded; Common::String _filename; - int _height; - int _width; + int32 _height; + int32 _width; }; diff --git a/engines/wintermute/base/particles/part_emitter.cpp b/engines/wintermute/base/particles/part_emitter.cpp index 1026969055..d09f2215dd 100644 --- a/engines/wintermute/base/particles/part_emitter.cpp +++ b/engines/wintermute/base/particles/part_emitter.cpp @@ -32,7 +32,8 @@ #include "engines/wintermute/math/matrix4.h" #include "engines/wintermute/base/scriptables/script_value.h" #include "engines/wintermute/base/scriptables/script_stack.h" -#include "engines/wintermute/base/base_game.h" +#include "engines/wintermute/base/base_engine.h" +#include "engines/wintermute/base/timer.h" #include "engines/wintermute/base/base_region.h" #include "engines/wintermute/base/base_file_manager.h" #include "engines/wintermute/base/gfx/base_renderer.h" @@ -131,7 +132,7 @@ bool PartEmitter::addSprite(const char *filename) { // check if file exists Common::SeekableReadStream *File = BaseFileManager::getEngineInstance()->openFile(filename); if (!File) { - _gameRef->LOG(0, "Sprite '%s' not found", filename); + BaseEngine::LOG(0, "Sprite '%s' not found", filename); return STATUS_FAILED; } else { BaseFileManager::getEngineInstance()->closeFile(File); @@ -252,7 +253,7 @@ bool PartEmitter::update() { if (!_running) { return STATUS_OK; } else { - return updateInternal(_gameRef->_timer, _gameRef->_timerDelta); + return updateInternal(BaseEngine::getTimer()->getTime(), BaseEngine::getTimer()->getTimeDelta()); } } @@ -321,7 +322,7 @@ bool PartEmitter::updateInternal(uint32 currentTime, uint32 timerDelta) { ////////////////////////////////////////////////////////////////////////// bool PartEmitter::display(BaseRegion *region) { if (_sprites.size() <= 1) { - _gameRef->_renderer->startSpriteBatch(); + BaseEngine::getRenderer()->startSpriteBatch(); } for (uint32 i = 0; i < _particles.size(); i++) { @@ -335,7 +336,7 @@ bool PartEmitter::display(BaseRegion *region) { } if (_sprites.size() <= 1) { - _gameRef->_renderer->endSpriteBatch(); + BaseEngine::getRenderer()->endSpriteBatch(); } return STATUS_OK; @@ -353,7 +354,7 @@ bool PartEmitter::start() { if (_overheadTime > 0) { uint32 delta = 500; int steps = _overheadTime / delta; - uint32 currentTime = _gameRef->_timer - _overheadTime; + uint32 currentTime = BaseEngine::getTimer()->getTime() - _overheadTime; for (int i = 0; i < steps; i++) { updateInternal(currentTime, delta); diff --git a/engines/wintermute/base/particles/part_emitter.h b/engines/wintermute/base/particles/part_emitter.h index 54a49df230..cbc0aa49b4 100644 --- a/engines/wintermute/base/particles/part_emitter.h +++ b/engines/wintermute/base/particles/part_emitter.h @@ -43,7 +43,7 @@ public: PartEmitter(BaseGame *inGame, BaseScriptHolder *Owner); virtual ~PartEmitter(void); - int _fadeOutTime; + int32 _fadeOutTime; bool start(); @@ -70,11 +70,11 @@ public: private: - int _width; - int _height; + int32 _width; + int32 _height; - int _angle1; - int _angle2; + int32 _angle1; + int32 _angle2; float _rotation1; float _rotation2; diff --git a/engines/wintermute/base/particles/part_particle.h b/engines/wintermute/base/particles/part_particle.h index 4b8c2f131e..8cca6b4057 100644 --- a/engines/wintermute/base/particles/part_particle.h +++ b/engines/wintermute/base/particles/part_particle.h @@ -55,8 +55,8 @@ public: float _rotation; float _angVelocity; - int _alpha1; - int _alpha2; + int32 _alpha1; + int32 _alpha2; Rect32 _border; Vector2 _pos; @@ -65,7 +65,7 @@ public: float _scale; BaseSprite *_sprite; uint32 _creationTime; - int _lifeTime; + int32 _lifeTime; bool _isDead; TParticleState _state; @@ -80,9 +80,9 @@ public: bool persist(BasePersistenceManager *PersistMgr); private: uint32 _fadeStart; - int _fadeTime; - int _currentAlpha; - int _fadeStartAlpha; + int32 _fadeTime; + int32 _currentAlpha; + int32 _fadeStartAlpha; }; } // end of namespace Wintermute diff --git a/engines/wintermute/base/base_save_thumb_helper.cpp b/engines/wintermute/base/save_thumb_helper.cpp index 76d703a697..db6f855cc6 100644 --- a/engines/wintermute/base/base_save_thumb_helper.cpp +++ b/engines/wintermute/base/save_thumb_helper.cpp @@ -26,7 +26,7 @@ * Copyright (c) 2011 Jan Nedoma */ -#include "engines/wintermute/base/base_save_thumb_helper.h" +#include "engines/wintermute/base/save_thumb_helper.h" #include "engines/wintermute/base/gfx/base_image.h" #include "engines/wintermute/base/gfx/base_renderer.h" #include "engines/wintermute/base/base_game.h" @@ -35,22 +35,22 @@ namespace Wintermute { ////////////////////////////////////////////////////////////////////////// -BaseSaveThumbHelper::BaseSaveThumbHelper(BaseGame *inGame) : BaseClass(inGame) { +SaveThumbHelper::SaveThumbHelper(const BaseGame *inGame) { _thumbnail = nullptr; _scummVMThumb = nullptr; } ////////////////////////////////////////////////////////////////////////// -BaseSaveThumbHelper::~BaseSaveThumbHelper(void) { +SaveThumbHelper::~SaveThumbHelper(void) { delete _thumbnail; _thumbnail = nullptr; delete _scummVMThumb; _scummVMThumb = nullptr; } -BaseImage *BaseSaveThumbHelper::storeThumb(bool doFlip, int width, int height) { +BaseImage *SaveThumbHelper::storeThumb(bool doFlip, int width, int height) { BaseImage *thumbnail = nullptr; - if (_gameRef->_thumbnailWidth > 0 && _gameRef->_thumbnailHeight > 0) { + if (_gameRef->getSaveThumbWidth() > 0 && _gameRef->getSaveThumbHeight() > 0) { if (doFlip) { // when using opengl on windows it seems to be necessary to do this twice // works normally for direct3d @@ -67,7 +67,7 @@ BaseImage *BaseSaveThumbHelper::storeThumb(bool doFlip, int width, int height) { } // normal thumbnail - if (_gameRef->_thumbnailWidth > 0 && _gameRef->_thumbnailHeight > 0) { + if (_gameRef->getSaveThumbWidth() > 0 && _gameRef->getSaveThumbHeight() > 0) { thumbnail = new BaseImage(); thumbnail->copyFrom(screenshot, width, height); } @@ -80,13 +80,13 @@ BaseImage *BaseSaveThumbHelper::storeThumb(bool doFlip, int width, int height) { } ////////////////////////////////////////////////////////////////////////// -bool BaseSaveThumbHelper::storeThumbnail(bool doFlip) { +bool SaveThumbHelper::storeThumbnail(bool doFlip) { delete _thumbnail; _thumbnail = nullptr; - if (_gameRef->_thumbnailWidth > 0 && _gameRef->_thumbnailHeight > 0) { + if (_gameRef->getSaveThumbWidth() > 0 && _gameRef->getSaveThumbHeight() > 0) { - _thumbnail = storeThumb(doFlip, _gameRef->_thumbnailWidth, _gameRef->_thumbnailHeight); + _thumbnail = storeThumb(doFlip, _gameRef->getSaveThumbWidth(), _gameRef->getSaveThumbHeight()); if (!_thumbnail) { return STATUS_FAILED; } @@ -96,7 +96,7 @@ bool BaseSaveThumbHelper::storeThumbnail(bool doFlip) { } ////////////////////////////////////////////////////////////////////////// -bool BaseSaveThumbHelper::storeScummVMThumbNail(bool doFlip) { +bool SaveThumbHelper::storeScummVMThumbNail(bool doFlip) { delete _scummVMThumb; _scummVMThumb = nullptr; diff --git a/engines/wintermute/base/base_save_thumb_helper.h b/engines/wintermute/base/save_thumb_helper.h index 8e8a7183c2..43cc7e39a7 100644 --- a/engines/wintermute/base/base_save_thumb_helper.h +++ b/engines/wintermute/base/save_thumb_helper.h @@ -28,17 +28,15 @@ #ifndef WINTERMUTE_BASE_SAVE_THUMB_HELPER_H #define WINTERMUTE_BASE_SAVE_THUMB_HELPER_H - -#include "engines/wintermute/base/base.h" - namespace Wintermute { class BaseImage; +class BaseGame; -class BaseSaveThumbHelper : public BaseClass { +class SaveThumbHelper { public: - BaseSaveThumbHelper(BaseGame *inGame); - virtual ~BaseSaveThumbHelper(void); + SaveThumbHelper(const BaseGame *inGame); + virtual ~SaveThumbHelper(void); bool storeThumbnail(bool doFlip = false); bool storeScummVMThumbNail(bool doFlip = false); @@ -47,6 +45,7 @@ public: private: BaseImage *storeThumb(bool doFlip, int width, int height); BaseImage *_richThumbnail; + BaseGame *_gameRef; }; } // end of namespace Wintermute diff --git a/engines/wintermute/base/saveload.cpp b/engines/wintermute/base/saveload.cpp index 465684a7a3..1b7dfd42ed 100644 --- a/engines/wintermute/base/saveload.cpp +++ b/engines/wintermute/base/saveload.cpp @@ -75,7 +75,7 @@ bool SaveLoad::loadGame(const Common::String &filename, BaseGame *gameRef) { gameRef->_renderer->endSaveLoad(); - //_gameRef->LOG(0, "Load end %d", BaseUtils::GetUsedMemMB()); + //BaseEngine::LOG(0, "Load end %d", BaseUtils::GetUsedMemMB()); // AdGame: if (DID_SUCCEED(ret)) { SystemClassRegistry::getInstance()->enumInstances(SaveLoad::afterLoadRegion, "AdRegion", nullptr); diff --git a/engines/wintermute/base/scriptables/script.cpp b/engines/wintermute/base/scriptables/script.cpp index 23c452b73c..56ffbf75c5 100644 --- a/engines/wintermute/base/scriptables/script.cpp +++ b/engines/wintermute/base/scriptables/script.cpp @@ -1194,7 +1194,7 @@ bool ScScript::sleep(uint32 duration) { _waitTime = g_system->getMillis() + duration; _waitFrozen = true; } else { - _waitTime = _gameRef->_timer + duration; + _waitTime = _gameRef->getTimer()->getTime() + duration; _waitFrozen = false; } return STATUS_OK; diff --git a/engines/wintermute/base/scriptables/script.h b/engines/wintermute/base/scriptables/script.h index 428eb9a17e..ee9f45e204 100644 --- a/engines/wintermute/base/scriptables/script.h +++ b/engines/wintermute/base/scriptables/script.h @@ -113,7 +113,7 @@ public: char *dll_name; TCallType call_type; TExternalType returns; - int nu_params; + int32 nu_params; TExternalType *params; } TExternalFunction; @@ -124,7 +124,7 @@ public: ScStack *_stack; ScValue *_globals; ScEngine *_engine; - int _currentLine; + int32 _currentLine; bool executeInstruction(); char *getString(); uint32 getDWORD(); diff --git a/engines/wintermute/base/scriptables/script_engine.cpp b/engines/wintermute/base/scriptables/script_engine.cpp index d5c5797a39..d8f38f2f4d 100644 --- a/engines/wintermute/base/scriptables/script_engine.cpp +++ b/engines/wintermute/base/scriptables/script_engine.cpp @@ -285,7 +285,7 @@ bool ScEngine::tick() { _scripts[i]->run(); } } else { - if (_scripts[i]->_waitTime <= _gameRef->_timer) { + if (_scripts[i]->_waitTime <= _gameRef->getTimer()->getTime()) { _scripts[i]->run(); } } diff --git a/engines/wintermute/base/scriptables/script_ext_array.h b/engines/wintermute/base/scriptables/script_ext_array.h index 284c547a27..68f808641e 100644 --- a/engines/wintermute/base/scriptables/script_ext_array.h +++ b/engines/wintermute/base/scriptables/script_ext_array.h @@ -46,7 +46,7 @@ public: bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name); const char *scToString(); private: - int _length; + int32 _length; ScValue *_values; Common::String _strRep; }; diff --git a/engines/wintermute/base/scriptables/script_ext_file.h b/engines/wintermute/base/scriptables/script_ext_file.h index f7c72fcfb3..fa2384109f 100644 --- a/engines/wintermute/base/scriptables/script_ext_file.h +++ b/engines/wintermute/base/scriptables/script_ext_file.h @@ -49,7 +49,7 @@ public: private: Common::SeekableReadStream *_readFile; Common::WriteStream *_writeFile; - int _mode; // 0..none, 1..read, 2..write, 3..append + int32 _mode; // 0..none, 1..read, 2..write, 3..append bool _textMode; void close(); void cleanup(); diff --git a/engines/wintermute/base/scriptables/script_ext_mem_buffer.h b/engines/wintermute/base/scriptables/script_ext_mem_buffer.h index 1527a323dc..6700a03f50 100644 --- a/engines/wintermute/base/scriptables/script_ext_mem_buffer.h +++ b/engines/wintermute/base/scriptables/script_ext_mem_buffer.h @@ -47,7 +47,7 @@ public: virtual ~SXMemBuffer(); virtual void *scToMemBuffer(); private: - int _size; + int32 _size; bool resize(int newSize); void *_buffer; diff --git a/engines/wintermute/base/scriptables/script_ext_string.cpp b/engines/wintermute/base/scriptables/script_ext_string.cpp index 71544a20aa..7cb3b9360b 100644 --- a/engines/wintermute/base/scriptables/script_ext_string.cpp +++ b/engines/wintermute/base/scriptables/script_ext_string.cpp @@ -270,7 +270,7 @@ bool SXString::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack ScValue *val = stack->pop(); char separators[MAX_PATH_LENGTH] = ","; if (!val->isNULL()) { - strcpy(separators, val->getString()); + Common::strlcpy(separators, val->getString(), MAX_PATH_LENGTH); } SXArray *array = new SXArray(_gameRef); diff --git a/engines/wintermute/base/scriptables/script_ext_string.h b/engines/wintermute/base/scriptables/script_ext_string.h index 00bffab3a9..50b61deba4 100644 --- a/engines/wintermute/base/scriptables/script_ext_string.h +++ b/engines/wintermute/base/scriptables/script_ext_string.h @@ -50,7 +50,7 @@ public: private: char *_string; - int _capacity; + int32 _capacity; }; } // end of namespace Wintermute diff --git a/engines/wintermute/base/scriptables/script_stack.h b/engines/wintermute/base/scriptables/script_stack.h index 86d246cf34..82c3debefa 100644 --- a/engines/wintermute/base/scriptables/script_stack.h +++ b/engines/wintermute/base/scriptables/script_stack.h @@ -57,7 +57,7 @@ public: ScStack(BaseGame *inGame); virtual ~ScStack(); BaseArray<ScValue *> _values; - int _sP; + int32 _sP; }; diff --git a/engines/wintermute/base/scriptables/script_value.h b/engines/wintermute/base/scriptables/script_value.h index bf7d9cd8a1..e8173474d6 100644 --- a/engines/wintermute/base/scriptables/script_value.h +++ b/engines/wintermute/base/scriptables/script_value.h @@ -87,7 +87,7 @@ public: ScValue *_valRef; private: bool _valBool; - int _valInt; + int32 _valInt; double _valFloat; char *_valString; public: diff --git a/engines/wintermute/base/sound/base_sound.h b/engines/wintermute/base/sound/base_sound.h index 637061b7cc..3412e6c3a3 100644 --- a/engines/wintermute/base/sound/base_sound.h +++ b/engines/wintermute/base/sound/base_sound.h @@ -67,7 +67,7 @@ private: Common::String _soundFilename; bool _soundStreamed; Audio::Mixer::SoundType _soundType; - int _soundPrivateVolume; + int32 _soundPrivateVolume; uint32 _soundLoopStart; uint32 _soundPosition; bool _soundPlaying; diff --git a/engines/wintermute/base/sound/base_sound_buffer.h b/engines/wintermute/base/sound/base_sound_buffer.h index 9c39f4c34b..e78d062cd4 100644 --- a/engines/wintermute/base/sound/base_sound_buffer.h +++ b/engines/wintermute/base/sound/base_sound_buffer.h @@ -86,13 +86,13 @@ public: Audio::Mixer::SoundType _type; bool _looping; - int _privateVolume; + int32 _privateVolume; private: uint32 _startPos; Common::String _filename; bool _streamed; Common::SeekableReadStream *_file; - int _volume; + int32 _volume; }; } // end of namespace Wintermute diff --git a/engines/wintermute/base/sound/base_sound_manager.cpp b/engines/wintermute/base/sound/base_sound_manager.cpp index c6eb871a85..f3e7bfb408 100644 --- a/engines/wintermute/base/sound/base_sound_manager.cpp +++ b/engines/wintermute/base/sound/base_sound_manager.cpp @@ -30,7 +30,6 @@ #include "engines/wintermute/base/base_engine.h" #include "engines/wintermute/utils/path_util.h" #include "engines/wintermute/utils/string_util.h" -#include "engines/wintermute/base/base_game.h" #include "engines/wintermute/base/base_file_manager.h" #include "engines/wintermute/base/gfx/base_renderer.h" #include "engines/wintermute/base/sound/base_sound_buffer.h" @@ -123,7 +122,7 @@ BaseSoundBuffer *BaseSoundMgr::addSound(const Common::String &filename, Audio::M bool res = sound->loadFromFile(useFilename); if (DID_FAIL(res)) { - _gameRef->LOG(res, "Error loading sound '%s'", useFilename.c_str()); + BaseEngine::LOG(res, "Error loading sound '%s'", useFilename.c_str()); delete sound; return nullptr; } @@ -280,7 +279,7 @@ bool BaseSoundMgr::resumeAll() { ////////////////////////////////////////////////////////////////////////// float BaseSoundMgr::posToPan(int x, int y) { - float relPos = (float)x / ((float)_gameRef->_renderer->_width); + float relPos = (float)x / ((float)BaseEngine::getRenderer()->getWidth()); float minPan = -0.7f; float maxPan = 0.7f; diff --git a/engines/wintermute/base/sound/base_sound_manager.h b/engines/wintermute/base/sound/base_sound_manager.h index 1ee3c13fdb..602571765f 100644 --- a/engines/wintermute/base/sound/base_sound_manager.h +++ b/engines/wintermute/base/sound/base_sound_manager.h @@ -49,8 +49,7 @@ public: byte getVolumePercent(Audio::Mixer::SoundType type); bool setVolumePercent(Audio::Mixer::SoundType type, byte percent); bool setVolume(Audio::Mixer::SoundType type, int volume); - uint32 _volumeOriginal; - int _volumeMaster; + int32 _volumeMaster; bool removeSound(BaseSoundBuffer *sound); BaseSoundBuffer *addSound(const Common::String &filename, Audio::Mixer::SoundType type = Audio::Mixer::kSFXSoundType, bool streamed = false); bool addSound(BaseSoundBuffer *sound, Audio::Mixer::SoundType type = Audio::Mixer::kSFXSoundType); @@ -61,7 +60,7 @@ public: Common::Array<BaseSoundBuffer *> _sounds; void saveSettings(); private: - int _volumeMasterPercent; // Necessary to avoid round-offs. + int32 _volumeMasterPercent; // Necessary to avoid round-offs. bool setMasterVolume(byte percent); }; diff --git a/engines/wintermute/base/timer.cpp b/engines/wintermute/base/timer.cpp new file mode 100644 index 0000000000..590dba4655 --- /dev/null +++ b/engines/wintermute/base/timer.cpp @@ -0,0 +1,74 @@ +/* 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. + * + */ + +/* + * This file is based on WME Lite. + * http://dead-code.org/redir.php?target=wmelite + * Copyright (c) 2011 Jan Nedoma + */ + +#include "engines/wintermute/base/timer.h" +#include "engines/wintermute/base/base_persistence_manager.h" +#include "engines/wintermute/persistent.h" + +namespace Wintermute { +Timer::Timer() : _timer(0), _timerDelta(0), _timerLast(0) { + +} + +void Timer::setTime(uint32 time) { + _timer = time; +} + +void Timer::setTimeDelta(uint32 timeDelta) { + _timerDelta = timeDelta; +} + +void Timer::setTimeLast(uint32 timeLast) { + _timerLast = timeLast; +} + +void Timer::updateTime(uint32 delta, uint32 max) { + _timerDelta = _timer - _timerLast; + _timerLast = _timer; + _timer += MIN((uint32)max, delta); +} + +uint32 Timer::getTime() const { + return _timer; +} + +uint32 Timer::getTimeDelta() const { + return _timerDelta; +} + +uint32 Timer::getTimeLast() const { + return _timerLast; +} + +void Timer::persist(BasePersistenceManager *persistMgr) { + persistMgr->transfer(TMEMBER(_timer)); + persistMgr->transfer(TMEMBER(_timerDelta)); + persistMgr->transfer(TMEMBER(_timerLast)); +} + +} // End of namespace Wintermute
\ No newline at end of file diff --git a/engines/wintermute/base/timer.h b/engines/wintermute/base/timer.h new file mode 100644 index 0000000000..8353b08abc --- /dev/null +++ b/engines/wintermute/base/timer.h @@ -0,0 +1,57 @@ +/* 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. + * + */ + +/* + * This file is based on WME Lite. + * http://dead-code.org/redir.php?target=wmelite + * Copyright (c) 2011 Jan Nedoma + */ + +#ifndef WINTERMUTE_TIMER_H +#define WINTERMUTE_TIMER_H + +#include "common/scummsys.h" + +namespace Wintermute { + +class BasePersistenceManager; + +class Timer { + uint32 _timer; + uint32 _timerDelta; + uint32 _timerLast; +public: + Timer(); + void setTime(uint32 time); + void setTimeDelta(uint32 timeDelta); + void setTimeLast(uint32 timeLast); + void updateTime(uint32 delta, uint32 max); + uint32 getTime() const; + uint32 getTimeDelta() const; + uint32 getTimeLast() const; + void persist(BasePersistenceManager *persistMgr); +}; + + +} // End of namespace Wintermute + +#endif
\ No newline at end of file diff --git a/engines/wintermute/debugger.cpp b/engines/wintermute/debugger.cpp index 0dab75356b..92b8e6251f 100644 --- a/engines/wintermute/debugger.cpp +++ b/engines/wintermute/debugger.cpp @@ -40,9 +40,9 @@ Console::~Console(void) { bool Console::Cmd_ShowFps(int argc, const char **argv) { if (argc > 1) { if (Common::String(argv[1]) == "true") { - _engineRef->_game->_debugShowFPS = true; + _engineRef->_game->setShowFPS(true); } else if (Common::String(argv[1]) == "false") { - _engineRef->_game->_debugShowFPS = false; + _engineRef->_game->setShowFPS(false);; } } return true; diff --git a/engines/wintermute/graphics/transparent_surface.cpp b/engines/wintermute/graphics/transparent_surface.cpp index 11aeb26821..dcdcbf247e 100644 --- a/engines/wintermute/graphics/transparent_surface.cpp +++ b/engines/wintermute/graphics/transparent_surface.cpp @@ -218,7 +218,7 @@ Common::Rect TransparentSurface::blit(Graphics::Surface &target, int posX, int p height = height * 2 / 3; #endif - Graphics::Surface *img; + Graphics::Surface *img = nullptr; Graphics::Surface *imgScaled = nullptr; byte *savedPixels = nullptr; if ((width != srcImage.w) || (height != srcImage.h)) { @@ -371,14 +371,15 @@ Common::Rect TransparentSurface::blit(Graphics::Surface &target, int posX, int p } } + retSize.setWidth(img->w); + retSize.setHeight(img->h); + if (imgScaled) { imgScaled->pixels = savedPixels; imgScaled->free(); delete imgScaled; } - retSize.setWidth(img->w); - retSize.setHeight(img->h); return retSize; } diff --git a/engines/wintermute/module.mk b/engines/wintermute/module.mk index 5c0406b353..32931bf05f 100644 --- a/engines/wintermute/module.mk +++ b/engines/wintermute/module.mk @@ -68,6 +68,7 @@ MODULE_OBJS := \ base/base_frame.o \ base/base_game.o \ base/base_game_music.o \ + base/base_game_settings.o \ base/base_keyboard_state.o \ base/base_named_object.o \ base/base_object.o \ @@ -76,7 +77,6 @@ MODULE_OBJS := \ base/base_point.o \ base/base_quick_msg.o \ base/base_region.o \ - base/base_save_thumb_helper.o \ base/base_scriptable.o \ base/base_script_holder.o \ base/base_sprite.o \ @@ -86,6 +86,8 @@ MODULE_OBJS := \ base/base_transition_manager.o \ base/base_viewport.o \ base/saveload.o \ + base/save_thumb_helper.o \ + base/timer.o \ detection.o \ graphics/transparent_surface.o \ math/math_util.o \ diff --git a/engines/wintermute/system/sys_class_registry.cpp b/engines/wintermute/system/sys_class_registry.cpp index 3e2b8665ee..8a6aae754f 100644 --- a/engines/wintermute/system/sys_class_registry.cpp +++ b/engines/wintermute/system/sys_class_registry.cpp @@ -234,7 +234,7 @@ bool SystemClassRegistry::loadTable(BaseGame *gameRef, BasePersistenceManager *p uint32 numClasses = persistMgr->getDWORD(); for (uint32 i = 0; i < numClasses; i++) { - gameRef->_renderer->setIndicatorVal((int)(50.0f / (float)((float)numClasses / (float)i))); + gameRef->_renderer->setIndicatorVal((int)(50.0f / (float)((float)numClasses / (float)(i + 1)))); Common::String className = persistMgr->getStringObj(); NameMap::iterator mapIt = _nameMap.find(className); @@ -286,7 +286,7 @@ bool SystemClassRegistry::loadInstances(BaseGame *gameRef, BasePersistenceManage for (int i = 0; i < numInstances; i++) { if (i % 20 == 0) { - gameRef->_renderer->setIndicatorVal((int)(50.0f + 50.0f / (float)((float)numInstances / (float)i))); + gameRef->_renderer->setIndicatorVal((int)(50.0f + 50.0f / (float)((float)numInstances / (float)(i + 1)))); } checkHeader("<INSTANCE_HEAD>", persistMgr); diff --git a/engines/wintermute/ui/ui_button.cpp b/engines/wintermute/ui/ui_button.cpp index 6ee577f009..b638522f6e 100644 --- a/engines/wintermute/ui/ui_button.cpp +++ b/engines/wintermute/ui/ui_button.cpp @@ -382,7 +382,7 @@ bool UIButton::loadBuffer(byte *buffer, bool complete) { case TOKEN_TEXT: setText((char *)params); - _gameRef->_stringTable->expand(&_text); + _gameRef->expandStringByStringTable(&_text); break; case TOKEN_TEXT_ALIGN: diff --git a/engines/wintermute/ui/ui_button.h b/engines/wintermute/ui/ui_button.h index fea264976f..5db9356ef9 100644 --- a/engines/wintermute/ui/ui_button.h +++ b/engines/wintermute/ui/ui_button.h @@ -66,13 +66,13 @@ public: virtual ~UIButton(); bool loadFile(const char *filename); bool loadBuffer(byte *buffer, bool complete = true); - virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent); + virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override; // scripting interface - virtual ScValue *scGetProperty(const Common::String &name); - virtual bool scSetProperty(const char *name, ScValue *value); - virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name); - virtual const char *scToString(); + virtual ScValue *scGetProperty(const Common::String &name) override; + virtual bool scSetProperty(const char *name, ScValue *value) override; + virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override; + virtual const char *scToString() override; }; } // end of namespace Wintermute diff --git a/engines/wintermute/ui/ui_edit.cpp b/engines/wintermute/ui/ui_edit.cpp index 0a2e6f13bc..7fddf59898 100644 --- a/engines/wintermute/ui/ui_edit.cpp +++ b/engines/wintermute/ui/ui_edit.cpp @@ -231,7 +231,7 @@ bool UIEdit::loadBuffer(byte *buffer, bool complete) { case TOKEN_TEXT: setText((char *)params); - _gameRef->_stringTable->expand(&_text); + _gameRef->expandStringByStringTable(&_text); break; case TOKEN_X: diff --git a/engines/wintermute/ui/ui_edit.h b/engines/wintermute/ui/ui_edit.h index 5bb31422b6..ac626f0f06 100644 --- a/engines/wintermute/ui/ui_edit.h +++ b/engines/wintermute/ui/ui_edit.h @@ -38,20 +38,20 @@ class BaseFont; class UIEdit : public UIObject { public: DECLARE_PERSISTENT(UIEdit, UIObject) - int _maxLength; + int32 _maxLength; int insertChars(int pos, const byte *chars, int num); int deleteChars(int start, int end); bool _cursorVisible; uint32 _lastBlinkTime; virtual bool display(int offsetX, int offsetY); virtual bool handleKeypress(Common::Event *event, bool printable = false); - int _scrollOffset; - int _frameWidth; + int32 _scrollOffset; + int32 _frameWidth; uint32 _cursorBlinkRate; void setCursorChar(const char *character); char *_cursorChar; - int _selEnd; - int _selStart; + int32 _selEnd; + int32 _selStart; BaseFont *_fontSelected; UIEdit(BaseGame *inGame); virtual ~UIEdit(); @@ -61,10 +61,10 @@ public: virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent); // scripting interface - virtual ScValue *scGetProperty(const Common::String &name); - virtual bool scSetProperty(const char *name, ScValue *value); - virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name); - virtual const char *scToString(); + virtual ScValue *scGetProperty(const Common::String &name) override; + virtual bool scSetProperty(const char *name, ScValue *value) override; + virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override; + virtual const char *scToString() override; }; } // end of namespace Wintermute diff --git a/engines/wintermute/ui/ui_entity.h b/engines/wintermute/ui/ui_entity.h index b5f4450071..3bd3ec9888 100644 --- a/engines/wintermute/ui/ui_entity.h +++ b/engines/wintermute/ui/ui_entity.h @@ -40,16 +40,16 @@ public: virtual ~UIEntity(); bool loadFile(const char *filename); bool loadBuffer(byte *buffer, bool complete); - virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent); + virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override; - virtual bool display() { return display(0, 0); } - virtual bool display(int offsetX, int offsetY); + virtual bool display() override { return display(0, 0); } + virtual bool display(int offsetX, int offsetY) override; AdEntity *_entity; bool setEntity(const char *filename); // scripting interface - virtual ScValue *scGetProperty(const Common::String &name); - virtual bool scSetProperty(const char *name, ScValue *value); + virtual ScValue *scGetProperty(const Common::String &name) override; + virtual bool scSetProperty(const char *name, ScValue *value) override; virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name); virtual const char *scToString(); }; diff --git a/engines/wintermute/ui/ui_object.h b/engines/wintermute/ui/ui_object.h index c77acfef41..935c27613c 100644 --- a/engines/wintermute/ui/ui_object.h +++ b/engines/wintermute/ui/ui_object.h @@ -48,7 +48,7 @@ public: bool _parentNotify; DECLARE_PERSISTENT(UIObject, BaseObject) UIObject *_parent; - virtual bool display() { return display(0, 0); } + virtual bool display() override { return display(0, 0); } virtual bool display(int offsetX) { return display(offsetX, 0); } virtual bool display(int offsetX, int offsetY); virtual void correctSize(); @@ -62,8 +62,8 @@ public: bool _disable; UIObject(BaseGame *inGame = nullptr); virtual ~UIObject(); - int _width; - int _height; + int32 _width; + int32 _height; TUIObjectType _type; BaseSprite *_image; void setListener(BaseScriptHolder *object, BaseScriptHolder *listenerObject, uint32 listenerParam); @@ -71,13 +71,13 @@ public: uint32 _listenerParamDWORD; BaseScriptHolder *_listenerObject; UIObject *_focusedWidget; - virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent); + virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override; // scripting interface - virtual ScValue *scGetProperty(const Common::String &name); - virtual bool scSetProperty(const char *name, ScValue *value); - virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name); - virtual const char *scToString(); + virtual ScValue *scGetProperty(const Common::String &name) override; + virtual bool scSetProperty(const char *name, ScValue *value) override; + virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override; + virtual const char *scToString() override; }; } // end of namespace Wintermute diff --git a/engines/wintermute/ui/ui_text.cpp b/engines/wintermute/ui/ui_text.cpp index 3b5adf07b7..98d70b770e 100644 --- a/engines/wintermute/ui/ui_text.cpp +++ b/engines/wintermute/ui/ui_text.cpp @@ -230,7 +230,7 @@ bool UIText::loadBuffer(byte *buffer, bool complete) { case TOKEN_TEXT: setText((char *)params); - _gameRef->_stringTable->expand(&_text); + _gameRef->expandStringByStringTable(&_text); break; case TOKEN_TEXT_ALIGN: diff --git a/engines/wintermute/ui/ui_text.h b/engines/wintermute/ui/ui_text.h index 11dcdb166d..be074755ba 100644 --- a/engines/wintermute/ui/ui_text.h +++ b/engines/wintermute/ui/ui_text.h @@ -46,13 +46,13 @@ public: TVerticalAlign _verticalAlign; bool loadFile(const char *filename); bool loadBuffer(byte *buffer, bool complete = true); - virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent); + virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override; // scripting interface - virtual ScValue *scGetProperty(const Common::String &name); - virtual bool scSetProperty(const char *name, ScValue *value); - virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name); - virtual const char *scToString(); + virtual ScValue *scGetProperty(const Common::String &name) override; + virtual bool scSetProperty(const char *name, ScValue *value) override; + virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override; + virtual const char *scToString() override; }; } // end of namespace Wintermute diff --git a/engines/wintermute/ui/ui_tiled_image.h b/engines/wintermute/ui/ui_tiled_image.h index ded7a285dd..4868710264 100644 --- a/engines/wintermute/ui/ui_tiled_image.h +++ b/engines/wintermute/ui/ui_tiled_image.h @@ -41,7 +41,7 @@ public: void correctSize(int *width, int *height); bool loadFile(const char *filename); bool loadBuffer(byte *buffer, bool complete = true); - virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent); + virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override; bool display(int x, int y, int width, int height); UITiledImage(BaseGame *inGame = nullptr); diff --git a/engines/wintermute/ui/ui_window.cpp b/engines/wintermute/ui/ui_window.cpp index 39bc1bdcfe..460ec1877b 100644 --- a/engines/wintermute/ui/ui_window.cpp +++ b/engines/wintermute/ui/ui_window.cpp @@ -127,8 +127,8 @@ bool UIWindow::display(int offsetX, int offsetY) { } if (_shieldWindow) { _shieldWindow->_posX = _shieldWindow->_posY = 0; - _shieldWindow->_width = _gameRef->_renderer->_width; - _shieldWindow->_height = _gameRef->_renderer->_height; + _shieldWindow->_width = _gameRef->_renderer->getWidth(); + _shieldWindow->_height = _gameRef->_renderer->getHeight(); _shieldWindow->display(); } @@ -141,8 +141,8 @@ bool UIWindow::display(int offsetX, int offsetY) { } if (_shieldButton) { _shieldButton->_posX = _shieldButton->_posY = 0; - _shieldButton->_width = _gameRef->_renderer->_width; - _shieldButton->_height = _gameRef->_renderer->_height; + _shieldButton->_width = _gameRef->_renderer->getWidth(); + _shieldButton->_height = _gameRef->_renderer->getHeight(); _shieldButton->display(); } @@ -431,7 +431,7 @@ bool UIWindow::loadBuffer(byte *buffer, bool complete) { case TOKEN_TITLE: setText((char *)params); - _gameRef->_stringTable->expand(&_text); + _gameRef->expandStringByStringTable(&_text); break; case TOKEN_TITLE_ALIGN: @@ -885,8 +885,8 @@ bool UIWindow::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack ////////////////////////////////////////////////////////////////////////// else if (strcmp(name, "Center") == 0) { stack->correctParams(0); - _posX = (_gameRef->_renderer->_width - _width) / 2; - _posY = (_gameRef->_renderer->_height - _height) / 2; + _posX = (_gameRef->_renderer->getWidth() - _width) / 2; + _posY = (_gameRef->_renderer->getHeight() - _height) / 2; stack->pushNULL(); return STATUS_OK; } diff --git a/engines/wintermute/ui/ui_window.h b/engines/wintermute/ui/ui_window.h index ae035c65c7..70799cea25 100644 --- a/engines/wintermute/ui/ui_window.h +++ b/engines/wintermute/ui/ui_window.h @@ -68,10 +68,10 @@ public: bool enableWidget(const char *name, bool enable = true); Rect32 _titleRect; Rect32 _dragRect; - virtual bool display(int offsetX = 0, int offsetY = 0); + virtual bool display(int offsetX = 0, int offsetY = 0) override; UIWindow(BaseGame *inGame); virtual ~UIWindow(); - virtual bool handleKeypress(Common::Event *event, bool printable = false); + virtual bool handleKeypress(Common::Event *event, bool printable = false) override; BaseArray<UIObject *> _widgets; TTextAlign _titleAlign; bool loadFile(const char *filename); @@ -80,12 +80,12 @@ public: BaseFont *_fontInactive; BaseSprite *_imageInactive; virtual bool listen(BaseScriptHolder *param1, uint32 param2); - virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent); + virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override; // scripting interface - virtual ScValue *scGetProperty(const Common::String &name); - virtual bool scSetProperty(const char *name, ScValue *value); - virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name); + virtual ScValue *scGetProperty(const Common::String &name) override; + virtual bool scSetProperty(const char *name, ScValue *value) override; + virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override; virtual const char *scToString(); }; diff --git a/engines/wintermute/video/video_player.h b/engines/wintermute/video/video_player.h index a49e910b0c..033ab50dfa 100644 --- a/engines/wintermute/video/video_player.h +++ b/engines/wintermute/video/video_player.h @@ -42,7 +42,7 @@ namespace Wintermute { class VideoPlayer : public BaseClass { public: bool _showSubtitle; - int _currentSubtitle; + int32 _currentSubtitle; bool loadSubtitles(const char *filename, const char *subtitleFile); bool _slowRendering; bool isPlaying(); @@ -76,8 +76,8 @@ public: PGETFRAME _videoPGF;*/ uint32 _videoEndTime; - int _playPosX; - int _playPosY; + int32 _playPosX; + int32 _playPosY; float _playZoom; /* LPBITMAPV4HEADER _targetFormat; diff --git a/engines/wintermute/video/video_theora_player.cpp b/engines/wintermute/video/video_theora_player.cpp index 1f6842c416..f03be9691e 100644 --- a/engines/wintermute/video/video_theora_player.cpp +++ b/engines/wintermute/video/video_theora_player.cpp @@ -224,8 +224,8 @@ bool VideoTheoraPlayer::play(TVideoPlayback type, int x, int y, bool freezeGame, width = (float)_theoraDecoder->getWidth(); height = (float)_theoraDecoder->getHeight(); } else { - width = (float)_gameRef->_renderer->_width; - height = (float)_gameRef->_renderer->_height; + width = (float)_gameRef->_renderer->getWidth(); + height = (float)_gameRef->_renderer->getHeight(); } switch (type) { @@ -236,18 +236,18 @@ bool VideoTheoraPlayer::play(TVideoPlayback type, int x, int y, bool freezeGame, break; case VID_PLAY_STRETCH: { - float zoomX = (float)((float)_gameRef->_renderer->_width / width * 100); - float zoomY = (float)((float)_gameRef->_renderer->_height / height * 100); + float zoomX = (float)((float)_gameRef->_renderer->getWidth() / width * 100); + float zoomY = (float)((float)_gameRef->_renderer->getHeight() / height * 100); _playZoom = MIN(zoomX, zoomY); - _posX = (int)((_gameRef->_renderer->_width - width * (_playZoom / 100)) / 2); - _posY = (int)((_gameRef->_renderer->_height - height * (_playZoom / 100)) / 2); + _posX = (int)((_gameRef->_renderer->getWidth() - width * (_playZoom / 100)) / 2); + _posY = (int)((_gameRef->_renderer->getHeight() - height * (_playZoom / 100)) / 2); } break; case VID_PLAY_CENTER: _playZoom = 100.0f; - _posX = (int)((_gameRef->_renderer->_width - width) / 2); - _posY = (int)((_gameRef->_renderer->_height - height) / 2); + _posX = (int)((_gameRef->_renderer->getWidth() - width) / 2); + _posY = (int)((_gameRef->_renderer->getHeight() - height) / 2); break; } _theoraDecoder->start(); @@ -274,7 +274,7 @@ bool VideoTheoraPlayer::stop() { ////////////////////////////////////////////////////////////////////////// bool VideoTheoraPlayer::update() { - _currentTime = _freezeGame ? _gameRef->_liveTimer : _gameRef->_timer; + _currentTime = _freezeGame ? _gameRef->getLiveTimer()->getTime() : _gameRef->getTimer()->getTime(); if (!isPlaying()) { return STATUS_OK; @@ -317,7 +317,7 @@ bool VideoTheoraPlayer::update() { } } // Skip the busy-loop? - if ((!_texture || !_videoFrameReady) && !_theoraDecoder->endOfVideo()) { + if ((!_texture || !_videoFrameReady) && _theoraDecoder && !_theoraDecoder->endOfVideo()) { // end playback if (!_looping) { _state = THEORA_STATE_FINISHED; @@ -335,7 +335,7 @@ bool VideoTheoraPlayer::update() { } ////////////////////////////////////////////////////////////////////////// -uint32 VideoTheoraPlayer::getMovieTime() { +uint32 VideoTheoraPlayer::getMovieTime() const { if (!_playbackStarted) { return 0; } else { @@ -432,7 +432,7 @@ bool VideoTheoraPlayer::setAlphaImage(const Common::String &filename) { } ////////////////////////////////////////////////////////////////////////// -byte VideoTheoraPlayer::getAlphaAt(int x, int y) { +byte VideoTheoraPlayer::getAlphaAt(int x, int y) const { if (_alphaImage) { return _alphaImage->getAlphaAt(x, y); } else { @@ -525,7 +525,7 @@ bool VideoTheoraPlayer::initializeSimple() { } ////////////////////////////////////////////////////////////////////////// -BaseSurface *VideoTheoraPlayer::getTexture() { +BaseSurface *VideoTheoraPlayer::getTexture() const { return _texture; } diff --git a/engines/wintermute/video/video_theora_player.h b/engines/wintermute/video/video_theora_player.h index 7a6742271c..364509a080 100644 --- a/engines/wintermute/video/video_theora_player.h +++ b/engines/wintermute/video/video_theora_player.h @@ -72,64 +72,63 @@ public: bool pause(); bool resume(); - bool isPlaying() { + bool isPlaying() const { return _state == THEORA_STATE_PLAYING; }; - bool isFinished() { + bool isFinished() const { return _state == THEORA_STATE_FINISHED; }; - bool isPaused() { + bool isPaused() const { return _state == THEORA_STATE_PAUSED; }; - uint32 getMovieTime(); - - BaseSurface *getTexture(); - - int _state; - uint32 _startTime; - - int _savedState; - uint32 _savedPos; + uint32 getMovieTime() const; + BaseSurface *getTexture() const; // alpha related BaseImage *_alphaImage; Common::String _alphaFilename; bool setAlphaImage(const Common::String &filename); - __inline byte getAlphaAt(int x, int y); + __inline byte getAlphaAt(int x, int y) const; void writeAlpha(); bool seekToTime(uint32 Time); - void cleanup(); bool resetStream(); // video properties + int32 _posX; + int32 _posY; + + bool _dontDropFrames; +private: + int32 _state; + uint32 _startTime; + + int32 _savedState; + uint32 _savedPos; + + // video properties TVideoPlayback _playbackType; - int _posX; - int _posY; + bool _looping; float _playZoom; - int _volume; + int32 _volume; - bool _looping; - bool _dontDropFrames; bool _freezeGame; uint32 _currentTime; - -private: // seeking support bool _seekingKeyframe; float _timeOffset; bool _frameRendered; - bool getIsFrameReady() { + bool getIsFrameReady() const { return _videoFrameReady; } -private: + bool _audioFrameReady; bool _videoFrameReady; float _videobufTime; diff --git a/engines/wintermute/wintermute.cpp b/engines/wintermute/wintermute.cpp index ad26c42510..89a6f1b3e0 100644 --- a/engines/wintermute/wintermute.cpp +++ b/engines/wintermute/wintermute.cpp @@ -51,6 +51,7 @@ WintermuteEngine::WintermuteEngine() : Engine(g_system) { _game = new AdGame(""); _debugger = nullptr; _trigDebug = false; + _gameDescription = nullptr; } WintermuteEngine::WintermuteEngine(OSystem *syst, const ADGameDescription *desc) @@ -141,29 +142,7 @@ int WintermuteEngine::init() { BaseEngine::instance().setGameRef(_game); BasePlatform::initialize(this, _game, 0, nullptr); - bool windowedMode = !ConfMan.getBool("fullscreen"); - - if (ConfMan.hasKey("debug_mode")) { - if (ConfMan.getBool("debug_mode")) { - _game->DEBUG_DebugEnable("./wme.log"); - } - } - - if (ConfMan.hasKey("show_fps")) { - _game->_debugShowFPS = ConfMan.getBool("show_fps"); - } else { - _game->_debugShowFPS = false; - } - - if (ConfMan.hasKey("disable_smartcache")) { - _game->_smartCache = ConfMan.getBool("disable_smartcache"); - } else { - _game->_smartCache = true; - } - - if (!_game->_smartCache) { - _game->LOG(0, "Smart cache is DISABLED"); - } + _game->initConfManSettings(); // load general game settings _game->initialize1(); @@ -182,10 +161,8 @@ int WintermuteEngine::init() { _game->initialize2(); - bool ret; + bool ret = _game->initRenderer(); - // initialize the renderer - ret = _game->_renderer->initRenderer(_game->_settingsResWidth, _game->_settingsResHeight, windowedMode); if (DID_FAIL(ret)) { _game->LOG(ret, "Error initializing renderer. Exiting."); @@ -206,7 +183,7 @@ int WintermuteEngine::init() { // load game uint32 dataInitStart = g_system->getMillis(); - if (DID_FAIL(_game->loadFile(_game->_settingsGameFile ? _game->_settingsGameFile : "default.game"))) { + if (DID_FAIL(_game->loadGameSettingsFile())) { _game->LOG(ret, "Error loading game file. Exiting."); delete _game; _game = nullptr; @@ -238,6 +215,9 @@ int WintermuteEngine::messageLoop() { const uint32 maxFPS = 60; const uint32 frameTime = 2 * (uint32)((1.0 / maxFPS) * 1000); while (!done) { + if (!_game) { + break; + } _debugger->onFrame(); Common::Event event; @@ -250,7 +230,7 @@ int WintermuteEngine::messageLoop() { _trigDebug = false; } - if (_game && _game->_renderer->_active && _game->_renderer->_ready) { + if (_game && _game->_renderer->_active && _game->_renderer->isReady()) { _game->displayContent(); _game->displayQuickMsg(); @@ -263,15 +243,15 @@ int WintermuteEngine::messageLoop() { } // ***** flip - if (!_game->_suspendedRendering) { + if (!_game->getSuspendedRendering()) { _game->_renderer->flip(); } - if (_game->_loading) { + if (_game->getIsLoading()) { _game->loadGame(_game->_scheduledLoadSlot); } prevTime = time; } - if (_game->_quitting) { + if (_game && _game->_quitting) { break; } } |