aboutsummaryrefslogtreecommitdiff
path: root/engines/bbvs
diff options
context:
space:
mode:
authorjohndoe1232014-01-26 00:15:26 +0100
committerjohndoe1232014-01-29 13:27:49 +0100
commit24fd6587959e2e7db805fcde13bb0e0fe005a8b2 (patch)
tree9fe3c26f4ddc417f80d0e5eeb068ad28ad2bfcb7 /engines/bbvs
parentef55f5b774b55bd085b05ab704ff9418af960670 (diff)
downloadscummvm-rg350-24fd6587959e2e7db805fcde13bb0e0fe005a8b2.tar.gz
scummvm-rg350-24fd6587959e2e7db805fcde13bb0e0fe005a8b2.tar.bz2
scummvm-rg350-24fd6587959e2e7db805fcde13bb0e0fe005a8b2.zip
BBVS: Add loading/saving of minigame hiscores
Diffstat (limited to 'engines/bbvs')
-rw-r--r--engines/bbvs/bbvs.cpp4
-rw-r--r--engines/bbvs/bbvs.h1
-rw-r--r--engines/bbvs/minigames/bbairguitar.cpp6
-rw-r--r--engines/bbvs/minigames/bbant.cpp46
-rw-r--r--engines/bbvs/minigames/bbloogie.cpp98
-rw-r--r--engines/bbvs/minigames/bbloogie.h4
-rw-r--r--engines/bbvs/minigames/bbloogie_anims.cpp2
-rw-r--r--engines/bbvs/minigames/bbtennis.cpp12
-rw-r--r--engines/bbvs/minigames/minigame.cpp30
-rw-r--r--engines/bbvs/minigames/minigame.h13
10 files changed, 122 insertions, 94 deletions
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