aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/lab/graphics.cpp10
-rw-r--r--engines/lab/intro.cpp32
-rw-r--r--engines/lab/lab.cpp4
-rw-r--r--engines/lab/lab.h1
-rw-r--r--engines/lab/labfun.h6
-rw-r--r--engines/lab/labmusic.cpp3
-rw-r--r--engines/lab/map.cpp14
-rw-r--r--engines/lab/processroom.cpp68
-rw-r--r--engines/lab/readdiff.cpp14
-rw-r--r--engines/lab/resource.cpp6
-rw-r--r--engines/lab/special.cpp22
11 files changed, 89 insertions, 91 deletions
diff --git a/engines/lab/graphics.cpp b/engines/lab/graphics.cpp
index 80d78edfbe..4d19f61baa 100644
--- a/engines/lab/graphics.cpp
+++ b/engines/lab/graphics.cpp
@@ -68,7 +68,7 @@ bool readPict(const char *filename, bool PlayOnce) {
stopDiff();
- file = g_music->newOpen(filename);
+ file = g_lab->g_music->newOpen(filename);
if (file == NULL) {
if ((filename[0] == 'p') || (filename[0] == 'P'))
@@ -94,9 +94,9 @@ bool readPict(const char *filename, bool PlayOnce) {
/*****************************************************************************/
bool readMusic(const char *filename, bool waitTillFinished) {
Common::File *file = g_lab->_resource->openDataFile(filename, MKTAG('D', 'I', 'F', 'F'));
- g_music->updateMusic();
- if (!g_music->_doNotFilestopSoundEffect)
- g_music->stopSoundEffect();
+ g_lab->g_music->updateMusic();
+ if (!g_lab->g_music->_doNotFilestopSoundEffect)
+ g_lab->g_music->stopSoundEffect();
if (!file)
return false;
@@ -121,7 +121,7 @@ byte *readPictToMem(const char *filename, uint16 x, uint16 y) {
allocFile((void **)&Mem, (int32) x * (int32) y, "Bitmap");
CurMem = Mem;
- file = g_music->newOpen(filename);
+ file = g_lab->g_music->newOpen(filename);
if (file == NULL)
return NULL;
diff --git a/engines/lab/intro.cpp b/engines/lab/intro.cpp
index 7cbe48c044..eaf1aa928b 100644
--- a/engines/lab/intro.cpp
+++ b/engines/lab/intro.cpp
@@ -90,10 +90,10 @@ void Intro::doPictText(const char *filename, bool isscreen) {
strcat(path, filename);
if (isscreen) {
- g_music->updateMusic();
+ g_lab->g_music->updateMusic();
timedelay = 35;
} else {
- g_music->updateMusic();
+ g_lab->g_music->updateMusic();
timedelay = 7;
}
@@ -105,7 +105,7 @@ void Intro::doPictText(const char *filename, bool isscreen) {
if (begin) {
begin = false;
- tfile = g_music->newOpen(path);
+ tfile = g_lab->g_music->newOpen(path);
if (!tfile)
return;
@@ -144,7 +144,7 @@ void Intro::doPictText(const char *filename, bool isscreen) {
msg = g_lab->getMsg();
if (msg == NULL) {
- g_music->updateMusic();
+ g_lab->g_music->updateMusic();
g_lab->diffNextFrame();
g_lab->getTime(&secs, &micros);
g_lab->anyTimeDiff(lastsecs, lastmicros, secs, micros, &secs, &micros);
@@ -216,13 +216,13 @@ void Intro::doPictText(const char *filename, bool isscreen) {
/* Does a one second delay, but checks the music while doing it. */
/*****************************************************************************/
void Intro::musicDelay() {
- g_music->updateMusic();
+ g_lab->g_music->updateMusic();
if (_quitIntro)
return;
for (uint16 i = 0; i < 20; i++) {
- g_music->updateMusic();
+ g_lab->g_music->updateMusic();
g_lab->waitTOF();
g_lab->waitTOF();
g_lab->waitTOF();
@@ -234,7 +234,7 @@ void Intro::musicDelay() {
void Intro::nReadPict(const char *filename, bool playOnce) {
Common::String finalFileName = Common::String("P:Intro/") + filename;
- g_music->updateMusic();
+ g_lab->g_music->updateMusic();
introEatMessages();
if (_quitIntro)
@@ -277,7 +277,7 @@ void Intro::introSequence() {
blackAllScreen();
- g_music->initMusic();
+ g_lab->g_music->initMusic();
nopalchange = true;
if (g_lab->getPlatform() != Common::kPlatformWindows)
@@ -297,14 +297,14 @@ void Intro::introSequence() {
(diffcmap[i * 3 + 2] >> 2);
}
- g_music->updateMusic();
+ g_lab->g_music->updateMusic();
fade(true, 0);
for (int times = 0; times < 150; times++) {
if (_quitIntro)
break;
- g_music->updateMusic();
+ g_lab->g_music->updateMusic();
uint16 temp = palette[2];
for (uint16 i = 2; i < 15; i++)
@@ -319,7 +319,7 @@ void Intro::introSequence() {
fade(false, 0);
blackAllScreen();
- g_music->updateMusic();
+ g_lab->g_music->updateMusic();
nReadPict("Title.A", true);
nReadPict("AB", true);
@@ -341,11 +341,11 @@ void Intro::introSequence() {
nReadPict("DA", true);
musicDelay();
- g_music->newOpen("p:Intro/Intro.1"); /* load the picture into the buffer */
+ g_lab->g_music->newOpen("p:Intro/Intro.1"); /* load the picture into the buffer */
- g_music->updateMusic();
+ g_lab->g_music->updateMusic();
blackAllScreen();
- g_music->updateMusic();
+ g_lab->g_music->updateMusic();
_msgfont = g_lab->_resource->getFont("P:Map.fon");
@@ -366,7 +366,7 @@ void Intro::introSequence() {
freeAllStolenMem();
blackAllScreen();
- g_music->updateMusic();
+ g_lab->g_music->updateMusic();
_introDoBlack = true;
nReadPict("Station1", true);
@@ -398,7 +398,7 @@ void Intro::introSequence() {
for (uint16 idx = (8 * 3); idx < (255 * 3); idx++)
diffcmap[idx] = 255 - diffcmap[idx];
- g_music->updateMusic();
+ g_lab->g_music->updateMusic();
g_lab->waitTOF();
g_lab->VGASetPal(diffcmap, 256);
g_lab-> waitTOF();
diff --git a/engines/lab/lab.cpp b/engines/lab/lab.cpp
index 3792f2b0d3..745bb74f94 100644
--- a/engines/lab/lab.cpp
+++ b/engines/lab/lab.cpp
@@ -76,6 +76,7 @@ LabEngine::LabEngine(OSystem *syst, const ADGameDescription *gameDesc)
_event = nullptr;
_resource = nullptr;
+ g_music = nullptr;
//const Common::FSNode gameDataDir(ConfMan.get("path"));
//SearchMan.addSubDirectoryMatching(gameDataDir, "game");
@@ -100,8 +101,7 @@ Common::Error LabEngine::run() {
_event = new EventManager(this);
_resource = new Resource(this);
-
- g_music = new Music();
+ g_music = new Music(this);
if (getPlatform() == Common::kPlatformWindows) {
// Check if this is the Wyrmkeep trial
diff --git a/engines/lab/lab.h b/engines/lab/lab.h
index 7e7f645167..dd0c204dbc 100644
--- a/engines/lab/lab.h
+++ b/engines/lab/lab.h
@@ -101,6 +101,7 @@ private:
public:
EventManager *_event;
Resource *_resource;
+ Music *g_music;
byte *_currentDsplayBuffer;
Common::Point _mousePos;
diff --git a/engines/lab/labfun.h b/engines/lab/labfun.h
index dd4796a2d0..57d5817c71 100644
--- a/engines/lab/labfun.h
+++ b/engines/lab/labfun.h
@@ -157,7 +157,7 @@ void closePartial(int32 File);
class Music {
public:
- Music();
+ Music(LabEngine *vm);
byte **newOpen(const char *name);
byte **newOpen(const char *name, uint32 &size);
@@ -185,6 +185,7 @@ public:
bool _doReset;
private:
+ LabEngine *_vm;
void fillbuffer(byte *musicBuffer);
void startMusic(bool startatbegin);
@@ -202,9 +203,6 @@ private:
Audio::QueuingAudioStream *_queuingAudioStream;
};
-
-extern Music *g_music;
-
/*---------------------------*/
/*----- From LabSets.c ------*/
/*---------------------------*/
diff --git a/engines/lab/labmusic.cpp b/engines/lab/labmusic.cpp
index a7043dc424..843a866e26 100644
--- a/engines/lab/labmusic.cpp
+++ b/engines/lab/labmusic.cpp
@@ -43,10 +43,9 @@ namespace Lab {
#define CLOWNROOM 123
#define DIMROOM 80
-Music *g_music;
extern uint16 RoomNum; // TODO: Move into a class
-Music::Music() {
+Music::Music(LabEngine *vm) : _vm(vm) {
_file = 0;
_tFile = 0;
_musicPaused = false;
diff --git a/engines/lab/map.cpp b/engines/lab/map.cpp
index e4a6f04c74..6c2201608e 100644
--- a/engines/lab/map.cpp
+++ b/engines/lab/map.cpp
@@ -84,9 +84,9 @@ char *getText(const char *filename) {
bool dodecrypt;
byte **tfile;
- g_music->updateMusic();
+ g_lab->g_music->updateMusic();
dodecrypt = (isBuffered(filename) == NULL);
- tfile = g_music->newOpen(filename);
+ tfile = g_lab->g_music->newOpen(filename);
if (!tfile)
return NULL;
@@ -200,7 +200,7 @@ static bool loadMapData() {
BigMsgFont = MsgFont;
resetBuffer(); /* Make images load into start of buffer */
- buffer = g_music->newOpen("P:MapImage", Size);
+ buffer = g_lab->g_music->newOpen("P:MapImage", Size);
if (!buffer)
return false;
@@ -252,9 +252,9 @@ static bool loadMapData() {
Common::File *mapFile = g_lab->_resource->openDataFile("Lab:Maps", MKTAG('M', 'A', 'P', '0'));
if (!mapFile)
error("Corrupt map file");
- g_music->updateMusic();
- if (!g_music->_doNotFilestopSoundEffect)
- g_music->stopSoundEffect();
+ g_lab->g_music->updateMusic();
+ if (!g_lab->g_music->_doNotFilestopSoundEffect)
+ g_lab->g_music->stopSoundEffect();
MaxRooms = mapFile->readUint16LE();
Maps = new MapData[MaxRooms]; // will be freed when the user exits the map
@@ -309,7 +309,7 @@ void fade(bool fadein, uint16 res) {
setAmigaPal(newpal, 16);
g_lab->waitTOF();
- g_music->updateMusic();
+ g_lab->g_music->updateMusic();
}
}
diff --git a/engines/lab/processroom.cpp b/engines/lab/processroom.cpp
index ef1a8011e1..2939d8af5d 100644
--- a/engines/lab/processroom.cpp
+++ b/engines/lab/processroom.cpp
@@ -333,26 +333,26 @@ static void doActions(Action * APtr, CloseDataPtr *LCPtr) {
uint32 StartSecs, StartMicros, CurSecs, CurMicros;
while (APtr) {
- g_music->updateMusic();
+ g_lab->g_music->updateMusic();
switch (APtr->ActionType) {
case PLAYSOUND:
- g_music->_loopSoundEffect = false;
- g_music->_waitTillFinished = true;
+ g_lab->g_music->_loopSoundEffect = false;
+ g_lab->g_music->_waitTillFinished = true;
readMusic((char *)APtr->Data, true);
- g_music->_waitTillFinished = false;
+ g_lab->g_music->_waitTillFinished = false;
break;
case PLAYSOUNDB:
- g_music->_loopSoundEffect = false;
- g_music->_waitTillFinished = false;
+ g_lab->g_music->_loopSoundEffect = false;
+ g_lab->g_music->_waitTillFinished = false;
readMusic((char *)APtr->Data, false);
break;
case PLAYSOUNDCONT:
- g_music->_doNotFilestopSoundEffect = true;
- g_music->_loopSoundEffect = true;
- readMusic((char *)APtr->Data, g_music->_waitTillFinished);
+ g_lab->g_music->_doNotFilestopSoundEffect = true;
+ g_lab->g_music->_loopSoundEffect = true;
+ readMusic((char *)APtr->Data, g_lab->g_music->_waitTillFinished);
break;
case SHOWDIFF:
@@ -370,7 +370,7 @@ static void doActions(Action * APtr, CloseDataPtr *LCPtr) {
}
if (APtr->Data)
- g_music->newOpen((char *)APtr->Data); /* Puts a file into memory */
+ g_lab->g_music->newOpen((char *)APtr->Data); /* Puts a file into memory */
break;
@@ -485,7 +485,7 @@ static void doActions(Action * APtr, CloseDataPtr *LCPtr) {
g_lab->WSDL_UpdateScreen();
while (1) {
- g_music->updateMusic();
+ g_lab->g_music->updateMusic();
g_lab->diffNextFrame();
g_lab->getTime(&CurSecs, &CurMicros);
@@ -497,30 +497,30 @@ static void doActions(Action * APtr, CloseDataPtr *LCPtr) {
break;
case STOPMUSIC:
- g_music->setMusic(false);
+ g_lab->g_music->setMusic(false);
break;
case STARTMUSIC:
- g_music->setMusic(true);
+ g_lab->g_music->setMusic(true);
break;
case CHANGEMUSIC:
- g_music->changeMusic((const char *)APtr->Data);
- g_music->setMusicReset(false);
+ g_lab->g_music->changeMusic((const char *)APtr->Data);
+ g_lab->g_music->setMusicReset(false);
break;
case RESETMUSIC:
- g_music->resetMusic();
- g_music->setMusicReset(true);
+ g_lab->g_music->resetMusic();
+ g_lab->g_music->setMusicReset(true);
break;
case FILLMUSIC:
- g_music->updateMusic();
+ g_lab->g_music->updateMusic();
break;
case WAITSOUND:
- while (g_music->isSoundEffectActive()) {
- g_music->updateMusic();
+ while (g_lab->g_music->isSoundEffectActive()) {
+ g_lab->g_music->updateMusic();
g_lab->diffNextFrame();
g_lab->waitTOF();
}
@@ -528,18 +528,18 @@ static void doActions(Action * APtr, CloseDataPtr *LCPtr) {
break;
case CLEARSOUND:
- if (g_music->_loopSoundEffect) {
- g_music->_loopSoundEffect = false;
- g_music->stopSoundEffect();
- } else if (g_music->isSoundEffectActive())
- g_music->stopSoundEffect();
+ if (g_lab->g_music->_loopSoundEffect) {
+ g_lab->g_music->_loopSoundEffect = false;
+ g_lab->g_music->stopSoundEffect();
+ } else if (g_lab->g_music->isSoundEffectActive())
+ g_lab->g_music->stopSoundEffect();
break;
case WINMUSIC:
- g_music->_winmusic = true;
- g_music->freeMusic();
- g_music->initMusic();
+ g_lab->g_music->_winmusic = true;
+ g_lab->g_music->freeMusic();
+ g_lab->g_music->initMusic();
break;
case WINGAME:
@@ -590,18 +590,18 @@ static void doActions(Action * APtr, CloseDataPtr *LCPtr) {
APtr = APtr->NextAction;
}
- if (g_music->_loopSoundEffect) {
- g_music->_loopSoundEffect = false;
- g_music->stopSoundEffect();
+ if (g_lab->g_music->_loopSoundEffect) {
+ g_lab->g_music->_loopSoundEffect = false;
+ g_lab->g_music->stopSoundEffect();
} else {
- while (g_music->isSoundEffectActive()) {
- g_music->updateMusic();
+ while (g_lab->g_music->isSoundEffectActive()) {
+ g_lab->g_music->updateMusic();
g_lab->diffNextFrame();
g_lab->waitTOF();
}
}
- g_music->_doNotFilestopSoundEffect = false;
+ g_lab->g_music->_doNotFilestopSoundEffect = false;
}
/*****************************************************************************/
diff --git a/engines/lab/readdiff.cpp b/engines/lab/readdiff.cpp
index ca7d3905ce..88b4c1805d 100644
--- a/engines/lab/readdiff.cpp
+++ b/engines/lab/readdiff.cpp
@@ -393,7 +393,7 @@ void stopDiff() {
void stopDiffEnd() {
if (IsPlaying) {
while (IsPlaying) {
- g_music->updateMusic();
+ g_lab->g_music->updateMusic();
g_lab->diffNextFrame();
}
}
@@ -431,14 +431,14 @@ void readSound(bool waitTillFinished, Common::File *file) {
return;
while (soundTag != 65535) {
- g_music->updateMusic();
+ g_lab->g_music->updateMusic();
soundTag = file->readUint32LE();
soundSize = file->readUint32LE() - 8;
if ((soundTag == 30) || (soundTag == 31)) {
if (waitTillFinished) {
- while (g_music->isSoundEffectActive()) {
- g_music->updateMusic();
+ while (g_lab->g_music->isSoundEffectActive()) {
+ g_lab->g_music->updateMusic();
g_lab->waitTOF();
}
}
@@ -449,11 +449,11 @@ void readSound(bool waitTillFinished, Common::File *file) {
file->skip(2);
byte *soundData = (byte *)malloc(soundSize);
file->read(soundData, soundSize);
- g_music->playSoundEffect(sampleRate, soundSize, soundData);
+ g_lab->g_music->playSoundEffect(sampleRate, soundSize, soundData);
} else if (soundTag == 65535L) {
if (waitTillFinished) {
- while (g_music->isSoundEffectActive()) {
- g_music->updateMusic();
+ while (g_lab->g_music->isSoundEffectActive()) {
+ g_lab->g_music->updateMusic();
g_lab->waitTOF();
}
}
diff --git a/engines/lab/resource.cpp b/engines/lab/resource.cpp
index 5e6fe290df..1e0ac6bbe9 100644
--- a/engines/lab/resource.cpp
+++ b/engines/lab/resource.cpp
@@ -28,13 +28,13 @@
*
*/
+#include "lab/lab.h"
#include "lab/text.h"
#include "lab/resource.h"
namespace Lab {
static uint16 allocroom;
-
extern RoomData *_rooms;
extern InventoryData *Inventory;
extern uint16 NumInv, ManyRooms, HighestCondition;
@@ -65,7 +65,7 @@ TextFont *Resource::getFont(const char *fileName) {
if (fileSize <= headerSize)
return NULL;
- g_music->updateMusic();
+ _vm->g_music->updateMusic();
TextFont *textfont = (TextFont *)malloc(sizeof(TextFont));
textfont->DataLength = fileSize - headerSize;
@@ -142,7 +142,7 @@ bool Resource::readViews(uint16 roomNum) {
_rooms[roomNum]._westView = readView(dataFile);
_rooms[roomNum]._rules = readRule(dataFile);
- g_music->updateMusic();
+ _vm->g_music->updateMusic();
delete dataFile;
return true;
diff --git a/engines/lab/special.cpp b/engines/lab/special.cpp
index eaa9ef2755..417f854b84 100644
--- a/engines/lab/special.cpp
+++ b/engines/lab/special.cpp
@@ -153,7 +153,7 @@ void showCombination(const char *filename) {
blackScreen();
- buffer = g_music->newOpen("P:Numbers");
+ buffer = g_lab->g_music->newOpen("P:Numbers");
for (uint16 CurBit = 0; CurBit < 10; CurBit++)
readImage(buffer, &(Images[CurBit]));
@@ -297,10 +297,10 @@ void showTile(const char *filename, bool showsolution) {
if (showsolution) {
start = 0;
- buffer = g_music->newOpen("P:TileSolution");
+ buffer = g_lab->g_music->newOpen("P:TileSolution");
} else {
start = 1;
- buffer = g_music->newOpen("P:Tile");
+ buffer = g_lab->g_music->newOpen("P:Tile");
}
if (!buffer)
@@ -553,7 +553,7 @@ static bool loadJournalData() {
return false;
}
- g_music->updateMusic();
+ g_lab->g_music->updateMusic();
strcpy(filename, "Lab:Rooms/j0");
bridge = g_lab->_conditions->in(BRIDGE0) || g_lab->_conditions->in(BRIDGE1);
@@ -586,7 +586,7 @@ static bool loadJournalData() {
if ((journaltexttitle = getText("Lab:Rooms/jt")) == NULL)
return false;
- buffer = g_music->newOpen("P:JImage");
+ buffer = g_lab->g_music->newOpen("P:JImage");
if (!buffer)
return false;
@@ -628,7 +628,7 @@ static void drawJournalText() {
char *CurText = journaltext;
while (DrawingToPage < JPage) {
- g_music->updateMusic();
+ g_lab->g_music->updateMusic();
CurText = (char *)(journaltext + CharsDrawn);
CharsDrawn += flowText(BigMsgFont, -2, 2, 0, false, false, false, false, VGAScaleX(52), VGAScaleY(32), VGAScaleX(152), VGAScaleY(148), CurText);
@@ -648,7 +648,7 @@ static void drawJournalText() {
CharsDrawn += flowTextToMem(&JBackImage, BigMsgFont, -2, 2, 0, false, false, false, true, VGAScaleX(52), VGAScaleY(32), VGAScaleX(152), VGAScaleY(148), CurText);
}
- g_music->updateMusic();
+ g_lab->g_music->updateMusic();
CurText = (char *)(journaltext + CharsDrawn);
lastpage = (*CurText == 0);
flowTextToMem(&JBackImage, BigMsgFont, -2, 2, 0, false, false, false, true, VGAScaleX(171), VGAScaleY(32), VGAScaleX(271), VGAScaleY(148), CurText);
@@ -663,14 +663,14 @@ static void drawJournalText() {
static void turnPage(bool FromLeft) {
if (FromLeft) {
for (int i = 0; i < g_lab->_screenWidth; i += 8) {
- g_music->updateMusic();
+ g_lab->g_music->updateMusic();
g_lab->waitTOF();
ScreenImage.ImageData = g_lab->getVGABaseAddr();
g_lab->bltBitMap(&JBackImage, i, 0, &ScreenImage, i, 0, 8, g_lab->_screenHeight);
}
} else {
for (int i = (g_lab->_screenWidth - 8); i > 0; i -= 8) {
- g_music->updateMusic();
+ g_lab->g_music->updateMusic();
g_lab->waitTOF();
ScreenImage.ImageData = g_lab->getVGABaseAddr();
g_lab->bltBitMap(&JBackImage, i, 0, &ScreenImage, i, 0, 8, g_lab->_screenHeight);
@@ -837,7 +837,7 @@ bool saveRestoreGame() {
if (slot >= 0) {
isOK = loadGame(&RoomNum, &Direction, &(Inventory[QUARTERNUM].Many), slot);
if (isOK)
- g_music->resetMusic();
+ g_lab->g_music->resetMusic();
}
}
@@ -855,7 +855,7 @@ static void getMonImages() {
resetBuffer();
- buffer = g_music->newOpen("P:MonImage", bufferSize);
+ buffer = g_lab->g_music->newOpen("P:MonImage", bufferSize);
if (!buffer)
return;