From 24fd6587959e2e7db805fcde13bb0e0fe005a8b2 Mon Sep 17 00:00:00 2001 From: johndoe123 Date: Sun, 26 Jan 2014 00:15:26 +0100 Subject: BBVS: Add loading/saving of minigame hiscores --- engines/bbvs/bbvs.cpp | 4 +- engines/bbvs/bbvs.h | 1 + engines/bbvs/minigames/bbairguitar.cpp | 6 +- engines/bbvs/minigames/bbant.cpp | 46 ++++++++------- engines/bbvs/minigames/bbloogie.cpp | 98 +++++++++++++++---------------- engines/bbvs/minigames/bbloogie.h | 4 +- engines/bbvs/minigames/bbloogie_anims.cpp | 2 +- engines/bbvs/minigames/bbtennis.cpp | 12 ++-- engines/bbvs/minigames/minigame.cpp | 30 ++++++++++ engines/bbvs/minigames/minigame.h | 13 ++-- 10 files changed, 122 insertions(+), 94 deletions(-) (limited to 'engines/bbvs') diff --git a/engines/bbvs/bbvs.cpp b/engines/bbvs/bbvs.cpp index 091bcd627f..e8db691280 100644 --- a/engines/bbvs/bbvs.cpp +++ b/engines/bbvs/bbvs.cpp @@ -2153,8 +2153,8 @@ bool BbvsEngine::runMinigame(int minigameNum) { Minigame *minigame = 0; switch (minigameNum) { - case kMinigameBbloogie: - minigame = new MinigameBbloogie(this); + case kMinigameBbLoogie: + minigame = new MinigameBbLoogie(this); break; case kMinigameBbTennis: minigame = new MinigameBbTennis(this); diff --git a/engines/bbvs/bbvs.h b/engines/bbvs/bbvs.h index eaeb529fb8..8d9ccc0279 100644 --- a/engines/bbvs/bbvs.h +++ b/engines/bbvs/bbvs.h @@ -216,6 +216,7 @@ public: void newGame(); void continueGameFromQuickSave(); void setNewSceneNum(int newSceneNum); + const Common::String getTargetName() { return _targetName; } private: const ADGameDescription *_gameDescription; Graphics::PixelFormat _pixelFormat; diff --git a/engines/bbvs/minigames/bbairguitar.cpp b/engines/bbvs/minigames/bbairguitar.cpp index b5d9d2ad83..f65c1b522a 100644 --- a/engines/bbvs/minigames/bbairguitar.cpp +++ b/engines/bbvs/minigames/bbairguitar.cpp @@ -736,6 +736,7 @@ int MinigameBbAirGuitar::run(bool fromMainGame) { memset(_objects, 0, sizeof(_objects)); + _modified = false; _currPatchNum = -1; _btn3KindToggle = 0; _currButtonNum = 27; @@ -783,7 +784,6 @@ int MinigameBbAirGuitar::run(bool fromMainGame) { update(); } - // Unload sounds _vm->_sound->unloadSounds(); delete _spriteModule; @@ -923,7 +923,7 @@ void MinigameBbAirGuitar::afterButtonReleased() { break; case 4: *_currFrameIndex = 1; - // TODO PostMessageA(hWndParent, WM_COMMAND, 0x9C6Du, 0); + // TODO Run load dialog break; case 5: _objects[3].kind = 0; @@ -948,7 +948,7 @@ void MinigameBbAirGuitar::afterButtonReleased() { break; case 12: *_currFrameIndex = 1; - // TODO PostMessageA(hWndParent, WM_COMMAND, 0x9C6Eu, 0); + // TODO Run save dialog break; case 13: _objects[4].kind = 0; diff --git a/engines/bbvs/minigames/bbant.cpp b/engines/bbvs/minigames/bbant.cpp index fa36c7d469..f2d3ad26af 100644 --- a/engines/bbvs/minigames/bbant.cpp +++ b/engines/bbvs/minigames/bbant.cpp @@ -387,8 +387,7 @@ bool MinigameBbAnt::updateStatus0(int mouseX, int mouseY, uint mouseButtons) { } bool MinigameBbAnt::updateStatus1(int mouseX, int mouseY, uint mouseButtons) { - //const int kMaxBugsCount = 52; - const int kMaxBugsCount = 1;//DEBUG + const int kMaxBugsCount = 52; --_levelTimeDelay; if (!_levelTimeDelay) { @@ -424,7 +423,6 @@ bool MinigameBbAnt::updateStatus1(int mouseX, int mouseY, uint mouseButtons) { return true; } -debug(0, "updateStatus1 #2"); if ((mouseButtons & kRightButtonClicked) && (_stompCount > 0|| _hasLastStompObj) && !_objects[2].status) { if (_hasLastStompObj) removeStompObj(_lastStompObj); @@ -432,14 +430,12 @@ debug(0, "updateStatus1 #2"); _objects[2].status = 1; } -debug(0, "updateStatus1 #3"); if ((mouseButtons & kLeftButtonClicked) && _objects[2].status == 0 && isMagGlassAtBeavisLeg(2)) { if (_vm->getRandom(10) == 1 && !isAnySoundPlaying(kSoundTbl4, 10)) playSound(16); insertSmokeObj(_objects[0].x << 16, _objects[0].y << 16); } -debug(0, "updateStatus1 #4"); if (_skullBugCtr > 0) { if (--_skullBugCtr == 0) { _skullBugCtr = _vm->getRandom(150) + 500; @@ -450,18 +446,15 @@ debug(0, "updateStatus1 #4"); if (_stompCounter2 > 0) --_stompCounter2; -debug(0, "updateStatus1 #5"); if (_totalBugsCount < kMaxBugsCount && _vm->getRandom(_stompCounter2) == 0) { int testTbl[4]; int maxKindCount = 0, objKind = 0; _stompCounter2 = _stompCounter1; -debug(0, "updateStatus1 #6"); for (int i = 0; i < 4; ++i) testTbl[i] = _vm->getRandom(_bugsChanceByKind[i] - _bugsCountByKind[i]); -debug(0, "updateStatus1 #7"); for (int i = 0; i < 4; ++i) { if (testTbl[i] >= maxKindCount) { maxKindCount = testTbl[i]; @@ -469,15 +462,12 @@ debug(0, "updateStatus1 #7"); } } -debug(0, "updateStatus1 #8"); if (objKind) insertRandomBugObj(objKind); } -debug(0, "updateStatus1 #9"); updateObjs(mouseButtons); -debug(0, "updateStatus1 #10"); updateFootObj(2); if (--_countdown10 == 0) { @@ -486,7 +476,6 @@ debug(0, "updateStatus1 #10"); --_stompCounter1; } -debug(0, "updateStatus1 #XXX"); return true; } @@ -643,7 +632,6 @@ void MinigameBbAnt::insertStompObj(int x, int y) { obj->xIncr = (0x1E0000 * _stompCount - x + 0x140000) / 15; obj->yIncr = (0xE60000 - y) / 15; obj->anim = getAnimation(130); - debug("obj->anim(130): %d", obj->anim->frameIndices[0]); obj->frameIndex = 0; obj->ticks = 15; _lastStompObj = obj; @@ -1131,7 +1119,6 @@ void MinigameBbAnt::updateObjs(uint mouseButtons) { int candyObjIndex; if (isBugAtCandy(i, candyObjIndex)) { obj->status = 3; - debug("bug %d has candy %d", i, candyObjIndex); obj->otherObjIndex = candyObjIndex; _objects[candyObjIndex].otherObjIndex = i; _objects[candyObjIndex].status = 10; @@ -1145,7 +1132,6 @@ void MinigameBbAnt::updateObjs(uint mouseButtons) { } if (testObj5(i)) { - debug("yes"); updateObjAnim2(i); } @@ -1197,6 +1183,9 @@ int MinigameBbAnt::run(bool fromMainGame) { _fromMainGame = fromMainGame; _hiScore = 0; + if (!_fromMainGame) + _hiScore = loadHiscore(kMinigameBbAnt); + _gameState = 0; _gameResult = 0; _gameDone = false; @@ -1209,7 +1198,6 @@ int MinigameBbAnt::run(bool fromMainGame) { Palette palette = _spriteModule->getPalette(); _vm->_screen->setPalette(palette); - // Load sounds loadSounds(); _gameTicks = 0; @@ -1220,9 +1208,11 @@ int MinigameBbAnt::run(bool fromMainGame) { update(); } - // Unload sounds _vm->_sound->unloadSounds(); + if (!_fromMainGame) + saveHiscore(kMinigameBbAnt, _hiScore); + delete _spriteModule; return _gameResult; @@ -1240,15 +1230,15 @@ void MinigameBbAnt::update() { inputTicks = 1; _gameTicks = _vm->_system->getMillis(); } - + if (_vm->_keyCode == Common::KEYCODE_ESCAPE) { _gameDone = true; return; } - + if (inputTicks == 0) return; - + bool done; do { @@ -1277,7 +1267,13 @@ void MinigameBbAnt::scale2x(int x, int y) { srcH += srcY; srcY = 0; } - + + if (srcX + srcW >= 320) + srcW = 320 - srcX - 1; + + if (srcY + srcH >= 240) + srcH = 240 - srcY - 1; + for (int yc = 0; yc < srcH; ++yc) { byte *src = (byte*)surface->getBasePtr(srcX, srcY + yc); memcpy(&_scaleBuf[yc * kScaleDim], src, srcW); @@ -1296,10 +1292,16 @@ void MinigameBbAnt::scale2x(int x, int y) { dstY = 0; } + if (dstX + dstW >= 320) + dstW = 320 - dstX - 1; + + if (dstY + dstH >= 240) + dstH = 240 - dstY - 1; + int w = MIN(srcW * 2, dstW), h = MIN(srcH * 2, dstH); for (int yc = 0; yc < h; ++yc) { - byte *src = _scaleBuf + + kScaleDim * (yc / 2); + byte *src = _scaleBuf + kScaleDim * (yc / 2); byte *dst = (byte*)surface->getBasePtr(dstX, dstY + yc); for (int xc = 0; xc < w; ++xc) dst[xc] = src[xc / 2]; diff --git a/engines/bbvs/minigames/bbloogie.cpp b/engines/bbvs/minigames/bbloogie.cpp index b79e8c7752..0d3fc1d65c 100644 --- a/engines/bbvs/minigames/bbloogie.cpp +++ b/engines/bbvs/minigames/bbloogie.cpp @@ -88,7 +88,7 @@ static const char *kSoundFilenames[] = { static const uint kSoundFilenamesCount = ARRAYSIZE(kSoundFilenames); -void MinigameBbloogie::buildDrawList(DrawList &drawList) { +void MinigameBbLoogie::buildDrawList(DrawList &drawList) { switch (_gameState) { case kGSTitleScreen: buildDrawList0(drawList); @@ -105,7 +105,7 @@ void MinigameBbloogie::buildDrawList(DrawList &drawList) { } } -void MinigameBbloogie::buildDrawList0(DrawList &drawList) { +void MinigameBbLoogie::buildDrawList0(DrawList &drawList) { drawList.add(_objects[0].anim->frameIndices[_objects[0].frameIndex], _objects[0].x, _objects[0].y, 2000); for (int i = 1; i < kMaxObjectsCount; ++i) { Obj *obj = &_objects[i]; @@ -116,7 +116,7 @@ void MinigameBbloogie::buildDrawList0(DrawList &drawList) { drawList.add(_titleScreenSpriteIndex, 0, 0, 0); } -void MinigameBbloogie::buildDrawList1(DrawList &drawList) { +void MinigameBbLoogie::buildDrawList1(DrawList &drawList) { for (int i = 0; i < kMaxObjectsCount; ++i) { Obj *obj = &_objects[i]; @@ -162,7 +162,7 @@ void MinigameBbloogie::buildDrawList1(DrawList &drawList) { } -void MinigameBbloogie::buildDrawList2(DrawList &drawList) { +void MinigameBbLoogie::buildDrawList2(DrawList &drawList) { buildDrawList1(drawList); @@ -179,7 +179,7 @@ void MinigameBbloogie::buildDrawList2(DrawList &drawList) { } -void MinigameBbloogie::buildDrawList3(DrawList &drawList) { +void MinigameBbLoogie::buildDrawList3(DrawList &drawList) { for (int i = 0; i < kMaxObjectsCount; ++i) { Obj *obj = &_objects[i]; @@ -209,33 +209,33 @@ void MinigameBbloogie::buildDrawList3(DrawList &drawList) { } -void MinigameBbloogie::drawSprites() { +void MinigameBbLoogie::drawSprites() { DrawList drawList; buildDrawList(drawList); _vm->_screen->drawDrawList(drawList, _spriteModule); _vm->_screen->copyToScreen(); } -void MinigameBbloogie::initObjs() { +void MinigameBbLoogie::initObjs() { for (int i = 0; i < kMaxObjectsCount; ++i) _objects[i].kind = 0; } -MinigameBbloogie::Obj *MinigameBbloogie::getFreeObject() { +MinigameBbLoogie::Obj *MinigameBbLoogie::getFreeObject() { for (int i = 0; i < kMaxObjectsCount; ++i) if (_objects[i].kind == 0) return &_objects[i]; return 0; } -MinigameBbloogie::Obj *MinigameBbloogie::findLoogieObj(int startObjIndex) { +MinigameBbLoogie::Obj *MinigameBbLoogie::findLoogieObj(int startObjIndex) { for (int i = startObjIndex; i < kMaxObjectsCount; ++i) if (_objects[i].kind == 3) return &_objects[i]; return 0; } -bool MinigameBbloogie::isHit(Obj *obj1, Obj *obj2) { +bool MinigameBbLoogie::isHit(Obj *obj1, Obj *obj2) { const BBRect &frameRect1 = obj1->anim->frameRects[obj1->frameIndex]; const BBRect &frameRect2 = obj2->anim->frameRects[obj2->frameIndex]; const int obj1X1 = obj1->x + frameRect1.x; @@ -249,11 +249,11 @@ bool MinigameBbloogie::isHit(Obj *obj1, Obj *obj2) { return obj1X1 <= obj2X2 && obj1X2 >= obj2X1 && obj1Y1 <= obj2Y2 && obj1Y2 >= obj2Y1; } -bool MinigameBbloogie::isCursorAtObj(int objIndex) { +bool MinigameBbLoogie::isCursorAtObj(int objIndex) { return isHit(&_objects[0], &_objects[objIndex]); } -void MinigameBbloogie::initObjects() { +void MinigameBbLoogie::initObjects() { switch (_gameState) { case kGSTitleScreen: initObjects0(); @@ -270,7 +270,7 @@ void MinigameBbloogie::initObjects() { } } -void MinigameBbloogie::initObjects0() { +void MinigameBbLoogie::initObjects0() { initObjs(); _objects[0].anim = getAnimation(25); _objects[0].frameIndex = 0; @@ -304,7 +304,7 @@ void MinigameBbloogie::initObjects0() { _objects[4].kind = 0; } -void MinigameBbloogie::initObjects1() { +void MinigameBbLoogie::initObjects1() { initObjs(); _objects[0].anim = _playerAnim; _objects[0].frameIndex = 0; @@ -321,7 +321,7 @@ void MinigameBbloogie::initObjects1() { _objects[1].kind = 2; } -void MinigameBbloogie::initObjects3() { +void MinigameBbLoogie::initObjects3() { initObjs(); _objects[0].anim = _playerAnim; _objects[0].frameIndex = 0; @@ -336,7 +336,7 @@ void MinigameBbloogie::initObjects3() { _objects[1].kind = 2; } -void MinigameBbloogie::initVars() { +void MinigameBbLoogie::initVars() { switch (_gameState) { case kGSTitleScreen: initVars0(); @@ -353,7 +353,7 @@ void MinigameBbloogie::initVars() { } } -void MinigameBbloogie::initVars0() { +void MinigameBbLoogie::initVars0() { _carDelay = 120; _bikeDelay = 250; _squirrelDelay = 40; @@ -370,7 +370,7 @@ void MinigameBbloogie::initVars0() { _dispLevelScore = 0; } -void MinigameBbloogie::initVars1() { +void MinigameBbLoogie::initVars1() { _carDelay = 120; _bikeDelay = 250; _squirrelDelay = 40; @@ -381,7 +381,7 @@ void MinigameBbloogie::initVars1() { _megaLoogieCount = 0; } -void MinigameBbloogie::initVars2() { +void MinigameBbLoogie::initVars2() { _timeBonusCtr = _levelTimeLeft; _levelTimeDelay = 58; _bonusDisplayDelay1 = 60; @@ -391,7 +391,7 @@ void MinigameBbloogie::initVars2() { _bonusDisplayDelay3 = 0; } -void MinigameBbloogie::initVars3() { +void MinigameBbLoogie::initVars3() { if (_currScore > _hiScore) _hiScore = _currScore; if (_playerKind) { @@ -401,7 +401,7 @@ void MinigameBbloogie::initVars3() { } } -bool MinigameBbloogie::updateStatus(int mouseX, int mouseY, uint mouseButtons) { +bool MinigameBbLoogie::updateStatus(int mouseX, int mouseY, uint mouseButtons) { switch (_gameState) { case kGSTitleScreen: return updateStatus0(mouseX, mouseY, mouseButtons); @@ -415,7 +415,7 @@ bool MinigameBbloogie::updateStatus(int mouseX, int mouseY, uint mouseButtons) { return false; } -bool MinigameBbloogie::updateStatus0(int mouseX, int mouseY, uint mouseButtons) { +bool MinigameBbLoogie::updateStatus0(int mouseX, int mouseY, uint mouseButtons) { _objects[0].x = mouseX; _objects[0].y = mouseY; @@ -481,9 +481,7 @@ bool MinigameBbloogie::updateStatus0(int mouseX, int mouseY, uint mouseButtons) playSound(23); while (isSoundPlaying(23)) { } } - _gameState = kGSMainGame; - if (!_fromMainGame) - _gameState = kGSStandaloneGame; + _gameState = _fromMainGame ? kGSMainGame : kGSStandaloneGame; initObjects1(); initObjects(); initVars(); @@ -493,7 +491,7 @@ bool MinigameBbloogie::updateStatus0(int mouseX, int mouseY, uint mouseButtons) return true; } -bool MinigameBbloogie::updateStatus1(int mouseX, int mouseY, uint mouseButtons) { +bool MinigameBbLoogie::updateStatus1(int mouseX, int mouseY, uint mouseButtons) { if (--_levelTimeDelay == 0) { _levelTimeDelay = 58; @@ -539,7 +537,7 @@ bool MinigameBbloogie::updateStatus1(int mouseX, int mouseY, uint mouseButtons) return true; } -bool MinigameBbloogie::updateStatus2(int mouseX, int mouseY, uint mouseButtons) { +bool MinigameBbLoogie::updateStatus2(int mouseX, int mouseY, uint mouseButtons) { _objects[0].x = mouseX; @@ -569,7 +567,7 @@ bool MinigameBbloogie::updateStatus2(int mouseX, int mouseY, uint mouseButtons) return true; } -bool MinigameBbloogie::updateStatus3(int mouseX, int mouseY, uint mouseButtons) { +bool MinigameBbLoogie::updateStatus3(int mouseX, int mouseY, uint mouseButtons) { _objects[0].x = mouseX; @@ -588,7 +586,7 @@ bool MinigameBbloogie::updateStatus3(int mouseX, int mouseY, uint mouseButtons) return true; } -void MinigameBbloogie::updateObjs(uint mouseButtons) { +void MinigameBbLoogie::updateObjs(uint mouseButtons) { for (int i = 0; i < kMaxObjectsCount; ++i) { Obj *obj = &_objects[i]; @@ -708,7 +706,7 @@ void MinigameBbloogie::updateObjs(uint mouseButtons) { } -void MinigameBbloogie::updatePlayer(int objIndex, uint mouseButtons) { +void MinigameBbLoogie::updatePlayer(int objIndex, uint mouseButtons) { Obj *obj = &_objects[0]; @@ -798,7 +796,7 @@ void MinigameBbloogie::updatePlayer(int objIndex, uint mouseButtons) { } -void MinigameBbloogie::updateObjKind2(int objIndex) { +void MinigameBbLoogie::updateObjKind2(int objIndex) { Obj *obj = &_objects[objIndex]; @@ -812,7 +810,7 @@ void MinigameBbloogie::updateObjKind2(int objIndex) { } -void MinigameBbloogie::updateLoogie(int objIndex) { +void MinigameBbLoogie::updateLoogie(int objIndex) { Obj *obj = &_objects[objIndex]; if (obj->unk2 > 0) { @@ -832,7 +830,7 @@ void MinigameBbloogie::updateLoogie(int objIndex) { } -void MinigameBbloogie::updateCar(int objIndex) { +void MinigameBbLoogie::updateCar(int objIndex) { Obj *obj = &_objects[objIndex]; obj->x += obj->xIncr; @@ -867,7 +865,7 @@ void MinigameBbloogie::updateCar(int objIndex) { } -void MinigameBbloogie::updateBike(int objIndex) { +void MinigameBbLoogie::updateBike(int objIndex) { Obj *obj = &_objects[objIndex]; obj->x += obj->xIncr; @@ -902,7 +900,7 @@ void MinigameBbloogie::updateBike(int objIndex) { } -void MinigameBbloogie::updateSquirrel(int objIndex) { +void MinigameBbLoogie::updateSquirrel(int objIndex) { Obj *obj = &_objects[objIndex]; if (obj->ticks-- == 0) { @@ -937,7 +935,7 @@ void MinigameBbloogie::updateSquirrel(int objIndex) { } -void MinigameBbloogie::updatePaperPlane(int objIndex) { +void MinigameBbLoogie::updatePaperPlane(int objIndex) { Obj *obj = &_objects[objIndex]; obj->x += obj->xIncr; @@ -970,7 +968,7 @@ void MinigameBbloogie::updatePaperPlane(int objIndex) { } -void MinigameBbloogie::updateIndicator(int objIndex) { +void MinigameBbLoogie::updateIndicator(int objIndex) { Obj *obj = &_objects[objIndex]; Obj *loogieObj = &_objects[0]; @@ -1002,7 +1000,7 @@ void MinigameBbloogie::updateIndicator(int objIndex) { } -void MinigameBbloogie::updatePrincipal(int objIndex) { +void MinigameBbLoogie::updatePrincipal(int objIndex) { Obj *obj = &_objects[objIndex]; switch (obj->status) { @@ -1241,7 +1239,7 @@ void MinigameBbloogie::updatePrincipal(int objIndex) { } -void MinigameBbloogie::incNumberOfHits() { +void MinigameBbLoogie::incNumberOfHits() { ++_numberOfHits; if (_numberOfHits == 1000) _numberOfHits = 0; @@ -1252,19 +1250,19 @@ void MinigameBbloogie::incNumberOfHits() { } } -void MinigameBbloogie::incScore(int incrAmount) { +void MinigameBbLoogie::incScore(int incrAmount) { if (_doubleScore) _currScore += 2 * incrAmount; else _currScore += incrAmount; } -void MinigameBbloogie::playRndSound() { +void MinigameBbLoogie::playRndSound() { if (!isAnySoundPlaying(_playerSounds2, _playerSounds2Count)) playSound(_playerSounds1[_vm->getRandom(_playerSounds1Count)]); } -int MinigameBbloogie::run(bool fromMainGame) { +int MinigameBbLoogie::run(bool fromMainGame) { memset(_objects, 0, sizeof(_objects)); @@ -1276,9 +1274,8 @@ int MinigameBbloogie::run(bool fromMainGame) { _fromMainGame = fromMainGame; _hiScore = 0; - if (!_fromMainGame) { - // TODO Load LoogieHiScore - } + if (!_fromMainGame) + _hiScore = loadHiscore(kMinigameBbLoogie); _gameState = kGSTitleScreen; _gameTicks = 0; @@ -1293,7 +1290,6 @@ int MinigameBbloogie::run(bool fromMainGame) { Palette palette = _spriteModule->getPalette(); _vm->_screen->setPalette(palette); - // Load sounds loadSounds(); playSound(32, true); @@ -1303,19 +1299,17 @@ int MinigameBbloogie::run(bool fromMainGame) { update(); } - // Unload sounds _vm->_sound->unloadSounds(); - if (!_fromMainGame) { - // TODO Save LoogieHiScore - } + if (!_fromMainGame) + saveHiscore(kMinigameBbLoogie, _hiScore); delete _spriteModule; return _gameResult; } -void MinigameBbloogie::update() { +void MinigameBbLoogie::update() { int currTicks, inputTicks; @@ -1349,7 +1343,7 @@ void MinigameBbloogie::update() { } -void MinigameBbloogie::loadSounds() { +void MinigameBbLoogie::loadSounds() { for (uint i = 0; i < kSoundFilenamesCount; ++i) { Common::String filename = Common::String::format("bbloogie/%s", kSoundFilenames[i]); _vm->_sound->loadSound(filename.c_str()); diff --git a/engines/bbvs/minigames/bbloogie.h b/engines/bbvs/minigames/bbloogie.h index d01149ad0c..fb745c15e4 100644 --- a/engines/bbvs/minigames/bbloogie.h +++ b/engines/bbvs/minigames/bbloogie.h @@ -27,9 +27,9 @@ namespace Bbvs { -class MinigameBbloogie : public Minigame { +class MinigameBbLoogie : public Minigame { public: - MinigameBbloogie(BbvsEngine *vm) : Minigame(vm) {}; + MinigameBbLoogie(BbvsEngine *vm) : Minigame(vm) {}; int run(bool fromMainGame); public: diff --git a/engines/bbvs/minigames/bbloogie_anims.cpp b/engines/bbvs/minigames/bbloogie_anims.cpp index 61a2e48eb7..a82be8a279 100644 --- a/engines/bbvs/minigames/bbloogie_anims.cpp +++ b/engines/bbvs/minigames/bbloogie_anims.cpp @@ -131,7 +131,7 @@ static const ObjAnimation kAnimations[] = { {2, kAnim25FrameIndices, kAnim25FrameTicks, kAnim25FrameRects} }; -const ObjAnimation *MinigameBbloogie::getAnimation(int animIndex) { +const ObjAnimation *MinigameBbLoogie::getAnimation(int animIndex) { return &kAnimations[animIndex]; } diff --git a/engines/bbvs/minigames/bbtennis.cpp b/engines/bbvs/minigames/bbtennis.cpp index edf9cabbfb..fd02573691 100644 --- a/engines/bbvs/minigames/bbtennis.cpp +++ b/engines/bbvs/minigames/bbtennis.cpp @@ -1193,9 +1193,8 @@ int MinigameBbTennis::run(bool fromMainGame) { _fromMainGame = fromMainGame; _hiScore = 0; - if (!_fromMainGame) { - // TODO Load HiScore - } + if (!_fromMainGame) + _hiScore = loadHiscore(kMinigameBbTennis); _gameState = 0; _gameResult = 0; @@ -1209,7 +1208,6 @@ int MinigameBbTennis::run(bool fromMainGame) { Palette palette = _spriteModule->getPalette(); _vm->_screen->setPalette(palette); - // Load sounds loadSounds(); _gameTicks = 0; @@ -1220,12 +1218,10 @@ int MinigameBbTennis::run(bool fromMainGame) { update(); } - // Unload sounds _vm->_sound->unloadSounds(); - if (!_fromMainGame) { - // TODO Save HiScore - } + if (!_fromMainGame) + saveHiscore(kMinigameBbTennis, _hiScore); delete _spriteModule; diff --git a/engines/bbvs/minigames/minigame.cpp b/engines/bbvs/minigames/minigame.cpp index 299836ab00..888040f87a 100644 --- a/engines/bbvs/minigames/minigame.cpp +++ b/engines/bbvs/minigames/minigame.cpp @@ -21,11 +21,14 @@ */ #include "bbvs/minigames/minigame.h" +#include "common/savefile.h" namespace Bbvs { Minigame::Minigame(BbvsEngine *vm) : _vm(vm), _spriteModule(0) { + + memset(_hiScoreTable, 0, sizeof(_hiScoreTable)); } Minigame::~Minigame() { @@ -71,4 +74,31 @@ bool Minigame::isAnySoundPlaying(const uint *indices, uint count) { return false; } +void Minigame::saveHiscore(int minigameNum, int score) { + Common::String filename = _vm->getTargetName() + "-highscore.dat"; + Common::OutSaveFile *file = g_system->getSavefileManager()->openForSaving(filename); + if (file) { + // Reserve a byte for future usage (rarely a bad idea, you never know...) + file->writeByte(0); + _hiScoreTable[minigameNum] = score; + for (int i = 0; i < kMinigameCount; ++i) + file->writeUint32LE(_hiScoreTable[i]); + delete file; + } +} + +int Minigame::loadHiscore(int minigameNum) { + int score = 0; + Common::String filename = _vm->getTargetName() + "-highscore.dat"; + Common::InSaveFile *file = g_system->getSavefileManager()->openForLoading(filename); + if (file) { + file->readByte(); + for (int i = 0; i < kMinigameCount; ++i) + _hiScoreTable[i] = file->readUint32LE(); + delete file; + score = _hiScoreTable[minigameNum]; + } + return score; +} + } // End of namespace Bbvs diff --git a/engines/bbvs/minigames/minigame.h b/engines/bbvs/minigames/minigame.h index 33498be7ef..1e1a4695e0 100644 --- a/engines/bbvs/minigames/minigame.h +++ b/engines/bbvs/minigames/minigame.h @@ -31,10 +31,11 @@ namespace Bbvs { enum { - kMinigameBbloogie = 0, + kMinigameBbLoogie = 0, kMinigameBbTennis = 1, kMinigameBbAnt = 2, - kMinigameBbAirGuitar = 3 + kMinigameBbAirGuitar = 3, + kMinigameCount }; struct ObjAnimation { @@ -49,7 +50,7 @@ public: Minigame(BbvsEngine *vm); virtual ~Minigame(); virtual int run(bool fromMainGame) = 0; -public: +protected: BbvsEngine *_vm; SpriteModule *_spriteModule; @@ -58,6 +59,7 @@ public: int _gameResult; bool _gameDone; bool _fromMainGame; + int _hiScoreTable[kMinigameCount]; int _backgroundSpriteIndex, _titleScreenSpriteIndex; @@ -69,7 +71,10 @@ public: void stopSound(uint index); bool isSoundPlaying(uint index); bool isAnySoundPlaying(const uint *indices, uint count); - + + void saveHiscore(int minigameNum, int score); + int loadHiscore(int minigameNum); + }; } // End of namespace Bbvs -- cgit v1.2.3